From bad27c94ae38352580a01f1800ac9f351ee85124 Mon Sep 17 00:00:00 2001 From: MacBook Pro Date: Sat, 24 Jun 2017 17:36:38 +0200 Subject: [PATCH] Save First --- .DS_Store | Bin 0 -> 6148 bytes .idea/NodeJs.iml | 8 + .idea/modules.xml | 8 + .idea/workspace.xml | 682 + Model/Beans/User.js | 37 + Model/Vendor/Count.js | 58 + Model/Vendor/Insert.js | 30 + Model/Vendor/SelectUser.js | 44 + Views/chat.html.twig | 237 + Views/login.html.twig | 59 + Views/profil.html.twig | 173 + Views/register.html.twig | 60 + Views/zzz.html | 6 + app.js | 21 + index.html | 25 + newServer.js | 259 + node_modules/.DS_Store | Bin 0 -> 6148 bytes node_modules/.bin/semver | 1 + node_modules/.bin/twigjs | 1 + node_modules/accepts/HISTORY.md | 74 + node_modules/accepts/LICENSE | 22 + node_modules/accepts/README.md | 94 + node_modules/accepts/index.js | 160 + .../accepts/node_modules/mime-db/HISTORY.md | 212 + .../accepts/node_modules/mime-db/LICENSE | 22 + .../accepts/node_modules/mime-db/README.md | 76 + .../accepts/node_modules/mime-db/db.json | 6359 ++++++ .../accepts/node_modules/mime-db/index.js | 11 + .../accepts/node_modules/mime-db/package.json | 128 + .../node_modules/mime-types/HISTORY.md | 115 + .../accepts/node_modules/mime-types/LICENSE | 22 + .../accepts/node_modules/mime-types/README.md | 102 + .../accepts/node_modules/mime-types/index.js | 63 + .../node_modules/mime-types/package.json | 117 + node_modules/accepts/package.json | 125 + node_modules/after/.npmignore | 2 + node_modules/after/.travis.yml | 12 + node_modules/after/LICENCE | 19 + node_modules/after/README.md | 115 + node_modules/after/index.js | 28 + node_modules/after/package.json | 103 + node_modules/after/test/after-test.js | 120 + node_modules/arraybuffer.slice/.npmignore | 17 + node_modules/arraybuffer.slice/Makefile | 8 + node_modules/arraybuffer.slice/README.md | 17 + node_modules/arraybuffer.slice/index.js | 29 + node_modules/arraybuffer.slice/package.json | 72 + .../arraybuffer.slice/test/slice-buffer.js | 227 + node_modules/async/CHANGELOG.md | 248 + node_modules/async/LICENSE | 19 + node_modules/async/README.md | 14 + node_modules/async/apply.js | 68 + node_modules/async/applyEach.js | 51 + node_modules/async/applyEachSeries.js | 37 + node_modules/async/asyncify.js | 110 + node_modules/async/auto.js | 289 + node_modules/async/autoInject.js | 170 + node_modules/async/bower.json | 17 + node_modules/async/cargo.js | 94 + node_modules/async/compose.js | 58 + node_modules/async/concat.js | 43 + node_modules/async/concatSeries.js | 36 + node_modules/async/constant.js | 66 + node_modules/async/detect.js | 61 + node_modules/async/detectLimit.js | 48 + node_modules/async/detectSeries.js | 38 + node_modules/async/dir.js | 43 + node_modules/async/dist/async.js | 5549 +++++ node_modules/async/dist/async.min.js | 2 + node_modules/async/doDuring.js | 66 + node_modules/async/doUntil.js | 39 + node_modules/async/doWhilst.js | 59 + node_modules/async/during.js | 76 + node_modules/async/each.js | 82 + node_modules/async/eachLimit.js | 45 + node_modules/async/eachOf.js | 111 + node_modules/async/eachOfLimit.js | 41 + node_modules/async/eachOfSeries.js | 35 + node_modules/async/eachSeries.js | 37 + node_modules/async/ensureAsync.js | 73 + node_modules/async/every.js | 50 + node_modules/async/everyLimit.js | 42 + node_modules/async/everySeries.js | 37 + node_modules/async/filter.js | 45 + node_modules/async/filterLimit.js | 37 + node_modules/async/filterSeries.js | 35 + node_modules/async/forever.js | 65 + node_modules/async/groupBy.js | 54 + node_modules/async/groupByLimit.js | 71 + node_modules/async/groupBySeries.js | 37 + node_modules/async/index.js | 570 + .../async/internal/DoublyLinkedList.js | 88 + node_modules/async/internal/applyEach.js | 38 + node_modules/async/internal/breakLoop.js | 9 + node_modules/async/internal/concat.js | 18 + node_modules/async/internal/consoleFunc.js | 42 + node_modules/async/internal/createTester.js | 44 + node_modules/async/internal/doLimit.js | 12 + node_modules/async/internal/doParallel.js | 23 + .../async/internal/doParallelLimit.js | 23 + node_modules/async/internal/doSeries.js | 23 + node_modules/async/internal/eachOfLimit.js | 71 + node_modules/async/internal/filter.js | 75 + node_modules/async/internal/findGetResult.js | 10 + node_modules/async/internal/getIterator.js | 13 + node_modules/async/internal/initialParams.js | 21 + node_modules/async/internal/iterator.js | 58 + node_modules/async/internal/map.js | 35 + node_modules/async/internal/notId.js | 10 + node_modules/async/internal/once.js | 15 + node_modules/async/internal/onlyOnce.js | 15 + node_modules/async/internal/parallel.js | 42 + node_modules/async/internal/queue.js | 193 + node_modules/async/internal/reject.js | 21 + node_modules/async/internal/setImmediate.js | 42 + node_modules/async/internal/slice.js | 16 + node_modules/async/internal/withoutIndex.js | 12 + node_modules/async/internal/wrapAsync.js | 25 + node_modules/async/log.js | 41 + node_modules/async/map.js | 54 + node_modules/async/mapLimit.js | 37 + node_modules/async/mapSeries.js | 36 + node_modules/async/mapValues.js | 63 + node_modules/async/mapValuesLimit.js | 61 + node_modules/async/mapValuesSeries.js | 37 + node_modules/async/memoize.js | 101 + node_modules/async/nextTick.js | 51 + node_modules/async/package.json | 156 + node_modules/async/parallel.js | 90 + node_modules/async/parallelLimit.js | 40 + node_modules/async/priorityQueue.js | 98 + node_modules/async/queue.js | 129 + node_modules/async/race.js | 70 + node_modules/async/reduce.js | 78 + node_modules/async/reduceRight.js | 44 + node_modules/async/reflect.js | 81 + node_modules/async/reflectAll.js | 105 + node_modules/async/reject.js | 45 + node_modules/async/rejectLimit.js | 37 + node_modules/async/rejectSeries.js | 35 + node_modules/async/retry.js | 156 + node_modules/async/retryable.js | 65 + node_modules/async/seq.js | 91 + node_modules/async/series.js | 85 + node_modules/async/setImmediate.js | 45 + node_modules/async/some.js | 52 + node_modules/async/someLimit.js | 43 + node_modules/async/someSeries.js | 38 + node_modules/async/sortBy.js | 91 + node_modules/async/timeout.js | 89 + node_modules/async/times.js | 50 + node_modules/async/timesLimit.js | 42 + node_modules/async/timesSeries.js | 32 + node_modules/async/transform.js | 87 + node_modules/async/tryEach.js | 81 + node_modules/async/unmemoize.js | 25 + node_modules/async/until.js | 41 + node_modules/async/waterfall.js | 113 + node_modules/async/whilst.js | 72 + node_modules/backo2/.npmignore | 1 + node_modules/backo2/History.md | 12 + node_modules/backo2/Makefile | 8 + node_modules/backo2/Readme.md | 34 + node_modules/backo2/component.json | 11 + node_modules/backo2/index.js | 85 + node_modules/backo2/package.json | 78 + node_modules/backo2/test/index.js | 18 + node_modules/balanced-match/.npmignore | 5 + node_modules/balanced-match/LICENSE.md | 21 + node_modules/balanced-match/README.md | 91 + node_modules/balanced-match/index.js | 59 + node_modules/balanced-match/package.json | 112 + node_modules/base64-arraybuffer/.npmignore | 3 + node_modules/base64-arraybuffer/.travis.yml | 19 + node_modules/base64-arraybuffer/LICENSE-MIT | 22 + node_modules/base64-arraybuffer/README.md | 20 + .../lib/base64-arraybuffer.js | 67 + node_modules/base64-arraybuffer/package.json | 97 + node_modules/base64id/.npmignore | 3 + node_modules/base64id/LICENSE | 22 + node_modules/base64id/README.md | 18 + node_modules/base64id/lib/base64id.js | 103 + node_modules/base64id/package.json | 89 + node_modules/better-assert/.npmignore | 4 + node_modules/better-assert/History.md | 15 + node_modules/better-assert/Makefile | 5 + node_modules/better-assert/Readme.md | 61 + node_modules/better-assert/example.js | 10 + node_modules/better-assert/index.js | 38 + node_modules/better-assert/package.json | 100 + node_modules/bindings/README.md | 97 + node_modules/bindings/bindings.js | 166 + node_modules/bindings/package.json | 91 + node_modules/blob/.npmignore | 2 + node_modules/blob/.zuul.yml | 14 + node_modules/blob/Makefile | 14 + node_modules/blob/README.md | 14 + node_modules/blob/index.js | 96 + node_modules/blob/package.json | 77 + node_modules/blob/test/index.js | 94 + node_modules/body-parser/HISTORY.md | 522 + node_modules/body-parser/LICENSE | 23 + node_modules/body-parser/README.md | 422 + node_modules/body-parser/index.js | 157 + node_modules/body-parser/lib/read.js | 189 + node_modules/body-parser/lib/types/json.js | 174 + node_modules/body-parser/lib/types/raw.js | 101 + node_modules/body-parser/lib/types/text.js | 121 + .../body-parser/lib/types/urlencoded.js | 279 + node_modules/body-parser/package.json | 127 + node_modules/brace-expansion/README.md | 123 + node_modules/brace-expansion/index.js | 201 + node_modules/brace-expansion/package.json | 114 + node_modules/bson/HISTORY.md | 199 + node_modules/bson/LICENSE.md | 201 + node_modules/bson/README.md | 141 + node_modules/bson/bower.json | 25 + node_modules/bson/browser_build/bson.js | 16734 +++++++++++++++ node_modules/bson/browser_build/package.json | 8 + node_modules/bson/index.js | 46 + node_modules/bson/lib/bson/binary.js | 347 + node_modules/bson/lib/bson/bson.js | 358 + node_modules/bson/lib/bson/code.js | 24 + node_modules/bson/lib/bson/db_ref.js | 32 + node_modules/bson/lib/bson/decimal128.js | 728 + node_modules/bson/lib/bson/double.js | 33 + node_modules/bson/lib/bson/float_parser.js | 121 + node_modules/bson/lib/bson/int_32.js | 26 + node_modules/bson/lib/bson/long.js | 856 + node_modules/bson/lib/bson/map.js | 126 + node_modules/bson/lib/bson/max_key.js | 14 + node_modules/bson/lib/bson/min_key.js | 14 + node_modules/bson/lib/bson/objectid.js | 362 + .../bson/lib/bson/parser/calculate_size.js | 152 + .../bson/lib/bson/parser/deserializer.js | 653 + .../bson/lib/bson/parser/serializer.js | 1001 + node_modules/bson/lib/bson/regexp.js | 30 + node_modules/bson/lib/bson/symbol.js | 47 + node_modules/bson/lib/bson/timestamp.js | 856 + node_modules/bson/package.json | 122 + node_modules/buffer-shims/index.js | 108 + node_modules/buffer-shims/license.md | 19 + node_modules/buffer-shims/package.json | 85 + node_modules/buffer-shims/readme.md | 21 + node_modules/bytes/History.md | 70 + node_modules/bytes/LICENSE | 23 + node_modules/bytes/Readme.md | 114 + node_modules/bytes/index.js | 157 + node_modules/bytes/package.json | 120 + node_modules/callsite/.npmignore | 4 + node_modules/callsite/History.md | 10 + node_modules/callsite/Makefile | 6 + node_modules/callsite/Readme.md | 44 + node_modules/callsite/index.js | 10 + node_modules/callsite/package.json | 77 + node_modules/component-bind/.npmignore | 4 + node_modules/component-bind/History.md | 13 + node_modules/component-bind/Makefile | 7 + node_modules/component-bind/Readme.md | 64 + node_modules/component-bind/component.json | 13 + node_modules/component-bind/index.js | 23 + node_modules/component-bind/package.json | 81 + node_modules/component-emitter/History.md | 68 + node_modules/component-emitter/LICENSE | 24 + node_modules/component-emitter/Readme.md | 74 + node_modules/component-emitter/index.js | 163 + node_modules/component-emitter/package.json | 218 + node_modules/component-inherit/.npmignore | 3 + node_modules/component-inherit/History.md | 5 + node_modules/component-inherit/Makefile | 16 + node_modules/component-inherit/Readme.md | 24 + node_modules/component-inherit/component.json | 10 + node_modules/component-inherit/index.js | 7 + node_modules/component-inherit/package.json | 78 + .../component-inherit/test/inherit.js | 21 + node_modules/concat-map/.travis.yml | 4 + node_modules/concat-map/LICENSE | 18 + node_modules/concat-map/README.markdown | 62 + node_modules/concat-map/example/map.js | 6 + node_modules/concat-map/index.js | 13 + node_modules/concat-map/package.json | 117 + node_modules/concat-map/test/map.js | 39 + node_modules/content-disposition/HISTORY.md | 40 + node_modules/content-disposition/LICENSE | 22 + node_modules/content-disposition/README.md | 141 + node_modules/content-disposition/index.js | 443 + node_modules/content-disposition/package.json | 100 + node_modules/content-type/HISTORY.md | 14 + node_modules/content-type/LICENSE | 22 + node_modules/content-type/README.md | 92 + node_modules/content-type/index.js | 216 + node_modules/content-type/package.json | 104 + node_modules/cookie-parser/HISTORY.md | 85 + node_modules/cookie-parser/LICENSE | 23 + node_modules/cookie-parser/README.md | 85 + node_modules/cookie-parser/index.js | 181 + node_modules/cookie-parser/package.json | 114 + node_modules/cookie-signature/.npmignore | 4 + node_modules/cookie-signature/History.md | 38 + node_modules/cookie-signature/Readme.md | 42 + node_modules/cookie-signature/index.js | 51 + node_modules/cookie-signature/package.json | 92 + node_modules/cookie/HISTORY.md | 118 + node_modules/cookie/LICENSE | 24 + node_modules/cookie/README.md | 220 + node_modules/cookie/index.js | 195 + node_modules/cookie/package.json | 106 + node_modules/core-util-is/LICENSE | 19 + 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 | 94 + node_modules/core-util-is/test.js | 68 + node_modules/crc/LICENSE | 22 + node_modules/crc/README.md | 106 + node_modules/crc/lib/crc1.js | 28 + node_modules/crc/lib/crc16.js | 31 + node_modules/crc/lib/crc16_ccitt.js | 31 + node_modules/crc/lib/crc16_kermit.js | 31 + node_modules/crc/lib/crc16_modbus.js | 31 + node_modules/crc/lib/crc16_xmodem.js | 35 + node_modules/crc/lib/crc24.js | 31 + node_modules/crc/lib/crc32.js | 31 + node_modules/crc/lib/crc8.js | 31 + node_modules/crc/lib/crc8_1wire.js | 31 + node_modules/crc/lib/create_buffer.js | 16 + node_modules/crc/lib/define_crc.js | 16 + node_modules/crc/lib/index.js | 14 + node_modules/crc/package.json | 101 + node_modules/deasync-promise/.npmignore | 2 + node_modules/deasync-promise/Readme.md | 17 + node_modules/deasync-promise/index.js | 19 + node_modules/deasync-promise/package.json | 89 + node_modules/deasync/.npmignore | 6 + node_modules/deasync/README.md | 114 + .../bin/darwin-x64-node-0.10/deasync.node | Bin 0 -> 10344 bytes .../bin/darwin-x64-node-0.11/deasync.node | Bin 0 -> 10808 bytes .../bin/darwin-x64-node-0.12/deasync.node | Bin 0 -> 10848 bytes .../bin/darwin-x64-node-4/deasync.node | Bin 0 -> 11920 bytes .../bin/darwin-x64-node-5/deasync.node | Bin 0 -> 11920 bytes .../bin/darwin-x64-node-6/deasync.node | Bin 0 -> 13032 bytes .../bin/darwin-x64-node-7/deasync.node | Bin 0 -> 13088 bytes .../bin/darwin-x64-node-8/deasync.node | Bin 0 -> 13112 bytes .../bin/linux-ia32-node-0.10/deasync.node | Bin 0 -> 7672 bytes .../bin/linux-ia32-node-0.11/deasync.node | Bin 0 -> 7914 bytes .../bin/linux-ia32-node-0.12/deasync.node | Bin 0 -> 7914 bytes .../bin/linux-ia32-node-4/deasync.node | Bin 0 -> 12551 bytes .../bin/linux-ia32-node-5/deasync.node | Bin 0 -> 12551 bytes .../bin/linux-ia32-node-6/deasync.node | Bin 0 -> 12551 bytes .../bin/linux-ia32-node-7/deasync.node | Bin 0 -> 12832 bytes .../bin/linux-ia32-node-8/deasync.node | Bin 0 -> 12832 bytes .../bin/linux-x64-node-0.10/deasync.node | Bin 0 -> 9580 bytes .../bin/linux-x64-node-0.11/deasync.node | Bin 0 -> 13407 bytes .../bin/linux-x64-node-0.12/deasync.node | Bin 0 -> 13384 bytes .../deasync/bin/linux-x64-node-4/deasync.node | Bin 0 -> 13989 bytes .../deasync/bin/linux-x64-node-5/deasync.node | Bin 0 -> 13989 bytes .../deasync/bin/linux-x64-node-6/deasync.node | Bin 0 -> 13989 bytes .../deasync/bin/linux-x64-node-7/deasync.node | Bin 0 -> 14014 bytes .../deasync/bin/linux-x64-node-8/deasync.node | Bin 0 -> 14014 bytes .../bin/win32-ia32-node-0.10/deasync.node | Bin 0 -> 33792 bytes .../bin/win32-ia32-node-0.11/deasync.node | Bin 0 -> 50176 bytes .../bin/win32-ia32-node-0.12/deasync.node | Bin 0 -> 50176 bytes .../bin/win32-ia32-node-4/deasync.node | Bin 0 -> 106496 bytes .../bin/win32-ia32-node-5/deasync.node | Bin 0 -> 105984 bytes .../bin/win32-ia32-node-6/deasync.node | Bin 0 -> 101376 bytes .../bin/win32-ia32-node-7/deasync.node | Bin 0 -> 75776 bytes .../bin/win32-ia32-node-8/deasync.node | Bin 0 -> 75776 bytes .../bin/win32-x64-node-0.10/deasync.node | Bin 0 -> 82432 bytes .../bin/win32-x64-node-0.11/deasync.node | Bin 0 -> 107008 bytes .../bin/win32-x64-node-0.12/deasync.node | Bin 0 -> 107008 bytes .../deasync/bin/win32-x64-node-4/deasync.node | Bin 0 -> 120832 bytes .../deasync/bin/win32-x64-node-5/deasync.node | Bin 0 -> 120320 bytes .../deasync/bin/win32-x64-node-6/deasync.node | Bin 0 -> 117248 bytes .../deasync/bin/win32-x64-node-7/deasync.node | Bin 0 -> 89600 bytes .../deasync/bin/win32-x64-node-8/deasync.node | Bin 0 -> 90112 bytes node_modules/deasync/binding.gyp | 11 + node_modules/deasync/build.js | 120 + node_modules/deasync/index.js | 76 + node_modules/deasync/package-lock.json | 16 + node_modules/deasync/package.json | 102 + node_modules/deasync/quick-test.js | 7 + node_modules/deasync/src/deasync.cc | 17 + node_modules/deasync/test.js | 31 + node_modules/debug/.coveralls.yml | 1 + node_modules/debug/.eslintrc | 11 + node_modules/debug/.npmignore | 9 + node_modules/debug/.travis.yml | 14 + node_modules/debug/CHANGELOG.md | 352 + node_modules/debug/LICENSE | 19 + node_modules/debug/Makefile | 50 + node_modules/debug/README.md | 312 + node_modules/debug/component.json | 19 + node_modules/debug/karma.conf.js | 70 + node_modules/debug/node.js | 1 + node_modules/debug/package.json | 126 + node_modules/debug/src/browser.js | 185 + node_modules/debug/src/debug.js | 202 + node_modules/debug/src/index.js | 10 + node_modules/debug/src/node.js | 246 + node_modules/depd/History.md | 84 + node_modules/depd/LICENSE | 22 + node_modules/depd/Readme.md | 281 + node_modules/depd/index.js | 521 + node_modules/depd/lib/browser/index.js | 79 + node_modules/depd/lib/compat/buffer-concat.js | 35 + .../depd/lib/compat/callsite-tostring.js | 103 + .../depd/lib/compat/event-listener-count.js | 22 + node_modules/depd/lib/compat/index.js | 84 + node_modules/depd/package.json | 103 + node_modules/destroy/README.md | 38 + node_modules/destroy/index.js | 36 + node_modules/destroy/package.json | 101 + node_modules/ee-first/LICENSE | 22 + node_modules/ee-first/README.md | 80 + node_modules/ee-first/index.js | 95 + node_modules/ee-first/package.json | 98 + node_modules/ejs/Jakefile | 71 + node_modules/ejs/LICENSE | 202 + node_modules/ejs/README.md | 256 + node_modules/ejs/ejs.js | 1469 ++ node_modules/ejs/ejs.min.js | 1 + node_modules/ejs/lib/ejs.js | 841 + node_modules/ejs/lib/utils.js | 164 + node_modules/ejs/package.json | 113 + node_modules/ejs/test/ejs.js | 1039 + node_modules/ejs/test/fixtures/backslash.ejs | 1 + node_modules/ejs/test/fixtures/backslash.html | 1 + node_modules/ejs/test/fixtures/comments.ejs | 7 + node_modules/ejs/test/fixtures/comments.html | 6 + .../ejs/test/fixtures/consecutive-tags.ejs | 1 + .../ejs/test/fixtures/consecutive-tags.html | 1 + .../ejs/test/fixtures/double-quote.ejs | 1 + .../ejs/test/fixtures/double-quote.html | 1 + node_modules/ejs/test/fixtures/error.ejs | 5 + node_modules/ejs/test/fixtures/error.out | 8 + node_modules/ejs/test/fixtures/fail.ejs | 1 + .../ejs/test/fixtures/hello-world.ejs | 1 + .../ejs/test/fixtures/include-abspath.ejs | 5 + .../ejs/test/fixtures/include-root.ejs | 1 + .../ejs/test/fixtures/include-simple.ejs | 3 + .../ejs/test/fixtures/include-simple.html | 4 + .../ejs/test/fixtures/include.css.ejs | 1 + .../ejs/test/fixtures/include.css.html | 4 + node_modules/ejs/test/fixtures/include.ejs | 5 + node_modules/ejs/test/fixtures/include.html | 12 + .../ejs/test/fixtures/include_cache.ejs | 1 + .../ejs/test/fixtures/include_cache.html | 1 + .../fixtures/include_preprocessor.css.ejs | 1 + .../fixtures/include_preprocessor.css.html | 4 + .../test/fixtures/include_preprocessor.ejs | 5 + .../test/fixtures/include_preprocessor.html | 12 + .../fixtures/include_preprocessor_cache.ejs | 1 + .../fixtures/include_preprocessor_cache.html | 1 + .../include_preprocessor_line_slurp.ejs | 1 + .../include_preprocessor_line_slurp.html | 5 + .../include_preprocessor_line_slurp_child.ejs | 5 + .../ejs/test/fixtures/includes/bom.ejs | 1 + .../ejs/test/fixtures/includes/menu-item.ejs | 1 + .../ejs/test/fixtures/includes/menu/item.ejs | 1 + node_modules/ejs/test/fixtures/literal.ejs | 3 + node_modules/ejs/test/fixtures/literal.html | 3 + node_modules/ejs/test/fixtures/menu.ejs | 15 + node_modules/ejs/test/fixtures/menu.html | 9 + .../ejs/test/fixtures/menu_preprocessor.ejs | 11 + .../ejs/test/fixtures/menu_preprocessor.html | 8 + node_modules/ejs/test/fixtures/menu_var.ejs | 15 + node_modules/ejs/test/fixtures/messed.ejs | 1 + node_modules/ejs/test/fixtures/messed.html | 1 + node_modules/ejs/test/fixtures/newlines.ejs | 5 + node_modules/ejs/test/fixtures/newlines.html | 9 + .../ejs/test/fixtures/newlines.mixed.ejs | 6 + .../ejs/test/fixtures/newlines.mixed.html | 4 + .../ejs/test/fixtures/no.newlines.ejs | 5 + .../ejs/test/fixtures/no.newlines.error.ejs | 5 + .../ejs/test/fixtures/no.newlines.html | 5 + .../ejs/test/fixtures/no.semicolons.ejs | 8 + .../ejs/test/fixtures/no.semicolons.html | 3 + node_modules/ejs/test/fixtures/para.ejs | 1 + node_modules/ejs/test/fixtures/pet.ejs | 1 + .../ejs/test/fixtures/rmWhitespace.ejs | 14 + .../ejs/test/fixtures/rmWhitespace.html | 8 + .../ejs/test/fixtures/single-quote.ejs | 1 + .../ejs/test/fixtures/single-quote.html | 1 + .../ejs/test/fixtures/space-and-tab-slurp.ejs | 5 + .../test/fixtures/space-and-tab-slurp.html | 5 + node_modules/ejs/test/fixtures/strict.ejs | 5 + node_modules/ejs/test/fixtures/style.css | 3 + .../ejs/test/fixtures/user-no-with.ejs | 1 + node_modules/ejs/test/fixtures/user.ejs | 1 + .../ejs/test/fixtures/with-context.ejs | 1 + node_modules/ejs/test/mocha.opts | 3 + node_modules/ejs/test/tmp/include.ejs | 1 + .../ejs/test/tmp/include_preprocessor.ejs | 1 + node_modules/ejs/test/tmp/renderFile.ejs | 1 + node_modules/engine.io-client/History.md | 683 + node_modules/engine.io-client/LICENSE | 22 + node_modules/engine.io-client/README.md | 299 + node_modules/engine.io-client/engine.io.js | 4707 +++++ node_modules/engine.io-client/index.js | 2 + node_modules/engine.io-client/lib/index.js | 10 + node_modules/engine.io-client/lib/socket.js | 744 + .../engine.io-client/lib/transport.js | 157 + .../engine.io-client/lib/transports/index.js | 53 + .../lib/transports/polling-jsonp.js | 231 + .../lib/transports/polling-xhr.js | 413 + .../lib/transports/polling.js | 245 + .../lib/transports/websocket.js | 286 + .../engine.io-client/lib/xmlhttprequest.js | 37 + node_modules/engine.io-client/package.json | 150 + node_modules/engine.io-parser/History.md | 177 + node_modules/engine.io-parser/LICENSE | 22 + node_modules/engine.io-parser/Readme.md | 202 + node_modules/engine.io-parser/index.js | 2 + node_modules/engine.io-parser/lib/browser.js | 606 + node_modules/engine.io-parser/lib/index.js | 480 + node_modules/engine.io-parser/lib/keys.js | 19 + node_modules/engine.io-parser/lib/utf8.js | 255 + node_modules/engine.io-parser/package.json | 101 + node_modules/engine.io/History.md | 608 + node_modules/engine.io/LICENSE | 19 + node_modules/engine.io/README.md | 539 + node_modules/engine.io/index.js | 4 + node_modules/engine.io/lib/engine.io.js | 126 + node_modules/engine.io/lib/server.js | 518 + node_modules/engine.io/lib/socket.js | 483 + node_modules/engine.io/lib/transport.js | 128 + .../engine.io/lib/transports/index.js | 36 + .../engine.io/lib/transports/polling-jsonp.js | 75 + .../engine.io/lib/transports/polling-xhr.js | 69 + .../engine.io/lib/transports/polling.js | 408 + .../engine.io/lib/transports/websocket.js | 134 + .../engine.io/node_modules/accepts/HISTORY.md | 212 + .../engine.io/node_modules/accepts/LICENSE | 23 + .../engine.io/node_modules/accepts/README.md | 135 + .../engine.io/node_modules/accepts/index.js | 231 + .../node_modules/accepts/package.json | 112 + .../node_modules/negotiator/HISTORY.md | 98 + .../engine.io/node_modules/negotiator/LICENSE | 24 + .../node_modules/negotiator/README.md | 203 + .../node_modules/negotiator/index.js | 124 + .../node_modules/negotiator/lib/charset.js | 169 + .../node_modules/negotiator/lib/encoding.js | 184 + .../node_modules/negotiator/lib/language.js | 179 + .../node_modules/negotiator/lib/mediaType.js | 294 + .../node_modules/negotiator/package.json | 125 + node_modules/engine.io/package.json | 137 + node_modules/es6-promise/CHANGELOG.md | 65 + node_modules/es6-promise/LICENSE | 19 + node_modules/es6-promise/README.md | 74 + node_modules/es6-promise/dist/es6-promise.js | 959 + .../es6-promise/dist/es6-promise.min.js | 9 + .../es6-promise/lib/es6-promise.umd.js | 18 + .../es6-promise/lib/es6-promise/-internal.js | 273 + .../es6-promise/lib/es6-promise/asap.js | 119 + .../es6-promise/lib/es6-promise/enumerator.js | 118 + .../es6-promise/lib/es6-promise/polyfill.js | 26 + .../es6-promise/lib/es6-promise/promise.js | 384 + .../lib/es6-promise/promise/all.js | 52 + .../lib/es6-promise/promise/race.js | 86 + .../lib/es6-promise/promise/reject.js | 46 + .../lib/es6-promise/promise/resolve.js | 48 + .../es6-promise/lib/es6-promise/then.js | 34 + .../es6-promise/lib/es6-promise/utils.js | 22 + node_modules/es6-promise/package.json | 130 + node_modules/escape-html/.npmignore | 2 + node_modules/escape-html/Makefile | 11 + node_modules/escape-html/Readme.md | 15 + node_modules/escape-html/component.json | 10 + node_modules/escape-html/index.js | 16 + node_modules/escape-html/package.json | 83 + node_modules/etag/HISTORY.md | 55 + node_modules/etag/LICENSE | 22 + node_modules/etag/README.md | 141 + node_modules/etag/index.js | 171 + node_modules/etag/node_modules/crc/.npmignore | 5 + node_modules/etag/node_modules/crc/LICENSE | 22 + node_modules/etag/node_modules/crc/README.md | 98 + node_modules/etag/node_modules/crc/lib/crc.js | 71 + .../etag/node_modules/crc/lib/crc1.js | 21 + .../etag/node_modules/crc/lib/crc16.js | 25 + .../etag/node_modules/crc/lib/crc16_ccitt.js | 25 + .../etag/node_modules/crc/lib/crc16_modbus.js | 25 + .../etag/node_modules/crc/lib/crc24.js | 25 + .../etag/node_modules/crc/lib/crc32.js | 25 + .../etag/node_modules/crc/lib/crc8.js | 25 + .../etag/node_modules/crc/lib/crc8_1wire.js | 25 + .../etag/node_modules/crc/lib/create.js | 11 + node_modules/etag/node_modules/crc/lib/hex.js | 9 + .../etag/node_modules/crc/lib/index.js | 11 + .../etag/node_modules/crc/package.json | 92 + node_modules/etag/package.json | 109 + node_modules/express-session/HISTORY.md | 366 + node_modules/express-session/LICENSE | 24 + node_modules/express-session/README.md | 749 + node_modules/express-session/index.js | 664 + node_modules/express-session/package.json | 130 + .../express-session/session/cookie.js | 130 + .../express-session/session/memory.js | 185 + .../express-session/session/session.js | 142 + node_modules/express-session/session/store.js | 94 + node_modules/express/History.md | 2466 +++ node_modules/express/LICENSE | 22 + node_modules/express/Readme.md | 135 + node_modules/express/index.js | 2 + node_modules/express/lib/application.js | 571 + node_modules/express/lib/express.js | 93 + node_modules/express/lib/middleware/init.js | 26 + node_modules/express/lib/middleware/query.js | 30 + node_modules/express/lib/request.js | 460 + node_modules/express/lib/response.js | 971 + node_modules/express/lib/router/index.js | 576 + node_modules/express/lib/router/layer.js | 166 + node_modules/express/lib/router/route.js | 173 + node_modules/express/lib/utils.js | 283 + node_modules/express/lib/view.js | 142 + .../node_modules/cookie-signature/.npmignore | 4 + .../node_modules/cookie-signature/History.md | 27 + .../node_modules/cookie-signature/Makefile | 7 + .../node_modules/cookie-signature/Readme.md | 42 + .../node_modules/cookie-signature/index.js | 51 + .../cookie-signature/package.json | 89 + .../express/node_modules/cookie/.npmignore | 2 + .../express/node_modules/cookie/LICENSE | 9 + .../express/node_modules/cookie/README.md | 44 + .../express/node_modules/cookie/index.js | 75 + .../express/node_modules/cookie/package.json | 86 + .../express/node_modules/debug/.jshintrc | 3 + .../express/node_modules/debug/.npmignore | 6 + .../express/node_modules/debug/History.md | 186 + .../express/node_modules/debug/Makefile | 33 + .../express/node_modules/debug/Readme.md | 178 + .../express/node_modules/debug/bower.json | 28 + .../express/node_modules/debug/browser.js | 175 + .../express/node_modules/debug/component.json | 19 + .../express/node_modules/debug/debug.js | 197 + .../express/node_modules/debug/node.js | 209 + .../express/node_modules/debug/package.json | 106 + .../express/node_modules/depd/History.md | 75 + .../express/node_modules/depd/LICENSE | 22 + .../express/node_modules/depd/Readme.md | 274 + .../express/node_modules/depd/index.js | 529 + .../depd/lib/compat/buffer-concat.js | 33 + .../depd/lib/compat/callsite-tostring.js | 101 + .../node_modules/depd/lib/compat/index.js | 69 + .../express/node_modules/depd/package.json | 100 + .../express/node_modules/ee-first/LICENSE | 22 + .../express/node_modules/ee-first/README.md | 80 + .../express/node_modules/ee-first/index.js | 68 + .../node_modules/ee-first/package.json | 110 + .../express/node_modules/mime-db/HISTORY.md | 212 + .../express/node_modules/mime-db/LICENSE | 22 + .../express/node_modules/mime-db/README.md | 76 + .../express/node_modules/mime-db/db.json | 6359 ++++++ .../express/node_modules/mime-db/index.js | 11 + .../express/node_modules/mime-db/package.json | 140 + .../node_modules/mime-types/HISTORY.md | 115 + .../express/node_modules/mime-types/LICENSE | 22 + .../express/node_modules/mime-types/README.md | 102 + .../express/node_modules/mime-types/index.js | 63 + .../node_modules/mime-types/package.json | 129 + .../express/node_modules/ms/.npmignore | 5 + node_modules/express/node_modules/ms/LICENSE | 20 + .../express/node_modules/ms/README.md | 35 + node_modules/express/node_modules/ms/index.js | 123 + .../express/node_modules/ms/package.json | 81 + .../node_modules/on-finished/HISTORY.md | 71 + .../express/node_modules/on-finished/LICENSE | 23 + .../node_modules/on-finished/README.md | 102 + .../express/node_modules/on-finished/index.js | 191 + .../node_modules/on-finished/package.json | 104 + .../express/node_modules/qs/.jshintignore | 1 + .../express/node_modules/qs/.jshintrc | 10 + .../express/node_modules/qs/.npmignore | 18 + .../express/node_modules/qs/.travis.yml | 4 + .../express/node_modules/qs/CHANGELOG.md | 61 + .../express/node_modules/qs/CONTRIBUTING.md | 1 + node_modules/express/node_modules/qs/LICENSE | 28 + node_modules/express/node_modules/qs/Makefile | 8 + .../express/node_modules/qs/README.md | 220 + node_modules/express/node_modules/qs/index.js | 1 + .../express/node_modules/qs/lib/index.js | 15 + .../express/node_modules/qs/lib/parse.js | 156 + .../express/node_modules/qs/lib/stringify.js | 77 + .../express/node_modules/qs/lib/utils.js | 132 + .../express/node_modules/qs/package.json | 90 + .../express/node_modules/qs/test/parse.js | 406 + .../express/node_modules/qs/test/stringify.js | 177 + .../express/node_modules/type-is/HISTORY.md | 115 + .../express/node_modules/type-is/LICENSE | 21 + .../express/node_modules/type-is/README.md | 117 + .../express/node_modules/type-is/index.js | 228 + .../express/node_modules/type-is/package.json | 126 + node_modules/express/package.json | 202 + node_modules/fibers/.npmignore | 2 + node_modules/fibers/.travis.yml | 32 + node_modules/fibers/LICENSE | 18 + node_modules/fibers/README.md | 592 + node_modules/fibers/bin/.npmignore | 0 .../fibers/bin/darwin-ia32-46/fibers.node | Bin 0 -> 42148 bytes .../fibers/bin/darwin-ia32-48/fibers.node | Bin 0 -> 42744 bytes .../fibers/bin/darwin-x64-46/fibers.node | Bin 0 -> 41364 bytes .../fibers/bin/darwin-x64-48/fibers.node | Bin 0 -> 47724 bytes .../fibers/bin/darwin-x64-51/fibers.node | Bin 0 -> 47332 bytes .../fibers/bin/linux-ia32-46/fibers.node | Bin 0 -> 54959 bytes .../fibers/bin/linux-ia32-48/fibers.node | Bin 0 -> 54890 bytes .../fibers/bin/linux-x64-46/fibers.node | Bin 0 -> 58700 bytes .../fibers/bin/linux-x64-48/fibers.node | Bin 0 -> 54527 bytes node_modules/fibers/bin/repl | 49 + .../fibers/bin/win32-ia32-46/fibers.node | Bin 0 -> 171520 bytes .../fibers/bin/win32-ia32-48/fibers.node | Bin 0 -> 171008 bytes .../fibers/bin/win32-x64-46/fibers.node | Bin 0 -> 196608 bytes .../fibers/bin/win32-x64-48/fibers.node | Bin 0 -> 196096 bytes node_modules/fibers/binding.gyp | 67 + node_modules/fibers/build.js | 108 + node_modules/fibers/build/Makefile | 342 + .../build/Release/.deps/Release/fibers.node.d | 1 + .../obj.target/fibers/src/coroutine.o.d | 18 + .../Release/obj.target/fibers/src/fibers.o.d | 18 + .../obj.target/fibers/src/libcoro/coro.o.d | 5 + .../Release/obj.target/fibers/src/coroutine.o | Bin 0 -> 12244 bytes .../Release/obj.target/fibers/src/fibers.o | Bin 0 -> 26404 bytes .../obj.target/fibers/src/libcoro/coro.o | Bin 0 -> 3412 bytes node_modules/fibers/build/binding.Makefile | 6 + node_modules/fibers/build/config.gypi | 159 + node_modules/fibers/build/fibers.target.mk | 193 + node_modules/fibers/build/gyp-mac-tool | 611 + node_modules/fibers/fibers.js | 24 + node_modules/fibers/future.js | 475 + node_modules/fibers/package.json | 100 + node_modules/fibers/quick-test.js | 7 + node_modules/fibers/src/coroutine.cc | 312 + node_modules/fibers/src/coroutine.h | 95 + node_modules/fibers/src/fibers.cc | 829 + node_modules/fibers/src/libcoro/LICENSE | 26 + node_modules/fibers/src/libcoro/README | 6 + node_modules/fibers/src/libcoro/conftest.c | 154 + node_modules/fibers/src/libcoro/coro.c | 707 + node_modules/fibers/src/libcoro/coro.h | 418 + node_modules/fibers/src/v8-version.h | 12 + node_modules/fibers/test.js | 60 + node_modules/fibers/test/already-running.js | 12 + node_modules/fibers/test/bad-context.js | 7 + node_modules/fibers/test/child-process.js | 27 + node_modules/fibers/test/current.js | 13 + node_modules/fibers/test/exec.js | 14 + node_modules/fibers/test/exit.js | 15 + node_modules/fibers/test/fibonacci.js | 24 + node_modules/fibers/test/finish-multiple.js | 8 + node_modules/fibers/test/future-exception.js | 52 + node_modules/fibers/test/future.js | 26 + node_modules/fibers/test/illegal-yield.js | 7 + node_modules/fibers/test/pool.js | 16 + node_modules/fibers/test/process-title.js | 8 + node_modules/fibers/test/stack-overflow.js | 12 + node_modules/fibers/test/stack-overflow2.js | 45 + node_modules/fibers/test/started.js | 8 + node_modules/fibers/test/unwind.js | 14 + node_modules/finalhandler/HISTORY.md | 51 + node_modules/finalhandler/LICENSE | 22 + node_modules/finalhandler/README.md | 133 + node_modules/finalhandler/index.js | 171 + .../finalhandler/node_modules/debug/.jshintrc | 3 + .../node_modules/debug/.npmignore | 6 + .../node_modules/debug/History.md | 186 + .../finalhandler/node_modules/debug/Makefile | 33 + .../finalhandler/node_modules/debug/Readme.md | 178 + .../node_modules/debug/bower.json | 28 + .../node_modules/debug/browser.js | 175 + .../node_modules/debug/component.json | 19 + .../finalhandler/node_modules/debug/debug.js | 197 + .../finalhandler/node_modules/debug/node.js | 209 + .../node_modules/debug/package.json | 118 + .../node_modules/ee-first/LICENSE | 22 + .../node_modules/ee-first/README.md | 80 + .../node_modules/ee-first/index.js | 68 + .../node_modules/ee-first/package.json | 98 + .../finalhandler/node_modules/ms/.npmignore | 5 + .../finalhandler/node_modules/ms/LICENSE | 20 + .../finalhandler/node_modules/ms/README.md | 35 + .../finalhandler/node_modules/ms/index.js | 123 + .../finalhandler/node_modules/ms/package.json | 93 + .../node_modules/on-finished/HISTORY.md | 71 + .../node_modules/on-finished/LICENSE | 23 + .../node_modules/on-finished/README.md | 102 + .../node_modules/on-finished/index.js | 191 + .../node_modules/on-finished/package.json | 116 + node_modules/finalhandler/package.json | 114 + node_modules/foreachasync/.npmignore | 1 + node_modules/foreachasync/LICENSE | 191 + node_modules/foreachasync/README.md | 134 + node_modules/foreachasync/bower.json | 27 + node_modules/foreachasync/forEachAsync.js | 35 + node_modules/foreachasync/package.json | 90 + node_modules/foreachasync/test.js | 29 + node_modules/forwarded/HISTORY.md | 4 + node_modules/forwarded/LICENSE | 22 + node_modules/forwarded/README.md | 53 + node_modules/forwarded/index.js | 35 + node_modules/forwarded/package.json | 99 + node_modules/fresh/HISTORY.md | 24 + node_modules/fresh/LICENSE | 22 + node_modules/fresh/README.md | 58 + node_modules/fresh/index.js | 53 + node_modules/fresh/package.json | 112 + node_modules/has-binary2/History.md | 39 + node_modules/has-binary2/LICENSE | 20 + node_modules/has-binary2/README.md | 4 + node_modules/has-binary2/index.js | 62 + .../node_modules/isarray/README.md | 54 + .../has-binary2/node_modules/isarray/index.js | 5 + .../node_modules/isarray/package.json | 112 + node_modules/has-binary2/package.json | 85 + node_modules/has-cors/.npmignore | 3 + node_modules/has-cors/History.md | 21 + node_modules/has-cors/Makefile | 11 + node_modules/has-cors/Readme.md | 24 + node_modules/has-cors/component.json | 13 + node_modules/has-cors/index.js | 17 + node_modules/has-cors/package.json | 97 + node_modules/has-cors/test.js | 24 + node_modules/http-errors/HISTORY.md | 118 + node_modules/http-errors/LICENSE | 23 + node_modules/http-errors/README.md | 135 + node_modules/http-errors/index.js | 260 + node_modules/http-errors/package.json | 131 + node_modules/iconv-lite/.npmignore | 6 + node_modules/iconv-lite/.travis.yml | 22 + node_modules/iconv-lite/Changelog.md | 108 + node_modules/iconv-lite/LICENSE | 21 + node_modules/iconv-lite/README.md | 159 + .../iconv-lite/encodings/dbcs-codec.js | 554 + .../iconv-lite/encodings/dbcs-data.js | 176 + node_modules/iconv-lite/encodings/index.js | 22 + node_modules/iconv-lite/encodings/internal.js | 187 + .../iconv-lite/encodings/sbcs-codec.js | 72 + .../encodings/sbcs-data-generated.js | 451 + .../iconv-lite/encodings/sbcs-data.js | 169 + .../encodings/tables/big5-added.json | 122 + .../iconv-lite/encodings/tables/cp936.json | 264 + .../iconv-lite/encodings/tables/cp949.json | 273 + .../iconv-lite/encodings/tables/cp950.json | 177 + .../iconv-lite/encodings/tables/eucjp.json | 182 + .../encodings/tables/gb18030-ranges.json | 1 + .../encodings/tables/gbk-added.json | 55 + .../iconv-lite/encodings/tables/shiftjis.json | 125 + node_modules/iconv-lite/encodings/utf16.js | 176 + node_modules/iconv-lite/encodings/utf7.js | 289 + node_modules/iconv-lite/lib/bom-handling.js | 52 + node_modules/iconv-lite/lib/extend-node.js | 214 + node_modules/iconv-lite/lib/index.d.ts | 31 + node_modules/iconv-lite/lib/index.js | 141 + node_modules/iconv-lite/lib/streams.js | 120 + node_modules/iconv-lite/package.json | 159 + node_modules/indexof/.npmignore | 2 + node_modules/indexof/Makefile | 11 + node_modules/indexof/Readme.md | 15 + node_modules/indexof/component.json | 10 + node_modules/indexof/index.js | 10 + node_modules/indexof/package.json | 67 + node_modules/inherits/LICENSE | 16 + node_modules/inherits/README.md | 42 + node_modules/inherits/inherits.js | 7 + node_modules/inherits/inherits_browser.js | 23 + node_modules/inherits/package.json | 97 + node_modules/ipaddr.js/.npmignore | 2 + node_modules/ipaddr.js/.travis.yml | 10 + node_modules/ipaddr.js/Cakefile | 18 + node_modules/ipaddr.js/LICENSE | 19 + node_modules/ipaddr.js/README.md | 161 + node_modules/ipaddr.js/bower.json | 29 + node_modules/ipaddr.js/ipaddr.min.js | 1 + node_modules/ipaddr.js/lib/ipaddr.js | 467 + node_modules/ipaddr.js/package.json | 93 + node_modules/ipaddr.js/src/ipaddr.coffee | 396 + .../ipaddr.js/test/ipaddr.test.coffee | 282 + node_modules/isarray/.npmignore | 1 + node_modules/isarray/.travis.yml | 4 + node_modules/isarray/Makefile | 6 + node_modules/isarray/README.md | 60 + node_modules/isarray/component.json | 19 + node_modules/isarray/index.js | 5 + node_modules/isarray/package.json | 104 + node_modules/isarray/test.js | 20 + node_modules/locutus/_util/cli.js | 14 + node_modules/locutus/_util/cli.js.map | 1 + node_modules/locutus/_util/util.js | 627 + node_modules/locutus/_util/util.js.map | 1 + node_modules/locutus/c/index.js | 4 + node_modules/locutus/c/index.js.map | 1 + node_modules/locutus/c/math/abs.js | 20 + node_modules/locutus/c/math/abs.js.map | 1 + node_modules/locutus/c/math/index.js | 4 + node_modules/locutus/c/math/index.js.map | 1 + node_modules/locutus/golang/index.js | 4 + node_modules/locutus/golang/index.js.map | 1 + .../locutus/golang/strings/Contains.js | 11 + .../locutus/golang/strings/Contains.js.map | 1 + node_modules/locutus/golang/strings/Count.js | 35 + .../locutus/golang/strings/Count.js.map | 1 + node_modules/locutus/golang/strings/Index2.js | 13 + .../locutus/golang/strings/Index2.js.map | 1 + .../locutus/golang/strings/LastIndex.js | 14 + .../locutus/golang/strings/LastIndex.js.map | 1 + node_modules/locutus/golang/strings/index.js | 7 + .../locutus/golang/strings/index.js.map | 1 + node_modules/locutus/index.js | 8 + node_modules/locutus/index.js.map | 1 + node_modules/locutus/package.json | 152 + node_modules/locutus/php/_helpers/_bc.js | 1255 ++ node_modules/locutus/php/_helpers/_bc.js.map | 1 + .../locutus/php/_helpers/_phpCastString.js | 69 + .../php/_helpers/_phpCastString.js.map | 1 + node_modules/locutus/php/_helpers/index.js | 5 + .../locutus/php/_helpers/index.js.map | 1 + .../php/_locutus_shared/_locutus_shared_bc.js | 1255 ++ .../_locutus_shared/_locutus_shared_bc.js.map | 1 + .../locutus/php/_locutus_shared/index.js | 4 + .../locutus/php/_locutus_shared/index.js.map | 1 + .../php/array/array_change_key_case.js | 42 + .../php/array/array_change_key_case.js.map | 1 + node_modules/locutus/php/array/array_chunk.js | 62 + .../locutus/php/array/array_chunk.js.map | 1 + .../locutus/php/array/array_combine.js | 46 + .../locutus/php/array/array_combine.js.map | 1 + .../locutus/php/array/array_count_values.js | 62 + .../php/array/array_count_values.js.map | 1 + node_modules/locutus/php/array/array_diff.js | 35 + .../locutus/php/array/array_diff.js.map | 1 + .../locutus/php/array/array_diff_assoc.js | 35 + .../locutus/php/array/array_diff_assoc.js.map | 1 + .../locutus/php/array/array_diff_key.js | 37 + .../locutus/php/array/array_diff_key.js.map | 1 + .../locutus/php/array/array_diff_uassoc.js | 41 + .../php/array/array_diff_uassoc.js.map | 1 + .../locutus/php/array/array_diff_ukey.js | 41 + .../locutus/php/array/array_diff_ukey.js.map | 1 + node_modules/locutus/php/array/array_fill.js | 22 + .../locutus/php/array/array_fill.js.map | 1 + .../locutus/php/array/array_fill_keys.js | 21 + .../locutus/php/array/array_fill_keys.js.map | 1 + .../locutus/php/array/array_filter.js | 39 + .../locutus/php/array/array_filter.js.map | 1 + node_modules/locutus/php/array/array_flip.js | 24 + .../locutus/php/array/array_flip.js.map | 1 + .../locutus/php/array/array_intersect.js | 45 + .../locutus/php/array/array_intersect.js.map | 1 + .../php/array/array_intersect_assoc.js | 44 + .../php/array/array_intersect_assoc.js.map | 1 + .../locutus/php/array/array_intersect_key.js | 50 + .../php/array/array_intersect_key.js.map | 1 + .../php/array/array_intersect_uassoc.js | 54 + .../php/array/array_intersect_uassoc.js.map | 1 + .../locutus/php/array/array_intersect_ukey.js | 54 + .../php/array/array_intersect_ukey.js.map | 1 + .../locutus/php/array/array_key_exists.js | 17 + .../locutus/php/array/array_key_exists.js.map | 1 + node_modules/locutus/php/array/array_keys.js | 41 + .../locutus/php/array/array_keys.js.map | 1 + node_modules/locutus/php/array/array_map.js | 58 + .../locutus/php/array/array_map.js.map | 1 + node_modules/locutus/php/array/array_merge.js | 67 + .../locutus/php/array/array_merge.js.map | 1 + .../php/array/array_merge_recursive.js | 40 + .../php/array/array_merge_recursive.js.map | 1 + .../locutus/php/array/array_multisort.js | 287 + .../locutus/php/array/array_multisort.js.map | 1 + node_modules/locutus/php/array/array_pad.js | 38 + .../locutus/php/array/array_pad.js.map | 1 + node_modules/locutus/php/array/array_pop.js | 51 + .../locutus/php/array/array_pop.js.map | 1 + .../locutus/php/array/array_product.js | 26 + .../locutus/php/array/array_product.js.map | 1 + node_modules/locutus/php/array/array_push.js | 48 + .../locutus/php/array/array_push.js.map | 1 + node_modules/locutus/php/array/array_rand.js | 36 + .../locutus/php/array/array_rand.js.map | 1 + .../locutus/php/array/array_reduce.js | 29 + .../locutus/php/array/array_reduce.js.map | 1 + .../locutus/php/array/array_replace.js | 34 + .../locutus/php/array/array_replace.js.map | 1 + .../php/array/array_replace_recursive.js | 48 + .../php/array/array_replace_recursive.js.map | 1 + .../locutus/php/array/array_reverse.js | 41 + .../locutus/php/array/array_reverse.js.map | 1 + .../locutus/php/array/array_search.js | 51 + .../locutus/php/array/array_search.js.map | 1 + node_modules/locutus/php/array/array_shift.js | 38 + .../locutus/php/array/array_shift.js.map | 1 + node_modules/locutus/php/array/array_slice.js | 74 + .../locutus/php/array/array_slice.js.map | 1 + .../locutus/php/array/array_splice.js | 123 + .../locutus/php/array/array_splice.js.map | 1 + node_modules/locutus/php/array/array_sum.js | 37 + .../locutus/php/array/array_sum.js.map | 1 + node_modules/locutus/php/array/array_udiff.js | 41 + .../locutus/php/array/array_udiff.js.map | 1 + .../locutus/php/array/array_udiff_assoc.js | 38 + .../php/array/array_udiff_assoc.js.map | 1 + .../locutus/php/array/array_udiff_uassoc.js | 44 + .../php/array/array_udiff_uassoc.js.map | 1 + .../locutus/php/array/array_uintersect.js | 48 + .../locutus/php/array/array_uintersect.js.map | 1 + .../php/array/array_uintersect_uassoc.js | 50 + .../php/array/array_uintersect_uassoc.js.map | 1 + .../locutus/php/array/array_unique.js | 48 + .../locutus/php/array/array_unique.js.map | 1 + .../locutus/php/array/array_unshift.js | 21 + .../locutus/php/array/array_unshift.js.map | 1 + .../locutus/php/array/array_values.js | 20 + .../locutus/php/array/array_values.js.map | 1 + node_modules/locutus/php/array/array_walk.js | 41 + .../locutus/php/array/array_walk.js.map | 1 + .../locutus/php/array/array_walk_recursive.js | 49 + .../php/array/array_walk_recursive.js.map | 1 + node_modules/locutus/php/array/arsort.js | 121 + node_modules/locutus/php/array/arsort.js.map | 1 + node_modules/locutus/php/array/asort.js | 121 + node_modules/locutus/php/array/asort.js.map | 1 + node_modules/locutus/php/array/count.js | 43 + node_modules/locutus/php/array/count.js.map | 1 + node_modules/locutus/php/array/current.js | 47 + node_modules/locutus/php/array/current.js.map | 1 + node_modules/locutus/php/array/each.js | 74 + node_modules/locutus/php/array/each.js.map | 1 + node_modules/locutus/php/array/end.js | 60 + node_modules/locutus/php/array/end.js.map | 1 + node_modules/locutus/php/array/in_array.js | 45 + .../locutus/php/array/in_array.js.map | 1 + node_modules/locutus/php/array/index.js | 75 + node_modules/locutus/php/array/index.js.map | 1 + node_modules/locutus/php/array/key.js | 54 + node_modules/locutus/php/array/key.js.map | 1 + node_modules/locutus/php/array/krsort.js | 117 + node_modules/locutus/php/array/krsort.js.map | 1 + node_modules/locutus/php/array/ksort.js | 114 + node_modules/locutus/php/array/ksort.js.map | 1 + node_modules/locutus/php/array/natcasesort.js | 55 + .../locutus/php/array/natcasesort.js.map | 1 + node_modules/locutus/php/array/natsort.js | 54 + node_modules/locutus/php/array/natsort.js.map | 1 + node_modules/locutus/php/array/next.js | 54 + node_modules/locutus/php/array/next.js.map | 1 + node_modules/locutus/php/array/pos.js | 14 + node_modules/locutus/php/array/pos.js.map | 1 + node_modules/locutus/php/array/prev.js | 52 + node_modules/locutus/php/array/prev.js.map | 1 + node_modules/locutus/php/array/range.js | 49 + node_modules/locutus/php/array/range.js.map | 1 + node_modules/locutus/php/array/reset.js | 53 + node_modules/locutus/php/array/reset.js.map | 1 + node_modules/locutus/php/array/rsort.js | 113 + node_modules/locutus/php/array/rsort.js.map | 1 + node_modules/locutus/php/array/shuffle.js | 45 + node_modules/locutus/php/array/shuffle.js.map | 1 + node_modules/locutus/php/array/sizeof.js | 15 + node_modules/locutus/php/array/sizeof.js.map | 1 + node_modules/locutus/php/array/sort.js | 117 + node_modules/locutus/php/array/sort.js.map | 1 + node_modules/locutus/php/array/uasort.js | 59 + node_modules/locutus/php/array/uasort.js.map | 1 + node_modules/locutus/php/array/uksort.js | 71 + node_modules/locutus/php/array/uksort.js.map | 1 + node_modules/locutus/php/array/usort.js | 58 + node_modules/locutus/php/array/usort.js.map | 1 + node_modules/locutus/php/bc/bcadd.js | 39 + node_modules/locutus/php/bc/bcadd.js.map | 1 + node_modules/locutus/php/bc/bccomp.js | 34 + node_modules/locutus/php/bc/bccomp.js.map | 1 + node_modules/locutus/php/bc/bcdiv.js | 44 + node_modules/locutus/php/bc/bcdiv.js.map | 1 + node_modules/locutus/php/bc/bcmul.js | 40 + node_modules/locutus/php/bc/bcmul.js.map | 1 + node_modules/locutus/php/bc/bcround.js | 56 + node_modules/locutus/php/bc/bcround.js.map | 1 + node_modules/locutus/php/bc/bcscale.js | 23 + node_modules/locutus/php/bc/bcscale.js.map | 1 + node_modules/locutus/php/bc/bcsub.js | 39 + node_modules/locutus/php/bc/bcsub.js.map | 1 + node_modules/locutus/php/bc/index.js | 10 + node_modules/locutus/php/bc/index.js.map | 1 + node_modules/locutus/php/ctype/ctype_alnum.js | 25 + .../locutus/php/ctype/ctype_alnum.js.map | 1 + node_modules/locutus/php/ctype/ctype_alpha.js | 24 + .../locutus/php/ctype/ctype_alpha.js.map | 1 + node_modules/locutus/php/ctype/ctype_cntrl.js | 26 + .../locutus/php/ctype/ctype_cntrl.js.map | 1 + node_modules/locutus/php/ctype/ctype_digit.js | 24 + .../locutus/php/ctype/ctype_digit.js.map | 1 + node_modules/locutus/php/ctype/ctype_graph.js | 26 + .../locutus/php/ctype/ctype_graph.js.map | 1 + node_modules/locutus/php/ctype/ctype_lower.js | 25 + .../locutus/php/ctype/ctype_lower.js.map | 1 + node_modules/locutus/php/ctype/ctype_print.js | 24 + .../locutus/php/ctype/ctype_print.js.map | 1 + node_modules/locutus/php/ctype/ctype_punct.js | 24 + .../locutus/php/ctype/ctype_punct.js.map | 1 + node_modules/locutus/php/ctype/ctype_space.js | 24 + .../locutus/php/ctype/ctype_space.js.map | 1 + node_modules/locutus/php/ctype/ctype_upper.js | 25 + .../locutus/php/ctype/ctype_upper.js.map | 1 + .../locutus/php/ctype/ctype_xdigit.js | 25 + .../locutus/php/ctype/ctype_xdigit.js.map | 1 + node_modules/locutus/php/ctype/index.js | 14 + node_modules/locutus/php/ctype/index.js.map | 1 + .../locutus/php/datetime/checkdate.js | 19 + .../locutus/php/datetime/checkdate.js.map | 1 + node_modules/locutus/php/datetime/date.js | 318 + node_modules/locutus/php/datetime/date.js.map | 1 + .../locutus/php/datetime/date_parse.js | 38 + .../locutus/php/datetime/date_parse.js.map | 1 + node_modules/locutus/php/datetime/getdate.js | 35 + .../locutus/php/datetime/getdate.js.map | 1 + .../locutus/php/datetime/gettimeofday.js | 33 + .../locutus/php/datetime/gettimeofday.js.map | 1 + node_modules/locutus/php/datetime/gmdate.js | 21 + .../locutus/php/datetime/gmdate.js.map | 1 + node_modules/locutus/php/datetime/gmmktime.js | 46 + .../locutus/php/datetime/gmmktime.js.map | 1 + .../locutus/php/datetime/gmstrftime.js | 19 + .../locutus/php/datetime/gmstrftime.js.map | 1 + node_modules/locutus/php/datetime/idate.js | 71 + .../locutus/php/datetime/idate.js.map | 1 + node_modules/locutus/php/datetime/index.js | 18 + .../locutus/php/datetime/index.js.map | 1 + .../locutus/php/datetime/microtime.js | 37 + .../locutus/php/datetime/microtime.js.map | 1 + node_modules/locutus/php/datetime/mktime.js | 77 + .../locutus/php/datetime/mktime.js.map | 1 + node_modules/locutus/php/datetime/strftime.js | 198 + .../locutus/php/datetime/strftime.js.map | 1 + node_modules/locutus/php/datetime/strptime.js | 361 + .../locutus/php/datetime/strptime.js.map | 1 + .../locutus/php/datetime/strtotime.js | 273 + .../locutus/php/datetime/strtotime.js.map | 1 + node_modules/locutus/php/datetime/time.js | 15 + node_modules/locutus/php/datetime/time.js.map | 1 + .../locutus/php/exec/escapeshellarg.js | 18 + .../locutus/php/exec/escapeshellarg.js.map | 1 + node_modules/locutus/php/exec/index.js | 4 + node_modules/locutus/php/exec/index.js.map | 1 + .../locutus/php/filesystem/basename.js | 34 + .../locutus/php/filesystem/basename.js.map | 1 + .../locutus/php/filesystem/dirname.js | 16 + .../locutus/php/filesystem/dirname.js.map | 1 + .../php/filesystem/file_get_contents.js | 26 + .../php/filesystem/file_get_contents.js.map | 1 + node_modules/locutus/php/filesystem/index.js | 8 + .../locutus/php/filesystem/index.js.map | 1 + .../locutus/php/filesystem/pathinfo.js | 146 + .../locutus/php/filesystem/pathinfo.js.map | 1 + .../locutus/php/filesystem/realpath.js | 60 + .../locutus/php/filesystem/realpath.js.map | 1 + .../locutus/php/funchand/call_user_func.js | 21 + .../php/funchand/call_user_func.js.map | 1 + .../php/funchand/call_user_func_array.js | 63 + .../php/funchand/call_user_func_array.js.map | 1 + .../locutus/php/funchand/create_function.js | 18 + .../php/funchand/create_function.js.map | 1 + .../locutus/php/funchand/function_exists.js | 22 + .../php/funchand/function_exists.js.map | 1 + .../php/funchand/get_defined_functions.js | 51 + .../php/funchand/get_defined_functions.js.map | 1 + node_modules/locutus/php/funchand/index.js | 8 + .../locutus/php/funchand/index.js.map | 1 + .../locutus/php/i18n/i18n_loc_get_default.js | 25 + .../php/i18n/i18n_loc_get_default.js.map | 1 + .../locutus/php/i18n/i18n_loc_set_default.js | 30 + .../php/i18n/i18n_loc_set_default.js.map | 1 + node_modules/locutus/php/i18n/index.js | 5 + node_modules/locutus/php/i18n/index.js.map | 1 + node_modules/locutus/php/index.js | 23 + node_modules/locutus/php/index.js.map | 1 + .../locutus/php/info/assert_options.js | 43 + .../locutus/php/info/assert_options.js.map | 1 + node_modules/locutus/php/info/getenv.js | 15 + node_modules/locutus/php/info/getenv.js.map | 1 + node_modules/locutus/php/info/index.js | 9 + node_modules/locutus/php/info/index.js.map | 1 + node_modules/locutus/php/info/ini_get.js | 27 + node_modules/locutus/php/info/ini_get.js.map | 1 + node_modules/locutus/php/info/ini_set.js | 50 + node_modules/locutus/php/info/ini_set.js.map | 1 + .../locutus/php/info/set_time_limit.js | 23 + .../locutus/php/info/set_time_limit.js.map | 1 + .../locutus/php/info/version_compare.js | 118 + .../locutus/php/info/version_compare.js.map | 1 + node_modules/locutus/php/json/index.js | 6 + node_modules/locutus/php/json/index.js.map | 1 + node_modules/locutus/php/json/json_decode.js | 88 + .../locutus/php/json/json_decode.js.map | 1 + node_modules/locutus/php/json/json_encode.js | 166 + .../locutus/php/json/json_encode.js.map | 1 + .../locutus/php/json/json_last_error.js | 27 + .../locutus/php/json/json_last_error.js.map | 1 + node_modules/locutus/php/math/abs.js | 20 + node_modules/locutus/php/math/abs.js.map | 1 + node_modules/locutus/php/math/acos.js | 12 + node_modules/locutus/php/math/acos.js.map | 1 + node_modules/locutus/php/math/acosh.js | 11 + node_modules/locutus/php/math/acosh.js.map | 1 + node_modules/locutus/php/math/asin.js | 12 + node_modules/locutus/php/math/asin.js.map | 1 + node_modules/locutus/php/math/asinh.js | 11 + node_modules/locutus/php/math/asinh.js.map | 1 + node_modules/locutus/php/math/atan.js | 11 + node_modules/locutus/php/math/atan.js.map | 1 + node_modules/locutus/php/math/atan2.js | 11 + node_modules/locutus/php/math/atan2.js.map | 1 + node_modules/locutus/php/math/atanh.js | 11 + node_modules/locutus/php/math/atanh.js.map | 1 + node_modules/locutus/php/math/base_convert.js | 13 + .../locutus/php/math/base_convert.js.map | 1 + node_modules/locutus/php/math/bindec.js | 17 + node_modules/locutus/php/math/bindec.js.map | 1 + node_modules/locutus/php/math/ceil.js | 11 + node_modules/locutus/php/math/ceil.js.map | 1 + node_modules/locutus/php/math/cos.js | 11 + node_modules/locutus/php/math/cos.js.map | 1 + node_modules/locutus/php/math/cosh.js | 11 + node_modules/locutus/php/math/cosh.js.map | 1 + node_modules/locutus/php/math/decbin.js | 22 + node_modules/locutus/php/math/decbin.js.map | 1 + node_modules/locutus/php/math/dechex.js | 21 + node_modules/locutus/php/math/dechex.js.map | 1 + node_modules/locutus/php/math/decoct.js | 19 + node_modules/locutus/php/math/decoct.js.map | 1 + node_modules/locutus/php/math/deg2rad.js | 12 + node_modules/locutus/php/math/deg2rad.js.map | 1 + node_modules/locutus/php/math/exp.js | 11 + node_modules/locutus/php/math/exp.js.map | 1 + node_modules/locutus/php/math/expm1.js | 13 + node_modules/locutus/php/math/expm1.js.map | 1 + node_modules/locutus/php/math/floor.js | 11 + node_modules/locutus/php/math/floor.js.map | 1 + node_modules/locutus/php/math/fmod.js | 39 + node_modules/locutus/php/math/fmod.js.map | 1 + node_modules/locutus/php/math/getrandmax.js | 11 + .../locutus/php/math/getrandmax.js.map | 1 + node_modules/locutus/php/math/hexdec.js | 14 + node_modules/locutus/php/math/hexdec.js.map | 1 + node_modules/locutus/php/math/hypot.js | 21 + node_modules/locutus/php/math/hypot.js.map | 1 + node_modules/locutus/php/math/index.js | 49 + node_modules/locutus/php/math/index.js.map | 1 + node_modules/locutus/php/math/is_finite.js | 36 + .../locutus/php/math/is_finite.js.map | 1 + node_modules/locutus/php/math/is_infinite.js | 36 + .../locutus/php/math/is_infinite.js.map | 1 + node_modules/locutus/php/math/is_nan.js | 34 + node_modules/locutus/php/math/is_nan.js.map | 1 + node_modules/locutus/php/math/lcg_value.js | 13 + .../locutus/php/math/lcg_value.js.map | 1 + node_modules/locutus/php/math/log.js | 12 + node_modules/locutus/php/math/log.js.map | 1 + node_modules/locutus/php/math/log10.js | 16 + node_modules/locutus/php/math/log10.js.map | 1 + node_modules/locutus/php/math/log1p.js | 28 + node_modules/locutus/php/math/log1p.js.map | 1 + node_modules/locutus/php/math/max.js | 119 + node_modules/locutus/php/math/max.js.map | 1 + node_modules/locutus/php/math/min.js | 121 + node_modules/locutus/php/math/min.js.map | 1 + .../locutus/php/math/mt_getrandmax.js | 12 + .../locutus/php/math/mt_getrandmax.js.map | 1 + node_modules/locutus/php/math/mt_rand.js | 24 + node_modules/locutus/php/math/mt_rand.js.map | 1 + node_modules/locutus/php/math/octdec.js | 12 + node_modules/locutus/php/math/octdec.js.map | 1 + node_modules/locutus/php/math/pi.js | 12 + node_modules/locutus/php/math/pi.js.map | 1 + node_modules/locutus/php/math/pow.js | 11 + node_modules/locutus/php/math/pow.js.map | 1 + node_modules/locutus/php/math/rad2deg.js | 12 + node_modules/locutus/php/math/rad2deg.js.map | 1 + node_modules/locutus/php/math/rand.js | 22 + node_modules/locutus/php/math/rand.js.map | 1 + node_modules/locutus/php/math/round.js | 62 + node_modules/locutus/php/math/round.js.map | 1 + node_modules/locutus/php/math/sin.js | 11 + node_modules/locutus/php/math/sin.js.map | 1 + node_modules/locutus/php/math/sinh.js | 11 + node_modules/locutus/php/math/sinh.js.map | 1 + node_modules/locutus/php/math/sqrt.js | 11 + node_modules/locutus/php/math/sqrt.js.map | 1 + node_modules/locutus/php/math/tan.js | 11 + node_modules/locutus/php/math/tan.js.map | 1 + node_modules/locutus/php/math/tanh.js | 12 + node_modules/locutus/php/math/tanh.js.map | 1 + node_modules/locutus/php/misc/index.js | 5 + node_modules/locutus/php/misc/index.js.map | 1 + node_modules/locutus/php/misc/pack.js | 379 + node_modules/locutus/php/misc/pack.js.map | 1 + node_modules/locutus/php/misc/uniqid.js | 59 + node_modules/locutus/php/misc/uniqid.js.map | 1 + .../locutus/php/net-gopher/gopher_parsedir.js | 84 + .../php/net-gopher/gopher_parsedir.js.map | 1 + node_modules/locutus/php/net-gopher/index.js | 4 + .../locutus/php/net-gopher/index.js.map | 1 + node_modules/locutus/php/network/index.js | 9 + node_modules/locutus/php/network/index.js.map | 1 + node_modules/locutus/php/network/inet_ntop.js | 34 + .../locutus/php/network/inet_ntop.js.map | 1 + node_modules/locutus/php/network/inet_pton.js | 61 + .../locutus/php/network/inet_pton.js.map | 1 + node_modules/locutus/php/network/ip2long.js | 45 + .../locutus/php/network/ip2long.js.map | 1 + node_modules/locutus/php/network/long2ip.js | 15 + .../locutus/php/network/long2ip.js.map | 1 + node_modules/locutus/php/network/setcookie.js | 15 + .../locutus/php/network/setcookie.js.map | 1 + .../locutus/php/network/setrawcookie.js | 50 + .../locutus/php/network/setrawcookie.js.map | 1 + node_modules/locutus/php/pcre/index.js | 5 + node_modules/locutus/php/pcre/index.js.map | 1 + node_modules/locutus/php/pcre/preg_quote.js | 20 + .../locutus/php/pcre/preg_quote.js.map | 1 + node_modules/locutus/php/pcre/sql_regcase.js | 38 + .../locutus/php/pcre/sql_regcase.js.map | 1 + .../locutus/php/strings/addcslashes.js | 176 + .../locutus/php/strings/addcslashes.js.map | 1 + .../locutus/php/strings/addslashes.js | 18 + .../locutus/php/strings/addslashes.js.map | 1 + node_modules/locutus/php/strings/bin2hex.js | 28 + .../locutus/php/strings/bin2hex.js.map | 1 + node_modules/locutus/php/strings/chop.js | 12 + node_modules/locutus/php/strings/chop.js.map | 1 + node_modules/locutus/php/strings/chr.js | 22 + node_modules/locutus/php/strings/chr.js.map | 1 + .../locutus/php/strings/chunk_split.js | 24 + .../locutus/php/strings/chunk_split.js.map | 1 + .../locutus/php/strings/convert_cyr_string.js | 84 + .../php/strings/convert_cyr_string.js.map | 1 + .../locutus/php/strings/convert_uuencode.js | 81 + .../php/strings/convert_uuencode.js.map | 1 + .../locutus/php/strings/count_chars.js | 55 + .../locutus/php/strings/count_chars.js.map | 1 + node_modules/locutus/php/strings/crc32.js | 29 + node_modules/locutus/php/strings/crc32.js.map | 1 + node_modules/locutus/php/strings/echo.js | 32 + node_modules/locutus/php/strings/echo.js.map | 1 + node_modules/locutus/php/strings/explode.js | 53 + .../locutus/php/strings/explode.js.map | 1 + .../php/strings/get_html_translation_table.js | 166 + .../strings/get_html_translation_table.js.map | 1 + node_modules/locutus/php/strings/hex2bin.js | 28 + .../locutus/php/strings/hex2bin.js.map | 1 + .../locutus/php/strings/html_entity_decode.js | 46 + .../php/strings/html_entity_decode.js.map | 1 + .../locutus/php/strings/htmlentities.js | 48 + .../locutus/php/strings/htmlentities.js.map | 1 + .../locutus/php/strings/htmlspecialchars.js | 73 + .../php/strings/htmlspecialchars.js.map | 1 + .../php/strings/htmlspecialchars_decode.js | 71 + .../strings/htmlspecialchars_decode.js.map | 1 + node_modules/locutus/php/strings/implode.js | 38 + .../locutus/php/strings/implode.js.map | 1 + node_modules/locutus/php/strings/index.js | 94 + node_modules/locutus/php/strings/index.js.map | 1 + node_modules/locutus/php/strings/join.js | 12 + node_modules/locutus/php/strings/join.js.map | 1 + node_modules/locutus/php/strings/lcfirst.js | 13 + .../locutus/php/strings/lcfirst.js.map | 1 + .../locutus/php/strings/levenshtein.js | 94 + .../locutus/php/strings/levenshtein.js.map | 1 + .../locutus/php/strings/localeconv.js | 33 + .../locutus/php/strings/localeconv.js.map | 1 + node_modules/locutus/php/strings/ltrim.js | 18 + node_modules/locutus/php/strings/ltrim.js.map | 1 + node_modules/locutus/php/strings/md5.js | 243 + node_modules/locutus/php/strings/md5.js.map | 1 + node_modules/locutus/php/strings/md5_file.js | 26 + .../locutus/php/strings/md5_file.js.map | 1 + node_modules/locutus/php/strings/metaphone.js | 227 + .../locutus/php/strings/metaphone.js.map | 1 + .../locutus/php/strings/money_format.js | 252 + .../locutus/php/strings/money_format.js.map | 1 + node_modules/locutus/php/strings/nl2br.js | 34 + node_modules/locutus/php/strings/nl2br.js.map | 1 + .../locutus/php/strings/nl_langinfo.js | 108 + .../locutus/php/strings/nl_langinfo.js.map | 1 + .../locutus/php/strings/number_format.js | 79 + .../locutus/php/strings/number_format.js.map | 1 + node_modules/locutus/php/strings/ord.js | 42 + node_modules/locutus/php/strings/ord.js.map | 1 + node_modules/locutus/php/strings/parse_str.js | 136 + .../locutus/php/strings/parse_str.js.map | 1 + node_modules/locutus/php/strings/printf.js | 17 + .../locutus/php/strings/printf.js.map | 1 + .../php/strings/quoted_printable_decode.js | 33 + .../strings/quoted_printable_decode.js.map | 1 + .../php/strings/quoted_printable_encode.js | 48 + .../strings/quoted_printable_encode.js.map | 1 + node_modules/locutus/php/strings/quotemeta.js | 11 + .../locutus/php/strings/quotemeta.js.map | 1 + node_modules/locutus/php/strings/rtrim.js | 20 + node_modules/locutus/php/strings/rtrim.js.map | 1 + node_modules/locutus/php/strings/setlocale.js | 335 + .../locutus/php/strings/setlocale.js.map | 1 + node_modules/locutus/php/strings/sha1.js | 151 + node_modules/locutus/php/strings/sha1.js.map | 1 + node_modules/locutus/php/strings/sha1_file.js | 24 + .../locutus/php/strings/sha1_file.js.map | 1 + .../locutus/php/strings/similar_text.js | 63 + .../locutus/php/strings/similar_text.js.map | 1 + node_modules/locutus/php/strings/soundex.js | 67 + .../locutus/php/strings/soundex.js.map | 1 + node_modules/locutus/php/strings/split.js | 12 + node_modules/locutus/php/strings/split.js.map | 1 + node_modules/locutus/php/strings/sprintf.js | 188 + .../locutus/php/strings/sprintf.js.map | 1 + node_modules/locutus/php/strings/sscanf.js | 268 + .../locutus/php/strings/sscanf.js.map | 1 + .../locutus/php/strings/str_getcsv.js | 55 + .../locutus/php/strings/str_getcsv.js.map | 1 + .../locutus/php/strings/str_ireplace.js | 102 + .../locutus/php/strings/str_ireplace.js.map | 1 + node_modules/locutus/php/strings/str_pad.js | 49 + .../locutus/php/strings/str_pad.js.map | 1 + .../locutus/php/strings/str_repeat.js | 26 + .../locutus/php/strings/str_repeat.js.map | 1 + .../locutus/php/strings/str_replace.js | 85 + .../locutus/php/strings/str_replace.js.map | 1 + node_modules/locutus/php/strings/str_rot13.js | 21 + .../locutus/php/strings/str_rot13.js.map | 1 + .../locutus/php/strings/str_shuffle.js | 34 + .../locutus/php/strings/str_shuffle.js.map | 1 + node_modules/locutus/php/strings/str_split.js | 33 + .../locutus/php/strings/str_split.js.map | 1 + .../locutus/php/strings/str_word_count.js | 117 + .../locutus/php/strings/str_word_count.js.map | 1 + .../locutus/php/strings/strcasecmp.js | 21 + .../locutus/php/strings/strcasecmp.js.map | 1 + node_modules/locutus/php/strings/strchr.js | 14 + .../locutus/php/strings/strchr.js.map | 1 + node_modules/locutus/php/strings/strcmp.js | 16 + .../locutus/php/strings/strcmp.js.map | 1 + node_modules/locutus/php/strings/strcoll.js | 23 + .../locutus/php/strings/strcoll.js.map | 1 + node_modules/locutus/php/strings/strcspn.js | 25 + .../locutus/php/strings/strcspn.js.map | 1 + .../locutus/php/strings/strip_tags.js | 48 + .../locutus/php/strings/strip_tags.js.map | 1 + node_modules/locutus/php/strings/stripos.js | 20 + .../locutus/php/strings/stripos.js.map | 1 + .../locutus/php/strings/stripslashes.js | 33 + .../locutus/php/strings/stripslashes.js.map | 1 + node_modules/locutus/php/strings/stristr.js | 26 + .../locutus/php/strings/stristr.js.map | 1 + node_modules/locutus/php/strings/strlen.js | 76 + .../locutus/php/strings/strlen.js.map | 1 + .../locutus/php/strings/strnatcasecmp.js | 27 + .../locutus/php/strings/strnatcasecmp.js.map | 1 + node_modules/locutus/php/strings/strnatcmp.js | 119 + .../locutus/php/strings/strnatcmp.js.map | 1 + .../locutus/php/strings/strncasecmp.js | 55 + .../locutus/php/strings/strncasecmp.js.map | 1 + node_modules/locutus/php/strings/strncmp.js | 20 + .../locutus/php/strings/strncmp.js.map | 1 + node_modules/locutus/php/strings/strpbrk.js | 19 + .../locutus/php/strings/strpbrk.js.map | 1 + node_modules/locutus/php/strings/strpos.js | 15 + .../locutus/php/strings/strpos.js.map | 1 + node_modules/locutus/php/strings/strrchr.js | 24 + .../locutus/php/strings/strrchr.js.map | 1 + node_modules/locutus/php/strings/strrev.js | 34 + .../locutus/php/strings/strrev.js.map | 1 + node_modules/locutus/php/strings/strripos.js | 27 + .../locutus/php/strings/strripos.js.map | 1 + node_modules/locutus/php/strings/strrpos.js | 30 + .../locutus/php/strings/strrpos.js.map | 1 + node_modules/locutus/php/strings/strspn.js | 39 + .../locutus/php/strings/strspn.js.map | 1 + node_modules/locutus/php/strings/strstr.js | 31 + .../locutus/php/strings/strstr.js.map | 1 + node_modules/locutus/php/strings/strtok.js | 38 + .../locutus/php/strings/strtok.js.map | 1 + .../locutus/php/strings/strtolower.js | 12 + .../locutus/php/strings/strtolower.js.map | 1 + .../locutus/php/strings/strtoupper.js | 12 + .../locutus/php/strings/strtoupper.js.map | 1 + node_modules/locutus/php/strings/strtr.js | 102 + node_modules/locutus/php/strings/strtr.js.map | 1 + node_modules/locutus/php/strings/substr.js | 124 + .../locutus/php/strings/substr.js.map | 1 + .../locutus/php/strings/substr_compare.js | 39 + .../locutus/php/strings/substr_compare.js.map | 1 + .../locutus/php/strings/substr_count.js | 41 + .../locutus/php/strings/substr_count.js.map | 1 + .../locutus/php/strings/substr_replace.js | 32 + .../locutus/php/strings/substr_replace.js.map | 1 + node_modules/locutus/php/strings/trim.js | 48 + node_modules/locutus/php/strings/trim.js.map | 1 + node_modules/locutus/php/strings/ucfirst.js | 15 + .../locutus/php/strings/ucfirst.js.map | 1 + node_modules/locutus/php/strings/ucwords.js | 20 + .../locutus/php/strings/ucwords.js.map | 1 + node_modules/locutus/php/strings/vprintf.js | 18 + .../locutus/php/strings/vprintf.js.map | 1 + node_modules/locutus/php/strings/vsprintf.js | 13 + .../locutus/php/strings/vsprintf.js.map | 1 + node_modules/locutus/php/strings/wordwrap.js | 43 + .../locutus/php/strings/wordwrap.js.map | 1 + node_modules/locutus/php/url/base64_decode.js | 76 + .../locutus/php/url/base64_decode.js.map | 1 + node_modules/locutus/php/url/base64_encode.js | 71 + .../locutus/php/url/base64_encode.js.map | 1 + .../locutus/php/url/http_build_query.js | 72 + .../locutus/php/url/http_build_query.js.map | 1 + node_modules/locutus/php/url/index.js | 11 + node_modules/locutus/php/url/index.js.map | 1 + node_modules/locutus/php/url/parse_url.js | 71 + node_modules/locutus/php/url/parse_url.js.map | 1 + node_modules/locutus/php/url/rawurldecode.js | 28 + .../locutus/php/url/rawurldecode.js.map | 1 + node_modules/locutus/php/url/rawurlencode.js | 33 + .../locutus/php/url/rawurlencode.js.map | 1 + node_modules/locutus/php/url/urldecode.js | 41 + node_modules/locutus/php/url/urldecode.js.map | 1 + node_modules/locutus/php/url/urlencode.js | 37 + node_modules/locutus/php/url/urlencode.js.map | 1 + node_modules/locutus/php/var/boolval.js | 50 + node_modules/locutus/php/var/boolval.js.map | 1 + node_modules/locutus/php/var/doubleval.js | 15 + node_modules/locutus/php/var/doubleval.js.map | 1 + node_modules/locutus/php/var/empty.js | 50 + node_modules/locutus/php/var/empty.js.map | 1 + node_modules/locutus/php/var/floatval.js | 17 + node_modules/locutus/php/var/floatval.js.map | 1 + node_modules/locutus/php/var/gettype.js | 69 + node_modules/locutus/php/var/gettype.js.map | 1 + node_modules/locutus/php/var/index.js | 33 + node_modules/locutus/php/var/index.js.map | 1 + node_modules/locutus/php/var/intval.js | 39 + node_modules/locutus/php/var/intval.js.map | 1 + node_modules/locutus/php/var/is_array.js | 98 + node_modules/locutus/php/var/is_array.js.map | 1 + node_modules/locutus/php/var/is_binary.js | 12 + node_modules/locutus/php/var/is_binary.js.map | 1 + node_modules/locutus/php/var/is_bool.js | 15 + node_modules/locutus/php/var/is_bool.js.map | 1 + node_modules/locutus/php/var/is_buffer.js | 12 + node_modules/locutus/php/var/is_buffer.js.map | 1 + node_modules/locutus/php/var/is_callable.js | 84 + .../locutus/php/var/is_callable.js.map | 1 + node_modules/locutus/php/var/is_double.js | 15 + node_modules/locutus/php/var/is_double.js.map | 1 + node_modules/locutus/php/var/is_float.js | 17 + node_modules/locutus/php/var/is_float.js.map | 1 + node_modules/locutus/php/var/is_int.js | 25 + node_modules/locutus/php/var/is_int.js.map | 1 + node_modules/locutus/php/var/is_integer.js | 17 + .../locutus/php/var/is_integer.js.map | 1 + node_modules/locutus/php/var/is_long.js | 15 + node_modules/locutus/php/var/is_long.js.map | 1 + node_modules/locutus/php/var/is_null.js | 14 + node_modules/locutus/php/var/is_null.js.map | 1 + node_modules/locutus/php/var/is_numeric.js | 31 + .../locutus/php/var/is_numeric.js.map | 1 + node_modules/locutus/php/var/is_object.js | 23 + node_modules/locutus/php/var/is_object.js.map | 1 + node_modules/locutus/php/var/is_real.js | 15 + node_modules/locutus/php/var/is_real.js.map | 1 + node_modules/locutus/php/var/is_scalar.js | 17 + node_modules/locutus/php/var/is_scalar.js.map | 1 + node_modules/locutus/php/var/is_string.js | 14 + node_modules/locutus/php/var/is_string.js.map | 1 + node_modules/locutus/php/var/is_unicode.js | 39 + .../locutus/php/var/is_unicode.js.map | 1 + node_modules/locutus/php/var/isset.js | 32 + node_modules/locutus/php/var/isset.js.map | 1 + node_modules/locutus/php/var/print_r.js | 75 + node_modules/locutus/php/var/print_r.js.map | 1 + node_modules/locutus/php/var/serialize.js | 139 + node_modules/locutus/php/var/serialize.js.map | 1 + node_modules/locutus/php/var/strval.js | 36 + node_modules/locutus/php/var/strval.js.map | 1 + node_modules/locutus/php/var/unserialize.js | 204 + .../locutus/php/var/unserialize.js.map | 1 + node_modules/locutus/php/var/var_dump.js | 173 + node_modules/locutus/php/var/var_dump.js.map | 1 + node_modules/locutus/php/var/var_export.js | 121 + .../locutus/php/var/var_export.js.map | 1 + node_modules/locutus/php/xdiff/index.js | 5 + node_modules/locutus/php/xdiff/index.js.map | 1 + .../locutus/php/xdiff/xdiff_string_diff.js | 438 + .../php/xdiff/xdiff_string_diff.js.map | 1 + .../locutus/php/xdiff/xdiff_string_patch.js | 203 + .../php/xdiff/xdiff_string_patch.js.map | 1 + node_modules/locutus/php/xml/index.js | 5 + node_modules/locutus/php/xml/index.js.map | 1 + node_modules/locutus/php/xml/utf8_decode.js | 62 + .../locutus/php/xml/utf8_decode.js.map | 1 + node_modules/locutus/php/xml/utf8_encode.js | 70 + .../locutus/php/xml/utf8_encode.js.map | 1 + node_modules/locutus/python/index.js | 4 + node_modules/locutus/python/index.js.map | 1 + .../locutus/python/string/capwords.js | 21 + .../locutus/python/string/capwords.js.map | 1 + node_modules/locutus/python/string/index.js | 4 + .../locutus/python/string/index.js.map | 1 + node_modules/locutus/ruby/Math/acos.js | 13 + node_modules/locutus/ruby/Math/acos.js.map | 1 + node_modules/locutus/ruby/Math/index.js | 4 + node_modules/locutus/ruby/Math/index.js.map | 1 + node_modules/locutus/ruby/index.js | 4 + node_modules/locutus/ruby/index.js.map | 1 + node_modules/lodash/LICENSE | 47 + node_modules/lodash/README.md | 39 + node_modules/lodash/_DataView.js | 7 + node_modules/lodash/_Hash.js | 32 + node_modules/lodash/_LazyWrapper.js | 28 + node_modules/lodash/_ListCache.js | 32 + node_modules/lodash/_LodashWrapper.js | 22 + node_modules/lodash/_Map.js | 7 + node_modules/lodash/_MapCache.js | 32 + node_modules/lodash/_Promise.js | 7 + node_modules/lodash/_Set.js | 7 + node_modules/lodash/_SetCache.js | 27 + node_modules/lodash/_Stack.js | 27 + node_modules/lodash/_Symbol.js | 6 + node_modules/lodash/_Uint8Array.js | 6 + node_modules/lodash/_WeakMap.js | 7 + node_modules/lodash/_addMapEntry.js | 15 + node_modules/lodash/_addSetEntry.js | 15 + node_modules/lodash/_apply.js | 21 + node_modules/lodash/_arrayAggregator.js | 22 + node_modules/lodash/_arrayEach.js | 22 + node_modules/lodash/_arrayEachRight.js | 21 + node_modules/lodash/_arrayEvery.js | 23 + node_modules/lodash/_arrayFilter.js | 25 + node_modules/lodash/_arrayIncludes.js | 17 + node_modules/lodash/_arrayIncludesWith.js | 22 + node_modules/lodash/_arrayLikeKeys.js | 49 + node_modules/lodash/_arrayMap.js | 21 + node_modules/lodash/_arrayPush.js | 20 + node_modules/lodash/_arrayReduce.js | 26 + node_modules/lodash/_arrayReduceRight.js | 24 + node_modules/lodash/_arraySample.js | 15 + node_modules/lodash/_arraySampleSize.js | 17 + node_modules/lodash/_arrayShuffle.js | 15 + node_modules/lodash/_arraySome.js | 23 + node_modules/lodash/_asciiSize.js | 12 + node_modules/lodash/_asciiToArray.js | 12 + node_modules/lodash/_asciiWords.js | 15 + node_modules/lodash/_assignMergeValue.js | 20 + node_modules/lodash/_assignValue.js | 28 + node_modules/lodash/_assocIndexOf.js | 21 + node_modules/lodash/_baseAggregator.js | 21 + node_modules/lodash/_baseAssign.js | 17 + node_modules/lodash/_baseAssignIn.js | 17 + node_modules/lodash/_baseAssignValue.js | 25 + node_modules/lodash/_baseAt.js | 23 + node_modules/lodash/_baseClamp.js | 22 + node_modules/lodash/_baseClone.js | 153 + node_modules/lodash/_baseConforms.js | 18 + node_modules/lodash/_baseConformsTo.js | 27 + node_modules/lodash/_baseCreate.js | 30 + node_modules/lodash/_baseDelay.js | 21 + node_modules/lodash/_baseDifference.js | 67 + node_modules/lodash/_baseEach.js | 14 + node_modules/lodash/_baseEachRight.js | 14 + node_modules/lodash/_baseEvery.js | 21 + node_modules/lodash/_baseExtremum.js | 32 + node_modules/lodash/_baseFill.js | 32 + node_modules/lodash/_baseFilter.js | 21 + node_modules/lodash/_baseFindIndex.js | 24 + node_modules/lodash/_baseFindKey.js | 23 + node_modules/lodash/_baseFlatten.js | 38 + node_modules/lodash/_baseFor.js | 16 + node_modules/lodash/_baseForOwn.js | 16 + node_modules/lodash/_baseForOwnRight.js | 16 + node_modules/lodash/_baseForRight.js | 15 + node_modules/lodash/_baseFunctions.js | 19 + node_modules/lodash/_baseGet.js | 24 + node_modules/lodash/_baseGetAllKeys.js | 20 + node_modules/lodash/_baseGetTag.js | 28 + node_modules/lodash/_baseGt.js | 14 + node_modules/lodash/_baseHas.js | 19 + node_modules/lodash/_baseHasIn.js | 13 + node_modules/lodash/_baseInRange.js | 18 + node_modules/lodash/_baseIndexOf.js | 20 + node_modules/lodash/_baseIndexOfWith.js | 23 + node_modules/lodash/_baseIntersection.js | 74 + node_modules/lodash/_baseInverter.js | 21 + node_modules/lodash/_baseInvoke.js | 24 + node_modules/lodash/_baseIsArguments.js | 18 + node_modules/lodash/_baseIsArrayBuffer.js | 17 + node_modules/lodash/_baseIsDate.js | 18 + node_modules/lodash/_baseIsEqual.js | 28 + node_modules/lodash/_baseIsEqualDeep.js | 83 + node_modules/lodash/_baseIsMap.js | 18 + node_modules/lodash/_baseIsMatch.js | 62 + node_modules/lodash/_baseIsNaN.js | 12 + node_modules/lodash/_baseIsNative.js | 47 + node_modules/lodash/_baseIsRegExp.js | 18 + node_modules/lodash/_baseIsSet.js | 18 + node_modules/lodash/_baseIsTypedArray.js | 60 + node_modules/lodash/_baseIteratee.js | 31 + node_modules/lodash/_baseKeys.js | 30 + node_modules/lodash/_baseKeysIn.js | 33 + node_modules/lodash/_baseLodash.js | 10 + node_modules/lodash/_baseLt.js | 14 + node_modules/lodash/_baseMap.js | 22 + node_modules/lodash/_baseMatches.js | 22 + node_modules/lodash/_baseMatchesProperty.js | 33 + node_modules/lodash/_baseMean.js | 20 + node_modules/lodash/_baseMerge.js | 41 + node_modules/lodash/_baseMergeDeep.js | 93 + node_modules/lodash/_baseNth.js | 20 + node_modules/lodash/_baseOrderBy.js | 34 + node_modules/lodash/_basePick.js | 19 + node_modules/lodash/_basePickBy.js | 30 + node_modules/lodash/_baseProperty.js | 14 + node_modules/lodash/_basePropertyDeep.js | 16 + node_modules/lodash/_basePropertyOf.js | 14 + node_modules/lodash/_basePullAll.js | 51 + node_modules/lodash/_basePullAt.js | 37 + node_modules/lodash/_baseRandom.js | 18 + node_modules/lodash/_baseRange.js | 28 + node_modules/lodash/_baseReduce.js | 23 + node_modules/lodash/_baseRepeat.js | 35 + node_modules/lodash/_baseRest.js | 17 + node_modules/lodash/_baseSample.js | 15 + node_modules/lodash/_baseSampleSize.js | 18 + node_modules/lodash/_baseSet.js | 47 + node_modules/lodash/_baseSetData.js | 17 + node_modules/lodash/_baseSetToString.js | 22 + node_modules/lodash/_baseShuffle.js | 15 + node_modules/lodash/_baseSlice.js | 31 + node_modules/lodash/_baseSome.js | 22 + node_modules/lodash/_baseSortBy.js | 21 + node_modules/lodash/_baseSortedIndex.js | 42 + node_modules/lodash/_baseSortedIndexBy.js | 64 + node_modules/lodash/_baseSortedUniq.js | 30 + node_modules/lodash/_baseSum.js | 24 + node_modules/lodash/_baseTimes.js | 20 + node_modules/lodash/_baseToNumber.js | 24 + node_modules/lodash/_baseToPairs.js | 18 + node_modules/lodash/_baseToString.js | 37 + node_modules/lodash/_baseUnary.js | 14 + node_modules/lodash/_baseUniq.js | 72 + node_modules/lodash/_baseUnset.js | 20 + node_modules/lodash/_baseUpdate.js | 18 + node_modules/lodash/_baseValues.js | 19 + node_modules/lodash/_baseWhile.js | 26 + node_modules/lodash/_baseWrapperValue.js | 25 + node_modules/lodash/_baseXor.js | 36 + node_modules/lodash/_baseZipObject.js | 23 + node_modules/lodash/_cacheHas.js | 13 + node_modules/lodash/_castArrayLikeObject.js | 14 + node_modules/lodash/_castFunction.js | 14 + node_modules/lodash/_castPath.js | 21 + node_modules/lodash/_castRest.js | 14 + node_modules/lodash/_castSlice.js | 18 + node_modules/lodash/_charsEndIndex.js | 19 + node_modules/lodash/_charsStartIndex.js | 20 + node_modules/lodash/_cloneArrayBuffer.js | 16 + node_modules/lodash/_cloneBuffer.js | 35 + node_modules/lodash/_cloneDataView.js | 16 + node_modules/lodash/_cloneMap.js | 22 + node_modules/lodash/_cloneRegExp.js | 17 + node_modules/lodash/_cloneSet.js | 22 + node_modules/lodash/_cloneSymbol.js | 18 + node_modules/lodash/_cloneTypedArray.js | 16 + node_modules/lodash/_compareAscending.js | 41 + node_modules/lodash/_compareMultiple.js | 44 + node_modules/lodash/_composeArgs.js | 39 + node_modules/lodash/_composeArgsRight.js | 41 + node_modules/lodash/_copyArray.js | 20 + node_modules/lodash/_copyObject.js | 40 + node_modules/lodash/_copySymbols.js | 16 + node_modules/lodash/_copySymbolsIn.js | 16 + node_modules/lodash/_coreJsData.js | 6 + node_modules/lodash/_countHolders.js | 21 + node_modules/lodash/_createAggregator.js | 23 + node_modules/lodash/_createAssigner.js | 37 + node_modules/lodash/_createBaseEach.js | 32 + node_modules/lodash/_createBaseFor.js | 25 + node_modules/lodash/_createBind.js | 28 + node_modules/lodash/_createCaseFirst.js | 33 + node_modules/lodash/_createCompounder.js | 24 + node_modules/lodash/_createCtor.js | 37 + node_modules/lodash/_createCurry.js | 46 + node_modules/lodash/_createFind.js | 25 + node_modules/lodash/_createFlow.js | 78 + node_modules/lodash/_createHybrid.js | 92 + node_modules/lodash/_createInverter.js | 17 + node_modules/lodash/_createMathOperation.js | 38 + node_modules/lodash/_createOver.js | 27 + node_modules/lodash/_createPadding.js | 33 + node_modules/lodash/_createPartial.js | 43 + node_modules/lodash/_createRange.js | 30 + node_modules/lodash/_createRecurry.js | 56 + .../lodash/_createRelationalOperation.js | 20 + node_modules/lodash/_createRound.js | 33 + node_modules/lodash/_createSet.js | 19 + node_modules/lodash/_createToPairs.js | 30 + node_modules/lodash/_createWrap.js | 106 + .../lodash/_customDefaultsAssignIn.js | 29 + node_modules/lodash/_customDefaultsMerge.js | 28 + node_modules/lodash/_customOmitClone.js | 16 + node_modules/lodash/_deburrLetter.js | 71 + node_modules/lodash/_defineProperty.js | 11 + node_modules/lodash/_equalArrays.js | 83 + node_modules/lodash/_equalByTag.js | 112 + node_modules/lodash/_equalObjects.js | 89 + node_modules/lodash/_escapeHtmlChar.js | 21 + node_modules/lodash/_escapeStringChar.js | 22 + node_modules/lodash/_flatRest.js | 16 + node_modules/lodash/_freeGlobal.js | 4 + node_modules/lodash/_getAllKeys.js | 16 + node_modules/lodash/_getAllKeysIn.js | 17 + node_modules/lodash/_getData.js | 15 + node_modules/lodash/_getFuncName.js | 31 + node_modules/lodash/_getHolder.js | 13 + node_modules/lodash/_getMapData.js | 18 + node_modules/lodash/_getMatchData.js | 24 + node_modules/lodash/_getNative.js | 17 + node_modules/lodash/_getPrototype.js | 6 + node_modules/lodash/_getRawTag.js | 46 + node_modules/lodash/_getSymbols.js | 30 + node_modules/lodash/_getSymbolsIn.js | 25 + node_modules/lodash/_getTag.js | 58 + node_modules/lodash/_getValue.js | 13 + node_modules/lodash/_getView.js | 33 + node_modules/lodash/_getWrapDetails.js | 17 + node_modules/lodash/_hasPath.js | 39 + node_modules/lodash/_hasUnicode.js | 26 + node_modules/lodash/_hasUnicodeWord.js | 15 + node_modules/lodash/_hashClear.js | 15 + node_modules/lodash/_hashDelete.js | 17 + node_modules/lodash/_hashGet.js | 30 + node_modules/lodash/_hashHas.js | 23 + node_modules/lodash/_hashSet.js | 23 + node_modules/lodash/_initCloneArray.js | 26 + node_modules/lodash/_initCloneByTag.js | 80 + node_modules/lodash/_initCloneObject.js | 18 + node_modules/lodash/_insertWrapDetails.js | 23 + node_modules/lodash/_isFlattenable.js | 20 + node_modules/lodash/_isIndex.js | 22 + node_modules/lodash/_isIterateeCall.js | 30 + node_modules/lodash/_isKey.js | 29 + node_modules/lodash/_isKeyable.js | 15 + node_modules/lodash/_isLaziable.js | 28 + node_modules/lodash/_isMaskable.js | 14 + node_modules/lodash/_isMasked.js | 20 + node_modules/lodash/_isPrototype.js | 18 + node_modules/lodash/_isStrictComparable.js | 15 + node_modules/lodash/_iteratorToArray.js | 18 + node_modules/lodash/_lazyClone.js | 23 + node_modules/lodash/_lazyReverse.js | 23 + node_modules/lodash/_lazyValue.js | 69 + node_modules/lodash/_listCacheClear.js | 13 + node_modules/lodash/_listCacheDelete.js | 35 + node_modules/lodash/_listCacheGet.js | 19 + node_modules/lodash/_listCacheHas.js | 16 + node_modules/lodash/_listCacheSet.js | 26 + node_modules/lodash/_mapCacheClear.js | 21 + node_modules/lodash/_mapCacheDelete.js | 18 + node_modules/lodash/_mapCacheGet.js | 16 + node_modules/lodash/_mapCacheHas.js | 16 + node_modules/lodash/_mapCacheSet.js | 22 + node_modules/lodash/_mapToArray.js | 18 + .../lodash/_matchesStrictComparable.js | 20 + node_modules/lodash/_memoizeCapped.js | 26 + node_modules/lodash/_mergeData.js | 90 + node_modules/lodash/_metaMap.js | 6 + node_modules/lodash/_nativeCreate.js | 6 + node_modules/lodash/_nativeKeys.js | 6 + node_modules/lodash/_nativeKeysIn.js | 20 + node_modules/lodash/_nodeUtil.js | 22 + node_modules/lodash/_objectToString.js | 22 + node_modules/lodash/_overArg.js | 15 + node_modules/lodash/_overRest.js | 36 + node_modules/lodash/_parent.js | 16 + node_modules/lodash/_reEscape.js | 4 + node_modules/lodash/_reEvaluate.js | 4 + node_modules/lodash/_reInterpolate.js | 4 + node_modules/lodash/_realNames.js | 4 + node_modules/lodash/_reorder.js | 29 + node_modules/lodash/_replaceHolders.js | 29 + node_modules/lodash/_root.js | 9 + node_modules/lodash/_setCacheAdd.js | 19 + node_modules/lodash/_setCacheHas.js | 14 + node_modules/lodash/_setData.js | 20 + node_modules/lodash/_setToArray.js | 18 + node_modules/lodash/_setToPairs.js | 18 + node_modules/lodash/_setToString.js | 14 + node_modules/lodash/_setWrapToString.js | 21 + node_modules/lodash/_shortOut.js | 37 + node_modules/lodash/_shuffleSelf.js | 28 + node_modules/lodash/_stackClear.js | 15 + node_modules/lodash/_stackDelete.js | 18 + node_modules/lodash/_stackGet.js | 14 + node_modules/lodash/_stackHas.js | 14 + node_modules/lodash/_stackSet.js | 34 + node_modules/lodash/_strictIndexOf.js | 23 + node_modules/lodash/_strictLastIndexOf.js | 21 + node_modules/lodash/_stringSize.js | 18 + node_modules/lodash/_stringToArray.js | 18 + node_modules/lodash/_stringToPath.js | 28 + node_modules/lodash/_toKey.js | 21 + node_modules/lodash/_toSource.js | 26 + node_modules/lodash/_unescapeHtmlChar.js | 21 + node_modules/lodash/_unicodeSize.js | 44 + node_modules/lodash/_unicodeToArray.js | 40 + node_modules/lodash/_unicodeWords.js | 69 + node_modules/lodash/_updateWrapDetails.js | 46 + node_modules/lodash/_wrapperClone.js | 23 + node_modules/lodash/add.js | 22 + node_modules/lodash/after.js | 42 + node_modules/lodash/array.js | 67 + node_modules/lodash/ary.js | 29 + node_modules/lodash/assign.js | 58 + node_modules/lodash/assignIn.js | 40 + node_modules/lodash/assignInWith.js | 38 + node_modules/lodash/assignWith.js | 37 + node_modules/lodash/at.js | 23 + node_modules/lodash/attempt.js | 35 + node_modules/lodash/before.js | 40 + node_modules/lodash/bind.js | 57 + node_modules/lodash/bindAll.js | 41 + node_modules/lodash/bindKey.js | 68 + node_modules/lodash/camelCase.js | 29 + node_modules/lodash/capitalize.js | 23 + node_modules/lodash/castArray.js | 44 + node_modules/lodash/ceil.js | 26 + node_modules/lodash/chain.js | 38 + node_modules/lodash/chunk.js | 50 + node_modules/lodash/clamp.js | 39 + node_modules/lodash/clone.js | 36 + node_modules/lodash/cloneDeep.js | 29 + node_modules/lodash/cloneDeepWith.js | 40 + node_modules/lodash/cloneWith.js | 42 + node_modules/lodash/collection.js | 30 + node_modules/lodash/commit.js | 33 + node_modules/lodash/compact.js | 31 + node_modules/lodash/concat.js | 43 + node_modules/lodash/cond.js | 60 + node_modules/lodash/conforms.js | 35 + node_modules/lodash/conformsTo.js | 32 + node_modules/lodash/constant.js | 26 + node_modules/lodash/core.js | 3836 ++++ node_modules/lodash/core.min.js | 29 + node_modules/lodash/countBy.js | 40 + node_modules/lodash/create.js | 43 + node_modules/lodash/curry.js | 57 + node_modules/lodash/curryRight.js | 54 + node_modules/lodash/date.js | 3 + node_modules/lodash/debounce.js | 188 + node_modules/lodash/deburr.js | 45 + node_modules/lodash/defaultTo.js | 25 + node_modules/lodash/defaults.js | 32 + node_modules/lodash/defaultsDeep.js | 30 + node_modules/lodash/defer.js | 26 + node_modules/lodash/delay.js | 28 + node_modules/lodash/difference.js | 33 + node_modules/lodash/differenceBy.js | 44 + node_modules/lodash/differenceWith.js | 40 + node_modules/lodash/divide.js | 22 + node_modules/lodash/drop.js | 38 + node_modules/lodash/dropRight.js | 39 + node_modules/lodash/dropRightWhile.js | 45 + node_modules/lodash/dropWhile.js | 45 + node_modules/lodash/each.js | 1 + node_modules/lodash/eachRight.js | 1 + node_modules/lodash/endsWith.js | 43 + node_modules/lodash/entries.js | 1 + node_modules/lodash/entriesIn.js | 1 + node_modules/lodash/eq.js | 37 + node_modules/lodash/escape.js | 43 + node_modules/lodash/escapeRegExp.js | 32 + node_modules/lodash/every.js | 56 + node_modules/lodash/extend.js | 1 + node_modules/lodash/extendWith.js | 1 + node_modules/lodash/fill.js | 45 + node_modules/lodash/filter.js | 48 + node_modules/lodash/find.js | 42 + node_modules/lodash/findIndex.js | 55 + node_modules/lodash/findKey.js | 44 + node_modules/lodash/findLast.js | 25 + node_modules/lodash/findLastIndex.js | 59 + node_modules/lodash/findLastKey.js | 44 + node_modules/lodash/first.js | 1 + node_modules/lodash/flatMap.js | 29 + node_modules/lodash/flatMapDeep.js | 31 + node_modules/lodash/flatMapDepth.js | 31 + node_modules/lodash/flatten.js | 22 + node_modules/lodash/flattenDeep.js | 25 + node_modules/lodash/flattenDepth.js | 33 + node_modules/lodash/flip.js | 28 + node_modules/lodash/floor.js | 26 + node_modules/lodash/flow.js | 27 + node_modules/lodash/flowRight.js | 26 + node_modules/lodash/forEach.js | 41 + node_modules/lodash/forEachRight.js | 31 + node_modules/lodash/forIn.js | 39 + node_modules/lodash/forInRight.js | 37 + node_modules/lodash/forOwn.js | 36 + node_modules/lodash/forOwnRight.js | 34 + node_modules/lodash/fp.js | 2 + node_modules/lodash/fp/F.js | 1 + node_modules/lodash/fp/T.js | 1 + node_modules/lodash/fp/__.js | 1 + node_modules/lodash/fp/_baseConvert.js | 568 + node_modules/lodash/fp/_convertBrowser.js | 18 + node_modules/lodash/fp/_falseOptions.js | 7 + node_modules/lodash/fp/_mapping.js | 368 + node_modules/lodash/fp/_util.js | 14 + node_modules/lodash/fp/add.js | 5 + node_modules/lodash/fp/after.js | 5 + node_modules/lodash/fp/all.js | 1 + node_modules/lodash/fp/allPass.js | 1 + node_modules/lodash/fp/always.js | 1 + node_modules/lodash/fp/any.js | 1 + node_modules/lodash/fp/anyPass.js | 1 + node_modules/lodash/fp/apply.js | 1 + node_modules/lodash/fp/array.js | 2 + node_modules/lodash/fp/ary.js | 5 + node_modules/lodash/fp/assign.js | 5 + node_modules/lodash/fp/assignAll.js | 5 + node_modules/lodash/fp/assignAllWith.js | 5 + node_modules/lodash/fp/assignIn.js | 5 + node_modules/lodash/fp/assignInAll.js | 5 + node_modules/lodash/fp/assignInAllWith.js | 5 + node_modules/lodash/fp/assignInWith.js | 5 + node_modules/lodash/fp/assignWith.js | 5 + node_modules/lodash/fp/assoc.js | 1 + node_modules/lodash/fp/assocPath.js | 1 + node_modules/lodash/fp/at.js | 5 + node_modules/lodash/fp/attempt.js | 5 + node_modules/lodash/fp/before.js | 5 + node_modules/lodash/fp/bind.js | 5 + node_modules/lodash/fp/bindAll.js | 5 + node_modules/lodash/fp/bindKey.js | 5 + node_modules/lodash/fp/camelCase.js | 5 + node_modules/lodash/fp/capitalize.js | 5 + node_modules/lodash/fp/castArray.js | 5 + node_modules/lodash/fp/ceil.js | 5 + node_modules/lodash/fp/chain.js | 5 + node_modules/lodash/fp/chunk.js | 5 + node_modules/lodash/fp/clamp.js | 5 + node_modules/lodash/fp/clone.js | 5 + node_modules/lodash/fp/cloneDeep.js | 5 + node_modules/lodash/fp/cloneDeepWith.js | 5 + node_modules/lodash/fp/cloneWith.js | 5 + node_modules/lodash/fp/collection.js | 2 + node_modules/lodash/fp/commit.js | 5 + node_modules/lodash/fp/compact.js | 5 + node_modules/lodash/fp/complement.js | 1 + node_modules/lodash/fp/compose.js | 1 + node_modules/lodash/fp/concat.js | 5 + node_modules/lodash/fp/cond.js | 5 + node_modules/lodash/fp/conforms.js | 1 + node_modules/lodash/fp/conformsTo.js | 5 + node_modules/lodash/fp/constant.js | 5 + node_modules/lodash/fp/contains.js | 1 + node_modules/lodash/fp/convert.js | 18 + node_modules/lodash/fp/countBy.js | 5 + node_modules/lodash/fp/create.js | 5 + node_modules/lodash/fp/curry.js | 5 + node_modules/lodash/fp/curryN.js | 5 + node_modules/lodash/fp/curryRight.js | 5 + node_modules/lodash/fp/curryRightN.js | 5 + node_modules/lodash/fp/date.js | 2 + node_modules/lodash/fp/debounce.js | 5 + node_modules/lodash/fp/deburr.js | 5 + node_modules/lodash/fp/defaultTo.js | 5 + node_modules/lodash/fp/defaults.js | 5 + node_modules/lodash/fp/defaultsAll.js | 5 + node_modules/lodash/fp/defaultsDeep.js | 5 + node_modules/lodash/fp/defaultsDeepAll.js | 5 + node_modules/lodash/fp/defer.js | 5 + node_modules/lodash/fp/delay.js | 5 + node_modules/lodash/fp/difference.js | 5 + node_modules/lodash/fp/differenceBy.js | 5 + node_modules/lodash/fp/differenceWith.js | 5 + node_modules/lodash/fp/dissoc.js | 1 + node_modules/lodash/fp/dissocPath.js | 1 + node_modules/lodash/fp/divide.js | 5 + node_modules/lodash/fp/drop.js | 5 + node_modules/lodash/fp/dropLast.js | 1 + node_modules/lodash/fp/dropLastWhile.js | 1 + node_modules/lodash/fp/dropRight.js | 5 + node_modules/lodash/fp/dropRightWhile.js | 5 + node_modules/lodash/fp/dropWhile.js | 5 + node_modules/lodash/fp/each.js | 1 + node_modules/lodash/fp/eachRight.js | 1 + node_modules/lodash/fp/endsWith.js | 5 + node_modules/lodash/fp/entries.js | 1 + node_modules/lodash/fp/entriesIn.js | 1 + node_modules/lodash/fp/eq.js | 5 + node_modules/lodash/fp/equals.js | 1 + node_modules/lodash/fp/escape.js | 5 + node_modules/lodash/fp/escapeRegExp.js | 5 + node_modules/lodash/fp/every.js | 5 + node_modules/lodash/fp/extend.js | 1 + node_modules/lodash/fp/extendAll.js | 1 + node_modules/lodash/fp/extendAllWith.js | 1 + node_modules/lodash/fp/extendWith.js | 1 + node_modules/lodash/fp/fill.js | 5 + node_modules/lodash/fp/filter.js | 5 + node_modules/lodash/fp/find.js | 5 + node_modules/lodash/fp/findFrom.js | 5 + node_modules/lodash/fp/findIndex.js | 5 + node_modules/lodash/fp/findIndexFrom.js | 5 + node_modules/lodash/fp/findKey.js | 5 + node_modules/lodash/fp/findLast.js | 5 + node_modules/lodash/fp/findLastFrom.js | 5 + node_modules/lodash/fp/findLastIndex.js | 5 + node_modules/lodash/fp/findLastIndexFrom.js | 5 + node_modules/lodash/fp/findLastKey.js | 5 + node_modules/lodash/fp/first.js | 1 + node_modules/lodash/fp/flatMap.js | 5 + node_modules/lodash/fp/flatMapDeep.js | 5 + node_modules/lodash/fp/flatMapDepth.js | 5 + node_modules/lodash/fp/flatten.js | 5 + node_modules/lodash/fp/flattenDeep.js | 5 + node_modules/lodash/fp/flattenDepth.js | 5 + node_modules/lodash/fp/flip.js | 5 + node_modules/lodash/fp/floor.js | 5 + node_modules/lodash/fp/flow.js | 5 + node_modules/lodash/fp/flowRight.js | 5 + node_modules/lodash/fp/forEach.js | 5 + node_modules/lodash/fp/forEachRight.js | 5 + node_modules/lodash/fp/forIn.js | 5 + node_modules/lodash/fp/forInRight.js | 5 + node_modules/lodash/fp/forOwn.js | 5 + node_modules/lodash/fp/forOwnRight.js | 5 + node_modules/lodash/fp/fromPairs.js | 5 + node_modules/lodash/fp/function.js | 2 + node_modules/lodash/fp/functions.js | 5 + node_modules/lodash/fp/functionsIn.js | 5 + node_modules/lodash/fp/get.js | 5 + node_modules/lodash/fp/getOr.js | 5 + node_modules/lodash/fp/groupBy.js | 5 + node_modules/lodash/fp/gt.js | 5 + node_modules/lodash/fp/gte.js | 5 + node_modules/lodash/fp/has.js | 5 + node_modules/lodash/fp/hasIn.js | 5 + node_modules/lodash/fp/head.js | 5 + node_modules/lodash/fp/identical.js | 1 + node_modules/lodash/fp/identity.js | 5 + node_modules/lodash/fp/inRange.js | 5 + node_modules/lodash/fp/includes.js | 5 + node_modules/lodash/fp/includesFrom.js | 5 + node_modules/lodash/fp/indexBy.js | 1 + node_modules/lodash/fp/indexOf.js | 5 + node_modules/lodash/fp/indexOfFrom.js | 5 + node_modules/lodash/fp/init.js | 1 + node_modules/lodash/fp/initial.js | 5 + node_modules/lodash/fp/intersection.js | 5 + node_modules/lodash/fp/intersectionBy.js | 5 + node_modules/lodash/fp/intersectionWith.js | 5 + node_modules/lodash/fp/invert.js | 5 + node_modules/lodash/fp/invertBy.js | 5 + node_modules/lodash/fp/invertObj.js | 1 + node_modules/lodash/fp/invoke.js | 5 + node_modules/lodash/fp/invokeArgs.js | 5 + node_modules/lodash/fp/invokeArgsMap.js | 5 + node_modules/lodash/fp/invokeMap.js | 5 + node_modules/lodash/fp/isArguments.js | 5 + node_modules/lodash/fp/isArray.js | 5 + node_modules/lodash/fp/isArrayBuffer.js | 5 + node_modules/lodash/fp/isArrayLike.js | 5 + node_modules/lodash/fp/isArrayLikeObject.js | 5 + node_modules/lodash/fp/isBoolean.js | 5 + node_modules/lodash/fp/isBuffer.js | 5 + node_modules/lodash/fp/isDate.js | 5 + node_modules/lodash/fp/isElement.js | 5 + node_modules/lodash/fp/isEmpty.js | 5 + node_modules/lodash/fp/isEqual.js | 5 + node_modules/lodash/fp/isEqualWith.js | 5 + node_modules/lodash/fp/isError.js | 5 + node_modules/lodash/fp/isFinite.js | 5 + node_modules/lodash/fp/isFunction.js | 5 + node_modules/lodash/fp/isInteger.js | 5 + node_modules/lodash/fp/isLength.js | 5 + node_modules/lodash/fp/isMap.js | 5 + node_modules/lodash/fp/isMatch.js | 5 + node_modules/lodash/fp/isMatchWith.js | 5 + node_modules/lodash/fp/isNaN.js | 5 + node_modules/lodash/fp/isNative.js | 5 + node_modules/lodash/fp/isNil.js | 5 + node_modules/lodash/fp/isNull.js | 5 + node_modules/lodash/fp/isNumber.js | 5 + node_modules/lodash/fp/isObject.js | 5 + node_modules/lodash/fp/isObjectLike.js | 5 + node_modules/lodash/fp/isPlainObject.js | 5 + node_modules/lodash/fp/isRegExp.js | 5 + node_modules/lodash/fp/isSafeInteger.js | 5 + node_modules/lodash/fp/isSet.js | 5 + node_modules/lodash/fp/isString.js | 5 + node_modules/lodash/fp/isSymbol.js | 5 + node_modules/lodash/fp/isTypedArray.js | 5 + node_modules/lodash/fp/isUndefined.js | 5 + node_modules/lodash/fp/isWeakMap.js | 5 + node_modules/lodash/fp/isWeakSet.js | 5 + node_modules/lodash/fp/iteratee.js | 5 + node_modules/lodash/fp/join.js | 5 + node_modules/lodash/fp/juxt.js | 1 + node_modules/lodash/fp/kebabCase.js | 5 + node_modules/lodash/fp/keyBy.js | 5 + node_modules/lodash/fp/keys.js | 5 + node_modules/lodash/fp/keysIn.js | 5 + node_modules/lodash/fp/lang.js | 2 + node_modules/lodash/fp/last.js | 5 + node_modules/lodash/fp/lastIndexOf.js | 5 + node_modules/lodash/fp/lastIndexOfFrom.js | 5 + node_modules/lodash/fp/lowerCase.js | 5 + node_modules/lodash/fp/lowerFirst.js | 5 + node_modules/lodash/fp/lt.js | 5 + node_modules/lodash/fp/lte.js | 5 + node_modules/lodash/fp/map.js | 5 + node_modules/lodash/fp/mapKeys.js | 5 + node_modules/lodash/fp/mapValues.js | 5 + node_modules/lodash/fp/matches.js | 1 + node_modules/lodash/fp/matchesProperty.js | 5 + node_modules/lodash/fp/math.js | 2 + node_modules/lodash/fp/max.js | 5 + node_modules/lodash/fp/maxBy.js | 5 + node_modules/lodash/fp/mean.js | 5 + node_modules/lodash/fp/meanBy.js | 5 + node_modules/lodash/fp/memoize.js | 5 + node_modules/lodash/fp/merge.js | 5 + node_modules/lodash/fp/mergeAll.js | 5 + node_modules/lodash/fp/mergeAllWith.js | 5 + node_modules/lodash/fp/mergeWith.js | 5 + node_modules/lodash/fp/method.js | 5 + node_modules/lodash/fp/methodOf.js | 5 + node_modules/lodash/fp/min.js | 5 + node_modules/lodash/fp/minBy.js | 5 + node_modules/lodash/fp/mixin.js | 5 + node_modules/lodash/fp/multiply.js | 5 + node_modules/lodash/fp/nAry.js | 1 + node_modules/lodash/fp/negate.js | 5 + node_modules/lodash/fp/next.js | 5 + node_modules/lodash/fp/noop.js | 5 + node_modules/lodash/fp/now.js | 5 + node_modules/lodash/fp/nth.js | 5 + node_modules/lodash/fp/nthArg.js | 5 + node_modules/lodash/fp/number.js | 2 + node_modules/lodash/fp/object.js | 2 + node_modules/lodash/fp/omit.js | 5 + node_modules/lodash/fp/omitAll.js | 1 + node_modules/lodash/fp/omitBy.js | 5 + node_modules/lodash/fp/once.js | 5 + node_modules/lodash/fp/orderBy.js | 5 + node_modules/lodash/fp/over.js | 5 + node_modules/lodash/fp/overArgs.js | 5 + node_modules/lodash/fp/overEvery.js | 5 + node_modules/lodash/fp/overSome.js | 5 + node_modules/lodash/fp/pad.js | 5 + node_modules/lodash/fp/padChars.js | 5 + node_modules/lodash/fp/padCharsEnd.js | 5 + node_modules/lodash/fp/padCharsStart.js | 5 + node_modules/lodash/fp/padEnd.js | 5 + node_modules/lodash/fp/padStart.js | 5 + node_modules/lodash/fp/parseInt.js | 5 + node_modules/lodash/fp/partial.js | 5 + node_modules/lodash/fp/partialRight.js | 5 + node_modules/lodash/fp/partition.js | 5 + node_modules/lodash/fp/path.js | 1 + node_modules/lodash/fp/pathEq.js | 1 + node_modules/lodash/fp/pathOr.js | 1 + node_modules/lodash/fp/paths.js | 1 + node_modules/lodash/fp/pick.js | 5 + node_modules/lodash/fp/pickAll.js | 1 + node_modules/lodash/fp/pickBy.js | 5 + node_modules/lodash/fp/pipe.js | 1 + node_modules/lodash/fp/placeholder.js | 6 + node_modules/lodash/fp/plant.js | 5 + node_modules/lodash/fp/pluck.js | 1 + node_modules/lodash/fp/prop.js | 1 + node_modules/lodash/fp/propEq.js | 1 + node_modules/lodash/fp/propOr.js | 1 + node_modules/lodash/fp/property.js | 1 + node_modules/lodash/fp/propertyOf.js | 5 + node_modules/lodash/fp/props.js | 1 + node_modules/lodash/fp/pull.js | 5 + node_modules/lodash/fp/pullAll.js | 5 + node_modules/lodash/fp/pullAllBy.js | 5 + node_modules/lodash/fp/pullAllWith.js | 5 + node_modules/lodash/fp/pullAt.js | 5 + node_modules/lodash/fp/random.js | 5 + node_modules/lodash/fp/range.js | 5 + node_modules/lodash/fp/rangeRight.js | 5 + node_modules/lodash/fp/rangeStep.js | 5 + node_modules/lodash/fp/rangeStepRight.js | 5 + node_modules/lodash/fp/rearg.js | 5 + node_modules/lodash/fp/reduce.js | 5 + node_modules/lodash/fp/reduceRight.js | 5 + node_modules/lodash/fp/reject.js | 5 + node_modules/lodash/fp/remove.js | 5 + node_modules/lodash/fp/repeat.js | 5 + node_modules/lodash/fp/replace.js | 5 + node_modules/lodash/fp/rest.js | 5 + node_modules/lodash/fp/restFrom.js | 5 + node_modules/lodash/fp/result.js | 5 + node_modules/lodash/fp/reverse.js | 5 + node_modules/lodash/fp/round.js | 5 + node_modules/lodash/fp/sample.js | 5 + node_modules/lodash/fp/sampleSize.js | 5 + node_modules/lodash/fp/seq.js | 2 + node_modules/lodash/fp/set.js | 5 + node_modules/lodash/fp/setWith.js | 5 + node_modules/lodash/fp/shuffle.js | 5 + node_modules/lodash/fp/size.js | 5 + node_modules/lodash/fp/slice.js | 5 + node_modules/lodash/fp/snakeCase.js | 5 + node_modules/lodash/fp/some.js | 5 + node_modules/lodash/fp/sortBy.js | 5 + node_modules/lodash/fp/sortedIndex.js | 5 + node_modules/lodash/fp/sortedIndexBy.js | 5 + node_modules/lodash/fp/sortedIndexOf.js | 5 + node_modules/lodash/fp/sortedLastIndex.js | 5 + node_modules/lodash/fp/sortedLastIndexBy.js | 5 + node_modules/lodash/fp/sortedLastIndexOf.js | 5 + node_modules/lodash/fp/sortedUniq.js | 5 + node_modules/lodash/fp/sortedUniqBy.js | 5 + node_modules/lodash/fp/split.js | 5 + node_modules/lodash/fp/spread.js | 5 + node_modules/lodash/fp/spreadFrom.js | 5 + node_modules/lodash/fp/startCase.js | 5 + node_modules/lodash/fp/startsWith.js | 5 + node_modules/lodash/fp/string.js | 2 + node_modules/lodash/fp/stubArray.js | 5 + node_modules/lodash/fp/stubFalse.js | 5 + node_modules/lodash/fp/stubObject.js | 5 + node_modules/lodash/fp/stubString.js | 5 + node_modules/lodash/fp/stubTrue.js | 5 + node_modules/lodash/fp/subtract.js | 5 + node_modules/lodash/fp/sum.js | 5 + node_modules/lodash/fp/sumBy.js | 5 + node_modules/lodash/fp/symmetricDifference.js | 1 + .../lodash/fp/symmetricDifferenceBy.js | 1 + .../lodash/fp/symmetricDifferenceWith.js | 1 + node_modules/lodash/fp/tail.js | 5 + node_modules/lodash/fp/take.js | 5 + node_modules/lodash/fp/takeLast.js | 1 + node_modules/lodash/fp/takeLastWhile.js | 1 + node_modules/lodash/fp/takeRight.js | 5 + node_modules/lodash/fp/takeRightWhile.js | 5 + node_modules/lodash/fp/takeWhile.js | 5 + node_modules/lodash/fp/tap.js | 5 + node_modules/lodash/fp/template.js | 5 + node_modules/lodash/fp/templateSettings.js | 5 + node_modules/lodash/fp/throttle.js | 5 + node_modules/lodash/fp/thru.js | 5 + node_modules/lodash/fp/times.js | 5 + node_modules/lodash/fp/toArray.js | 5 + node_modules/lodash/fp/toFinite.js | 5 + node_modules/lodash/fp/toInteger.js | 5 + node_modules/lodash/fp/toIterator.js | 5 + node_modules/lodash/fp/toJSON.js | 5 + node_modules/lodash/fp/toLength.js | 5 + node_modules/lodash/fp/toLower.js | 5 + node_modules/lodash/fp/toNumber.js | 5 + node_modules/lodash/fp/toPairs.js | 5 + node_modules/lodash/fp/toPairsIn.js | 5 + node_modules/lodash/fp/toPath.js | 5 + node_modules/lodash/fp/toPlainObject.js | 5 + node_modules/lodash/fp/toSafeInteger.js | 5 + node_modules/lodash/fp/toString.js | 5 + node_modules/lodash/fp/toUpper.js | 5 + node_modules/lodash/fp/transform.js | 5 + node_modules/lodash/fp/trim.js | 5 + node_modules/lodash/fp/trimChars.js | 5 + node_modules/lodash/fp/trimCharsEnd.js | 5 + node_modules/lodash/fp/trimCharsStart.js | 5 + node_modules/lodash/fp/trimEnd.js | 5 + node_modules/lodash/fp/trimStart.js | 5 + node_modules/lodash/fp/truncate.js | 5 + node_modules/lodash/fp/unapply.js | 1 + node_modules/lodash/fp/unary.js | 5 + node_modules/lodash/fp/unescape.js | 5 + node_modules/lodash/fp/union.js | 5 + node_modules/lodash/fp/unionBy.js | 5 + node_modules/lodash/fp/unionWith.js | 5 + node_modules/lodash/fp/uniq.js | 5 + node_modules/lodash/fp/uniqBy.js | 5 + node_modules/lodash/fp/uniqWith.js | 5 + node_modules/lodash/fp/uniqueId.js | 5 + node_modules/lodash/fp/unnest.js | 1 + node_modules/lodash/fp/unset.js | 5 + node_modules/lodash/fp/unzip.js | 5 + node_modules/lodash/fp/unzipWith.js | 5 + node_modules/lodash/fp/update.js | 5 + node_modules/lodash/fp/updateWith.js | 5 + node_modules/lodash/fp/upperCase.js | 5 + node_modules/lodash/fp/upperFirst.js | 5 + node_modules/lodash/fp/useWith.js | 1 + node_modules/lodash/fp/util.js | 2 + node_modules/lodash/fp/value.js | 5 + node_modules/lodash/fp/valueOf.js | 5 + node_modules/lodash/fp/values.js | 5 + node_modules/lodash/fp/valuesIn.js | 5 + node_modules/lodash/fp/where.js | 1 + node_modules/lodash/fp/whereEq.js | 1 + node_modules/lodash/fp/without.js | 5 + node_modules/lodash/fp/words.js | 5 + node_modules/lodash/fp/wrap.js | 5 + node_modules/lodash/fp/wrapperAt.js | 5 + node_modules/lodash/fp/wrapperChain.js | 5 + node_modules/lodash/fp/wrapperLodash.js | 5 + node_modules/lodash/fp/wrapperReverse.js | 5 + node_modules/lodash/fp/wrapperValue.js | 5 + node_modules/lodash/fp/xor.js | 5 + node_modules/lodash/fp/xorBy.js | 5 + node_modules/lodash/fp/xorWith.js | 5 + node_modules/lodash/fp/zip.js | 5 + node_modules/lodash/fp/zipAll.js | 5 + node_modules/lodash/fp/zipObj.js | 1 + node_modules/lodash/fp/zipObject.js | 5 + node_modules/lodash/fp/zipObjectDeep.js | 5 + node_modules/lodash/fp/zipWith.js | 5 + node_modules/lodash/fromPairs.js | 28 + node_modules/lodash/function.js | 25 + node_modules/lodash/functions.js | 31 + node_modules/lodash/functionsIn.js | 31 + node_modules/lodash/get.js | 33 + node_modules/lodash/groupBy.js | 41 + node_modules/lodash/gt.js | 29 + node_modules/lodash/gte.js | 30 + node_modules/lodash/has.js | 35 + node_modules/lodash/hasIn.js | 34 + node_modules/lodash/head.js | 23 + node_modules/lodash/identity.js | 21 + node_modules/lodash/inRange.js | 55 + node_modules/lodash/includes.js | 53 + node_modules/lodash/index.js | 1 + node_modules/lodash/indexOf.js | 42 + node_modules/lodash/initial.js | 22 + node_modules/lodash/intersection.js | 30 + node_modules/lodash/intersectionBy.js | 45 + node_modules/lodash/intersectionWith.js | 41 + node_modules/lodash/invert.js | 27 + node_modules/lodash/invertBy.js | 44 + node_modules/lodash/invoke.js | 24 + node_modules/lodash/invokeMap.js | 41 + node_modules/lodash/isArguments.js | 36 + node_modules/lodash/isArray.js | 26 + node_modules/lodash/isArrayBuffer.js | 27 + node_modules/lodash/isArrayLike.js | 33 + node_modules/lodash/isArrayLikeObject.js | 33 + node_modules/lodash/isBoolean.js | 29 + node_modules/lodash/isBuffer.js | 38 + node_modules/lodash/isDate.js | 27 + node_modules/lodash/isElement.js | 25 + node_modules/lodash/isEmpty.js | 77 + node_modules/lodash/isEqual.js | 35 + node_modules/lodash/isEqualWith.js | 41 + node_modules/lodash/isError.js | 36 + node_modules/lodash/isFinite.js | 36 + node_modules/lodash/isFunction.js | 37 + node_modules/lodash/isInteger.js | 33 + node_modules/lodash/isLength.js | 35 + node_modules/lodash/isMap.js | 27 + node_modules/lodash/isMatch.js | 36 + node_modules/lodash/isMatchWith.js | 41 + node_modules/lodash/isNaN.js | 38 + node_modules/lodash/isNative.js | 40 + node_modules/lodash/isNil.js | 25 + node_modules/lodash/isNull.js | 22 + node_modules/lodash/isNumber.js | 38 + node_modules/lodash/isObject.js | 31 + node_modules/lodash/isObjectLike.js | 29 + node_modules/lodash/isPlainObject.js | 62 + node_modules/lodash/isRegExp.js | 27 + node_modules/lodash/isSafeInteger.js | 37 + node_modules/lodash/isSet.js | 27 + node_modules/lodash/isString.js | 30 + node_modules/lodash/isSymbol.js | 29 + node_modules/lodash/isTypedArray.js | 27 + node_modules/lodash/isUndefined.js | 22 + node_modules/lodash/isWeakMap.js | 28 + node_modules/lodash/isWeakSet.js | 28 + node_modules/lodash/iteratee.js | 53 + node_modules/lodash/join.js | 26 + node_modules/lodash/kebabCase.js | 28 + node_modules/lodash/keyBy.js | 36 + node_modules/lodash/keys.js | 37 + node_modules/lodash/keysIn.js | 32 + node_modules/lodash/lang.js | 58 + node_modules/lodash/last.js | 20 + node_modules/lodash/lastIndexOf.js | 46 + node_modules/lodash/lodash.js | 17084 ++++++++++++++++ node_modules/lodash/lodash.min.js | 136 + node_modules/lodash/lowerCase.js | 27 + node_modules/lodash/lowerFirst.js | 22 + node_modules/lodash/lt.js | 29 + node_modules/lodash/lte.js | 30 + node_modules/lodash/map.js | 53 + node_modules/lodash/mapKeys.js | 36 + node_modules/lodash/mapValues.js | 43 + node_modules/lodash/matches.js | 39 + node_modules/lodash/matchesProperty.js | 37 + node_modules/lodash/math.js | 17 + node_modules/lodash/max.js | 29 + node_modules/lodash/maxBy.js | 34 + node_modules/lodash/mean.js | 22 + node_modules/lodash/meanBy.js | 31 + node_modules/lodash/memoize.js | 73 + node_modules/lodash/merge.js | 39 + node_modules/lodash/mergeWith.js | 39 + node_modules/lodash/method.js | 34 + node_modules/lodash/methodOf.js | 33 + node_modules/lodash/min.js | 29 + node_modules/lodash/minBy.js | 34 + node_modules/lodash/mixin.js | 74 + node_modules/lodash/multiply.js | 22 + node_modules/lodash/negate.js | 40 + node_modules/lodash/next.js | 35 + node_modules/lodash/noop.js | 17 + node_modules/lodash/now.js | 23 + node_modules/lodash/nth.js | 29 + node_modules/lodash/nthArg.js | 32 + node_modules/lodash/number.js | 5 + node_modules/lodash/object.js | 49 + node_modules/lodash/omit.js | 57 + node_modules/lodash/omitBy.js | 29 + node_modules/lodash/once.js | 25 + node_modules/lodash/orderBy.js | 47 + node_modules/lodash/over.js | 24 + node_modules/lodash/overArgs.js | 61 + node_modules/lodash/overEvery.js | 30 + node_modules/lodash/overSome.js | 30 + node_modules/lodash/package.json | 106 + node_modules/lodash/pad.js | 49 + node_modules/lodash/padEnd.js | 39 + node_modules/lodash/padStart.js | 39 + node_modules/lodash/parseInt.js | 43 + node_modules/lodash/partial.js | 50 + node_modules/lodash/partialRight.js | 49 + node_modules/lodash/partition.js | 43 + node_modules/lodash/pick.js | 25 + node_modules/lodash/pickBy.js | 37 + node_modules/lodash/plant.js | 48 + node_modules/lodash/property.js | 32 + node_modules/lodash/propertyOf.js | 30 + node_modules/lodash/pull.js | 29 + node_modules/lodash/pullAll.js | 29 + node_modules/lodash/pullAllBy.js | 33 + node_modules/lodash/pullAllWith.js | 32 + node_modules/lodash/pullAt.js | 43 + node_modules/lodash/random.js | 82 + node_modules/lodash/range.js | 46 + node_modules/lodash/rangeRight.js | 41 + node_modules/lodash/rearg.js | 33 + node_modules/lodash/reduce.js | 51 + node_modules/lodash/reduceRight.js | 36 + node_modules/lodash/reject.js | 46 + node_modules/lodash/remove.js | 53 + node_modules/lodash/repeat.js | 37 + node_modules/lodash/replace.js | 29 + node_modules/lodash/rest.js | 40 + node_modules/lodash/result.js | 56 + node_modules/lodash/reverse.js | 34 + node_modules/lodash/round.js | 26 + node_modules/lodash/sample.js | 24 + node_modules/lodash/sampleSize.js | 37 + node_modules/lodash/seq.js | 16 + node_modules/lodash/set.js | 35 + node_modules/lodash/setWith.js | 32 + node_modules/lodash/shuffle.js | 25 + node_modules/lodash/size.js | 46 + node_modules/lodash/slice.js | 37 + node_modules/lodash/snakeCase.js | 28 + node_modules/lodash/some.js | 51 + node_modules/lodash/sortBy.js | 48 + node_modules/lodash/sortedIndex.js | 24 + node_modules/lodash/sortedIndexBy.js | 33 + node_modules/lodash/sortedIndexOf.js | 31 + node_modules/lodash/sortedLastIndex.js | 25 + node_modules/lodash/sortedLastIndexBy.js | 33 + node_modules/lodash/sortedLastIndexOf.js | 31 + node_modules/lodash/sortedUniq.js | 24 + node_modules/lodash/sortedUniqBy.js | 26 + node_modules/lodash/split.js | 52 + node_modules/lodash/spread.js | 63 + node_modules/lodash/startCase.js | 29 + node_modules/lodash/startsWith.js | 39 + node_modules/lodash/string.js | 33 + node_modules/lodash/stubArray.js | 23 + node_modules/lodash/stubFalse.js | 18 + node_modules/lodash/stubObject.js | 23 + node_modules/lodash/stubString.js | 18 + node_modules/lodash/stubTrue.js | 18 + node_modules/lodash/subtract.js | 22 + node_modules/lodash/sum.js | 24 + node_modules/lodash/sumBy.js | 33 + node_modules/lodash/tail.js | 22 + node_modules/lodash/take.js | 37 + node_modules/lodash/takeRight.js | 39 + node_modules/lodash/takeRightWhile.js | 45 + node_modules/lodash/takeWhile.js | 45 + node_modules/lodash/tap.js | 29 + node_modules/lodash/template.js | 238 + node_modules/lodash/templateSettings.js | 67 + node_modules/lodash/throttle.js | 69 + node_modules/lodash/thru.js | 28 + node_modules/lodash/times.js | 51 + node_modules/lodash/toArray.js | 58 + node_modules/lodash/toFinite.js | 42 + node_modules/lodash/toInteger.js | 36 + node_modules/lodash/toIterator.js | 23 + node_modules/lodash/toJSON.js | 1 + node_modules/lodash/toLength.js | 38 + node_modules/lodash/toLower.js | 28 + node_modules/lodash/toNumber.js | 66 + node_modules/lodash/toPairs.js | 30 + node_modules/lodash/toPairsIn.js | 30 + node_modules/lodash/toPath.js | 33 + node_modules/lodash/toPlainObject.js | 32 + node_modules/lodash/toSafeInteger.js | 37 + node_modules/lodash/toString.js | 28 + node_modules/lodash/toUpper.js | 28 + node_modules/lodash/transform.js | 65 + node_modules/lodash/trim.js | 49 + node_modules/lodash/trimEnd.js | 43 + node_modules/lodash/trimStart.js | 43 + node_modules/lodash/truncate.js | 111 + node_modules/lodash/unary.js | 22 + node_modules/lodash/unescape.js | 34 + node_modules/lodash/union.js | 26 + node_modules/lodash/unionBy.js | 39 + node_modules/lodash/unionWith.js | 34 + node_modules/lodash/uniq.js | 25 + node_modules/lodash/uniqBy.js | 31 + node_modules/lodash/uniqWith.js | 28 + node_modules/lodash/uniqueId.js | 28 + node_modules/lodash/unset.js | 34 + node_modules/lodash/unzip.js | 45 + node_modules/lodash/unzipWith.js | 39 + node_modules/lodash/update.js | 35 + node_modules/lodash/updateWith.js | 33 + node_modules/lodash/upperCase.js | 27 + node_modules/lodash/upperFirst.js | 22 + node_modules/lodash/util.js | 34 + node_modules/lodash/value.js | 1 + node_modules/lodash/valueOf.js | 1 + node_modules/lodash/values.js | 34 + node_modules/lodash/valuesIn.js | 32 + node_modules/lodash/without.js | 31 + node_modules/lodash/words.js | 35 + node_modules/lodash/wrap.js | 30 + node_modules/lodash/wrapperAt.js | 48 + node_modules/lodash/wrapperChain.js | 34 + node_modules/lodash/wrapperLodash.js | 147 + node_modules/lodash/wrapperReverse.js | 44 + node_modules/lodash/wrapperValue.js | 21 + node_modules/lodash/xor.js | 28 + node_modules/lodash/xorBy.js | 39 + node_modules/lodash/xorWith.js | 34 + node_modules/lodash/zip.js | 22 + node_modules/lodash/zipObject.js | 24 + node_modules/lodash/zipObjectDeep.js | 23 + node_modules/lodash/zipWith.js | 32 + node_modules/media-typer/HISTORY.md | 22 + node_modules/media-typer/LICENSE | 22 + node_modules/media-typer/README.md | 81 + node_modules/media-typer/index.js | 270 + node_modules/media-typer/package.json | 92 + node_modules/merge-descriptors/.npmignore | 59 + node_modules/merge-descriptors/README.md | 49 + node_modules/merge-descriptors/component.json | 10 + node_modules/merge-descriptors/index.js | 8 + node_modules/merge-descriptors/package.json | 78 + node_modules/methods/.npmignore | 1 + node_modules/methods/History.md | 20 + node_modules/methods/LICENSE | 23 + node_modules/methods/Readme.md | 4 + node_modules/methods/index.js | 41 + node_modules/methods/package.json | 92 + node_modules/methods/test/methods.js | 33 + node_modules/mime-db/HISTORY.md | 412 + node_modules/mime-db/LICENSE | 22 + node_modules/mime-db/README.md | 82 + node_modules/mime-db/db.json | 6805 ++++++ node_modules/mime-db/index.js | 11 + node_modules/mime-db/package.json | 138 + node_modules/mime-types/HISTORY.md | 223 + node_modules/mime-types/LICENSE | 23 + node_modules/mime-types/README.md | 108 + node_modules/mime-types/index.js | 188 + node_modules/mime-types/package.json | 128 + node_modules/mime/LICENSE | 19 + node_modules/mime/README.md | 66 + node_modules/mime/mime.js | 114 + node_modules/mime/package.json | 90 + node_modules/mime/test.js | 84 + node_modules/mime/types/mime.types | 1588 ++ node_modules/mime/types/node.types | 77 + node_modules/minimatch/LICENSE | 15 + node_modules/minimatch/README.md | 209 + node_modules/minimatch/minimatch.js | 923 + node_modules/minimatch/package.json | 99 + node_modules/mongodb-core/.coveralls.yml | 1 + node_modules/mongodb-core/.eslintrc | 15 + node_modules/mongodb-core/HISTORY.md | 663 + node_modules/mongodb-core/LICENSE | 201 + node_modules/mongodb-core/Makefile | 11 + node_modules/mongodb-core/README.md | 228 + node_modules/mongodb-core/TESTING.md | 18 + node_modules/mongodb-core/THIRD-PARTY-NOTICES | 41 + node_modules/mongodb-core/blocking_test.js | 0 node_modules/mongodb-core/conf.json | 59 + node_modules/mongodb-core/connect_test.js | 72 + node_modules/mongodb-core/index.js | 32 + node_modules/mongodb-core/lib/auth/gssapi.js | 262 + node_modules/mongodb-core/lib/auth/mongocr.js | 181 + node_modules/mongodb-core/lib/auth/plain.js | 170 + node_modules/mongodb-core/lib/auth/scram.js | 343 + node_modules/mongodb-core/lib/auth/sspi.js | 250 + node_modules/mongodb-core/lib/auth/x509.js | 164 + .../lib/connection/command_result.js | 34 + .../mongodb-core/lib/connection/commands.js | 546 + .../mongodb-core/lib/connection/connection.js | 611 + .../mongodb-core/lib/connection/logger.js | 228 + .../mongodb-core/lib/connection/pool.js | 1373 ++ .../mongodb-core/lib/connection/utils.js | 86 + node_modules/mongodb-core/lib/cursor.js | 695 + node_modules/mongodb-core/lib/error.js | 44 + .../mongodb-core/lib/tools/smoke_plugin.js | 59 + .../mongodb-core/lib/topologies/mongos.js | 1307 ++ .../lib/topologies/read_preference.js | 118 + .../mongodb-core/lib/topologies/replset.js | 1454 ++ .../lib/topologies/replset_state.js | 983 + .../mongodb-core/lib/topologies/server.js | 868 + .../mongodb-core/lib/topologies/shared.js | 354 + .../lib/wireprotocol/2_4_support.js | 570 + .../lib/wireprotocol/2_6_support.js | 334 + .../lib/wireprotocol/3_2_support.js | 549 + .../mongodb-core/lib/wireprotocol/commands.js | 357 + .../mongodb-core/lib/wireprotocol/shared.js | 27 + node_modules/mongodb-core/package.json | 110 + .../simple_2_document_limit_toArray.dat | 11000 ++++++++++ node_modules/mongodb-core/t.js | 34 + node_modules/mongodb-core/test.js | 71 + node_modules/mongodb-core/test1.js | 72 + node_modules/mongodb-core/test34.js | 35 + node_modules/mongodb-core/test_bug.js | 22 + node_modules/mongodb-core/yarn.lock | 2485 +++ node_modules/mongodb/.coveralls.yml | 1 + node_modules/mongodb/.eslintrc | 15 + node_modules/mongodb/HISTORY.md | 1711 ++ node_modules/mongodb/LICENSE | 201 + node_modules/mongodb/Makefile | 11 + node_modules/mongodb/README.md | 415 + node_modules/mongodb/THIRD-PARTY-NOTICES | 41 + node_modules/mongodb/boot_auth.js | 52 + node_modules/mongodb/conf.json | 76 + node_modules/mongodb/index.js | 56 + node_modules/mongodb/insert_bench.js | 231 + node_modules/mongodb/lib/admin.js | 579 + .../mongodb/lib/aggregation_cursor.js | 438 + node_modules/mongodb/lib/apm.js | 596 + node_modules/mongodb/lib/authenticate.js | 109 + node_modules/mongodb/lib/bulk/common.js | 439 + node_modules/mongodb/lib/bulk/ordered.js | 532 + node_modules/mongodb/lib/bulk/unordered.js | 534 + node_modules/mongodb/lib/collection.js | 3371 +++ node_modules/mongodb/lib/command_cursor.js | 320 + node_modules/mongodb/lib/cursor.js | 1202 ++ node_modules/mongodb/lib/db.js | 1802 ++ .../mongodb/lib/gridfs-stream/download.js | 398 + .../mongodb/lib/gridfs-stream/index.js | 367 + .../mongodb/lib/gridfs-stream/upload.js | 527 + node_modules/mongodb/lib/gridfs/chunk.js | 230 + node_modules/mongodb/lib/gridfs/grid_store.js | 1951 ++ node_modules/mongodb/lib/metadata.js | 64 + node_modules/mongodb/lib/mongo_client.js | 518 + node_modules/mongodb/lib/mongos.js | 533 + node_modules/mongodb/lib/read_preference.js | 131 + node_modules/mongodb/lib/replset.js | 582 + node_modules/mongodb/lib/server.js | 518 + node_modules/mongodb/lib/topology_base.js | 191 + node_modules/mongodb/lib/url_parser.js | 405 + node_modules/mongodb/lib/utils.js | 375 + node_modules/mongodb/package.json | 125 + node_modules/mongodb/t.js | 28 + node_modules/mongodb/t1.js | 59 + node_modules/mongodb/t2.js | 14 + node_modules/mongodb/yarn.lock | 3180 +++ node_modules/mongoskin/.jshintrc | 43 + node_modules/mongoskin/.npmignore | 6 + node_modules/mongoskin/.travis.yml | 7 + node_modules/mongoskin/AUTHORS | 16 + node_modules/mongoskin/History.md | 92 + node_modules/mongoskin/LICENSE | 22 + node_modules/mongoskin/Makefile | 25 + node_modules/mongoskin/Readme.md | 260 + node_modules/mongoskin/coverage/coverage.json | 1 + .../mongoskin/coverage/lcov-report/base.css | 182 + .../mongoskin/coverage/lcov-report/index.html | 86 + .../lcov-report/node-mongoskin/index.html | 73 + .../lcov-report/node-mongoskin/index.js.html | 48 + .../node-mongoskin/lib/admin.js.html | 84 + .../node-mongoskin/lib/collection.js.html | 663 + .../node-mongoskin/lib/constant.js.html | 87 + .../node-mongoskin/lib/cursor.js.html | 144 + .../lcov-report/node-mongoskin/lib/db.js.html | 282 + .../node-mongoskin/lib/grid_store.js.html | 147 + .../node-mongoskin/lib/helper.js.html | 111 + .../lcov-report/node-mongoskin/lib/index.html | 190 + .../node-mongoskin/lib/index.js.html | 153 + .../node-mongoskin/lib/mongo_client.js.html | 90 + .../node-mongoskin/lib/utils.js.html | 555 + .../coverage/lcov-report/prettify.css | 1 + .../coverage/lcov-report/prettify.js | 1 + .../lcov-report/sort-arrow-sprite.png | Bin 0 -> 209 bytes .../mongoskin/coverage/lcov-report/sorter.js | 156 + node_modules/mongoskin/coverage/lcov.info | 541 + node_modules/mongoskin/examples/admin.js | 9 + node_modules/mongoskin/examples/close.js | 15 + node_modules/mongoskin/examples/config.js | 3 + node_modules/mongoskin/examples/generateId.js | 31 + node_modules/mongoskin/examples/gridfs.js | 11 + node_modules/mongoskin/examples/insert.js | 8 + .../mongoskin/examples/replSetBenchmark.js | 45 + node_modules/mongoskin/examples/replset.js | 17 + node_modules/mongoskin/examples/update.js | 19 + node_modules/mongoskin/index.js | 1 + node_modules/mongoskin/lib/admin.js | 22 + node_modules/mongoskin/lib/collection.js | 206 + node_modules/mongoskin/lib/constant.js | 15 + node_modules/mongoskin/lib/cursor.js | 33 + node_modules/mongoskin/lib/db.js | 80 + node_modules/mongoskin/lib/grid_store.js | 34 + node_modules/mongoskin/lib/helper.js | 22 + node_modules/mongoskin/lib/index.js | 36 + node_modules/mongoskin/lib/mongo_client.js | 15 + node_modules/mongoskin/lib/utils.js | 170 + node_modules/mongoskin/package.json | 177 + node_modules/ms/index.js | 152 + node_modules/ms/license.md | 21 + node_modules/ms/package.json | 110 + node_modules/ms/readme.md | 51 + node_modules/nan/CHANGELOG.md | 453 + node_modules/nan/LICENSE.md | 13 + node_modules/nan/README.md | 424 + node_modules/nan/doc/asyncworker.md | 103 + node_modules/nan/doc/buffers.md | 54 + node_modules/nan/doc/callback.md | 56 + node_modules/nan/doc/converters.md | 41 + node_modules/nan/doc/errors.md | 226 + node_modules/nan/doc/json.md | 62 + node_modules/nan/doc/maybe_types.md | 560 + node_modules/nan/doc/methods.md | 659 + node_modules/nan/doc/new.md | 147 + node_modules/nan/doc/node_misc.md | 63 + node_modules/nan/doc/object_wrappers.md | 263 + node_modules/nan/doc/persistent.md | 295 + node_modules/nan/doc/scopes.md | 73 + node_modules/nan/doc/script.md | 38 + node_modules/nan/doc/string_bytes.md | 62 + node_modules/nan/doc/v8_internals.md | 199 + node_modules/nan/doc/v8_misc.md | 85 + node_modules/nan/include_dirs.js | 1 + node_modules/nan/nan.h | 2321 +++ node_modules/nan/nan_callbacks.h | 88 + node_modules/nan/nan_callbacks_12_inl.h | 512 + node_modules/nan/nan_callbacks_pre_12_inl.h | 520 + node_modules/nan/nan_converters.h | 64 + node_modules/nan/nan_converters_43_inl.h | 48 + node_modules/nan/nan_converters_pre_43_inl.h | 42 + node_modules/nan/nan_implementation_12_inl.h | 399 + .../nan/nan_implementation_pre_12_inl.h | 263 + node_modules/nan/nan_json.h | 159 + node_modules/nan/nan_maybe_43_inl.h | 337 + node_modules/nan/nan_maybe_pre_43_inl.h | 305 + node_modules/nan/nan_new.h | 340 + node_modules/nan/nan_object_wrap.h | 155 + node_modules/nan/nan_persistent_12_inl.h | 132 + node_modules/nan/nan_persistent_pre_12_inl.h | 242 + node_modules/nan/nan_private.h | 73 + node_modules/nan/nan_string_bytes.h | 305 + node_modules/nan/nan_typedarray_contents.h | 90 + node_modules/nan/nan_weak.h | 432 + node_modules/nan/package.json | 136 + node_modules/nan/tools/1to2.js | 412 + node_modules/nan/tools/README.md | 14 + node_modules/nan/tools/package.json | 19 + node_modules/negotiator/LICENSE | 23 + node_modules/negotiator/README.md | 161 + node_modules/negotiator/lib/charset.js | 87 + node_modules/negotiator/lib/encoding.js | 117 + node_modules/negotiator/lib/language.js | 100 + node_modules/negotiator/lib/mediaType.js | 122 + node_modules/negotiator/lib/negotiator.js | 37 + node_modules/negotiator/package.json | 113 + node_modules/nodeproxy/Cakefile | 28 + node_modules/nodeproxy/README.md | 40 + .../nodeproxy/coffee/nodeproxy.coffee | 6 + node_modules/nodeproxy/example/example1.js | 24 + node_modules/nodeproxy/jscript/nodeproxy.js | 14 + node_modules/nodeproxy/package.json | 83 + node_modules/object-assign/index.js | 90 + node_modules/object-assign/license | 21 + node_modules/object-assign/package.json | 118 + node_modules/object-assign/readme.md | 61 + node_modules/object-component/.npmignore | 3 + node_modules/object-component/History.md | 10 + node_modules/object-component/Makefile | 16 + node_modules/object-component/Readme.md | 31 + node_modules/object-component/component.json | 10 + node_modules/object-component/index.js | 84 + node_modules/object-component/package.json | 69 + node_modules/object-component/test/object.js | 48 + node_modules/on-finished/HISTORY.md | 88 + node_modules/on-finished/LICENSE | 23 + node_modules/on-finished/README.md | 154 + node_modules/on-finished/index.js | 196 + node_modules/on-finished/package.json | 106 + node_modules/on-headers/HISTORY.md | 16 + node_modules/on-headers/LICENSE | 22 + node_modules/on-headers/README.md | 76 + node_modules/on-headers/index.js | 93 + node_modules/on-headers/package.json | 103 + node_modules/parsejson/.npmignore | 2 + node_modules/parsejson/LICENSE | 21 + node_modules/parsejson/Makefile | 3 + node_modules/parsejson/README.md | 2 + node_modules/parsejson/index.js | 32 + node_modules/parsejson/package.json | 87 + node_modules/parsejson/test.js | 21 + node_modules/parseqs/.npmignore | 3 + node_modules/parseqs/LICENSE | 21 + node_modules/parseqs/Makefile | 3 + node_modules/parseqs/README.md | 1 + node_modules/parseqs/index.js | 37 + node_modules/parseqs/package.json | 88 + node_modules/parseqs/test.js | 27 + node_modules/parseuri/.npmignore | 2 + node_modules/parseuri/History.md | 5 + node_modules/parseuri/LICENSE | 21 + node_modules/parseuri/Makefile | 3 + node_modules/parseuri/README.md | 2 + node_modules/parseuri/index.js | 39 + node_modules/parseuri/package.json | 86 + node_modules/parseuri/test.js | 51 + node_modules/parseurl/HISTORY.md | 47 + node_modules/parseurl/LICENSE | 24 + node_modules/parseurl/README.md | 120 + node_modules/parseurl/index.js | 138 + node_modules/parseurl/package.json | 125 + node_modules/path-to-regexp/.npmignore | 2 + node_modules/path-to-regexp/History.md | 16 + node_modules/path-to-regexp/Readme.md | 33 + node_modules/path-to-regexp/component.json | 15 + node_modules/path-to-regexp/index.js | 70 + node_modules/path-to-regexp/package.json | 196 + node_modules/path-to-regexp/test.js | 616 + node_modules/process-nextick-args/.travis.yml | 12 + node_modules/process-nextick-args/index.js | 43 + node_modules/process-nextick-args/license.md | 19 + .../process-nextick-args/package.json | 83 + node_modules/process-nextick-args/readme.md | 18 + node_modules/process-nextick-args/test.js | 24 + node_modules/proxy-addr/HISTORY.md | 80 + node_modules/proxy-addr/LICENSE | 22 + node_modules/proxy-addr/README.md | 137 + node_modules/proxy-addr/index.js | 347 + node_modules/proxy-addr/package.json | 123 + node_modules/qs/.eslintignore | 1 + node_modules/qs/.eslintrc | 18 + node_modules/qs/.jscs.json | 176 + node_modules/qs/CHANGELOG.md | 175 + node_modules/qs/LICENSE | 28 + node_modules/qs/README.md | 440 + node_modules/qs/dist/qs.js | 597 + node_modules/qs/lib/formats.js | 18 + node_modules/qs/lib/index.js | 11 + node_modules/qs/lib/parse.js | 167 + node_modules/qs/lib/stringify.js | 207 + node_modules/qs/lib/utils.js | 182 + node_modules/qs/package.json | 121 + node_modules/qs/test/.eslintrc | 11 + node_modules/qs/test/index.js | 7 + node_modules/qs/test/parse.js | 519 + node_modules/qs/test/stringify.js | 567 + node_modules/qs/test/utils.js | 22 + node_modules/random-bytes/HISTORY.md | 4 + node_modules/random-bytes/LICENSE | 21 + node_modules/random-bytes/README.md | 77 + node_modules/random-bytes/index.js | 101 + node_modules/random-bytes/package.json | 102 + node_modules/range-parser/HISTORY.md | 40 + node_modules/range-parser/LICENSE | 22 + node_modules/range-parser/README.md | 57 + node_modules/range-parser/index.js | 63 + node_modules/range-parser/package.json | 110 + node_modules/raw-body/HISTORY.md | 220 + node_modules/raw-body/LICENSE | 22 + node_modules/raw-body/README.md | 145 + node_modules/raw-body/index.js | 320 + node_modules/raw-body/package.json | 125 + node_modules/readable-stream/.npmignore | 9 + node_modules/readable-stream/.travis.yml | 49 + node_modules/readable-stream/CONTRIBUTING.md | 38 + node_modules/readable-stream/GOVERNANCE.md | 136 + node_modules/readable-stream/LICENSE | 47 + node_modules/readable-stream/README.md | 57 + .../doc/wg-meetings/2015-01-30.md | 60 + .../readable-stream/duplex-browser.js | 1 + node_modules/readable-stream/duplex.js | 1 + .../readable-stream/lib/_stream_duplex.js | 75 + .../lib/_stream_passthrough.js | 26 + .../readable-stream/lib/_stream_readable.js | 941 + .../readable-stream/lib/_stream_transform.js | 182 + .../readable-stream/lib/_stream_writable.js | 551 + .../lib/internal/streams/BufferList.js | 64 + node_modules/readable-stream/package.json | 136 + node_modules/readable-stream/passthrough.js | 1 + .../readable-stream/readable-browser.js | 7 + node_modules/readable-stream/readable.js | 19 + node_modules/readable-stream/transform.js | 1 + .../readable-stream/writable-browser.js | 1 + node_modules/readable-stream/writable.js | 8 + node_modules/require_optional/.npmignore | 33 + node_modules/require_optional/.travis.yml | 9 + node_modules/require_optional/HISTORY.md | 7 + node_modules/require_optional/LICENSE | 201 + node_modules/require_optional/README.md | 2 + node_modules/require_optional/index.js | 128 + node_modules/require_optional/package.json | 103 + .../require_optional/test/nestedTest/index.js | 8 + .../test/nestedTest/package.json | 11 + .../test/require_optional_tests.js | 59 + node_modules/resolve-from/index.js | 23 + node_modules/resolve-from/license | 21 + node_modules/resolve-from/package.json | 98 + node_modules/resolve-from/readme.md | 58 + node_modules/safe-buffer/.travis.yml | 7 + node_modules/safe-buffer/LICENSE | 21 + node_modules/safe-buffer/README.md | 581 + node_modules/safe-buffer/browser.js | 1 + node_modules/safe-buffer/index.js | 58 + node_modules/safe-buffer/package.json | 103 + node_modules/safe-buffer/test.js | 99 + node_modules/semver/LICENSE | 15 + node_modules/semver/README.md | 350 + node_modules/semver/bin/semver | 133 + node_modules/semver/package.json | 94 + node_modules/semver/range.bnf | 16 + node_modules/semver/semver.js | 1203 ++ node_modules/send/History.md | 221 + node_modules/send/LICENSE | 23 + node_modules/send/Readme.md | 182 + node_modules/send/index.js | 773 + .../send/node_modules/debug/.jshintrc | 3 + .../send/node_modules/debug/.npmignore | 6 + .../send/node_modules/debug/History.md | 186 + node_modules/send/node_modules/debug/Makefile | 33 + .../send/node_modules/debug/Readme.md | 178 + .../send/node_modules/debug/bower.json | 28 + .../send/node_modules/debug/browser.js | 175 + .../send/node_modules/debug/component.json | 19 + node_modules/send/node_modules/debug/debug.js | 197 + node_modules/send/node_modules/debug/node.js | 209 + .../debug/node_modules/ms/.npmignore | 5 + .../debug/node_modules/ms/LICENSE | 20 + .../debug/node_modules/ms/README.md | 35 + .../debug/node_modules/ms/index.js | 123 + .../debug/node_modules/ms/package.json | 93 + .../send/node_modules/debug/package.json | 118 + .../send/node_modules/depd/History.md | 75 + node_modules/send/node_modules/depd/LICENSE | 22 + node_modules/send/node_modules/depd/Readme.md | 274 + node_modules/send/node_modules/depd/index.js | 529 + .../depd/lib/compat/buffer-concat.js | 33 + .../depd/lib/compat/callsite-tostring.js | 101 + .../node_modules/depd/lib/compat/index.js | 69 + .../send/node_modules/depd/package.json | 112 + .../send/node_modules/ee-first/LICENSE | 22 + .../send/node_modules/ee-first/README.md | 80 + .../send/node_modules/ee-first/index.js | 68 + .../send/node_modules/ee-first/package.json | 110 + node_modules/send/node_modules/ms/.npmignore | 5 + node_modules/send/node_modules/ms/README.md | 33 + node_modules/send/node_modules/ms/index.js | 111 + .../send/node_modules/ms/package.json | 79 + .../send/node_modules/on-finished/HISTORY.md | 71 + .../send/node_modules/on-finished/LICENSE | 23 + .../send/node_modules/on-finished/README.md | 102 + .../send/node_modules/on-finished/index.js | 191 + .../node_modules/on-finished/package.json | 116 + node_modules/send/package.json | 120 + node_modules/serve-static/HISTORY.md | 206 + node_modules/serve-static/LICENSE | 25 + node_modules/serve-static/README.md | 165 + node_modules/serve-static/index.js | 137 + node_modules/serve-static/package.json | 117 + node_modules/setprototypeof/LICENSE | 13 + node_modules/setprototypeof/README.md | 21 + node_modules/setprototypeof/index.js | 15 + node_modules/setprototypeof/package.json | 89 + node_modules/socket.io-adapter/.npmignore | 1 + node_modules/socket.io-adapter/History.md | 54 + node_modules/socket.io-adapter/LICENSE | 20 + node_modules/socket.io-adapter/Readme.md | 16 + node_modules/socket.io-adapter/index.js | 263 + .../node_modules/debug/.jshintrc | 3 + .../node_modules/debug/.npmignore | 7 + .../node_modules/debug/CHANGELOG.md | 235 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 37 + .../node_modules/debug/Readme.md | 199 + .../node_modules/debug/bower.json | 29 + .../node_modules/debug/browser.js | 177 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/debug.js | 200 + .../node_modules/debug/index.js | 10 + .../node_modules/debug/node.js | 213 + .../node_modules/debug/package.json | 122 + .../node_modules/ms/LICENSE.md | 21 + .../node_modules/ms/README.md | 52 + .../node_modules/ms/index.js | 149 + .../node_modules/ms/package.json | 108 + node_modules/socket.io-adapter/package.json | 83 + node_modules/socket.io-client/History.md | 561 + node_modules/socket.io-client/LICENSE | 22 + node_modules/socket.io-client/README.md | 50 + .../socket.io-client/dist/socket.io.js | 3 + .../socket.io-client/dist/socket.io.js.map | 1 + .../socket.io-client/dist/socket.io.slim.js | 3 + .../dist/socket.io.slim.js.map | 1 + node_modules/socket.io-client/lib/index.js | 94 + node_modules/socket.io-client/lib/manager.js | 573 + node_modules/socket.io-client/lib/on.js | 24 + node_modules/socket.io-client/lib/socket.js | 418 + node_modules/socket.io-client/lib/url.js | 75 + node_modules/socket.io-client/package.json | 154 + node_modules/socket.io-parser/History.md | 160 + node_modules/socket.io-parser/LICENSE | 20 + node_modules/socket.io-parser/Readme.md | 73 + node_modules/socket.io-parser/binary.js | 141 + node_modules/socket.io-parser/index.js | 400 + node_modules/socket.io-parser/is-buffer.js | 13 + .../node_modules/isarray/README.md | 54 + .../node_modules/isarray/index.js | 5 + .../node_modules/isarray/package.json | 124 + node_modules/socket.io-parser/package.json | 101 + node_modules/socket.io/History.md | 720 + node_modules/socket.io/LICENSE | 22 + node_modules/socket.io/Readme.md | 242 + node_modules/socket.io/lib/client.js | 252 + node_modules/socket.io/lib/index.js | 474 + node_modules/socket.io/lib/namespace.js | 274 + node_modules/socket.io/lib/socket.js | 558 + node_modules/socket.io/package.json | 134 + node_modules/statuses/HISTORY.md | 55 + node_modules/statuses/LICENSE | 23 + node_modules/statuses/README.md | 103 + node_modules/statuses/codes.json | 65 + node_modules/statuses/index.js | 110 + node_modules/statuses/package.json | 141 + node_modules/string_decoder/.npmignore | 2 + node_modules/string_decoder/LICENSE | 48 + node_modules/string_decoder/README.md | 28 + .../string_decoder/lib/string_decoder.js | 272 + node_modules/string_decoder/package.json | 99 + node_modules/synchronize/.npmignore | 5 + node_modules/synchronize/.travis.yml | 9 + .../docs/assets/bootstrap/css/bootstrap.css | 3990 ++++ .../img/glyphicons-halflings-white.png | Bin 0 -> 4352 bytes .../bootstrap/img/glyphicons-halflings.png | Bin 0 -> 4352 bytes .../docs/assets/bootstrap/js/bootstrap.js | 1726 ++ .../assets/google-code-prettify/prettify.css | 30 + .../assets/google-code-prettify/prettify.js | 28 + .../synchronize/docs/assets/style.css | 13 + node_modules/synchronize/docs/index.html | 438 + node_modules/synchronize/examples/basic.js | 19 + node_modules/synchronize/examples/express.js | 17 + node_modules/synchronize/examples/list.js | 16 + .../synchronize/examples/listAsync.js | 23 + node_modules/synchronize/examples/mocha.js | 12 + node_modules/synchronize/index.html | 8 + node_modules/synchronize/package.json | 95 + node_modules/synchronize/readme.md | 24 + node_modules/synchronize/sync.js | 352 + node_modules/synchronize/test/sync.js | 428 + node_modules/system-sleep/module.js | 33 + node_modules/system-sleep/package.json | 78 + node_modules/system-sleep/readme.md | 44 + node_modules/system-sleep/test.js | 9 + node_modules/to-array/.npmignore | 3 + node_modules/to-array/LICENCE | 19 + node_modules/to-array/README.md | 22 + node_modules/to-array/index.js | 13 + node_modules/to-array/package.json | 98 + node_modules/twig/.gitmodules | 3 + node_modules/twig/.npmignore | 12 + node_modules/twig/ASYNC.md | 218 + node_modules/twig/CHANGELOG.md | 183 + node_modules/twig/LICENSE | 10 + node_modules/twig/README.md | 146 + node_modules/twig/bin/twigjs | 67 + node_modules/twig/docs/docco.css | 518 + node_modules/twig/docs/licenses.md | 177 + .../twig/docs/public/fonts/aller-bold.eot | Bin 0 -> 29804 bytes .../twig/docs/public/fonts/aller-bold.ttf | Bin 0 -> 66836 bytes .../twig/docs/public/fonts/aller-bold.woff | Bin 0 -> 33244 bytes .../twig/docs/public/fonts/aller-light.eot | Bin 0 -> 29509 bytes .../twig/docs/public/fonts/aller-light.ttf | Bin 0 -> 68620 bytes .../twig/docs/public/fonts/aller-light.woff | Bin 0 -> 33124 bytes .../twig/docs/public/fonts/novecento-bold.eot | Bin 0 -> 18190 bytes .../twig/docs/public/fonts/novecento-bold.ttf | Bin 0 -> 48136 bytes .../docs/public/fonts/novecento-bold.woff | Bin 0 -> 20576 bytes .../docs/public/stylesheets/normalize.css | 375 + node_modules/twig/docs/release checklist.md | 20 + node_modules/twig/docs/tests.md | 3567 ++++ node_modules/twig/docs/twig.html | 11250 ++++++++++ node_modules/twig/lib/compile.js | 99 + node_modules/twig/lib/paths.js | 86 + node_modules/twig/package.json | 129 + node_modules/twig/test-ext/checkout.sh | 10 + node_modules/twig/test-ext/test.original.js | 314 + node_modules/twig/twig.js | 7759 +++++++ node_modules/twig/twig.min.js | 10 + node_modules/type-is/HISTORY.md | 218 + node_modules/type-is/LICENSE | 23 + node_modules/type-is/README.md | 146 + node_modules/type-is/index.js | 262 + node_modules/type-is/package.json | 121 + node_modules/uid-safe/HISTORY.md | 56 + node_modules/uid-safe/LICENSE | 22 + node_modules/uid-safe/README.md | 77 + node_modules/uid-safe/index.js | 107 + node_modules/uid-safe/package.json | 126 + node_modules/ultron/LICENSE | 22 + node_modules/ultron/index.js | 138 + node_modules/ultron/package.json | 112 + node_modules/unpipe/HISTORY.md | 4 + node_modules/unpipe/LICENSE | 22 + node_modules/unpipe/README.md | 43 + node_modules/unpipe/index.js | 69 + node_modules/unpipe/package.json | 93 + node_modules/util-deprecate/History.md | 16 + node_modules/util-deprecate/LICENSE | 24 + node_modules/util-deprecate/README.md | 53 + node_modules/util-deprecate/browser.js | 67 + node_modules/util-deprecate/node.js | 6 + node_modules/util-deprecate/package.json | 89 + node_modules/utils-merge/.travis.yml | 6 + node_modules/utils-merge/LICENSE | 20 + node_modules/utils-merge/README.md | 34 + node_modules/utils-merge/index.js | 23 + node_modules/utils-merge/package.json | 93 + node_modules/uws/LICENSE | 17 + node_modules/uws/README.md | 32 + node_modules/uws/binding.gyp | 80 + node_modules/uws/build/Makefile | 347 + .../obj.target/action_after_build.stamp.d | 1 + .../Release/obj.target/uws/src/Extensions.o.d | 5 + .../Release/obj.target/uws/src/Group.o.d | 115 + .../Release/obj.target/uws/src/HTTPSocket.o.d | 110 + .../.deps/Release/obj.target/uws/src/Hub.o.d | 116 + .../Release/obj.target/uws/src/Networking.o.d | 102 + .../.deps/Release/obj.target/uws/src/Node.o.d | 104 + .../Release/obj.target/uws/src/Socket.o.d | 103 + .../Release/obj.target/uws/src/WebSocket.o.d | 116 + .../Release/obj.target/uws/src/addon.o.d | 132 + .../build/Release/.deps/Release/uws.node.d | 1 + node_modules/uws/build/Release/.deps/uws.d | 1 + .../obj.target/action_after_build.stamp | 0 .../Release/obj.target/uws/src/Extensions.o | Bin 0 -> 4944 bytes .../build/Release/obj.target/uws/src/Group.o | Bin 0 -> 136328 bytes .../Release/obj.target/uws/src/HTTPSocket.o | Bin 0 -> 25872 bytes .../build/Release/obj.target/uws/src/Hub.o | Bin 0 -> 25972 bytes .../Release/obj.target/uws/src/Networking.o | Bin 0 -> 7316 bytes .../build/Release/obj.target/uws/src/Node.o | Bin 0 -> 4080 bytes .../build/Release/obj.target/uws/src/Socket.o | Bin 0 -> 1556 bytes .../Release/obj.target/uws/src/WebSocket.o | Bin 0 -> 36848 bytes .../build/Release/obj.target/uws/src/addon.o | Bin 0 -> 146112 bytes node_modules/uws/build/Release/uws.node | Bin 0 -> 377616 bytes .../uws/build/action_after_build.target.mk | 47 + node_modules/uws/build/binding.Makefile | 6 + node_modules/uws/build/config.gypi | 159 + node_modules/uws/build/gyp-mac-tool | 611 + node_modules/uws/build/uws.target.mk | 175 + node_modules/uws/build_log.txt | 136 + node_modules/uws/package.json | 91 + node_modules/uws/src/Asio.h | 184 + node_modules/uws/src/Backend.h | 15 + node_modules/uws/src/Epoll.cpp | 60 + node_modules/uws/src/Epoll.h | 257 + node_modules/uws/src/Extensions.cpp | 131 + node_modules/uws/src/Extensions.h | 29 + node_modules/uws/src/Group.cpp | 263 + node_modules/uws/src/Group.h | 144 + node_modules/uws/src/HTTPSocket.cpp | 310 + node_modules/uws/src/HTTPSocket.h | 285 + node_modules/uws/src/Hub.cpp | 177 + node_modules/uws/src/Hub.h | 97 + node_modules/uws/src/Libuv.h | 175 + node_modules/uws/src/Networking.cpp | 78 + node_modules/uws/src/Networking.h | 259 + node_modules/uws/src/Node.cpp | 83 + node_modules/uws/src/Node.h | 198 + node_modules/uws/src/Socket.cpp | 28 + node_modules/uws/src/Socket.h | 507 + node_modules/uws/src/WebSocket.cpp | 405 + node_modules/uws/src/WebSocket.h | 89 + node_modules/uws/src/WebSocketProtocol.h | 377 + node_modules/uws/src/addon.cpp | 24 + node_modules/uws/src/addon.h | 464 + node_modules/uws/src/http.h | 357 + node_modules/uws/src/uWS.h | 6 + node_modules/uws/uws.js | 563 + node_modules/uws/uws_darwin_46.node | Bin 0 -> 377568 bytes node_modules/uws/uws_darwin_47.node | Bin 0 -> 377568 bytes node_modules/uws/uws_darwin_48.node | Bin 0 -> 377560 bytes node_modules/uws/uws_darwin_51.node | Bin 0 -> 377616 bytes node_modules/uws/uws_linux_46.node | Bin 0 -> 1563976 bytes node_modules/uws/uws_linux_47.node | Bin 0 -> 1563976 bytes node_modules/uws/uws_linux_48.node | Bin 0 -> 1563976 bytes node_modules/uws/uws_linux_51.node | Bin 0 -> 1563976 bytes node_modules/uws/uws_win32_48.node | Bin 0 -> 641024 bytes node_modules/uws/uws_win32_51.node | Bin 0 -> 641536 bytes node_modules/vary/HISTORY.md | 23 + node_modules/vary/LICENSE | 22 + node_modules/vary/README.md | 91 + node_modules/vary/index.js | 117 + node_modules/vary/package.json | 106 + node_modules/walk/README.md | 307 + node_modules/walk/lib/node-type-emitter.js | 89 + node_modules/walk/lib/walk-async-only.js | 93 + node_modules/walk/lib/walk.js | 301 + node_modules/walk/package.json | 106 + node_modules/ws/LICENSE | 21 + node_modules/ws/README.md | 260 + node_modules/ws/index.js | 15 + node_modules/ws/lib/BufferUtil.js | 71 + node_modules/ws/lib/Constants.js | 10 + node_modules/ws/lib/ErrorCodes.js | 28 + node_modules/ws/lib/EventTarget.js | 155 + node_modules/ws/lib/Extensions.js | 67 + node_modules/ws/lib/PerMessageDeflate.js | 384 + node_modules/ws/lib/Receiver.js | 555 + node_modules/ws/lib/Sender.js | 403 + node_modules/ws/lib/Validation.js | 17 + node_modules/ws/lib/WebSocket.js | 712 + node_modules/ws/lib/WebSocketServer.js | 336 + node_modules/ws/package.json | 127 + node_modules/xmlhttprequest-ssl/LICENSE | 22 + node_modules/xmlhttprequest-ssl/README.md | 61 + .../xmlhttprequest-ssl/autotest.watchr | 8 + .../xmlhttprequest-ssl/example/demo.js | 16 + .../xmlhttprequest-ssl/lib/XMLHttpRequest.js | 650 + node_modules/xmlhttprequest-ssl/package.json | 98 + .../tests/test-constants.js | 13 + .../xmlhttprequest-ssl/tests/test-events.js | 50 + .../tests/test-exceptions.js | 59 + .../xmlhttprequest-ssl/tests/test-headers.js | 76 + .../tests/test-redirect-302.js | 41 + .../tests/test-redirect-303.js | 41 + .../tests/test-redirect-307.js | 43 + .../tests/test-request-methods.js | 62 + .../tests/test-request-protocols.js | 32 + .../xmlhttprequest-ssl/tests/testdata.txt | 1 + node_modules/yeast/LICENSE | 22 + node_modules/yeast/README.md | 82 + node_modules/yeast/index.js | 68 + node_modules/yeast/package.json | 100 + public/Jquery.js | 7 + public/chat.css | 145 + public/client.js | 3 + public/icon.png | Bin 0 -> 598 bytes public/login.css | 79 + public/register.js | 66 + public/socket.io.js | 3 + public/style.css | 49 + xxx/.DS_Store | Bin 0 -> 6148 bytes xxx/battleship.js | 95 + xxx/dossier sans titre 2/.DS_Store | Bin 0 -> 6148 bytes .../node_modules/.bin/mime | 1 + .../node_modules/accepts/HISTORY.md | 212 + .../node_modules/accepts/LICENSE | 23 + .../node_modules/accepts/README.md | 135 + .../node_modules/accepts/index.js | 231 + .../node_modules/accepts/package.json | 112 + .../node_modules/after/.npmignore | 2 + .../node_modules/after/.travis.yml | 12 + .../node_modules/after/LICENCE | 19 + .../node_modules/after/README.md | 115 + .../node_modules/after/index.js | 28 + .../node_modules/after/package.json | 103 + .../node_modules/after/test/after-test.js | 120 + .../node_modules/array-flatten/LICENSE | 21 + .../node_modules/array-flatten/README.md | 43 + .../array-flatten/array-flatten.js | 64 + .../node_modules/array-flatten/package.json | 96 + .../node_modules/arraybuffer.slice/.npmignore | 17 + .../node_modules/arraybuffer.slice/Makefile | 8 + .../node_modules/arraybuffer.slice/README.md | 17 + .../node_modules/arraybuffer.slice/index.js | 29 + .../arraybuffer.slice/package.json | 72 + .../arraybuffer.slice/test/slice-buffer.js | 227 + .../node_modules/backo2/.npmignore | 1 + .../node_modules/backo2/History.md | 12 + .../node_modules/backo2/Makefile | 8 + .../node_modules/backo2/Readme.md | 34 + .../node_modules/backo2/component.json | 11 + .../node_modules/backo2/index.js | 85 + .../node_modules/backo2/package.json | 78 + .../node_modules/backo2/test/index.js | 18 + .../base64-arraybuffer/.npmignore | 3 + .../base64-arraybuffer/.travis.yml | 19 + .../base64-arraybuffer/LICENSE-MIT | 22 + .../node_modules/base64-arraybuffer/README.md | 20 + .../lib/base64-arraybuffer.js | 67 + .../base64-arraybuffer/package.json | 97 + .../node_modules/base64id/.npmignore | 3 + .../node_modules/base64id/LICENSE | 22 + .../node_modules/base64id/README.md | 18 + .../node_modules/base64id/lib/base64id.js | 103 + .../node_modules/base64id/package.json | 89 + .../node_modules/better-assert/.npmignore | 4 + .../node_modules/better-assert/History.md | 15 + .../node_modules/better-assert/Makefile | 5 + .../node_modules/better-assert/Readme.md | 61 + .../node_modules/better-assert/example.js | 10 + .../node_modules/better-assert/index.js | 38 + .../node_modules/better-assert/package.json | 100 + .../node_modules/blob/.npmignore | 2 + .../node_modules/blob/.zuul.yml | 14 + .../node_modules/blob/Makefile | 14 + .../node_modules/blob/README.md | 14 + .../node_modules/blob/index.js | 96 + .../node_modules/blob/package.json | 77 + .../node_modules/blob/test/index.js | 94 + .../node_modules/callsite/.npmignore | 4 + .../node_modules/callsite/History.md | 10 + .../node_modules/callsite/Makefile | 6 + .../node_modules/callsite/Readme.md | 44 + .../node_modules/callsite/index.js | 10 + .../node_modules/callsite/package.json | 77 + .../node_modules/component-bind/.npmignore | 4 + .../node_modules/component-bind/History.md | 13 + .../node_modules/component-bind/Makefile | 7 + .../node_modules/component-bind/Readme.md | 64 + .../component-bind/component.json | 13 + .../node_modules/component-bind/index.js | 23 + .../node_modules/component-bind/package.json | 81 + .../node_modules/component-emitter/History.md | 68 + .../node_modules/component-emitter/LICENSE | 24 + .../node_modules/component-emitter/Readme.md | 74 + .../node_modules/component-emitter/index.js | 163 + .../component-emitter/package.json | 218 + .../node_modules/component-inherit/.npmignore | 3 + .../node_modules/component-inherit/History.md | 5 + .../node_modules/component-inherit/Makefile | 16 + .../node_modules/component-inherit/Readme.md | 24 + .../component-inherit/component.json | 10 + .../node_modules/component-inherit/index.js | 7 + .../component-inherit/package.json | 78 + .../component-inherit/test/inherit.js | 21 + .../content-disposition/HISTORY.md | 50 + .../node_modules/content-disposition/LICENSE | 22 + .../content-disposition/README.md | 141 + .../node_modules/content-disposition/index.js | 445 + .../content-disposition/package.json | 110 + .../node_modules/content-type/HISTORY.md | 14 + .../node_modules/content-type/LICENSE | 22 + .../node_modules/content-type/README.md | 92 + .../node_modules/content-type/index.js | 216 + .../node_modules/content-type/package.json | 104 + .../node_modules/cookie-signature/.npmignore | 4 + .../node_modules/cookie-signature/History.md | 38 + .../node_modules/cookie-signature/Readme.md | 42 + .../node_modules/cookie-signature/index.js | 51 + .../cookie-signature/package.json | 92 + .../node_modules/cookie/HISTORY.md | 118 + .../node_modules/cookie/LICENSE | 24 + .../node_modules/cookie/README.md | 220 + .../node_modules/cookie/index.js | 195 + .../node_modules/cookie/package.json | 106 + .../node_modules/debug/.coveralls.yml | 1 + .../node_modules/debug/.eslintrc | 11 + .../node_modules/debug/.npmignore | 8 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 316 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 50 + .../node_modules/debug/README.md | 238 + .../node_modules/debug/bower.json | 29 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 125 + .../node_modules/debug/src/browser.js | 182 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/node.js | 241 + .../node_modules/depd/History.md | 84 + .../node_modules/depd/LICENSE | 22 + .../node_modules/depd/Readme.md | 281 + .../node_modules/depd/index.js | 521 + .../node_modules/depd/lib/browser/index.js | 79 + .../depd/lib/compat/buffer-concat.js | 35 + .../depd/lib/compat/callsite-tostring.js | 103 + .../depd/lib/compat/event-listener-count.js | 22 + .../node_modules/depd/lib/compat/index.js | 84 + .../node_modules/depd/package.json | 103 + .../node_modules/destroy/LICENSE | 22 + .../node_modules/destroy/README.md | 60 + .../node_modules/destroy/index.js | 75 + .../node_modules/destroy/package.json | 106 + .../node_modules/ee-first/LICENSE | 22 + .../node_modules/ee-first/README.md | 80 + .../node_modules/ee-first/index.js | 95 + .../node_modules/ee-first/package.json | 98 + .../node_modules/ejs/Jakefile | 71 + .../node_modules/ejs/LICENSE | 202 + .../node_modules/ejs/README.md | 256 + .../node_modules/ejs/ejs.js | 1469 ++ .../node_modules/ejs/ejs.min.js | 1 + .../node_modules/ejs/lib/ejs.js | 841 + .../node_modules/ejs/lib/utils.js | 164 + .../node_modules/ejs/package.json | 113 + .../node_modules/ejs/test/ejs.js | 1039 + .../ejs/test/fixtures/backslash.ejs | 1 + .../ejs/test/fixtures/backslash.html | 1 + .../ejs/test/fixtures/comments.ejs | 7 + .../ejs/test/fixtures/comments.html | 6 + .../ejs/test/fixtures/consecutive-tags.ejs | 1 + .../ejs/test/fixtures/consecutive-tags.html | 1 + .../ejs/test/fixtures/double-quote.ejs | 1 + .../ejs/test/fixtures/double-quote.html | 1 + .../node_modules/ejs/test/fixtures/error.ejs | 5 + .../node_modules/ejs/test/fixtures/error.out | 8 + .../node_modules/ejs/test/fixtures/fail.ejs | 1 + .../ejs/test/fixtures/hello-world.ejs | 1 + .../ejs/test/fixtures/include-abspath.ejs | 5 + .../ejs/test/fixtures/include-root.ejs | 1 + .../ejs/test/fixtures/include-simple.ejs | 3 + .../ejs/test/fixtures/include-simple.html | 4 + .../ejs/test/fixtures/include.css.ejs | 1 + .../ejs/test/fixtures/include.css.html | 4 + .../ejs/test/fixtures/include.ejs | 5 + .../ejs/test/fixtures/include.html | 12 + .../ejs/test/fixtures/include_cache.ejs | 1 + .../ejs/test/fixtures/include_cache.html | 1 + .../fixtures/include_preprocessor.css.ejs | 1 + .../fixtures/include_preprocessor.css.html | 4 + .../test/fixtures/include_preprocessor.ejs | 5 + .../test/fixtures/include_preprocessor.html | 12 + .../fixtures/include_preprocessor_cache.ejs | 1 + .../fixtures/include_preprocessor_cache.html | 1 + .../include_preprocessor_line_slurp.ejs | 1 + .../include_preprocessor_line_slurp.html | 5 + .../include_preprocessor_line_slurp_child.ejs | 5 + .../ejs/test/fixtures/includes/bom.ejs | 1 + .../ejs/test/fixtures/includes/menu-item.ejs | 1 + .../ejs/test/fixtures/includes/menu/item.ejs | 1 + .../ejs/test/fixtures/literal.ejs | 3 + .../ejs/test/fixtures/literal.html | 3 + .../node_modules/ejs/test/fixtures/menu.ejs | 15 + .../node_modules/ejs/test/fixtures/menu.html | 9 + .../ejs/test/fixtures/menu_preprocessor.ejs | 11 + .../ejs/test/fixtures/menu_preprocessor.html | 8 + .../ejs/test/fixtures/menu_var.ejs | 15 + .../node_modules/ejs/test/fixtures/messed.ejs | 1 + .../ejs/test/fixtures/messed.html | 1 + .../ejs/test/fixtures/newlines.ejs | 5 + .../ejs/test/fixtures/newlines.html | 9 + .../ejs/test/fixtures/newlines.mixed.ejs | 6 + .../ejs/test/fixtures/newlines.mixed.html | 4 + .../ejs/test/fixtures/no.newlines.ejs | 5 + .../ejs/test/fixtures/no.newlines.error.ejs | 5 + .../ejs/test/fixtures/no.newlines.html | 5 + .../ejs/test/fixtures/no.semicolons.ejs | 8 + .../ejs/test/fixtures/no.semicolons.html | 3 + .../node_modules/ejs/test/fixtures/para.ejs | 1 + .../node_modules/ejs/test/fixtures/pet.ejs | 1 + .../ejs/test/fixtures/rmWhitespace.ejs | 14 + .../ejs/test/fixtures/rmWhitespace.html | 8 + .../ejs/test/fixtures/single-quote.ejs | 1 + .../ejs/test/fixtures/single-quote.html | 1 + .../ejs/test/fixtures/space-and-tab-slurp.ejs | 5 + .../test/fixtures/space-and-tab-slurp.html | 5 + .../node_modules/ejs/test/fixtures/strict.ejs | 5 + .../node_modules/ejs/test/fixtures/style.css | 3 + .../ejs/test/fixtures/user-no-with.ejs | 1 + .../node_modules/ejs/test/fixtures/user.ejs | 1 + .../ejs/test/fixtures/with-context.ejs | 1 + .../node_modules/ejs/test/mocha.opts | 3 + .../node_modules/ejs/test/tmp/include.ejs | 1 + .../ejs/test/tmp/include_preprocessor.ejs | 1 + .../node_modules/ejs/test/tmp/renderFile.ejs | 1 + .../node_modules/encodeurl/HISTORY.md | 9 + .../node_modules/encodeurl/LICENSE | 22 + .../node_modules/encodeurl/README.md | 124 + .../node_modules/encodeurl/index.js | 60 + .../node_modules/encodeurl/package.json | 112 + .../node_modules/engine.io-client/History.md | 677 + .../node_modules/engine.io-client/LICENSE | 22 + .../node_modules/engine.io-client/README.md | 299 + .../engine.io-client/engine.io.js | 4704 +++++ .../node_modules/engine.io-client/index.js | 2 + .../engine.io-client/lib/index.js | 10 + .../engine.io-client/lib/socket.js | 744 + .../engine.io-client/lib/transport.js | 157 + .../engine.io-client/lib/transports/index.js | 53 + .../lib/transports/polling-jsonp.js | 231 + .../lib/transports/polling-xhr.js | 413 + .../lib/transports/polling.js | 245 + .../lib/transports/websocket.js | 286 + .../engine.io-client/lib/xmlhttprequest.js | 37 + .../node_modules/debug/.coveralls.yml | 1 + .../node_modules/debug/.eslintrc | 11 + .../node_modules/debug/.npmignore | 9 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 337 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 50 + .../node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 124 + .../node_modules/debug/src/browser.js | 185 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/node.js | 241 + .../engine.io-client/node_modules/ms/index.js | 149 + .../node_modules/ms/license.md | 21 + .../node_modules/ms/package.json | 120 + .../node_modules/ms/readme.md | 52 + .../engine.io-client/package.json | 150 + .../node_modules/engine.io-parser/History.md | 177 + .../node_modules/engine.io-parser/LICENSE | 22 + .../node_modules/engine.io-parser/Readme.md | 202 + .../node_modules/engine.io-parser/index.js | 2 + .../engine.io-parser/lib/browser.js | 606 + .../engine.io-parser/lib/index.js | 480 + .../node_modules/engine.io-parser/lib/keys.js | 19 + .../node_modules/engine.io-parser/lib/utf8.js | 255 + .../engine.io-parser/package.json | 101 + .../node_modules/engine.io/History.md | 608 + .../node_modules/engine.io/LICENSE | 19 + .../node_modules/engine.io/README.md | 539 + .../node_modules/engine.io/index.js | 4 + .../node_modules/engine.io/lib/engine.io.js | 126 + .../node_modules/engine.io/lib/server.js | 518 + .../node_modules/engine.io/lib/socket.js | 483 + .../node_modules/engine.io/lib/transport.js | 128 + .../engine.io/lib/transports/index.js | 36 + .../engine.io/lib/transports/polling-jsonp.js | 75 + .../engine.io/lib/transports/polling-xhr.js | 69 + .../engine.io/lib/transports/polling.js | 408 + .../engine.io/lib/transports/websocket.js | 134 + .../node_modules/debug/.coveralls.yml | 1 + .../engine.io/node_modules/debug/.eslintrc | 11 + .../engine.io/node_modules/debug/.npmignore | 9 + .../engine.io/node_modules/debug/.travis.yml | 14 + .../engine.io/node_modules/debug/CHANGELOG.md | 350 + .../engine.io/node_modules/debug/LICENSE | 19 + .../engine.io/node_modules/debug/Makefile | 50 + .../engine.io/node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../engine.io/node_modules/debug/node.js | 1 + .../engine.io/node_modules/debug/package.json | 136 + .../node_modules/debug/src/browser.js | 185 + .../engine.io/node_modules/debug/src/debug.js | 202 + .../engine.io/node_modules/debug/src/index.js | 10 + .../engine.io/node_modules/debug/src/node.js | 241 + .../engine.io/node_modules/ms/index.js | 149 + .../engine.io/node_modules/ms/license.md | 21 + .../engine.io/node_modules/ms/package.json | 120 + .../engine.io/node_modules/ms/readme.md | 52 + .../node_modules/engine.io/package.json | 135 + .../node_modules/escape-html/LICENSE | 24 + .../node_modules/escape-html/Readme.md | 43 + .../node_modules/escape-html/index.js | 78 + .../node_modules/escape-html/package.json | 94 + .../node_modules/etag/HISTORY.md | 78 + .../node_modules/etag/LICENSE | 22 + .../node_modules/etag/README.md | 159 + .../node_modules/etag/index.js | 132 + .../node_modules/etag/package.json | 119 + .../node_modules/express/History.md | 3248 +++ .../node_modules/express/LICENSE | 24 + .../node_modules/express/Readme.md | 142 + .../node_modules/express/index.js | 11 + .../node_modules/express/lib/application.js | 644 + .../node_modules/express/lib/express.js | 111 + .../express/lib/middleware/init.js | 43 + .../express/lib/middleware/query.js | 46 + .../node_modules/express/lib/request.js | 517 + .../node_modules/express/lib/response.js | 1071 + .../node_modules/express/lib/router/index.js | 662 + .../node_modules/express/lib/router/layer.js | 181 + .../node_modules/express/lib/router/route.js | 216 + .../node_modules/express/lib/utils.js | 299 + .../node_modules/express/lib/view.js | 175 + .../node_modules/express/package.json | 197 + .../node_modules/finalhandler/HISTORY.md | 144 + .../node_modules/finalhandler/LICENSE | 22 + .../node_modules/finalhandler/README.md | 146 + .../node_modules/finalhandler/index.js | 300 + .../node_modules/debug/.coveralls.yml | 1 + .../finalhandler/node_modules/debug/.eslintrc | 11 + .../node_modules/debug/.npmignore | 9 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 337 + .../finalhandler/node_modules/debug/LICENSE | 19 + .../finalhandler/node_modules/debug/Makefile | 50 + .../finalhandler/node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../finalhandler/node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 124 + .../node_modules/debug/src/browser.js | 185 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/node.js | 241 + .../finalhandler/node_modules/ms/index.js | 149 + .../finalhandler/node_modules/ms/license.md | 21 + .../finalhandler/node_modules/ms/package.json | 108 + .../finalhandler/node_modules/ms/readme.md | 52 + .../node_modules/finalhandler/package.json | 115 + .../node_modules/forwarded/HISTORY.md | 4 + .../node_modules/forwarded/LICENSE | 22 + .../node_modules/forwarded/README.md | 53 + .../node_modules/forwarded/index.js | 35 + .../node_modules/forwarded/package.json | 99 + .../node_modules/fresh/HISTORY.md | 58 + .../node_modules/fresh/LICENSE | 23 + .../node_modules/fresh/README.md | 113 + .../node_modules/fresh/index.js | 81 + .../node_modules/fresh/package.json | 120 + .../node_modules/has-binary2/History.md | 39 + .../node_modules/has-binary2/LICENSE | 20 + .../node_modules/has-binary2/README.md | 4 + .../node_modules/has-binary2/index.js | 62 + .../node_modules/has-binary2/package.json | 85 + .../node_modules/has-cors/.npmignore | 3 + .../node_modules/has-cors/History.md | 21 + .../node_modules/has-cors/Makefile | 11 + .../node_modules/has-cors/Readme.md | 24 + .../node_modules/has-cors/component.json | 13 + .../node_modules/has-cors/index.js | 17 + .../node_modules/has-cors/package.json | 97 + .../node_modules/has-cors/test.js | 24 + .../node_modules/http-errors/HISTORY.md | 118 + .../node_modules/http-errors/LICENSE | 23 + .../node_modules/http-errors/README.md | 135 + .../node_modules/http-errors/index.js | 260 + .../node_modules/http-errors/package.json | 131 + .../node_modules/indexof/.npmignore | 2 + .../node_modules/indexof/Makefile | 11 + .../node_modules/indexof/Readme.md | 15 + .../node_modules/indexof/component.json | 10 + .../node_modules/indexof/index.js | 10 + .../node_modules/indexof/package.json | 67 + .../node_modules/inherits/LICENSE | 16 + .../node_modules/inherits/README.md | 42 + .../node_modules/inherits/inherits.js | 7 + .../node_modules/inherits/inherits_browser.js | 23 + .../node_modules/inherits/package.json | 97 + .../node_modules/ipaddr.js/.npmignore | 2 + .../node_modules/ipaddr.js/.travis.yml | 10 + .../node_modules/ipaddr.js/Cakefile | 18 + .../node_modules/ipaddr.js/LICENSE | 19 + .../node_modules/ipaddr.js/README.md | 211 + .../node_modules/ipaddr.js/bower.json | 29 + .../node_modules/ipaddr.js/ipaddr.min.js | 1 + .../node_modules/ipaddr.js/lib/ipaddr.js | 535 + .../node_modules/ipaddr.js/package.json | 97 + .../node_modules/ipaddr.js/src/ipaddr.coffee | 460 + .../ipaddr.js/test/ipaddr.test.coffee | 346 + .../node_modules/isarray/README.md | 54 + .../node_modules/isarray/index.js | 5 + .../node_modules/isarray/package.json | 113 + .../node_modules/jsp/.npmignore | 3 + .../node_modules/jsp/.travis.yml | 4 + .../node_modules/jsp/README.md | 73 + .../node_modules/jsp/component.json | 13 + .../node_modules/jsp/index.js | 33 + .../node_modules/jsp/package.json | 89 + .../node_modules/jsp/test.js | 22 + .../node_modules/media-typer/HISTORY.md | 22 + .../node_modules/media-typer/LICENSE | 22 + .../node_modules/media-typer/README.md | 81 + .../node_modules/media-typer/index.js | 270 + .../node_modules/media-typer/package.json | 92 + .../node_modules/merge-descriptors/HISTORY.md | 21 + .../node_modules/merge-descriptors/LICENSE | 23 + .../node_modules/merge-descriptors/README.md | 48 + .../node_modules/merge-descriptors/index.js | 60 + .../merge-descriptors/package.json | 172 + .../node_modules/methods/HISTORY.md | 29 + .../node_modules/methods/LICENSE | 24 + .../node_modules/methods/README.md | 51 + .../node_modules/methods/index.js | 69 + .../node_modules/methods/package.json | 122 + .../node_modules/mime-db/HISTORY.md | 412 + .../node_modules/mime-db/LICENSE | 22 + .../node_modules/mime-db/README.md | 82 + .../node_modules/mime-db/db.json | 6805 ++++++ .../node_modules/mime-db/index.js | 11 + .../node_modules/mime-db/package.json | 138 + .../node_modules/mime-types/HISTORY.md | 223 + .../node_modules/mime-types/LICENSE | 23 + .../node_modules/mime-types/README.md | 108 + .../node_modules/mime-types/index.js | 188 + .../node_modules/mime-types/package.json | 128 + .../node_modules/mime/.npmignore | 0 .../node_modules/mime/LICENSE | 19 + .../node_modules/mime/README.md | 90 + .../node_modules/mime/build/build.js | 11 + .../node_modules/mime/build/test.js | 57 + .../node_modules/mime/cli.js | 8 + .../node_modules/mime/mime.js | 108 + .../node_modules/mime/package.json | 106 + .../node_modules/mime/types.json | 1 + .../node_modules/ms/LICENSE.md | 21 + .../node_modules/ms/README.md | 52 + .../node_modules/ms/index.js | 149 + .../node_modules/ms/package.json | 109 + .../node_modules/negotiator/HISTORY.md | 98 + .../node_modules/negotiator/LICENSE | 24 + .../node_modules/negotiator/README.md | 203 + .../node_modules/negotiator/index.js | 124 + .../node_modules/negotiator/lib/charset.js | 169 + .../node_modules/negotiator/lib/encoding.js | 184 + .../node_modules/negotiator/lib/language.js | 179 + .../node_modules/negotiator/lib/mediaType.js | 294 + .../node_modules/negotiator/package.json | 125 + .../node_modules/object-assign/index.js | 90 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 118 + .../node_modules/object-assign/readme.md | 61 + .../node_modules/object-component/.npmignore | 3 + .../node_modules/object-component/History.md | 10 + .../node_modules/object-component/Makefile | 16 + .../node_modules/object-component/Readme.md | 31 + .../object-component/component.json | 10 + .../node_modules/object-component/index.js | 84 + .../object-component/package.json | 69 + .../object-component/test/object.js | 48 + .../node_modules/on-finished/HISTORY.md | 88 + .../node_modules/on-finished/LICENSE | 23 + .../node_modules/on-finished/README.md | 154 + .../node_modules/on-finished/index.js | 196 + .../node_modules/on-finished/package.json | 106 + .../node_modules/parsejson/.npmignore | 2 + .../node_modules/parsejson/LICENSE | 21 + .../node_modules/parsejson/Makefile | 3 + .../node_modules/parsejson/README.md | 2 + .../node_modules/parsejson/index.js | 32 + .../node_modules/parsejson/package.json | 87 + .../node_modules/parsejson/test.js | 21 + .../node_modules/parseqs/.npmignore | 3 + .../node_modules/parseqs/LICENSE | 21 + .../node_modules/parseqs/Makefile | 3 + .../node_modules/parseqs/README.md | 1 + .../node_modules/parseqs/index.js | 37 + .../node_modules/parseqs/package.json | 87 + .../node_modules/parseqs/test.js | 27 + .../node_modules/parseuri/.npmignore | 2 + .../node_modules/parseuri/History.md | 5 + .../node_modules/parseuri/LICENSE | 21 + .../node_modules/parseuri/Makefile | 3 + .../node_modules/parseuri/README.md | 2 + .../node_modules/parseuri/index.js | 39 + .../node_modules/parseuri/package.json | 86 + .../node_modules/parseuri/test.js | 51 + .../node_modules/parseurl/HISTORY.md | 47 + .../node_modules/parseurl/LICENSE | 24 + .../node_modules/parseurl/README.md | 120 + .../node_modules/parseurl/index.js | 138 + .../node_modules/parseurl/package.json | 125 + .../node_modules/path-to-regexp/History.md | 36 + .../node_modules/path-to-regexp/LICENSE | 21 + .../node_modules/path-to-regexp/Readme.md | 35 + .../node_modules/path-to-regexp/index.js | 129 + .../node_modules/path-to-regexp/package.json | 219 + .../node_modules/proxy-addr/HISTORY.md | 109 + .../node_modules/proxy-addr/LICENSE | 22 + .../node_modules/proxy-addr/README.md | 140 + .../node_modules/proxy-addr/index.js | 325 + .../node_modules/proxy-addr/package.json | 108 + .../node_modules/qs/.eslintignore | 1 + .../node_modules/qs/.eslintrc | 18 + .../node_modules/qs/.jscs.json | 176 + .../node_modules/qs/CHANGELOG.md | 175 + .../node_modules/qs/LICENSE | 28 + .../node_modules/qs/README.md | 440 + .../node_modules/qs/dist/qs.js | 597 + .../node_modules/qs/lib/formats.js | 18 + .../node_modules/qs/lib/index.js | 11 + .../node_modules/qs/lib/parse.js | 167 + .../node_modules/qs/lib/stringify.js | 207 + .../node_modules/qs/lib/utils.js | 182 + .../node_modules/qs/package.json | 121 + .../node_modules/qs/test/.eslintrc | 11 + .../node_modules/qs/test/index.js | 7 + .../node_modules/qs/test/parse.js | 519 + .../node_modules/qs/test/stringify.js | 567 + .../node_modules/qs/test/utils.js | 22 + .../node_modules/range-parser/HISTORY.md | 51 + .../node_modules/range-parser/LICENSE | 23 + .../node_modules/range-parser/README.md | 75 + .../node_modules/range-parser/index.js | 158 + .../node_modules/range-parser/package.json | 134 + .../node_modules/safe-buffer/.travis.yml | 7 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 581 + .../node_modules/safe-buffer/browser.js | 1 + .../node_modules/safe-buffer/index.js | 58 + .../node_modules/safe-buffer/package.json | 103 + .../node_modules/safe-buffer/test.js | 99 + .../node_modules/send/HISTORY.md | 396 + .../node_modules/send/LICENSE | 23 + .../node_modules/send/README.md | 301 + .../node_modules/send/index.js | 1074 + .../node_modules/send/package.json | 139 + .../node_modules/serve-static/HISTORY.md | 365 + .../node_modules/serve-static/LICENSE | 25 + .../node_modules/serve-static/README.md | 253 + .../node_modules/serve-static/index.js | 209 + .../node_modules/serve-static/package.json | 108 + .../node_modules/setprototypeof/LICENSE | 13 + .../node_modules/setprototypeof/README.md | 21 + .../node_modules/setprototypeof/index.js | 15 + .../node_modules/setprototypeof/package.json | 89 + .../node_modules/socket.io-adapter/.npmignore | 1 + .../node_modules/socket.io-adapter/History.md | 54 + .../node_modules/socket.io-adapter/LICENSE | 20 + .../node_modules/socket.io-adapter/Readme.md | 16 + .../node_modules/socket.io-adapter/index.js | 263 + .../node_modules/debug/.jshintrc | 3 + .../node_modules/debug/.npmignore | 7 + .../node_modules/debug/CHANGELOG.md | 235 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 37 + .../node_modules/debug/Readme.md | 199 + .../node_modules/debug/bower.json | 29 + .../node_modules/debug/browser.js | 177 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/debug.js | 200 + .../node_modules/debug/index.js | 10 + .../node_modules/debug/node.js | 213 + .../node_modules/debug/package.json | 122 + .../socket.io-adapter/package.json | 85 + .../node_modules/socket.io-client/History.md | 548 + .../node_modules/socket.io-client/LICENSE | 22 + .../node_modules/socket.io-client/README.md | 50 + .../socket.io-client/dist/socket.io.js | 3 + .../socket.io-client/dist/socket.io.js.map | 1 + .../socket.io-client/dist/socket.io.slim.js | 3 + .../dist/socket.io.slim.js.map | 1 + .../socket.io-client/lib/index.js | 109 + .../socket.io-client/lib/manager.js | 573 + .../node_modules/socket.io-client/lib/on.js | 24 + .../socket.io-client/lib/socket.js | 415 + .../node_modules/socket.io-client/lib/url.js | 75 + .../node_modules/debug/.coveralls.yml | 1 + .../node_modules/debug/.eslintrc | 11 + .../node_modules/debug/.npmignore | 9 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 337 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 50 + .../node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 124 + .../node_modules/debug/src/browser.js | 185 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/node.js | 241 + .../socket.io-client/node_modules/ms/index.js | 149 + .../node_modules/ms/license.md | 21 + .../node_modules/ms/package.json | 120 + .../node_modules/ms/readme.md | 52 + .../socket.io-client/package.json | 153 + .../node_modules/socket.io-parser/History.md | 160 + .../node_modules/socket.io-parser/LICENSE | 20 + .../node_modules/socket.io-parser/Readme.md | 73 + .../node_modules/socket.io-parser/binary.js | 141 + .../node_modules/socket.io-parser/index.js | 400 + .../socket.io-parser/is-buffer.js | 13 + .../node_modules/debug/.coveralls.yml | 1 + .../node_modules/debug/.eslintrc | 11 + .../node_modules/debug/.npmignore | 9 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 350 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 50 + .../node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 136 + .../node_modules/debug/src/browser.js | 185 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/node.js | 241 + .../socket.io-parser/node_modules/ms/index.js | 149 + .../node_modules/ms/license.md | 21 + .../node_modules/ms/package.json | 120 + .../node_modules/ms/readme.md | 52 + .../socket.io-parser/package.json | 101 + .../node_modules/socket.io/History.md | 707 + .../node_modules/socket.io/LICENSE | 22 + .../node_modules/socket.io/Readme.md | 242 + .../node_modules/socket.io/lib/client.js | 252 + .../node_modules/socket.io/lib/index.js | 461 + .../node_modules/socket.io/lib/namespace.js | 270 + .../node_modules/socket.io/lib/socket.js | 553 + .../node_modules/debug/.coveralls.yml | 1 + .../socket.io/node_modules/debug/.eslintrc | 11 + .../socket.io/node_modules/debug/.npmignore | 9 + .../socket.io/node_modules/debug/.travis.yml | 14 + .../socket.io/node_modules/debug/CHANGELOG.md | 350 + .../socket.io/node_modules/debug/LICENSE | 19 + .../socket.io/node_modules/debug/Makefile | 50 + .../socket.io/node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../socket.io/node_modules/debug/node.js | 1 + .../socket.io/node_modules/debug/package.json | 124 + .../node_modules/debug/src/browser.js | 185 + .../socket.io/node_modules/debug/src/debug.js | 202 + .../socket.io/node_modules/debug/src/index.js | 10 + .../socket.io/node_modules/debug/src/node.js | 241 + .../socket.io/node_modules/ms/index.js | 149 + .../socket.io/node_modules/ms/license.md | 21 + .../socket.io/node_modules/ms/package.json | 108 + .../socket.io/node_modules/ms/readme.md | 52 + .../node_modules/socket.io/package.json | 134 + .../node_modules/statuses/HISTORY.md | 55 + .../node_modules/statuses/LICENSE | 23 + .../node_modules/statuses/README.md | 103 + .../node_modules/statuses/codes.json | 65 + .../node_modules/statuses/index.js | 110 + .../node_modules/statuses/package.json | 141 + .../node_modules/to-array/.npmignore | 3 + .../node_modules/to-array/LICENCE | 19 + .../node_modules/to-array/README.md | 22 + .../node_modules/to-array/index.js | 13 + .../node_modules/to-array/package.json | 98 + .../node_modules/type-is/HISTORY.md | 218 + .../node_modules/type-is/LICENSE | 23 + .../node_modules/type-is/README.md | 146 + .../node_modules/type-is/index.js | 262 + .../node_modules/type-is/package.json | 121 + .../node_modules/ultron/LICENSE | 22 + .../node_modules/ultron/index.js | 138 + .../node_modules/ultron/package.json | 112 + .../node_modules/unpipe/HISTORY.md | 4 + .../node_modules/unpipe/LICENSE | 22 + .../node_modules/unpipe/README.md | 43 + .../node_modules/unpipe/index.js | 69 + .../node_modules/unpipe/package.json | 93 + .../node_modules/utils-merge/.travis.yml | 6 + .../node_modules/utils-merge/LICENSE | 20 + .../node_modules/utils-merge/README.md | 34 + .../node_modules/utils-merge/index.js | 23 + .../node_modules/utils-merge/package.json | 93 + .../node_modules/uws/LICENSE | 17 + .../node_modules/uws/README.md | 32 + .../node_modules/uws/binding.gyp | 80 + .../node_modules/uws/build/Makefile | 347 + .../obj.target/action_after_build.stamp.d | 1 + .../Release/obj.target/uws/src/Extensions.o.d | 5 + .../Release/obj.target/uws/src/Group.o.d | 115 + .../Release/obj.target/uws/src/HTTPSocket.o.d | 110 + .../.deps/Release/obj.target/uws/src/Hub.o.d | 116 + .../Release/obj.target/uws/src/Networking.o.d | 102 + .../.deps/Release/obj.target/uws/src/Node.o.d | 104 + .../Release/obj.target/uws/src/Socket.o.d | 103 + .../Release/obj.target/uws/src/WebSocket.o.d | 116 + .../Release/obj.target/uws/src/addon.o.d | 132 + .../build/Release/.deps/Release/uws.node.d | 1 + .../uws/build/Release/.deps/uws.d | 1 + .../obj.target/action_after_build.stamp | 0 .../Release/obj.target/uws/src/Extensions.o | Bin 0 -> 4944 bytes .../build/Release/obj.target/uws/src/Group.o | Bin 0 -> 136328 bytes .../Release/obj.target/uws/src/HTTPSocket.o | Bin 0 -> 25872 bytes .../build/Release/obj.target/uws/src/Hub.o | Bin 0 -> 25972 bytes .../Release/obj.target/uws/src/Networking.o | Bin 0 -> 7316 bytes .../build/Release/obj.target/uws/src/Node.o | Bin 0 -> 4080 bytes .../build/Release/obj.target/uws/src/Socket.o | Bin 0 -> 1556 bytes .../Release/obj.target/uws/src/WebSocket.o | Bin 0 -> 36848 bytes .../build/Release/obj.target/uws/src/addon.o | Bin 0 -> 146112 bytes .../node_modules/uws/build/Release/uws.node | Bin 0 -> 377616 bytes .../uws/build/action_after_build.target.mk | 47 + .../node_modules/uws/build/binding.Makefile | 6 + .../node_modules/uws/build/config.gypi | 159 + .../node_modules/uws/build/gyp-mac-tool | 611 + .../node_modules/uws/build/uws.target.mk | 175 + .../node_modules/uws/build_log.txt | 136 + .../node_modules/uws/package.json | 91 + .../node_modules/uws/src/Asio.h | 184 + .../node_modules/uws/src/Backend.h | 15 + .../node_modules/uws/src/Epoll.cpp | 60 + .../node_modules/uws/src/Epoll.h | 257 + .../node_modules/uws/src/Extensions.cpp | 131 + .../node_modules/uws/src/Extensions.h | 29 + .../node_modules/uws/src/Group.cpp | 263 + .../node_modules/uws/src/Group.h | 144 + .../node_modules/uws/src/HTTPSocket.cpp | 310 + .../node_modules/uws/src/HTTPSocket.h | 285 + .../node_modules/uws/src/Hub.cpp | 177 + .../node_modules/uws/src/Hub.h | 97 + .../node_modules/uws/src/Libuv.h | 175 + .../node_modules/uws/src/Networking.cpp | 78 + .../node_modules/uws/src/Networking.h | 259 + .../node_modules/uws/src/Node.cpp | 83 + .../node_modules/uws/src/Node.h | 198 + .../node_modules/uws/src/Socket.cpp | 28 + .../node_modules/uws/src/Socket.h | 507 + .../node_modules/uws/src/WebSocket.cpp | 405 + .../node_modules/uws/src/WebSocket.h | 89 + .../node_modules/uws/src/WebSocketProtocol.h | 377 + .../node_modules/uws/src/addon.cpp | 24 + .../node_modules/uws/src/addon.h | 464 + .../node_modules/uws/src/http.h | 357 + .../node_modules/uws/src/uWS.h | 6 + .../node_modules/uws/uws.js | 563 + .../node_modules/uws/uws_darwin_46.node | Bin 0 -> 377568 bytes .../node_modules/uws/uws_darwin_47.node | Bin 0 -> 377568 bytes .../node_modules/uws/uws_darwin_48.node | Bin 0 -> 377560 bytes .../node_modules/uws/uws_darwin_51.node | Bin 0 -> 377616 bytes .../node_modules/uws/uws_linux_46.node | Bin 0 -> 1563976 bytes .../node_modules/uws/uws_linux_47.node | Bin 0 -> 1563976 bytes .../node_modules/uws/uws_linux_48.node | Bin 0 -> 1563976 bytes .../node_modules/uws/uws_linux_51.node | Bin 0 -> 1563976 bytes .../node_modules/uws/uws_win32_48.node | Bin 0 -> 641024 bytes .../node_modules/uws/uws_win32_51.node | Bin 0 -> 641536 bytes .../node_modules/vary/HISTORY.md | 34 + .../node_modules/vary/LICENSE | 22 + .../node_modules/vary/README.md | 101 + .../node_modules/vary/index.js | 131 + .../node_modules/vary/package.json | 109 + .../node_modules/ws/LICENSE | 21 + .../node_modules/ws/README.md | 260 + .../node_modules/ws/index.js | 15 + .../node_modules/ws/lib/BufferUtil.js | 71 + .../node_modules/ws/lib/Constants.js | 10 + .../node_modules/ws/lib/ErrorCodes.js | 28 + .../node_modules/ws/lib/EventTarget.js | 155 + .../node_modules/ws/lib/Extensions.js | 67 + .../node_modules/ws/lib/PerMessageDeflate.js | 384 + .../node_modules/ws/lib/Receiver.js | 555 + .../node_modules/ws/lib/Sender.js | 403 + .../node_modules/ws/lib/Validation.js | 17 + .../node_modules/ws/lib/WebSocket.js | 712 + .../node_modules/ws/lib/WebSocketServer.js | 336 + .../node_modules/ws/package.json | 127 + .../node_modules/xmlhttprequest-ssl/LICENSE | 22 + .../node_modules/xmlhttprequest-ssl/README.md | 61 + .../xmlhttprequest-ssl/autotest.watchr | 8 + .../xmlhttprequest-ssl/example/demo.js | 16 + .../xmlhttprequest-ssl/lib/XMLHttpRequest.js | 650 + .../xmlhttprequest-ssl/package.json | 98 + .../tests/test-constants.js | 13 + .../xmlhttprequest-ssl/tests/test-events.js | 50 + .../tests/test-exceptions.js | 59 + .../xmlhttprequest-ssl/tests/test-headers.js | 76 + .../tests/test-redirect-302.js | 41 + .../tests/test-redirect-303.js | 41 + .../tests/test-redirect-307.js | 43 + .../tests/test-request-methods.js | 62 + .../tests/test-request-protocols.js | 32 + .../xmlhttprequest-ssl/tests/testdata.txt | 1 + .../node_modules/yeast/LICENSE | 22 + .../node_modules/yeast/README.md | 82 + .../node_modules/yeast/index.js | 68 + .../node_modules/yeast/package.json | 100 + xxx/dossier sans titre 2/server.js | 45 + xxx/dossier sans titre 2/views/chambre.ejs | 14 + xxx/dossier sans titre 2/views/chambre.jsp | 1 + xxx/dossier sans titre/.DS_Store | Bin 0 -> 6148 bytes xxx/dossier sans titre/monmodule.js | 8 + xxx/dossier sans titre/node_modules/.DS_Store | Bin 0 -> 6148 bytes .../node_modules/.bin/md2html | 1 + xxx/dossier sans titre/node_modules/.bin/nopt | 1 + .../node_modules/abbrev/LICENSE | 15 + .../node_modules/abbrev/README.md | 23 + .../node_modules/abbrev/abbrev.js | 61 + .../node_modules/abbrev/package.json | 92 + .../node_modules/markdown/.npmignore | 2 + .../node_modules/markdown/.travis.yml | 7 + .../node_modules/markdown/Changes.markdown | 35 + .../node_modules/markdown/README.markdown | 185 + .../node_modules/markdown/bin/md2html.js | 52 + .../node_modules/markdown/lib/index.js | 3 + .../node_modules/markdown/lib/markdown.js | 1725 ++ .../markdown/markdown-js.sublime-project | 10 + .../markdown/markdown-js.sublime-workspace | 1993 ++ .../node_modules/markdown/package.json | 113 + .../node_modules/markdown/seed.yml | 5 + .../node_modules/nopt/.npmignore | 1 + .../node_modules/nopt/LICENSE | 23 + .../node_modules/nopt/README.md | 210 + .../node_modules/nopt/bin/nopt.js | 51 + .../node_modules/nopt/examples/my-program.js | 30 + .../node_modules/nopt/lib/nopt.js | 612 + .../node_modules/nopt/package.json | 87 + xxx/dossier sans titre/server.js | 45 + xxx/index.html | 18 + xxx/server.js | 45 + xxx/style.css | 56 + xxx/webSocket/.DS_Store | Bin 0 -> 6148 bytes xxx/webSocket/app.js | 51 + xxx/webSocket/courNodeJs.js | 23 + xxx/webSocket/fonction callBack.js | 98 + xxx/webSocket/index.html | 53 + xxx/webSocket/node_modules/accepts/HISTORY.md | 212 + xxx/webSocket/node_modules/accepts/LICENSE | 23 + xxx/webSocket/node_modules/accepts/README.md | 135 + xxx/webSocket/node_modules/accepts/index.js | 231 + .../node_modules/accepts/package.json | 112 + xxx/webSocket/node_modules/after/.npmignore | 2 + xxx/webSocket/node_modules/after/.travis.yml | 12 + xxx/webSocket/node_modules/after/LICENCE | 19 + xxx/webSocket/node_modules/after/README.md | 115 + xxx/webSocket/node_modules/after/index.js | 28 + xxx/webSocket/node_modules/after/package.json | 103 + .../node_modules/after/test/after-test.js | 120 + .../node_modules/arraybuffer.slice/.npmignore | 17 + .../node_modules/arraybuffer.slice/Makefile | 8 + .../node_modules/arraybuffer.slice/README.md | 17 + .../node_modules/arraybuffer.slice/index.js | 29 + .../arraybuffer.slice/package.json | 72 + .../arraybuffer.slice/test/slice-buffer.js | 227 + xxx/webSocket/node_modules/backo2/.npmignore | 1 + xxx/webSocket/node_modules/backo2/History.md | 12 + xxx/webSocket/node_modules/backo2/Makefile | 8 + xxx/webSocket/node_modules/backo2/Readme.md | 34 + .../node_modules/backo2/component.json | 11 + xxx/webSocket/node_modules/backo2/index.js | 85 + .../node_modules/backo2/package.json | 78 + .../node_modules/backo2/test/index.js | 18 + .../base64-arraybuffer/.npmignore | 3 + .../base64-arraybuffer/.travis.yml | 19 + .../base64-arraybuffer/LICENSE-MIT | 22 + .../node_modules/base64-arraybuffer/README.md | 20 + .../lib/base64-arraybuffer.js | 67 + .../base64-arraybuffer/package.json | 97 + .../node_modules/base64id/.npmignore | 3 + xxx/webSocket/node_modules/base64id/LICENSE | 22 + xxx/webSocket/node_modules/base64id/README.md | 18 + .../node_modules/base64id/lib/base64id.js | 103 + .../node_modules/base64id/package.json | 89 + .../node_modules/better-assert/.npmignore | 4 + .../node_modules/better-assert/History.md | 15 + .../node_modules/better-assert/Makefile | 5 + .../node_modules/better-assert/Readme.md | 61 + .../node_modules/better-assert/example.js | 10 + .../node_modules/better-assert/index.js | 38 + .../node_modules/better-assert/package.json | 100 + xxx/webSocket/node_modules/blob/.npmignore | 2 + xxx/webSocket/node_modules/blob/.zuul.yml | 14 + xxx/webSocket/node_modules/blob/Makefile | 14 + xxx/webSocket/node_modules/blob/README.md | 14 + xxx/webSocket/node_modules/blob/index.js | 96 + xxx/webSocket/node_modules/blob/package.json | 77 + xxx/webSocket/node_modules/blob/test/index.js | 94 + .../node_modules/callsite/.npmignore | 4 + .../node_modules/callsite/History.md | 10 + xxx/webSocket/node_modules/callsite/Makefile | 6 + xxx/webSocket/node_modules/callsite/Readme.md | 44 + xxx/webSocket/node_modules/callsite/index.js | 10 + .../node_modules/callsite/package.json | 77 + .../node_modules/component-bind/.npmignore | 4 + .../node_modules/component-bind/History.md | 13 + .../node_modules/component-bind/Makefile | 7 + .../node_modules/component-bind/Readme.md | 64 + .../component-bind/component.json | 13 + .../node_modules/component-bind/index.js | 23 + .../node_modules/component-bind/package.json | 81 + .../node_modules/component-emitter/History.md | 68 + .../node_modules/component-emitter/LICENSE | 24 + .../node_modules/component-emitter/Readme.md | 74 + .../node_modules/component-emitter/index.js | 163 + .../component-emitter/package.json | 218 + .../node_modules/component-inherit/.npmignore | 3 + .../node_modules/component-inherit/History.md | 5 + .../node_modules/component-inherit/Makefile | 16 + .../node_modules/component-inherit/Readme.md | 24 + .../component-inherit/component.json | 10 + .../node_modules/component-inherit/index.js | 7 + .../component-inherit/package.json | 78 + .../component-inherit/test/inherit.js | 21 + xxx/webSocket/node_modules/cookie/HISTORY.md | 118 + xxx/webSocket/node_modules/cookie/LICENSE | 24 + xxx/webSocket/node_modules/cookie/README.md | 220 + xxx/webSocket/node_modules/cookie/index.js | 195 + .../node_modules/cookie/package.json | 106 + .../node_modules/debug/.coveralls.yml | 1 + xxx/webSocket/node_modules/debug/.eslintrc | 11 + xxx/webSocket/node_modules/debug/.npmignore | 9 + xxx/webSocket/node_modules/debug/.travis.yml | 14 + xxx/webSocket/node_modules/debug/CHANGELOG.md | 350 + xxx/webSocket/node_modules/debug/LICENSE | 19 + xxx/webSocket/node_modules/debug/Makefile | 50 + xxx/webSocket/node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + xxx/webSocket/node_modules/debug/node.js | 1 + xxx/webSocket/node_modules/debug/package.json | 126 + .../node_modules/debug/src/browser.js | 185 + xxx/webSocket/node_modules/debug/src/debug.js | 202 + xxx/webSocket/node_modules/debug/src/index.js | 10 + xxx/webSocket/node_modules/debug/src/node.js | 241 + .../node_modules/engine.io-client/History.md | 677 + .../node_modules/engine.io-client/LICENSE | 22 + .../node_modules/engine.io-client/README.md | 299 + .../engine.io-client/engine.io.js | 4704 +++++ .../node_modules/engine.io-client/index.js | 2 + .../engine.io-client/lib/index.js | 10 + .../engine.io-client/lib/socket.js | 744 + .../engine.io-client/lib/transport.js | 157 + .../engine.io-client/lib/transports/index.js | 53 + .../lib/transports/polling-jsonp.js | 231 + .../lib/transports/polling-xhr.js | 413 + .../lib/transports/polling.js | 245 + .../lib/transports/websocket.js | 286 + .../engine.io-client/lib/xmlhttprequest.js | 37 + .../node_modules/debug/.coveralls.yml | 1 + .../node_modules/debug/.eslintrc | 11 + .../node_modules/debug/.npmignore | 9 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 337 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 50 + .../node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 124 + .../node_modules/debug/src/browser.js | 185 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/node.js | 241 + .../engine.io-client/package.json | 152 + .../node_modules/engine.io-parser/History.md | 177 + .../node_modules/engine.io-parser/LICENSE | 22 + .../node_modules/engine.io-parser/Readme.md | 202 + .../node_modules/engine.io-parser/index.js | 2 + .../engine.io-parser/lib/browser.js | 606 + .../engine.io-parser/lib/index.js | 480 + .../node_modules/engine.io-parser/lib/keys.js | 19 + .../node_modules/engine.io-parser/lib/utf8.js | 255 + .../engine.io-parser/package.json | 101 + .../node_modules/engine.io/History.md | 608 + xxx/webSocket/node_modules/engine.io/LICENSE | 19 + .../node_modules/engine.io/README.md | 539 + xxx/webSocket/node_modules/engine.io/index.js | 4 + .../node_modules/engine.io/lib/engine.io.js | 126 + .../node_modules/engine.io/lib/server.js | 518 + .../node_modules/engine.io/lib/socket.js | 483 + .../node_modules/engine.io/lib/transport.js | 128 + .../engine.io/lib/transports/index.js | 36 + .../engine.io/lib/transports/polling-jsonp.js | 75 + .../engine.io/lib/transports/polling-xhr.js | 69 + .../engine.io/lib/transports/polling.js | 408 + .../engine.io/lib/transports/websocket.js | 134 + .../node_modules/engine.io/package.json | 135 + .../node_modules/has-binary2/History.md | 39 + .../node_modules/has-binary2/LICENSE | 20 + .../node_modules/has-binary2/README.md | 4 + .../node_modules/has-binary2/index.js | 62 + .../node_modules/has-binary2/package.json | 85 + .../node_modules/has-cors/.npmignore | 3 + .../node_modules/has-cors/History.md | 21 + xxx/webSocket/node_modules/has-cors/Makefile | 11 + xxx/webSocket/node_modules/has-cors/Readme.md | 24 + .../node_modules/has-cors/component.json | 13 + xxx/webSocket/node_modules/has-cors/index.js | 17 + .../node_modules/has-cors/package.json | 97 + xxx/webSocket/node_modules/has-cors/test.js | 24 + xxx/webSocket/node_modules/indexof/.npmignore | 2 + xxx/webSocket/node_modules/indexof/Makefile | 11 + xxx/webSocket/node_modules/indexof/Readme.md | 15 + .../node_modules/indexof/component.json | 10 + xxx/webSocket/node_modules/indexof/index.js | 10 + .../node_modules/indexof/package.json | 67 + xxx/webSocket/node_modules/isarray/README.md | 54 + xxx/webSocket/node_modules/isarray/index.js | 5 + .../node_modules/isarray/package.json | 113 + xxx/webSocket/node_modules/mime-db/HISTORY.md | 412 + xxx/webSocket/node_modules/mime-db/LICENSE | 22 + xxx/webSocket/node_modules/mime-db/README.md | 82 + xxx/webSocket/node_modules/mime-db/db.json | 6805 ++++++ xxx/webSocket/node_modules/mime-db/index.js | 11 + .../node_modules/mime-db/package.json | 138 + .../node_modules/mime-types/HISTORY.md | 223 + xxx/webSocket/node_modules/mime-types/LICENSE | 23 + .../node_modules/mime-types/README.md | 108 + .../node_modules/mime-types/index.js | 188 + .../node_modules/mime-types/package.json | 127 + xxx/webSocket/node_modules/ms/index.js | 149 + xxx/webSocket/node_modules/ms/license.md | 21 + xxx/webSocket/node_modules/ms/package.json | 110 + xxx/webSocket/node_modules/ms/readme.md | 52 + .../node_modules/negotiator/HISTORY.md | 98 + xxx/webSocket/node_modules/negotiator/LICENSE | 24 + .../node_modules/negotiator/README.md | 203 + .../node_modules/negotiator/index.js | 124 + .../node_modules/negotiator/lib/charset.js | 169 + .../node_modules/negotiator/lib/encoding.js | 184 + .../node_modules/negotiator/lib/language.js | 179 + .../node_modules/negotiator/lib/mediaType.js | 294 + .../node_modules/negotiator/package.json | 125 + .../node_modules/object-assign/index.js | 90 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 118 + .../node_modules/object-assign/readme.md | 61 + .../node_modules/object-component/.npmignore | 3 + .../node_modules/object-component/History.md | 10 + .../node_modules/object-component/Makefile | 16 + .../node_modules/object-component/Readme.md | 31 + .../object-component/component.json | 10 + .../node_modules/object-component/index.js | 84 + .../object-component/package.json | 69 + .../object-component/test/object.js | 48 + .../node_modules/parsejson/.npmignore | 2 + xxx/webSocket/node_modules/parsejson/LICENSE | 21 + xxx/webSocket/node_modules/parsejson/Makefile | 3 + .../node_modules/parsejson/README.md | 2 + xxx/webSocket/node_modules/parsejson/index.js | 32 + .../node_modules/parsejson/package.json | 87 + xxx/webSocket/node_modules/parsejson/test.js | 21 + xxx/webSocket/node_modules/parseqs/.npmignore | 3 + xxx/webSocket/node_modules/parseqs/LICENSE | 21 + xxx/webSocket/node_modules/parseqs/Makefile | 3 + xxx/webSocket/node_modules/parseqs/README.md | 1 + xxx/webSocket/node_modules/parseqs/index.js | 37 + .../node_modules/parseqs/package.json | 87 + xxx/webSocket/node_modules/parseqs/test.js | 27 + .../node_modules/parseuri/.npmignore | 2 + .../node_modules/parseuri/History.md | 5 + xxx/webSocket/node_modules/parseuri/LICENSE | 21 + xxx/webSocket/node_modules/parseuri/Makefile | 3 + xxx/webSocket/node_modules/parseuri/README.md | 2 + xxx/webSocket/node_modules/parseuri/index.js | 39 + .../node_modules/parseuri/package.json | 86 + xxx/webSocket/node_modules/parseuri/test.js | 51 + .../node_modules/safe-buffer/.travis.yml | 7 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 581 + .../node_modules/safe-buffer/browser.js | 1 + .../node_modules/safe-buffer/index.js | 58 + .../node_modules/safe-buffer/package.json | 103 + .../node_modules/safe-buffer/test.js | 99 + .../node_modules/socket.io-adapter/.npmignore | 1 + .../node_modules/socket.io-adapter/History.md | 54 + .../node_modules/socket.io-adapter/LICENSE | 20 + .../node_modules/socket.io-adapter/Readme.md | 16 + .../node_modules/socket.io-adapter/index.js | 263 + .../node_modules/debug/.jshintrc | 3 + .../node_modules/debug/.npmignore | 7 + .../node_modules/debug/CHANGELOG.md | 235 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 37 + .../node_modules/debug/Readme.md | 199 + .../node_modules/debug/bower.json | 29 + .../node_modules/debug/browser.js | 177 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/debug.js | 200 + .../node_modules/debug/index.js | 10 + .../node_modules/debug/node.js | 213 + .../node_modules/debug/package.json | 122 + .../node_modules/ms/LICENSE.md | 21 + .../node_modules/ms/README.md | 52 + .../node_modules/ms/index.js | 149 + .../node_modules/ms/package.json | 108 + .../socket.io-adapter/package.json | 83 + .../node_modules/socket.io-client/.DS_Store | Bin 0 -> 8196 bytes .../node_modules/socket.io-client/History.md | 548 + .../node_modules/socket.io-client/LICENSE | 22 + .../node_modules/socket.io-client/README.md | 50 + .../socket.io-client/dist/socket.io.js | 3 + .../socket.io-client/dist/socket.io.js.map | 1 + .../socket.io-client/dist/socket.io.slim.js | 3 + .../dist/socket.io.slim.js.map | 1 + .../socket.io-client/lib/index.js | 109 + .../socket.io-client/lib/manager.js | 573 + .../node_modules/socket.io-client/lib/on.js | 24 + .../socket.io-client/lib/socket.js | 415 + .../node_modules/socket.io-client/lib/url.js | 75 + .../node_modules/debug/.coveralls.yml | 1 + .../node_modules/debug/.eslintrc | 11 + .../node_modules/debug/.npmignore | 9 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 337 + .../node_modules/debug/LICENSE | 19 + .../node_modules/debug/Makefile | 50 + .../node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + .../node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 124 + .../node_modules/debug/src/browser.js | 185 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/node.js | 241 + .../socket.io-client/package.json | 155 + .../node_modules/socket.io-parser/History.md | 160 + .../node_modules/socket.io-parser/LICENSE | 20 + .../node_modules/socket.io-parser/Readme.md | 73 + .../node_modules/socket.io-parser/binary.js | 141 + .../node_modules/socket.io-parser/index.js | 400 + .../socket.io-parser/is-buffer.js | 13 + .../socket.io-parser/package.json | 101 + .../node_modules/socket.io/History.md | 707 + xxx/webSocket/node_modules/socket.io/LICENSE | 22 + .../node_modules/socket.io/Readme.md | 242 + .../node_modules/socket.io/lib/client.js | 252 + .../node_modules/socket.io/lib/index.js | 461 + .../node_modules/socket.io/lib/namespace.js | 270 + .../node_modules/socket.io/lib/socket.js | 553 + .../node_modules/socket.io/package.json | 134 + .../node_modules/to-array/.npmignore | 3 + xxx/webSocket/node_modules/to-array/LICENCE | 19 + xxx/webSocket/node_modules/to-array/README.md | 22 + xxx/webSocket/node_modules/to-array/index.js | 13 + .../node_modules/to-array/package.json | 98 + xxx/webSocket/node_modules/ultron/LICENSE | 22 + xxx/webSocket/node_modules/ultron/index.js | 138 + .../node_modules/ultron/package.json | 112 + xxx/webSocket/node_modules/uws/LICENSE | 17 + xxx/webSocket/node_modules/uws/README.md | 32 + xxx/webSocket/node_modules/uws/binding.gyp | 80 + xxx/webSocket/node_modules/uws/build/Makefile | 347 + .../obj.target/action_after_build.stamp.d | 1 + .../Release/obj.target/uws/src/Extensions.o.d | 5 + .../Release/obj.target/uws/src/Group.o.d | 115 + .../Release/obj.target/uws/src/HTTPSocket.o.d | 110 + .../.deps/Release/obj.target/uws/src/Hub.o.d | 116 + .../Release/obj.target/uws/src/Networking.o.d | 102 + .../.deps/Release/obj.target/uws/src/Node.o.d | 104 + .../Release/obj.target/uws/src/Socket.o.d | 103 + .../Release/obj.target/uws/src/WebSocket.o.d | 116 + .../Release/obj.target/uws/src/addon.o.d | 132 + .../build/Release/.deps/Release/uws.node.d | 1 + .../uws/build/Release/.deps/uws.d | 1 + .../obj.target/action_after_build.stamp | 0 .../Release/obj.target/uws/src/Extensions.o | Bin 0 -> 4944 bytes .../build/Release/obj.target/uws/src/Group.o | Bin 0 -> 136328 bytes .../Release/obj.target/uws/src/HTTPSocket.o | Bin 0 -> 25872 bytes .../build/Release/obj.target/uws/src/Hub.o | Bin 0 -> 25972 bytes .../Release/obj.target/uws/src/Networking.o | Bin 0 -> 7316 bytes .../build/Release/obj.target/uws/src/Node.o | Bin 0 -> 4080 bytes .../build/Release/obj.target/uws/src/Socket.o | Bin 0 -> 1556 bytes .../Release/obj.target/uws/src/WebSocket.o | Bin 0 -> 36848 bytes .../build/Release/obj.target/uws/src/addon.o | Bin 0 -> 146112 bytes .../node_modules/uws/build/Release/uws.node | Bin 0 -> 377616 bytes .../uws/build/action_after_build.target.mk | 47 + .../node_modules/uws/build/binding.Makefile | 6 + .../node_modules/uws/build/config.gypi | 159 + .../node_modules/uws/build/gyp-mac-tool | 611 + .../node_modules/uws/build/uws.target.mk | 175 + xxx/webSocket/node_modules/uws/build_log.txt | 135 + xxx/webSocket/node_modules/uws/package.json | 91 + xxx/webSocket/node_modules/uws/src/Asio.h | 184 + xxx/webSocket/node_modules/uws/src/Backend.h | 15 + xxx/webSocket/node_modules/uws/src/Epoll.cpp | 60 + xxx/webSocket/node_modules/uws/src/Epoll.h | 257 + .../node_modules/uws/src/Extensions.cpp | 131 + .../node_modules/uws/src/Extensions.h | 29 + xxx/webSocket/node_modules/uws/src/Group.cpp | 263 + xxx/webSocket/node_modules/uws/src/Group.h | 144 + .../node_modules/uws/src/HTTPSocket.cpp | 310 + .../node_modules/uws/src/HTTPSocket.h | 285 + xxx/webSocket/node_modules/uws/src/Hub.cpp | 177 + xxx/webSocket/node_modules/uws/src/Hub.h | 97 + xxx/webSocket/node_modules/uws/src/Libuv.h | 175 + .../node_modules/uws/src/Networking.cpp | 78 + .../node_modules/uws/src/Networking.h | 259 + xxx/webSocket/node_modules/uws/src/Node.cpp | 83 + xxx/webSocket/node_modules/uws/src/Node.h | 198 + xxx/webSocket/node_modules/uws/src/Socket.cpp | 28 + xxx/webSocket/node_modules/uws/src/Socket.h | 507 + .../node_modules/uws/src/WebSocket.cpp | 405 + .../node_modules/uws/src/WebSocket.h | 89 + .../node_modules/uws/src/WebSocketProtocol.h | 377 + xxx/webSocket/node_modules/uws/src/addon.cpp | 24 + xxx/webSocket/node_modules/uws/src/addon.h | 464 + xxx/webSocket/node_modules/uws/src/http.h | 357 + xxx/webSocket/node_modules/uws/src/uWS.h | 6 + xxx/webSocket/node_modules/uws/uws.js | 563 + .../node_modules/uws/uws_darwin_46.node | Bin 0 -> 377568 bytes .../node_modules/uws/uws_darwin_47.node | Bin 0 -> 377568 bytes .../node_modules/uws/uws_darwin_48.node | Bin 0 -> 377560 bytes .../node_modules/uws/uws_darwin_51.node | Bin 0 -> 377616 bytes .../node_modules/uws/uws_linux_46.node | Bin 0 -> 1563976 bytes .../node_modules/uws/uws_linux_47.node | Bin 0 -> 1563976 bytes .../node_modules/uws/uws_linux_48.node | Bin 0 -> 1563976 bytes .../node_modules/uws/uws_linux_51.node | Bin 0 -> 1563976 bytes .../node_modules/uws/uws_win32_48.node | Bin 0 -> 641024 bytes .../node_modules/uws/uws_win32_51.node | Bin 0 -> 641536 bytes xxx/webSocket/node_modules/ws/LICENSE | 21 + xxx/webSocket/node_modules/ws/README.md | 260 + xxx/webSocket/node_modules/ws/index.js | 15 + .../node_modules/ws/lib/BufferUtil.js | 71 + .../node_modules/ws/lib/Constants.js | 10 + .../node_modules/ws/lib/ErrorCodes.js | 28 + .../node_modules/ws/lib/EventTarget.js | 155 + .../node_modules/ws/lib/Extensions.js | 67 + .../node_modules/ws/lib/PerMessageDeflate.js | 384 + xxx/webSocket/node_modules/ws/lib/Receiver.js | 555 + xxx/webSocket/node_modules/ws/lib/Sender.js | 403 + .../node_modules/ws/lib/Validation.js | 17 + .../node_modules/ws/lib/WebSocket.js | 712 + .../node_modules/ws/lib/WebSocketServer.js | 336 + xxx/webSocket/node_modules/ws/package.json | 127 + .../node_modules/xmlhttprequest-ssl/LICENSE | 22 + .../node_modules/xmlhttprequest-ssl/README.md | 61 + .../xmlhttprequest-ssl/autotest.watchr | 8 + .../xmlhttprequest-ssl/example/demo.js | 16 + .../xmlhttprequest-ssl/lib/XMLHttpRequest.js | 650 + .../xmlhttprequest-ssl/package.json | 98 + .../tests/test-constants.js | 13 + .../xmlhttprequest-ssl/tests/test-events.js | 50 + .../tests/test-exceptions.js | 59 + .../xmlhttprequest-ssl/tests/test-headers.js | 76 + .../tests/test-redirect-302.js | 41 + .../tests/test-redirect-303.js | 41 + .../tests/test-redirect-307.js | 43 + .../tests/test-request-methods.js | 62 + .../tests/test-request-protocols.js | 32 + .../xmlhttprequest-ssl/tests/testdata.txt | 1 + xxx/webSocket/node_modules/yeast/LICENSE | 22 + xxx/webSocket/node_modules/yeast/README.md | 82 + xxx/webSocket/node_modules/yeast/index.js | 68 + xxx/webSocket/node_modules/yeast/package.json | 100 + xxx/webSocket/test.html | 28 + 4638 files changed, 505715 insertions(+) create mode 100644 .DS_Store create mode 100644 .idea/NodeJs.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/workspace.xml create mode 100644 Model/Beans/User.js create mode 100644 Model/Vendor/Count.js create mode 100644 Model/Vendor/Insert.js create mode 100644 Model/Vendor/SelectUser.js create mode 100644 Views/chat.html.twig create mode 100644 Views/login.html.twig create mode 100644 Views/profil.html.twig create mode 100644 Views/register.html.twig create mode 100644 Views/zzz.html create mode 100644 app.js create mode 100644 index.html create mode 100644 newServer.js create mode 100644 node_modules/.DS_Store create mode 120000 node_modules/.bin/semver create mode 120000 node_modules/.bin/twigjs create mode 100644 node_modules/accepts/HISTORY.md create mode 100644 node_modules/accepts/LICENSE create mode 100644 node_modules/accepts/README.md create mode 100644 node_modules/accepts/index.js create mode 100644 node_modules/accepts/node_modules/mime-db/HISTORY.md create mode 100644 node_modules/accepts/node_modules/mime-db/LICENSE create mode 100644 node_modules/accepts/node_modules/mime-db/README.md create mode 100644 node_modules/accepts/node_modules/mime-db/db.json create mode 100644 node_modules/accepts/node_modules/mime-db/index.js create mode 100644 node_modules/accepts/node_modules/mime-db/package.json create mode 100644 node_modules/accepts/node_modules/mime-types/HISTORY.md create mode 100644 node_modules/accepts/node_modules/mime-types/LICENSE create mode 100644 node_modules/accepts/node_modules/mime-types/README.md create mode 100644 node_modules/accepts/node_modules/mime-types/index.js create mode 100644 node_modules/accepts/node_modules/mime-types/package.json create mode 100644 node_modules/accepts/package.json create mode 100644 node_modules/after/.npmignore create mode 100644 node_modules/after/.travis.yml create mode 100644 node_modules/after/LICENCE create mode 100644 node_modules/after/README.md create mode 100644 node_modules/after/index.js create mode 100644 node_modules/after/package.json create mode 100644 node_modules/after/test/after-test.js create mode 100644 node_modules/arraybuffer.slice/.npmignore create mode 100644 node_modules/arraybuffer.slice/Makefile create mode 100644 node_modules/arraybuffer.slice/README.md create mode 100644 node_modules/arraybuffer.slice/index.js create mode 100644 node_modules/arraybuffer.slice/package.json create mode 100644 node_modules/arraybuffer.slice/test/slice-buffer.js create mode 100644 node_modules/async/CHANGELOG.md create mode 100644 node_modules/async/LICENSE create mode 100644 node_modules/async/README.md create mode 100644 node_modules/async/apply.js create mode 100644 node_modules/async/applyEach.js create mode 100644 node_modules/async/applyEachSeries.js create mode 100644 node_modules/async/asyncify.js create mode 100644 node_modules/async/auto.js create mode 100644 node_modules/async/autoInject.js create mode 100644 node_modules/async/bower.json create mode 100644 node_modules/async/cargo.js create mode 100644 node_modules/async/compose.js create mode 100644 node_modules/async/concat.js create mode 100644 node_modules/async/concatSeries.js create mode 100644 node_modules/async/constant.js create mode 100644 node_modules/async/detect.js create mode 100644 node_modules/async/detectLimit.js create mode 100644 node_modules/async/detectSeries.js create mode 100644 node_modules/async/dir.js create mode 100644 node_modules/async/dist/async.js create mode 100644 node_modules/async/dist/async.min.js create mode 100644 node_modules/async/doDuring.js create mode 100644 node_modules/async/doUntil.js create mode 100644 node_modules/async/doWhilst.js create mode 100644 node_modules/async/during.js create mode 100644 node_modules/async/each.js create mode 100644 node_modules/async/eachLimit.js create mode 100644 node_modules/async/eachOf.js create mode 100644 node_modules/async/eachOfLimit.js create mode 100644 node_modules/async/eachOfSeries.js create mode 100644 node_modules/async/eachSeries.js create mode 100644 node_modules/async/ensureAsync.js create mode 100644 node_modules/async/every.js create mode 100644 node_modules/async/everyLimit.js create mode 100644 node_modules/async/everySeries.js create mode 100644 node_modules/async/filter.js create mode 100644 node_modules/async/filterLimit.js create mode 100644 node_modules/async/filterSeries.js create mode 100644 node_modules/async/forever.js create mode 100644 node_modules/async/groupBy.js create mode 100644 node_modules/async/groupByLimit.js create mode 100644 node_modules/async/groupBySeries.js create mode 100644 node_modules/async/index.js create mode 100644 node_modules/async/internal/DoublyLinkedList.js create mode 100644 node_modules/async/internal/applyEach.js create mode 100644 node_modules/async/internal/breakLoop.js create mode 100644 node_modules/async/internal/concat.js create mode 100644 node_modules/async/internal/consoleFunc.js create mode 100644 node_modules/async/internal/createTester.js create mode 100644 node_modules/async/internal/doLimit.js create mode 100644 node_modules/async/internal/doParallel.js create mode 100644 node_modules/async/internal/doParallelLimit.js create mode 100644 node_modules/async/internal/doSeries.js create mode 100644 node_modules/async/internal/eachOfLimit.js create mode 100644 node_modules/async/internal/filter.js create mode 100644 node_modules/async/internal/findGetResult.js create mode 100644 node_modules/async/internal/getIterator.js create mode 100644 node_modules/async/internal/initialParams.js create mode 100644 node_modules/async/internal/iterator.js create mode 100644 node_modules/async/internal/map.js create mode 100644 node_modules/async/internal/notId.js create mode 100644 node_modules/async/internal/once.js create mode 100644 node_modules/async/internal/onlyOnce.js create mode 100644 node_modules/async/internal/parallel.js create mode 100644 node_modules/async/internal/queue.js create mode 100644 node_modules/async/internal/reject.js create mode 100644 node_modules/async/internal/setImmediate.js create mode 100644 node_modules/async/internal/slice.js create mode 100644 node_modules/async/internal/withoutIndex.js create mode 100644 node_modules/async/internal/wrapAsync.js create mode 100644 node_modules/async/log.js create mode 100644 node_modules/async/map.js create mode 100644 node_modules/async/mapLimit.js create mode 100644 node_modules/async/mapSeries.js create mode 100644 node_modules/async/mapValues.js create mode 100644 node_modules/async/mapValuesLimit.js create mode 100644 node_modules/async/mapValuesSeries.js create mode 100644 node_modules/async/memoize.js create mode 100644 node_modules/async/nextTick.js create mode 100644 node_modules/async/package.json create mode 100644 node_modules/async/parallel.js create mode 100644 node_modules/async/parallelLimit.js create mode 100644 node_modules/async/priorityQueue.js create mode 100644 node_modules/async/queue.js create mode 100644 node_modules/async/race.js create mode 100644 node_modules/async/reduce.js create mode 100644 node_modules/async/reduceRight.js create mode 100644 node_modules/async/reflect.js create mode 100644 node_modules/async/reflectAll.js create mode 100644 node_modules/async/reject.js create mode 100644 node_modules/async/rejectLimit.js create mode 100644 node_modules/async/rejectSeries.js create mode 100644 node_modules/async/retry.js create mode 100644 node_modules/async/retryable.js create mode 100644 node_modules/async/seq.js create mode 100644 node_modules/async/series.js create mode 100644 node_modules/async/setImmediate.js create mode 100644 node_modules/async/some.js create mode 100644 node_modules/async/someLimit.js create mode 100644 node_modules/async/someSeries.js create mode 100644 node_modules/async/sortBy.js create mode 100644 node_modules/async/timeout.js create mode 100644 node_modules/async/times.js create mode 100644 node_modules/async/timesLimit.js create mode 100644 node_modules/async/timesSeries.js create mode 100644 node_modules/async/transform.js create mode 100644 node_modules/async/tryEach.js create mode 100644 node_modules/async/unmemoize.js create mode 100644 node_modules/async/until.js create mode 100644 node_modules/async/waterfall.js create mode 100644 node_modules/async/whilst.js create mode 100644 node_modules/backo2/.npmignore create mode 100644 node_modules/backo2/History.md create mode 100644 node_modules/backo2/Makefile create mode 100644 node_modules/backo2/Readme.md create mode 100644 node_modules/backo2/component.json create mode 100644 node_modules/backo2/index.js create mode 100644 node_modules/backo2/package.json create mode 100644 node_modules/backo2/test/index.js create mode 100644 node_modules/balanced-match/.npmignore create mode 100644 node_modules/balanced-match/LICENSE.md create mode 100644 node_modules/balanced-match/README.md create mode 100644 node_modules/balanced-match/index.js create mode 100644 node_modules/balanced-match/package.json create mode 100644 node_modules/base64-arraybuffer/.npmignore create mode 100644 node_modules/base64-arraybuffer/.travis.yml create mode 100644 node_modules/base64-arraybuffer/LICENSE-MIT create mode 100644 node_modules/base64-arraybuffer/README.md create mode 100644 node_modules/base64-arraybuffer/lib/base64-arraybuffer.js create mode 100644 node_modules/base64-arraybuffer/package.json create mode 100644 node_modules/base64id/.npmignore create mode 100644 node_modules/base64id/LICENSE create mode 100644 node_modules/base64id/README.md create mode 100644 node_modules/base64id/lib/base64id.js create mode 100644 node_modules/base64id/package.json create mode 100644 node_modules/better-assert/.npmignore create mode 100644 node_modules/better-assert/History.md create mode 100644 node_modules/better-assert/Makefile create mode 100644 node_modules/better-assert/Readme.md create mode 100644 node_modules/better-assert/example.js create mode 100644 node_modules/better-assert/index.js create mode 100644 node_modules/better-assert/package.json create mode 100644 node_modules/bindings/README.md create mode 100644 node_modules/bindings/bindings.js create mode 100644 node_modules/bindings/package.json create mode 100644 node_modules/blob/.npmignore create mode 100644 node_modules/blob/.zuul.yml create mode 100644 node_modules/blob/Makefile create mode 100644 node_modules/blob/README.md create mode 100644 node_modules/blob/index.js create mode 100644 node_modules/blob/package.json create mode 100644 node_modules/blob/test/index.js create mode 100644 node_modules/body-parser/HISTORY.md create mode 100644 node_modules/body-parser/LICENSE create mode 100644 node_modules/body-parser/README.md create mode 100644 node_modules/body-parser/index.js create mode 100644 node_modules/body-parser/lib/read.js create mode 100644 node_modules/body-parser/lib/types/json.js create mode 100644 node_modules/body-parser/lib/types/raw.js create mode 100644 node_modules/body-parser/lib/types/text.js create mode 100644 node_modules/body-parser/lib/types/urlencoded.js create mode 100644 node_modules/body-parser/package.json create mode 100644 node_modules/brace-expansion/README.md create mode 100644 node_modules/brace-expansion/index.js create mode 100644 node_modules/brace-expansion/package.json create mode 100644 node_modules/bson/HISTORY.md create mode 100644 node_modules/bson/LICENSE.md create mode 100644 node_modules/bson/README.md create mode 100644 node_modules/bson/bower.json create mode 100644 node_modules/bson/browser_build/bson.js create mode 100644 node_modules/bson/browser_build/package.json create mode 100644 node_modules/bson/index.js create mode 100644 node_modules/bson/lib/bson/binary.js create mode 100644 node_modules/bson/lib/bson/bson.js create mode 100644 node_modules/bson/lib/bson/code.js create mode 100644 node_modules/bson/lib/bson/db_ref.js create mode 100644 node_modules/bson/lib/bson/decimal128.js create mode 100644 node_modules/bson/lib/bson/double.js create mode 100644 node_modules/bson/lib/bson/float_parser.js create mode 100644 node_modules/bson/lib/bson/int_32.js create mode 100644 node_modules/bson/lib/bson/long.js create mode 100644 node_modules/bson/lib/bson/map.js create mode 100644 node_modules/bson/lib/bson/max_key.js create mode 100644 node_modules/bson/lib/bson/min_key.js create mode 100644 node_modules/bson/lib/bson/objectid.js create mode 100644 node_modules/bson/lib/bson/parser/calculate_size.js create mode 100644 node_modules/bson/lib/bson/parser/deserializer.js create mode 100644 node_modules/bson/lib/bson/parser/serializer.js create mode 100644 node_modules/bson/lib/bson/regexp.js create mode 100644 node_modules/bson/lib/bson/symbol.js create mode 100644 node_modules/bson/lib/bson/timestamp.js create mode 100644 node_modules/bson/package.json create mode 100644 node_modules/buffer-shims/index.js create mode 100644 node_modules/buffer-shims/license.md create mode 100644 node_modules/buffer-shims/package.json create mode 100644 node_modules/buffer-shims/readme.md create mode 100644 node_modules/bytes/History.md create mode 100644 node_modules/bytes/LICENSE create mode 100644 node_modules/bytes/Readme.md create mode 100644 node_modules/bytes/index.js create mode 100644 node_modules/bytes/package.json create mode 100644 node_modules/callsite/.npmignore create mode 100644 node_modules/callsite/History.md create mode 100644 node_modules/callsite/Makefile create mode 100644 node_modules/callsite/Readme.md create mode 100644 node_modules/callsite/index.js create mode 100644 node_modules/callsite/package.json create mode 100644 node_modules/component-bind/.npmignore create mode 100644 node_modules/component-bind/History.md create mode 100644 node_modules/component-bind/Makefile create mode 100644 node_modules/component-bind/Readme.md create mode 100644 node_modules/component-bind/component.json create mode 100644 node_modules/component-bind/index.js create mode 100644 node_modules/component-bind/package.json create mode 100644 node_modules/component-emitter/History.md create mode 100644 node_modules/component-emitter/LICENSE create mode 100644 node_modules/component-emitter/Readme.md create mode 100644 node_modules/component-emitter/index.js create mode 100644 node_modules/component-emitter/package.json create mode 100644 node_modules/component-inherit/.npmignore create mode 100644 node_modules/component-inherit/History.md create mode 100644 node_modules/component-inherit/Makefile create mode 100644 node_modules/component-inherit/Readme.md create mode 100644 node_modules/component-inherit/component.json create mode 100644 node_modules/component-inherit/index.js create mode 100644 node_modules/component-inherit/package.json create mode 100644 node_modules/component-inherit/test/inherit.js create mode 100644 node_modules/concat-map/.travis.yml create mode 100644 node_modules/concat-map/LICENSE create mode 100644 node_modules/concat-map/README.markdown create mode 100644 node_modules/concat-map/example/map.js create mode 100644 node_modules/concat-map/index.js create mode 100644 node_modules/concat-map/package.json create mode 100644 node_modules/concat-map/test/map.js create mode 100644 node_modules/content-disposition/HISTORY.md create mode 100644 node_modules/content-disposition/LICENSE create mode 100644 node_modules/content-disposition/README.md create mode 100644 node_modules/content-disposition/index.js create mode 100644 node_modules/content-disposition/package.json create mode 100644 node_modules/content-type/HISTORY.md create mode 100644 node_modules/content-type/LICENSE create mode 100644 node_modules/content-type/README.md create mode 100644 node_modules/content-type/index.js create mode 100644 node_modules/content-type/package.json create mode 100644 node_modules/cookie-parser/HISTORY.md create mode 100644 node_modules/cookie-parser/LICENSE create mode 100644 node_modules/cookie-parser/README.md create mode 100644 node_modules/cookie-parser/index.js create mode 100644 node_modules/cookie-parser/package.json create mode 100644 node_modules/cookie-signature/.npmignore create mode 100644 node_modules/cookie-signature/History.md create mode 100644 node_modules/cookie-signature/Readme.md create mode 100644 node_modules/cookie-signature/index.js create mode 100644 node_modules/cookie-signature/package.json create mode 100644 node_modules/cookie/HISTORY.md create mode 100644 node_modules/cookie/LICENSE create mode 100644 node_modules/cookie/README.md create mode 100644 node_modules/cookie/index.js create mode 100644 node_modules/cookie/package.json create mode 100644 node_modules/core-util-is/LICENSE create mode 100644 node_modules/core-util-is/README.md create mode 100644 node_modules/core-util-is/float.patch create mode 100644 node_modules/core-util-is/lib/util.js create mode 100644 node_modules/core-util-is/package.json create mode 100644 node_modules/core-util-is/test.js create mode 100644 node_modules/crc/LICENSE create mode 100644 node_modules/crc/README.md create mode 100644 node_modules/crc/lib/crc1.js create mode 100644 node_modules/crc/lib/crc16.js create mode 100644 node_modules/crc/lib/crc16_ccitt.js create mode 100644 node_modules/crc/lib/crc16_kermit.js create mode 100644 node_modules/crc/lib/crc16_modbus.js create mode 100644 node_modules/crc/lib/crc16_xmodem.js create mode 100644 node_modules/crc/lib/crc24.js create mode 100644 node_modules/crc/lib/crc32.js create mode 100644 node_modules/crc/lib/crc8.js create mode 100644 node_modules/crc/lib/crc8_1wire.js create mode 100644 node_modules/crc/lib/create_buffer.js create mode 100644 node_modules/crc/lib/define_crc.js create mode 100644 node_modules/crc/lib/index.js create mode 100644 node_modules/crc/package.json create mode 100644 node_modules/deasync-promise/.npmignore create mode 100644 node_modules/deasync-promise/Readme.md create mode 100644 node_modules/deasync-promise/index.js create mode 100644 node_modules/deasync-promise/package.json create mode 100644 node_modules/deasync/.npmignore create mode 100644 node_modules/deasync/README.md create mode 100755 node_modules/deasync/bin/darwin-x64-node-0.10/deasync.node create mode 100755 node_modules/deasync/bin/darwin-x64-node-0.11/deasync.node create mode 100755 node_modules/deasync/bin/darwin-x64-node-0.12/deasync.node create mode 100755 node_modules/deasync/bin/darwin-x64-node-4/deasync.node create mode 100755 node_modules/deasync/bin/darwin-x64-node-5/deasync.node create mode 100755 node_modules/deasync/bin/darwin-x64-node-6/deasync.node create mode 100755 node_modules/deasync/bin/darwin-x64-node-7/deasync.node create mode 100755 node_modules/deasync/bin/darwin-x64-node-8/deasync.node create mode 100755 node_modules/deasync/bin/linux-ia32-node-0.10/deasync.node create mode 100755 node_modules/deasync/bin/linux-ia32-node-0.11/deasync.node create mode 100755 node_modules/deasync/bin/linux-ia32-node-0.12/deasync.node create mode 100755 node_modules/deasync/bin/linux-ia32-node-4/deasync.node create mode 100755 node_modules/deasync/bin/linux-ia32-node-5/deasync.node create mode 100755 node_modules/deasync/bin/linux-ia32-node-6/deasync.node create mode 100755 node_modules/deasync/bin/linux-ia32-node-7/deasync.node create mode 100755 node_modules/deasync/bin/linux-ia32-node-8/deasync.node create mode 100755 node_modules/deasync/bin/linux-x64-node-0.10/deasync.node create mode 100755 node_modules/deasync/bin/linux-x64-node-0.11/deasync.node create mode 100755 node_modules/deasync/bin/linux-x64-node-0.12/deasync.node create mode 100755 node_modules/deasync/bin/linux-x64-node-4/deasync.node create mode 100755 node_modules/deasync/bin/linux-x64-node-5/deasync.node create mode 100755 node_modules/deasync/bin/linux-x64-node-6/deasync.node create mode 100755 node_modules/deasync/bin/linux-x64-node-7/deasync.node create mode 100755 node_modules/deasync/bin/linux-x64-node-8/deasync.node create mode 100644 node_modules/deasync/bin/win32-ia32-node-0.10/deasync.node create mode 100644 node_modules/deasync/bin/win32-ia32-node-0.11/deasync.node create mode 100644 node_modules/deasync/bin/win32-ia32-node-0.12/deasync.node create mode 100644 node_modules/deasync/bin/win32-ia32-node-4/deasync.node create mode 100644 node_modules/deasync/bin/win32-ia32-node-5/deasync.node create mode 100644 node_modules/deasync/bin/win32-ia32-node-6/deasync.node create mode 100644 node_modules/deasync/bin/win32-ia32-node-7/deasync.node create mode 100644 node_modules/deasync/bin/win32-ia32-node-8/deasync.node create mode 100644 node_modules/deasync/bin/win32-x64-node-0.10/deasync.node create mode 100644 node_modules/deasync/bin/win32-x64-node-0.11/deasync.node create mode 100644 node_modules/deasync/bin/win32-x64-node-0.12/deasync.node create mode 100644 node_modules/deasync/bin/win32-x64-node-4/deasync.node create mode 100644 node_modules/deasync/bin/win32-x64-node-5/deasync.node create mode 100644 node_modules/deasync/bin/win32-x64-node-6/deasync.node create mode 100644 node_modules/deasync/bin/win32-x64-node-7/deasync.node create mode 100644 node_modules/deasync/bin/win32-x64-node-8/deasync.node create mode 100644 node_modules/deasync/binding.gyp create mode 100644 node_modules/deasync/build.js create mode 100644 node_modules/deasync/index.js create mode 100644 node_modules/deasync/package-lock.json create mode 100644 node_modules/deasync/package.json create mode 100644 node_modules/deasync/quick-test.js create mode 100644 node_modules/deasync/src/deasync.cc create mode 100644 node_modules/deasync/test.js create mode 100644 node_modules/debug/.coveralls.yml create mode 100644 node_modules/debug/.eslintrc create mode 100644 node_modules/debug/.npmignore create mode 100644 node_modules/debug/.travis.yml create mode 100644 node_modules/debug/CHANGELOG.md create mode 100644 node_modules/debug/LICENSE create mode 100644 node_modules/debug/Makefile create mode 100644 node_modules/debug/README.md create mode 100644 node_modules/debug/component.json create mode 100644 node_modules/debug/karma.conf.js create mode 100644 node_modules/debug/node.js create mode 100644 node_modules/debug/package.json create mode 100644 node_modules/debug/src/browser.js create mode 100644 node_modules/debug/src/debug.js create mode 100644 node_modules/debug/src/index.js create mode 100644 node_modules/debug/src/node.js create mode 100644 node_modules/depd/History.md create mode 100644 node_modules/depd/LICENSE create mode 100644 node_modules/depd/Readme.md create mode 100644 node_modules/depd/index.js create mode 100644 node_modules/depd/lib/browser/index.js create mode 100644 node_modules/depd/lib/compat/buffer-concat.js create mode 100644 node_modules/depd/lib/compat/callsite-tostring.js create mode 100644 node_modules/depd/lib/compat/event-listener-count.js create mode 100644 node_modules/depd/lib/compat/index.js create mode 100644 node_modules/depd/package.json create mode 100644 node_modules/destroy/README.md create mode 100644 node_modules/destroy/index.js create mode 100644 node_modules/destroy/package.json create mode 100644 node_modules/ee-first/LICENSE create mode 100644 node_modules/ee-first/README.md create mode 100644 node_modules/ee-first/index.js create mode 100644 node_modules/ee-first/package.json create mode 100644 node_modules/ejs/Jakefile create mode 100644 node_modules/ejs/LICENSE create mode 100644 node_modules/ejs/README.md create mode 100644 node_modules/ejs/ejs.js create mode 100644 node_modules/ejs/ejs.min.js create mode 100644 node_modules/ejs/lib/ejs.js create mode 100644 node_modules/ejs/lib/utils.js create mode 100644 node_modules/ejs/package.json create mode 100644 node_modules/ejs/test/ejs.js create mode 100644 node_modules/ejs/test/fixtures/backslash.ejs create mode 100644 node_modules/ejs/test/fixtures/backslash.html create mode 100644 node_modules/ejs/test/fixtures/comments.ejs create mode 100644 node_modules/ejs/test/fixtures/comments.html create mode 100644 node_modules/ejs/test/fixtures/consecutive-tags.ejs create mode 100644 node_modules/ejs/test/fixtures/consecutive-tags.html create mode 100644 node_modules/ejs/test/fixtures/double-quote.ejs create mode 100644 node_modules/ejs/test/fixtures/double-quote.html create mode 100644 node_modules/ejs/test/fixtures/error.ejs create mode 100644 node_modules/ejs/test/fixtures/error.out create mode 100644 node_modules/ejs/test/fixtures/fail.ejs create mode 100644 node_modules/ejs/test/fixtures/hello-world.ejs create mode 100644 node_modules/ejs/test/fixtures/include-abspath.ejs create mode 100644 node_modules/ejs/test/fixtures/include-root.ejs create mode 100644 node_modules/ejs/test/fixtures/include-simple.ejs create mode 100644 node_modules/ejs/test/fixtures/include-simple.html create mode 100644 node_modules/ejs/test/fixtures/include.css.ejs create mode 100644 node_modules/ejs/test/fixtures/include.css.html create mode 100644 node_modules/ejs/test/fixtures/include.ejs create mode 100644 node_modules/ejs/test/fixtures/include.html create mode 100644 node_modules/ejs/test/fixtures/include_cache.ejs create mode 100644 node_modules/ejs/test/fixtures/include_cache.html create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor.css.ejs create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor.css.html create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor.ejs create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor.html create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor_cache.ejs create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor_cache.html create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor_line_slurp.ejs create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor_line_slurp.html create mode 100644 node_modules/ejs/test/fixtures/include_preprocessor_line_slurp_child.ejs create mode 100644 node_modules/ejs/test/fixtures/includes/bom.ejs create mode 100644 node_modules/ejs/test/fixtures/includes/menu-item.ejs create mode 100644 node_modules/ejs/test/fixtures/includes/menu/item.ejs create mode 100644 node_modules/ejs/test/fixtures/literal.ejs create mode 100644 node_modules/ejs/test/fixtures/literal.html create mode 100644 node_modules/ejs/test/fixtures/menu.ejs create mode 100644 node_modules/ejs/test/fixtures/menu.html create mode 100644 node_modules/ejs/test/fixtures/menu_preprocessor.ejs create mode 100644 node_modules/ejs/test/fixtures/menu_preprocessor.html create mode 100644 node_modules/ejs/test/fixtures/menu_var.ejs create mode 100644 node_modules/ejs/test/fixtures/messed.ejs create mode 100644 node_modules/ejs/test/fixtures/messed.html create mode 100644 node_modules/ejs/test/fixtures/newlines.ejs create mode 100644 node_modules/ejs/test/fixtures/newlines.html create mode 100644 node_modules/ejs/test/fixtures/newlines.mixed.ejs create mode 100644 node_modules/ejs/test/fixtures/newlines.mixed.html create mode 100644 node_modules/ejs/test/fixtures/no.newlines.ejs create mode 100644 node_modules/ejs/test/fixtures/no.newlines.error.ejs create mode 100644 node_modules/ejs/test/fixtures/no.newlines.html create mode 100644 node_modules/ejs/test/fixtures/no.semicolons.ejs create mode 100644 node_modules/ejs/test/fixtures/no.semicolons.html create mode 100644 node_modules/ejs/test/fixtures/para.ejs create mode 100644 node_modules/ejs/test/fixtures/pet.ejs create mode 100644 node_modules/ejs/test/fixtures/rmWhitespace.ejs create mode 100644 node_modules/ejs/test/fixtures/rmWhitespace.html create mode 100644 node_modules/ejs/test/fixtures/single-quote.ejs create mode 100644 node_modules/ejs/test/fixtures/single-quote.html create mode 100644 node_modules/ejs/test/fixtures/space-and-tab-slurp.ejs create mode 100644 node_modules/ejs/test/fixtures/space-and-tab-slurp.html create mode 100644 node_modules/ejs/test/fixtures/strict.ejs create mode 100644 node_modules/ejs/test/fixtures/style.css create mode 100644 node_modules/ejs/test/fixtures/user-no-with.ejs create mode 100644 node_modules/ejs/test/fixtures/user.ejs create mode 100644 node_modules/ejs/test/fixtures/with-context.ejs create mode 100644 node_modules/ejs/test/mocha.opts create mode 100644 node_modules/ejs/test/tmp/include.ejs create mode 100644 node_modules/ejs/test/tmp/include_preprocessor.ejs create mode 100644 node_modules/ejs/test/tmp/renderFile.ejs create mode 100644 node_modules/engine.io-client/History.md create mode 100644 node_modules/engine.io-client/LICENSE create mode 100644 node_modules/engine.io-client/README.md create mode 100644 node_modules/engine.io-client/engine.io.js create mode 100644 node_modules/engine.io-client/index.js create mode 100644 node_modules/engine.io-client/lib/index.js create mode 100644 node_modules/engine.io-client/lib/socket.js create mode 100644 node_modules/engine.io-client/lib/transport.js create mode 100755 node_modules/engine.io-client/lib/transports/index.js create mode 100644 node_modules/engine.io-client/lib/transports/polling-jsonp.js create mode 100755 node_modules/engine.io-client/lib/transports/polling-xhr.js create mode 100644 node_modules/engine.io-client/lib/transports/polling.js create mode 100644 node_modules/engine.io-client/lib/transports/websocket.js create mode 100644 node_modules/engine.io-client/lib/xmlhttprequest.js create mode 100644 node_modules/engine.io-client/package.json create mode 100644 node_modules/engine.io-parser/History.md create mode 100644 node_modules/engine.io-parser/LICENSE create mode 100644 node_modules/engine.io-parser/Readme.md create mode 100644 node_modules/engine.io-parser/index.js create mode 100644 node_modules/engine.io-parser/lib/browser.js create mode 100644 node_modules/engine.io-parser/lib/index.js create mode 100644 node_modules/engine.io-parser/lib/keys.js create mode 100644 node_modules/engine.io-parser/lib/utf8.js create mode 100644 node_modules/engine.io-parser/package.json create mode 100644 node_modules/engine.io/History.md create mode 100644 node_modules/engine.io/LICENSE create mode 100644 node_modules/engine.io/README.md create mode 100644 node_modules/engine.io/index.js create mode 100644 node_modules/engine.io/lib/engine.io.js create mode 100644 node_modules/engine.io/lib/server.js create mode 100644 node_modules/engine.io/lib/socket.js create mode 100644 node_modules/engine.io/lib/transport.js create mode 100644 node_modules/engine.io/lib/transports/index.js create mode 100644 node_modules/engine.io/lib/transports/polling-jsonp.js create mode 100644 node_modules/engine.io/lib/transports/polling-xhr.js create mode 100644 node_modules/engine.io/lib/transports/polling.js create mode 100644 node_modules/engine.io/lib/transports/websocket.js create mode 100644 node_modules/engine.io/node_modules/accepts/HISTORY.md create mode 100644 node_modules/engine.io/node_modules/accepts/LICENSE create mode 100644 node_modules/engine.io/node_modules/accepts/README.md create mode 100644 node_modules/engine.io/node_modules/accepts/index.js create mode 100644 node_modules/engine.io/node_modules/accepts/package.json create mode 100644 node_modules/engine.io/node_modules/negotiator/HISTORY.md create mode 100644 node_modules/engine.io/node_modules/negotiator/LICENSE create mode 100644 node_modules/engine.io/node_modules/negotiator/README.md create mode 100644 node_modules/engine.io/node_modules/negotiator/index.js create mode 100644 node_modules/engine.io/node_modules/negotiator/lib/charset.js create mode 100644 node_modules/engine.io/node_modules/negotiator/lib/encoding.js create mode 100644 node_modules/engine.io/node_modules/negotiator/lib/language.js create mode 100644 node_modules/engine.io/node_modules/negotiator/lib/mediaType.js create mode 100644 node_modules/engine.io/node_modules/negotiator/package.json create mode 100644 node_modules/engine.io/package.json create mode 100644 node_modules/es6-promise/CHANGELOG.md create mode 100644 node_modules/es6-promise/LICENSE create mode 100644 node_modules/es6-promise/README.md create mode 100644 node_modules/es6-promise/dist/es6-promise.js create mode 100644 node_modules/es6-promise/dist/es6-promise.min.js create mode 100644 node_modules/es6-promise/lib/es6-promise.umd.js create mode 100644 node_modules/es6-promise/lib/es6-promise/-internal.js create mode 100644 node_modules/es6-promise/lib/es6-promise/asap.js create mode 100644 node_modules/es6-promise/lib/es6-promise/enumerator.js create mode 100644 node_modules/es6-promise/lib/es6-promise/polyfill.js create mode 100644 node_modules/es6-promise/lib/es6-promise/promise.js create mode 100644 node_modules/es6-promise/lib/es6-promise/promise/all.js create mode 100644 node_modules/es6-promise/lib/es6-promise/promise/race.js create mode 100644 node_modules/es6-promise/lib/es6-promise/promise/reject.js create mode 100644 node_modules/es6-promise/lib/es6-promise/promise/resolve.js create mode 100644 node_modules/es6-promise/lib/es6-promise/then.js create mode 100644 node_modules/es6-promise/lib/es6-promise/utils.js create mode 100644 node_modules/es6-promise/package.json create mode 100644 node_modules/escape-html/.npmignore create mode 100644 node_modules/escape-html/Makefile create mode 100644 node_modules/escape-html/Readme.md create mode 100644 node_modules/escape-html/component.json create mode 100644 node_modules/escape-html/index.js create mode 100644 node_modules/escape-html/package.json create mode 100644 node_modules/etag/HISTORY.md create mode 100644 node_modules/etag/LICENSE create mode 100644 node_modules/etag/README.md create mode 100644 node_modules/etag/index.js create mode 100644 node_modules/etag/node_modules/crc/.npmignore create mode 100644 node_modules/etag/node_modules/crc/LICENSE create mode 100644 node_modules/etag/node_modules/crc/README.md create mode 100644 node_modules/etag/node_modules/crc/lib/crc.js create mode 100644 node_modules/etag/node_modules/crc/lib/crc1.js create mode 100644 node_modules/etag/node_modules/crc/lib/crc16.js create mode 100644 node_modules/etag/node_modules/crc/lib/crc16_ccitt.js create mode 100644 node_modules/etag/node_modules/crc/lib/crc16_modbus.js create mode 100644 node_modules/etag/node_modules/crc/lib/crc24.js create mode 100644 node_modules/etag/node_modules/crc/lib/crc32.js create mode 100644 node_modules/etag/node_modules/crc/lib/crc8.js create mode 100644 node_modules/etag/node_modules/crc/lib/crc8_1wire.js create mode 100644 node_modules/etag/node_modules/crc/lib/create.js create mode 100644 node_modules/etag/node_modules/crc/lib/hex.js create mode 100644 node_modules/etag/node_modules/crc/lib/index.js create mode 100644 node_modules/etag/node_modules/crc/package.json create mode 100644 node_modules/etag/package.json create mode 100644 node_modules/express-session/HISTORY.md create mode 100644 node_modules/express-session/LICENSE create mode 100644 node_modules/express-session/README.md create mode 100644 node_modules/express-session/index.js create mode 100644 node_modules/express-session/package.json create mode 100644 node_modules/express-session/session/cookie.js create mode 100644 node_modules/express-session/session/memory.js create mode 100644 node_modules/express-session/session/session.js create mode 100644 node_modules/express-session/session/store.js create mode 100644 node_modules/express/History.md create mode 100644 node_modules/express/LICENSE create mode 100644 node_modules/express/Readme.md create mode 100644 node_modules/express/index.js create mode 100644 node_modules/express/lib/application.js create mode 100644 node_modules/express/lib/express.js create mode 100644 node_modules/express/lib/middleware/init.js create mode 100644 node_modules/express/lib/middleware/query.js create mode 100644 node_modules/express/lib/request.js create mode 100644 node_modules/express/lib/response.js create mode 100644 node_modules/express/lib/router/index.js create mode 100644 node_modules/express/lib/router/layer.js create mode 100644 node_modules/express/lib/router/route.js create mode 100644 node_modules/express/lib/utils.js create mode 100644 node_modules/express/lib/view.js create mode 100644 node_modules/express/node_modules/cookie-signature/.npmignore create mode 100644 node_modules/express/node_modules/cookie-signature/History.md create mode 100644 node_modules/express/node_modules/cookie-signature/Makefile create mode 100644 node_modules/express/node_modules/cookie-signature/Readme.md create mode 100644 node_modules/express/node_modules/cookie-signature/index.js create mode 100644 node_modules/express/node_modules/cookie-signature/package.json create mode 100644 node_modules/express/node_modules/cookie/.npmignore create mode 100644 node_modules/express/node_modules/cookie/LICENSE create mode 100644 node_modules/express/node_modules/cookie/README.md create mode 100644 node_modules/express/node_modules/cookie/index.js create mode 100644 node_modules/express/node_modules/cookie/package.json create mode 100644 node_modules/express/node_modules/debug/.jshintrc create mode 100644 node_modules/express/node_modules/debug/.npmignore create mode 100644 node_modules/express/node_modules/debug/History.md create mode 100644 node_modules/express/node_modules/debug/Makefile create mode 100644 node_modules/express/node_modules/debug/Readme.md create mode 100644 node_modules/express/node_modules/debug/bower.json create mode 100644 node_modules/express/node_modules/debug/browser.js create mode 100644 node_modules/express/node_modules/debug/component.json create mode 100644 node_modules/express/node_modules/debug/debug.js create mode 100644 node_modules/express/node_modules/debug/node.js create mode 100644 node_modules/express/node_modules/debug/package.json create mode 100644 node_modules/express/node_modules/depd/History.md create mode 100644 node_modules/express/node_modules/depd/LICENSE create mode 100644 node_modules/express/node_modules/depd/Readme.md create mode 100644 node_modules/express/node_modules/depd/index.js create mode 100644 node_modules/express/node_modules/depd/lib/compat/buffer-concat.js create mode 100644 node_modules/express/node_modules/depd/lib/compat/callsite-tostring.js create mode 100644 node_modules/express/node_modules/depd/lib/compat/index.js create mode 100644 node_modules/express/node_modules/depd/package.json create mode 100644 node_modules/express/node_modules/ee-first/LICENSE create mode 100644 node_modules/express/node_modules/ee-first/README.md create mode 100644 node_modules/express/node_modules/ee-first/index.js create mode 100644 node_modules/express/node_modules/ee-first/package.json create mode 100644 node_modules/express/node_modules/mime-db/HISTORY.md create mode 100644 node_modules/express/node_modules/mime-db/LICENSE create mode 100644 node_modules/express/node_modules/mime-db/README.md create mode 100644 node_modules/express/node_modules/mime-db/db.json create mode 100644 node_modules/express/node_modules/mime-db/index.js create mode 100644 node_modules/express/node_modules/mime-db/package.json create mode 100644 node_modules/express/node_modules/mime-types/HISTORY.md create mode 100644 node_modules/express/node_modules/mime-types/LICENSE create mode 100644 node_modules/express/node_modules/mime-types/README.md create mode 100644 node_modules/express/node_modules/mime-types/index.js create mode 100644 node_modules/express/node_modules/mime-types/package.json create mode 100644 node_modules/express/node_modules/ms/.npmignore create mode 100644 node_modules/express/node_modules/ms/LICENSE create mode 100644 node_modules/express/node_modules/ms/README.md create mode 100644 node_modules/express/node_modules/ms/index.js create mode 100644 node_modules/express/node_modules/ms/package.json create mode 100644 node_modules/express/node_modules/on-finished/HISTORY.md create mode 100644 node_modules/express/node_modules/on-finished/LICENSE create mode 100644 node_modules/express/node_modules/on-finished/README.md create mode 100644 node_modules/express/node_modules/on-finished/index.js create mode 100644 node_modules/express/node_modules/on-finished/package.json create mode 100644 node_modules/express/node_modules/qs/.jshintignore create mode 100644 node_modules/express/node_modules/qs/.jshintrc create mode 100644 node_modules/express/node_modules/qs/.npmignore create mode 100644 node_modules/express/node_modules/qs/.travis.yml create mode 100644 node_modules/express/node_modules/qs/CHANGELOG.md create mode 100644 node_modules/express/node_modules/qs/CONTRIBUTING.md create mode 100755 node_modules/express/node_modules/qs/LICENSE create mode 100644 node_modules/express/node_modules/qs/Makefile create mode 100755 node_modules/express/node_modules/qs/README.md create mode 100644 node_modules/express/node_modules/qs/index.js create mode 100755 node_modules/express/node_modules/qs/lib/index.js create mode 100755 node_modules/express/node_modules/qs/lib/parse.js create mode 100755 node_modules/express/node_modules/qs/lib/stringify.js create mode 100755 node_modules/express/node_modules/qs/lib/utils.js create mode 100755 node_modules/express/node_modules/qs/package.json create mode 100755 node_modules/express/node_modules/qs/test/parse.js create mode 100755 node_modules/express/node_modules/qs/test/stringify.js create mode 100644 node_modules/express/node_modules/type-is/HISTORY.md create mode 100644 node_modules/express/node_modules/type-is/LICENSE create mode 100644 node_modules/express/node_modules/type-is/README.md create mode 100644 node_modules/express/node_modules/type-is/index.js create mode 100644 node_modules/express/node_modules/type-is/package.json create mode 100644 node_modules/express/package.json create mode 100644 node_modules/fibers/.npmignore create mode 100644 node_modules/fibers/.travis.yml create mode 100644 node_modules/fibers/LICENSE create mode 100644 node_modules/fibers/README.md create mode 100644 node_modules/fibers/bin/.npmignore create mode 100755 node_modules/fibers/bin/darwin-ia32-46/fibers.node create mode 100755 node_modules/fibers/bin/darwin-ia32-48/fibers.node create mode 100755 node_modules/fibers/bin/darwin-x64-46/fibers.node create mode 100755 node_modules/fibers/bin/darwin-x64-48/fibers.node create mode 100755 node_modules/fibers/bin/darwin-x64-51/fibers.node create mode 100755 node_modules/fibers/bin/linux-ia32-46/fibers.node create mode 100755 node_modules/fibers/bin/linux-ia32-48/fibers.node create mode 100755 node_modules/fibers/bin/linux-x64-46/fibers.node create mode 100755 node_modules/fibers/bin/linux-x64-48/fibers.node create mode 100755 node_modules/fibers/bin/repl create mode 100644 node_modules/fibers/bin/win32-ia32-46/fibers.node create mode 100644 node_modules/fibers/bin/win32-ia32-48/fibers.node create mode 100644 node_modules/fibers/bin/win32-x64-46/fibers.node create mode 100644 node_modules/fibers/bin/win32-x64-48/fibers.node create mode 100644 node_modules/fibers/binding.gyp create mode 100755 node_modules/fibers/build.js create mode 100644 node_modules/fibers/build/Makefile create mode 100644 node_modules/fibers/build/Release/.deps/Release/fibers.node.d create mode 100644 node_modules/fibers/build/Release/.deps/Release/obj.target/fibers/src/coroutine.o.d create mode 100644 node_modules/fibers/build/Release/.deps/Release/obj.target/fibers/src/fibers.o.d create mode 100644 node_modules/fibers/build/Release/.deps/Release/obj.target/fibers/src/libcoro/coro.o.d create mode 100644 node_modules/fibers/build/Release/obj.target/fibers/src/coroutine.o create mode 100644 node_modules/fibers/build/Release/obj.target/fibers/src/fibers.o create mode 100644 node_modules/fibers/build/Release/obj.target/fibers/src/libcoro/coro.o create mode 100644 node_modules/fibers/build/binding.Makefile create mode 100644 node_modules/fibers/build/config.gypi create mode 100644 node_modules/fibers/build/fibers.target.mk create mode 100755 node_modules/fibers/build/gyp-mac-tool create mode 100644 node_modules/fibers/fibers.js create mode 100644 node_modules/fibers/future.js create mode 100644 node_modules/fibers/package.json create mode 100644 node_modules/fibers/quick-test.js create mode 100644 node_modules/fibers/src/coroutine.cc create mode 100644 node_modules/fibers/src/coroutine.h create mode 100644 node_modules/fibers/src/fibers.cc create mode 100644 node_modules/fibers/src/libcoro/LICENSE create mode 100644 node_modules/fibers/src/libcoro/README create mode 100644 node_modules/fibers/src/libcoro/conftest.c create mode 100644 node_modules/fibers/src/libcoro/coro.c create mode 100644 node_modules/fibers/src/libcoro/coro.h create mode 100644 node_modules/fibers/src/v8-version.h create mode 100755 node_modules/fibers/test.js create mode 100644 node_modules/fibers/test/already-running.js create mode 100644 node_modules/fibers/test/bad-context.js create mode 100644 node_modules/fibers/test/child-process.js create mode 100644 node_modules/fibers/test/current.js create mode 100644 node_modules/fibers/test/exec.js create mode 100644 node_modules/fibers/test/exit.js create mode 100644 node_modules/fibers/test/fibonacci.js create mode 100644 node_modules/fibers/test/finish-multiple.js create mode 100644 node_modules/fibers/test/future-exception.js create mode 100644 node_modules/fibers/test/future.js create mode 100644 node_modules/fibers/test/illegal-yield.js create mode 100644 node_modules/fibers/test/pool.js create mode 100644 node_modules/fibers/test/process-title.js create mode 100644 node_modules/fibers/test/stack-overflow.js create mode 100755 node_modules/fibers/test/stack-overflow2.js create mode 100644 node_modules/fibers/test/started.js create mode 100644 node_modules/fibers/test/unwind.js create mode 100644 node_modules/finalhandler/HISTORY.md create mode 100644 node_modules/finalhandler/LICENSE create mode 100644 node_modules/finalhandler/README.md create mode 100644 node_modules/finalhandler/index.js create mode 100644 node_modules/finalhandler/node_modules/debug/.jshintrc create mode 100644 node_modules/finalhandler/node_modules/debug/.npmignore create mode 100644 node_modules/finalhandler/node_modules/debug/History.md create mode 100644 node_modules/finalhandler/node_modules/debug/Makefile create mode 100644 node_modules/finalhandler/node_modules/debug/Readme.md create mode 100644 node_modules/finalhandler/node_modules/debug/bower.json create mode 100644 node_modules/finalhandler/node_modules/debug/browser.js create mode 100644 node_modules/finalhandler/node_modules/debug/component.json create mode 100644 node_modules/finalhandler/node_modules/debug/debug.js create mode 100644 node_modules/finalhandler/node_modules/debug/node.js create mode 100644 node_modules/finalhandler/node_modules/debug/package.json create mode 100644 node_modules/finalhandler/node_modules/ee-first/LICENSE create mode 100644 node_modules/finalhandler/node_modules/ee-first/README.md create mode 100644 node_modules/finalhandler/node_modules/ee-first/index.js create mode 100644 node_modules/finalhandler/node_modules/ee-first/package.json create mode 100644 node_modules/finalhandler/node_modules/ms/.npmignore create mode 100644 node_modules/finalhandler/node_modules/ms/LICENSE create mode 100644 node_modules/finalhandler/node_modules/ms/README.md create mode 100644 node_modules/finalhandler/node_modules/ms/index.js create mode 100644 node_modules/finalhandler/node_modules/ms/package.json create mode 100644 node_modules/finalhandler/node_modules/on-finished/HISTORY.md create mode 100644 node_modules/finalhandler/node_modules/on-finished/LICENSE create mode 100644 node_modules/finalhandler/node_modules/on-finished/README.md create mode 100644 node_modules/finalhandler/node_modules/on-finished/index.js create mode 100644 node_modules/finalhandler/node_modules/on-finished/package.json create mode 100644 node_modules/finalhandler/package.json create mode 100644 node_modules/foreachasync/.npmignore create mode 100644 node_modules/foreachasync/LICENSE create mode 100644 node_modules/foreachasync/README.md create mode 100644 node_modules/foreachasync/bower.json create mode 100644 node_modules/foreachasync/forEachAsync.js create mode 100644 node_modules/foreachasync/package.json create mode 100644 node_modules/foreachasync/test.js create mode 100644 node_modules/forwarded/HISTORY.md create mode 100644 node_modules/forwarded/LICENSE create mode 100644 node_modules/forwarded/README.md create mode 100644 node_modules/forwarded/index.js create mode 100644 node_modules/forwarded/package.json create mode 100644 node_modules/fresh/HISTORY.md create mode 100644 node_modules/fresh/LICENSE create mode 100644 node_modules/fresh/README.md create mode 100644 node_modules/fresh/index.js create mode 100644 node_modules/fresh/package.json create mode 100644 node_modules/has-binary2/History.md create mode 100644 node_modules/has-binary2/LICENSE create mode 100644 node_modules/has-binary2/README.md create mode 100644 node_modules/has-binary2/index.js create mode 100644 node_modules/has-binary2/node_modules/isarray/README.md create mode 100644 node_modules/has-binary2/node_modules/isarray/index.js create mode 100644 node_modules/has-binary2/node_modules/isarray/package.json create mode 100644 node_modules/has-binary2/package.json create mode 100644 node_modules/has-cors/.npmignore create mode 100644 node_modules/has-cors/History.md create mode 100644 node_modules/has-cors/Makefile create mode 100644 node_modules/has-cors/Readme.md create mode 100644 node_modules/has-cors/component.json create mode 100644 node_modules/has-cors/index.js create mode 100644 node_modules/has-cors/package.json create mode 100644 node_modules/has-cors/test.js create mode 100644 node_modules/http-errors/HISTORY.md create mode 100644 node_modules/http-errors/LICENSE create mode 100644 node_modules/http-errors/README.md create mode 100644 node_modules/http-errors/index.js create mode 100644 node_modules/http-errors/package.json create mode 100644 node_modules/iconv-lite/.npmignore create mode 100644 node_modules/iconv-lite/.travis.yml create mode 100644 node_modules/iconv-lite/Changelog.md create mode 100644 node_modules/iconv-lite/LICENSE create mode 100644 node_modules/iconv-lite/README.md create mode 100644 node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 node_modules/iconv-lite/encodings/index.js create mode 100644 node_modules/iconv-lite/encodings/internal.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 node_modules/iconv-lite/encodings/utf16.js create mode 100644 node_modules/iconv-lite/encodings/utf7.js create mode 100644 node_modules/iconv-lite/lib/bom-handling.js create mode 100644 node_modules/iconv-lite/lib/extend-node.js create mode 100644 node_modules/iconv-lite/lib/index.d.ts create mode 100644 node_modules/iconv-lite/lib/index.js create mode 100644 node_modules/iconv-lite/lib/streams.js create mode 100644 node_modules/iconv-lite/package.json create mode 100644 node_modules/indexof/.npmignore create mode 100644 node_modules/indexof/Makefile create mode 100644 node_modules/indexof/Readme.md create mode 100644 node_modules/indexof/component.json create mode 100644 node_modules/indexof/index.js create mode 100644 node_modules/indexof/package.json create mode 100644 node_modules/inherits/LICENSE create mode 100644 node_modules/inherits/README.md create mode 100644 node_modules/inherits/inherits.js create mode 100644 node_modules/inherits/inherits_browser.js create mode 100644 node_modules/inherits/package.json create mode 100644 node_modules/ipaddr.js/.npmignore create mode 100644 node_modules/ipaddr.js/.travis.yml create mode 100644 node_modules/ipaddr.js/Cakefile create mode 100644 node_modules/ipaddr.js/LICENSE create mode 100644 node_modules/ipaddr.js/README.md create mode 100644 node_modules/ipaddr.js/bower.json create mode 100644 node_modules/ipaddr.js/ipaddr.min.js create mode 100644 node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 node_modules/ipaddr.js/package.json create mode 100644 node_modules/ipaddr.js/src/ipaddr.coffee create mode 100644 node_modules/ipaddr.js/test/ipaddr.test.coffee create mode 100644 node_modules/isarray/.npmignore create mode 100644 node_modules/isarray/.travis.yml create mode 100644 node_modules/isarray/Makefile create mode 100644 node_modules/isarray/README.md create mode 100644 node_modules/isarray/component.json create mode 100644 node_modules/isarray/index.js create mode 100644 node_modules/isarray/package.json create mode 100644 node_modules/isarray/test.js create mode 100755 node_modules/locutus/_util/cli.js create mode 100644 node_modules/locutus/_util/cli.js.map create mode 100644 node_modules/locutus/_util/util.js create mode 100644 node_modules/locutus/_util/util.js.map create mode 100644 node_modules/locutus/c/index.js create mode 100644 node_modules/locutus/c/index.js.map create mode 100644 node_modules/locutus/c/math/abs.js create mode 100644 node_modules/locutus/c/math/abs.js.map create mode 100644 node_modules/locutus/c/math/index.js create mode 100644 node_modules/locutus/c/math/index.js.map create mode 100644 node_modules/locutus/golang/index.js create mode 100644 node_modules/locutus/golang/index.js.map create mode 100644 node_modules/locutus/golang/strings/Contains.js create mode 100644 node_modules/locutus/golang/strings/Contains.js.map create mode 100644 node_modules/locutus/golang/strings/Count.js create mode 100644 node_modules/locutus/golang/strings/Count.js.map create mode 100644 node_modules/locutus/golang/strings/Index2.js create mode 100644 node_modules/locutus/golang/strings/Index2.js.map create mode 100644 node_modules/locutus/golang/strings/LastIndex.js create mode 100644 node_modules/locutus/golang/strings/LastIndex.js.map create mode 100644 node_modules/locutus/golang/strings/index.js create mode 100644 node_modules/locutus/golang/strings/index.js.map create mode 100644 node_modules/locutus/index.js create mode 100644 node_modules/locutus/index.js.map create mode 100644 node_modules/locutus/package.json create mode 100644 node_modules/locutus/php/_helpers/_bc.js create mode 100644 node_modules/locutus/php/_helpers/_bc.js.map create mode 100644 node_modules/locutus/php/_helpers/_phpCastString.js create mode 100644 node_modules/locutus/php/_helpers/_phpCastString.js.map create mode 100644 node_modules/locutus/php/_helpers/index.js create mode 100644 node_modules/locutus/php/_helpers/index.js.map create mode 100644 node_modules/locutus/php/_locutus_shared/_locutus_shared_bc.js create mode 100644 node_modules/locutus/php/_locutus_shared/_locutus_shared_bc.js.map create mode 100644 node_modules/locutus/php/_locutus_shared/index.js create mode 100644 node_modules/locutus/php/_locutus_shared/index.js.map create mode 100644 node_modules/locutus/php/array/array_change_key_case.js create mode 100644 node_modules/locutus/php/array/array_change_key_case.js.map create mode 100644 node_modules/locutus/php/array/array_chunk.js create mode 100644 node_modules/locutus/php/array/array_chunk.js.map create mode 100644 node_modules/locutus/php/array/array_combine.js create mode 100644 node_modules/locutus/php/array/array_combine.js.map create mode 100644 node_modules/locutus/php/array/array_count_values.js create mode 100644 node_modules/locutus/php/array/array_count_values.js.map create mode 100644 node_modules/locutus/php/array/array_diff.js create mode 100644 node_modules/locutus/php/array/array_diff.js.map create mode 100644 node_modules/locutus/php/array/array_diff_assoc.js create mode 100644 node_modules/locutus/php/array/array_diff_assoc.js.map create mode 100644 node_modules/locutus/php/array/array_diff_key.js create mode 100644 node_modules/locutus/php/array/array_diff_key.js.map create mode 100644 node_modules/locutus/php/array/array_diff_uassoc.js create mode 100644 node_modules/locutus/php/array/array_diff_uassoc.js.map create mode 100644 node_modules/locutus/php/array/array_diff_ukey.js create mode 100644 node_modules/locutus/php/array/array_diff_ukey.js.map create mode 100644 node_modules/locutus/php/array/array_fill.js create mode 100644 node_modules/locutus/php/array/array_fill.js.map create mode 100644 node_modules/locutus/php/array/array_fill_keys.js create mode 100644 node_modules/locutus/php/array/array_fill_keys.js.map create mode 100644 node_modules/locutus/php/array/array_filter.js create mode 100644 node_modules/locutus/php/array/array_filter.js.map create mode 100644 node_modules/locutus/php/array/array_flip.js create mode 100644 node_modules/locutus/php/array/array_flip.js.map create mode 100644 node_modules/locutus/php/array/array_intersect.js create mode 100644 node_modules/locutus/php/array/array_intersect.js.map create mode 100644 node_modules/locutus/php/array/array_intersect_assoc.js create mode 100644 node_modules/locutus/php/array/array_intersect_assoc.js.map create mode 100644 node_modules/locutus/php/array/array_intersect_key.js create mode 100644 node_modules/locutus/php/array/array_intersect_key.js.map create mode 100644 node_modules/locutus/php/array/array_intersect_uassoc.js create mode 100644 node_modules/locutus/php/array/array_intersect_uassoc.js.map create mode 100644 node_modules/locutus/php/array/array_intersect_ukey.js create mode 100644 node_modules/locutus/php/array/array_intersect_ukey.js.map create mode 100644 node_modules/locutus/php/array/array_key_exists.js create mode 100644 node_modules/locutus/php/array/array_key_exists.js.map create mode 100644 node_modules/locutus/php/array/array_keys.js create mode 100644 node_modules/locutus/php/array/array_keys.js.map create mode 100644 node_modules/locutus/php/array/array_map.js create mode 100644 node_modules/locutus/php/array/array_map.js.map create mode 100644 node_modules/locutus/php/array/array_merge.js create mode 100644 node_modules/locutus/php/array/array_merge.js.map create mode 100644 node_modules/locutus/php/array/array_merge_recursive.js create mode 100644 node_modules/locutus/php/array/array_merge_recursive.js.map create mode 100644 node_modules/locutus/php/array/array_multisort.js create mode 100644 node_modules/locutus/php/array/array_multisort.js.map create mode 100644 node_modules/locutus/php/array/array_pad.js create mode 100644 node_modules/locutus/php/array/array_pad.js.map create mode 100644 node_modules/locutus/php/array/array_pop.js create mode 100644 node_modules/locutus/php/array/array_pop.js.map create mode 100644 node_modules/locutus/php/array/array_product.js create mode 100644 node_modules/locutus/php/array/array_product.js.map create mode 100644 node_modules/locutus/php/array/array_push.js create mode 100644 node_modules/locutus/php/array/array_push.js.map create mode 100644 node_modules/locutus/php/array/array_rand.js create mode 100644 node_modules/locutus/php/array/array_rand.js.map create mode 100644 node_modules/locutus/php/array/array_reduce.js create mode 100644 node_modules/locutus/php/array/array_reduce.js.map create mode 100644 node_modules/locutus/php/array/array_replace.js create mode 100644 node_modules/locutus/php/array/array_replace.js.map create mode 100644 node_modules/locutus/php/array/array_replace_recursive.js create mode 100644 node_modules/locutus/php/array/array_replace_recursive.js.map create mode 100644 node_modules/locutus/php/array/array_reverse.js create mode 100644 node_modules/locutus/php/array/array_reverse.js.map create mode 100644 node_modules/locutus/php/array/array_search.js create mode 100644 node_modules/locutus/php/array/array_search.js.map create mode 100644 node_modules/locutus/php/array/array_shift.js create mode 100644 node_modules/locutus/php/array/array_shift.js.map create mode 100644 node_modules/locutus/php/array/array_slice.js create mode 100644 node_modules/locutus/php/array/array_slice.js.map create mode 100644 node_modules/locutus/php/array/array_splice.js create mode 100644 node_modules/locutus/php/array/array_splice.js.map create mode 100644 node_modules/locutus/php/array/array_sum.js create mode 100644 node_modules/locutus/php/array/array_sum.js.map create mode 100644 node_modules/locutus/php/array/array_udiff.js create mode 100644 node_modules/locutus/php/array/array_udiff.js.map create mode 100644 node_modules/locutus/php/array/array_udiff_assoc.js create mode 100644 node_modules/locutus/php/array/array_udiff_assoc.js.map create mode 100644 node_modules/locutus/php/array/array_udiff_uassoc.js create mode 100644 node_modules/locutus/php/array/array_udiff_uassoc.js.map create mode 100644 node_modules/locutus/php/array/array_uintersect.js create mode 100644 node_modules/locutus/php/array/array_uintersect.js.map create mode 100644 node_modules/locutus/php/array/array_uintersect_uassoc.js create mode 100644 node_modules/locutus/php/array/array_uintersect_uassoc.js.map create mode 100644 node_modules/locutus/php/array/array_unique.js create mode 100644 node_modules/locutus/php/array/array_unique.js.map create mode 100644 node_modules/locutus/php/array/array_unshift.js create mode 100644 node_modules/locutus/php/array/array_unshift.js.map create mode 100644 node_modules/locutus/php/array/array_values.js create mode 100644 node_modules/locutus/php/array/array_values.js.map create mode 100644 node_modules/locutus/php/array/array_walk.js create mode 100644 node_modules/locutus/php/array/array_walk.js.map create mode 100644 node_modules/locutus/php/array/array_walk_recursive.js create mode 100644 node_modules/locutus/php/array/array_walk_recursive.js.map create mode 100644 node_modules/locutus/php/array/arsort.js create mode 100644 node_modules/locutus/php/array/arsort.js.map create mode 100644 node_modules/locutus/php/array/asort.js create mode 100644 node_modules/locutus/php/array/asort.js.map create mode 100644 node_modules/locutus/php/array/count.js create mode 100644 node_modules/locutus/php/array/count.js.map create mode 100644 node_modules/locutus/php/array/current.js create mode 100644 node_modules/locutus/php/array/current.js.map create mode 100644 node_modules/locutus/php/array/each.js create mode 100644 node_modules/locutus/php/array/each.js.map create mode 100644 node_modules/locutus/php/array/end.js create mode 100644 node_modules/locutus/php/array/end.js.map create mode 100644 node_modules/locutus/php/array/in_array.js create mode 100644 node_modules/locutus/php/array/in_array.js.map create mode 100644 node_modules/locutus/php/array/index.js create mode 100644 node_modules/locutus/php/array/index.js.map create mode 100644 node_modules/locutus/php/array/key.js create mode 100644 node_modules/locutus/php/array/key.js.map create mode 100644 node_modules/locutus/php/array/krsort.js create mode 100644 node_modules/locutus/php/array/krsort.js.map create mode 100644 node_modules/locutus/php/array/ksort.js create mode 100644 node_modules/locutus/php/array/ksort.js.map create mode 100644 node_modules/locutus/php/array/natcasesort.js create mode 100644 node_modules/locutus/php/array/natcasesort.js.map create mode 100644 node_modules/locutus/php/array/natsort.js create mode 100644 node_modules/locutus/php/array/natsort.js.map create mode 100644 node_modules/locutus/php/array/next.js create mode 100644 node_modules/locutus/php/array/next.js.map create mode 100644 node_modules/locutus/php/array/pos.js create mode 100644 node_modules/locutus/php/array/pos.js.map create mode 100644 node_modules/locutus/php/array/prev.js create mode 100644 node_modules/locutus/php/array/prev.js.map create mode 100644 node_modules/locutus/php/array/range.js create mode 100644 node_modules/locutus/php/array/range.js.map create mode 100644 node_modules/locutus/php/array/reset.js create mode 100644 node_modules/locutus/php/array/reset.js.map create mode 100644 node_modules/locutus/php/array/rsort.js create mode 100644 node_modules/locutus/php/array/rsort.js.map create mode 100644 node_modules/locutus/php/array/shuffle.js create mode 100644 node_modules/locutus/php/array/shuffle.js.map create mode 100644 node_modules/locutus/php/array/sizeof.js create mode 100644 node_modules/locutus/php/array/sizeof.js.map create mode 100644 node_modules/locutus/php/array/sort.js create mode 100644 node_modules/locutus/php/array/sort.js.map create mode 100644 node_modules/locutus/php/array/uasort.js create mode 100644 node_modules/locutus/php/array/uasort.js.map create mode 100644 node_modules/locutus/php/array/uksort.js create mode 100644 node_modules/locutus/php/array/uksort.js.map create mode 100644 node_modules/locutus/php/array/usort.js create mode 100644 node_modules/locutus/php/array/usort.js.map create mode 100644 node_modules/locutus/php/bc/bcadd.js create mode 100644 node_modules/locutus/php/bc/bcadd.js.map create mode 100644 node_modules/locutus/php/bc/bccomp.js create mode 100644 node_modules/locutus/php/bc/bccomp.js.map create mode 100644 node_modules/locutus/php/bc/bcdiv.js create mode 100644 node_modules/locutus/php/bc/bcdiv.js.map create mode 100644 node_modules/locutus/php/bc/bcmul.js create mode 100644 node_modules/locutus/php/bc/bcmul.js.map create mode 100644 node_modules/locutus/php/bc/bcround.js create mode 100644 node_modules/locutus/php/bc/bcround.js.map create mode 100644 node_modules/locutus/php/bc/bcscale.js create mode 100644 node_modules/locutus/php/bc/bcscale.js.map create mode 100644 node_modules/locutus/php/bc/bcsub.js create mode 100644 node_modules/locutus/php/bc/bcsub.js.map create mode 100644 node_modules/locutus/php/bc/index.js create mode 100644 node_modules/locutus/php/bc/index.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_alnum.js create mode 100644 node_modules/locutus/php/ctype/ctype_alnum.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_alpha.js create mode 100644 node_modules/locutus/php/ctype/ctype_alpha.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_cntrl.js create mode 100644 node_modules/locutus/php/ctype/ctype_cntrl.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_digit.js create mode 100644 node_modules/locutus/php/ctype/ctype_digit.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_graph.js create mode 100644 node_modules/locutus/php/ctype/ctype_graph.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_lower.js create mode 100644 node_modules/locutus/php/ctype/ctype_lower.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_print.js create mode 100644 node_modules/locutus/php/ctype/ctype_print.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_punct.js create mode 100644 node_modules/locutus/php/ctype/ctype_punct.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_space.js create mode 100644 node_modules/locutus/php/ctype/ctype_space.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_upper.js create mode 100644 node_modules/locutus/php/ctype/ctype_upper.js.map create mode 100644 node_modules/locutus/php/ctype/ctype_xdigit.js create mode 100644 node_modules/locutus/php/ctype/ctype_xdigit.js.map create mode 100644 node_modules/locutus/php/ctype/index.js create mode 100644 node_modules/locutus/php/ctype/index.js.map create mode 100644 node_modules/locutus/php/datetime/checkdate.js create mode 100644 node_modules/locutus/php/datetime/checkdate.js.map create mode 100644 node_modules/locutus/php/datetime/date.js create mode 100644 node_modules/locutus/php/datetime/date.js.map create mode 100644 node_modules/locutus/php/datetime/date_parse.js create mode 100644 node_modules/locutus/php/datetime/date_parse.js.map create mode 100644 node_modules/locutus/php/datetime/getdate.js create mode 100644 node_modules/locutus/php/datetime/getdate.js.map create mode 100644 node_modules/locutus/php/datetime/gettimeofday.js create mode 100644 node_modules/locutus/php/datetime/gettimeofday.js.map create mode 100644 node_modules/locutus/php/datetime/gmdate.js create mode 100644 node_modules/locutus/php/datetime/gmdate.js.map create mode 100644 node_modules/locutus/php/datetime/gmmktime.js create mode 100644 node_modules/locutus/php/datetime/gmmktime.js.map create mode 100644 node_modules/locutus/php/datetime/gmstrftime.js create mode 100644 node_modules/locutus/php/datetime/gmstrftime.js.map create mode 100644 node_modules/locutus/php/datetime/idate.js create mode 100644 node_modules/locutus/php/datetime/idate.js.map create mode 100644 node_modules/locutus/php/datetime/index.js create mode 100644 node_modules/locutus/php/datetime/index.js.map create mode 100644 node_modules/locutus/php/datetime/microtime.js create mode 100644 node_modules/locutus/php/datetime/microtime.js.map create mode 100644 node_modules/locutus/php/datetime/mktime.js create mode 100644 node_modules/locutus/php/datetime/mktime.js.map create mode 100644 node_modules/locutus/php/datetime/strftime.js create mode 100644 node_modules/locutus/php/datetime/strftime.js.map create mode 100644 node_modules/locutus/php/datetime/strptime.js create mode 100644 node_modules/locutus/php/datetime/strptime.js.map create mode 100644 node_modules/locutus/php/datetime/strtotime.js create mode 100644 node_modules/locutus/php/datetime/strtotime.js.map create mode 100644 node_modules/locutus/php/datetime/time.js create mode 100644 node_modules/locutus/php/datetime/time.js.map create mode 100644 node_modules/locutus/php/exec/escapeshellarg.js create mode 100644 node_modules/locutus/php/exec/escapeshellarg.js.map create mode 100644 node_modules/locutus/php/exec/index.js create mode 100644 node_modules/locutus/php/exec/index.js.map create mode 100644 node_modules/locutus/php/filesystem/basename.js create mode 100644 node_modules/locutus/php/filesystem/basename.js.map create mode 100644 node_modules/locutus/php/filesystem/dirname.js create mode 100644 node_modules/locutus/php/filesystem/dirname.js.map create mode 100644 node_modules/locutus/php/filesystem/file_get_contents.js create mode 100644 node_modules/locutus/php/filesystem/file_get_contents.js.map create mode 100644 node_modules/locutus/php/filesystem/index.js create mode 100644 node_modules/locutus/php/filesystem/index.js.map create mode 100644 node_modules/locutus/php/filesystem/pathinfo.js create mode 100644 node_modules/locutus/php/filesystem/pathinfo.js.map create mode 100644 node_modules/locutus/php/filesystem/realpath.js create mode 100644 node_modules/locutus/php/filesystem/realpath.js.map create mode 100644 node_modules/locutus/php/funchand/call_user_func.js create mode 100644 node_modules/locutus/php/funchand/call_user_func.js.map create mode 100644 node_modules/locutus/php/funchand/call_user_func_array.js create mode 100644 node_modules/locutus/php/funchand/call_user_func_array.js.map create mode 100644 node_modules/locutus/php/funchand/create_function.js create mode 100644 node_modules/locutus/php/funchand/create_function.js.map create mode 100644 node_modules/locutus/php/funchand/function_exists.js create mode 100644 node_modules/locutus/php/funchand/function_exists.js.map create mode 100644 node_modules/locutus/php/funchand/get_defined_functions.js create mode 100644 node_modules/locutus/php/funchand/get_defined_functions.js.map create mode 100644 node_modules/locutus/php/funchand/index.js create mode 100644 node_modules/locutus/php/funchand/index.js.map create mode 100644 node_modules/locutus/php/i18n/i18n_loc_get_default.js create mode 100644 node_modules/locutus/php/i18n/i18n_loc_get_default.js.map create mode 100644 node_modules/locutus/php/i18n/i18n_loc_set_default.js create mode 100644 node_modules/locutus/php/i18n/i18n_loc_set_default.js.map create mode 100644 node_modules/locutus/php/i18n/index.js create mode 100644 node_modules/locutus/php/i18n/index.js.map create mode 100644 node_modules/locutus/php/index.js create mode 100644 node_modules/locutus/php/index.js.map create mode 100644 node_modules/locutus/php/info/assert_options.js create mode 100644 node_modules/locutus/php/info/assert_options.js.map create mode 100644 node_modules/locutus/php/info/getenv.js create mode 100644 node_modules/locutus/php/info/getenv.js.map create mode 100644 node_modules/locutus/php/info/index.js create mode 100644 node_modules/locutus/php/info/index.js.map create mode 100644 node_modules/locutus/php/info/ini_get.js create mode 100644 node_modules/locutus/php/info/ini_get.js.map create mode 100644 node_modules/locutus/php/info/ini_set.js create mode 100644 node_modules/locutus/php/info/ini_set.js.map create mode 100644 node_modules/locutus/php/info/set_time_limit.js create mode 100644 node_modules/locutus/php/info/set_time_limit.js.map create mode 100644 node_modules/locutus/php/info/version_compare.js create mode 100644 node_modules/locutus/php/info/version_compare.js.map create mode 100644 node_modules/locutus/php/json/index.js create mode 100644 node_modules/locutus/php/json/index.js.map create mode 100644 node_modules/locutus/php/json/json_decode.js create mode 100644 node_modules/locutus/php/json/json_decode.js.map create mode 100644 node_modules/locutus/php/json/json_encode.js create mode 100644 node_modules/locutus/php/json/json_encode.js.map create mode 100644 node_modules/locutus/php/json/json_last_error.js create mode 100644 node_modules/locutus/php/json/json_last_error.js.map create mode 100644 node_modules/locutus/php/math/abs.js create mode 100644 node_modules/locutus/php/math/abs.js.map create mode 100644 node_modules/locutus/php/math/acos.js create mode 100644 node_modules/locutus/php/math/acos.js.map create mode 100644 node_modules/locutus/php/math/acosh.js create mode 100644 node_modules/locutus/php/math/acosh.js.map create mode 100644 node_modules/locutus/php/math/asin.js create mode 100644 node_modules/locutus/php/math/asin.js.map create mode 100644 node_modules/locutus/php/math/asinh.js create mode 100644 node_modules/locutus/php/math/asinh.js.map create mode 100644 node_modules/locutus/php/math/atan.js create mode 100644 node_modules/locutus/php/math/atan.js.map create mode 100644 node_modules/locutus/php/math/atan2.js create mode 100644 node_modules/locutus/php/math/atan2.js.map create mode 100644 node_modules/locutus/php/math/atanh.js create mode 100644 node_modules/locutus/php/math/atanh.js.map create mode 100644 node_modules/locutus/php/math/base_convert.js create mode 100644 node_modules/locutus/php/math/base_convert.js.map create mode 100644 node_modules/locutus/php/math/bindec.js create mode 100644 node_modules/locutus/php/math/bindec.js.map create mode 100644 node_modules/locutus/php/math/ceil.js create mode 100644 node_modules/locutus/php/math/ceil.js.map create mode 100644 node_modules/locutus/php/math/cos.js create mode 100644 node_modules/locutus/php/math/cos.js.map create mode 100644 node_modules/locutus/php/math/cosh.js create mode 100644 node_modules/locutus/php/math/cosh.js.map create mode 100644 node_modules/locutus/php/math/decbin.js create mode 100644 node_modules/locutus/php/math/decbin.js.map create mode 100644 node_modules/locutus/php/math/dechex.js create mode 100644 node_modules/locutus/php/math/dechex.js.map create mode 100644 node_modules/locutus/php/math/decoct.js create mode 100644 node_modules/locutus/php/math/decoct.js.map create mode 100644 node_modules/locutus/php/math/deg2rad.js create mode 100644 node_modules/locutus/php/math/deg2rad.js.map create mode 100644 node_modules/locutus/php/math/exp.js create mode 100644 node_modules/locutus/php/math/exp.js.map create mode 100644 node_modules/locutus/php/math/expm1.js create mode 100644 node_modules/locutus/php/math/expm1.js.map create mode 100644 node_modules/locutus/php/math/floor.js create mode 100644 node_modules/locutus/php/math/floor.js.map create mode 100644 node_modules/locutus/php/math/fmod.js create mode 100644 node_modules/locutus/php/math/fmod.js.map create mode 100644 node_modules/locutus/php/math/getrandmax.js create mode 100644 node_modules/locutus/php/math/getrandmax.js.map create mode 100644 node_modules/locutus/php/math/hexdec.js create mode 100644 node_modules/locutus/php/math/hexdec.js.map create mode 100644 node_modules/locutus/php/math/hypot.js create mode 100644 node_modules/locutus/php/math/hypot.js.map create mode 100644 node_modules/locutus/php/math/index.js create mode 100644 node_modules/locutus/php/math/index.js.map create mode 100644 node_modules/locutus/php/math/is_finite.js create mode 100644 node_modules/locutus/php/math/is_finite.js.map create mode 100644 node_modules/locutus/php/math/is_infinite.js create mode 100644 node_modules/locutus/php/math/is_infinite.js.map create mode 100644 node_modules/locutus/php/math/is_nan.js create mode 100644 node_modules/locutus/php/math/is_nan.js.map create mode 100644 node_modules/locutus/php/math/lcg_value.js create mode 100644 node_modules/locutus/php/math/lcg_value.js.map create mode 100644 node_modules/locutus/php/math/log.js create mode 100644 node_modules/locutus/php/math/log.js.map create mode 100644 node_modules/locutus/php/math/log10.js create mode 100644 node_modules/locutus/php/math/log10.js.map create mode 100644 node_modules/locutus/php/math/log1p.js create mode 100644 node_modules/locutus/php/math/log1p.js.map create mode 100644 node_modules/locutus/php/math/max.js create mode 100644 node_modules/locutus/php/math/max.js.map create mode 100644 node_modules/locutus/php/math/min.js create mode 100644 node_modules/locutus/php/math/min.js.map create mode 100644 node_modules/locutus/php/math/mt_getrandmax.js create mode 100644 node_modules/locutus/php/math/mt_getrandmax.js.map create mode 100644 node_modules/locutus/php/math/mt_rand.js create mode 100644 node_modules/locutus/php/math/mt_rand.js.map create mode 100644 node_modules/locutus/php/math/octdec.js create mode 100644 node_modules/locutus/php/math/octdec.js.map create mode 100644 node_modules/locutus/php/math/pi.js create mode 100644 node_modules/locutus/php/math/pi.js.map create mode 100644 node_modules/locutus/php/math/pow.js create mode 100644 node_modules/locutus/php/math/pow.js.map create mode 100644 node_modules/locutus/php/math/rad2deg.js create mode 100644 node_modules/locutus/php/math/rad2deg.js.map create mode 100644 node_modules/locutus/php/math/rand.js create mode 100644 node_modules/locutus/php/math/rand.js.map create mode 100644 node_modules/locutus/php/math/round.js create mode 100644 node_modules/locutus/php/math/round.js.map create mode 100644 node_modules/locutus/php/math/sin.js create mode 100644 node_modules/locutus/php/math/sin.js.map create mode 100644 node_modules/locutus/php/math/sinh.js create mode 100644 node_modules/locutus/php/math/sinh.js.map create mode 100644 node_modules/locutus/php/math/sqrt.js create mode 100644 node_modules/locutus/php/math/sqrt.js.map create mode 100644 node_modules/locutus/php/math/tan.js create mode 100644 node_modules/locutus/php/math/tan.js.map create mode 100644 node_modules/locutus/php/math/tanh.js create mode 100644 node_modules/locutus/php/math/tanh.js.map create mode 100644 node_modules/locutus/php/misc/index.js create mode 100644 node_modules/locutus/php/misc/index.js.map create mode 100644 node_modules/locutus/php/misc/pack.js create mode 100644 node_modules/locutus/php/misc/pack.js.map create mode 100644 node_modules/locutus/php/misc/uniqid.js create mode 100644 node_modules/locutus/php/misc/uniqid.js.map create mode 100644 node_modules/locutus/php/net-gopher/gopher_parsedir.js create mode 100644 node_modules/locutus/php/net-gopher/gopher_parsedir.js.map create mode 100644 node_modules/locutus/php/net-gopher/index.js create mode 100644 node_modules/locutus/php/net-gopher/index.js.map create mode 100644 node_modules/locutus/php/network/index.js create mode 100644 node_modules/locutus/php/network/index.js.map create mode 100644 node_modules/locutus/php/network/inet_ntop.js create mode 100644 node_modules/locutus/php/network/inet_ntop.js.map create mode 100644 node_modules/locutus/php/network/inet_pton.js create mode 100644 node_modules/locutus/php/network/inet_pton.js.map create mode 100644 node_modules/locutus/php/network/ip2long.js create mode 100644 node_modules/locutus/php/network/ip2long.js.map create mode 100644 node_modules/locutus/php/network/long2ip.js create mode 100644 node_modules/locutus/php/network/long2ip.js.map create mode 100644 node_modules/locutus/php/network/setcookie.js create mode 100644 node_modules/locutus/php/network/setcookie.js.map create mode 100644 node_modules/locutus/php/network/setrawcookie.js create mode 100644 node_modules/locutus/php/network/setrawcookie.js.map create mode 100644 node_modules/locutus/php/pcre/index.js create mode 100644 node_modules/locutus/php/pcre/index.js.map create mode 100644 node_modules/locutus/php/pcre/preg_quote.js create mode 100644 node_modules/locutus/php/pcre/preg_quote.js.map create mode 100644 node_modules/locutus/php/pcre/sql_regcase.js create mode 100644 node_modules/locutus/php/pcre/sql_regcase.js.map create mode 100644 node_modules/locutus/php/strings/addcslashes.js create mode 100644 node_modules/locutus/php/strings/addcslashes.js.map create mode 100644 node_modules/locutus/php/strings/addslashes.js create mode 100644 node_modules/locutus/php/strings/addslashes.js.map create mode 100644 node_modules/locutus/php/strings/bin2hex.js create mode 100644 node_modules/locutus/php/strings/bin2hex.js.map create mode 100644 node_modules/locutus/php/strings/chop.js create mode 100644 node_modules/locutus/php/strings/chop.js.map create mode 100644 node_modules/locutus/php/strings/chr.js create mode 100644 node_modules/locutus/php/strings/chr.js.map create mode 100644 node_modules/locutus/php/strings/chunk_split.js create mode 100644 node_modules/locutus/php/strings/chunk_split.js.map create mode 100644 node_modules/locutus/php/strings/convert_cyr_string.js create mode 100644 node_modules/locutus/php/strings/convert_cyr_string.js.map create mode 100644 node_modules/locutus/php/strings/convert_uuencode.js create mode 100644 node_modules/locutus/php/strings/convert_uuencode.js.map create mode 100644 node_modules/locutus/php/strings/count_chars.js create mode 100644 node_modules/locutus/php/strings/count_chars.js.map create mode 100644 node_modules/locutus/php/strings/crc32.js create mode 100644 node_modules/locutus/php/strings/crc32.js.map create mode 100644 node_modules/locutus/php/strings/echo.js create mode 100644 node_modules/locutus/php/strings/echo.js.map create mode 100644 node_modules/locutus/php/strings/explode.js create mode 100644 node_modules/locutus/php/strings/explode.js.map create mode 100644 node_modules/locutus/php/strings/get_html_translation_table.js create mode 100644 node_modules/locutus/php/strings/get_html_translation_table.js.map create mode 100644 node_modules/locutus/php/strings/hex2bin.js create mode 100644 node_modules/locutus/php/strings/hex2bin.js.map create mode 100644 node_modules/locutus/php/strings/html_entity_decode.js create mode 100644 node_modules/locutus/php/strings/html_entity_decode.js.map create mode 100644 node_modules/locutus/php/strings/htmlentities.js create mode 100644 node_modules/locutus/php/strings/htmlentities.js.map create mode 100644 node_modules/locutus/php/strings/htmlspecialchars.js create mode 100644 node_modules/locutus/php/strings/htmlspecialchars.js.map create mode 100644 node_modules/locutus/php/strings/htmlspecialchars_decode.js create mode 100644 node_modules/locutus/php/strings/htmlspecialchars_decode.js.map create mode 100644 node_modules/locutus/php/strings/implode.js create mode 100644 node_modules/locutus/php/strings/implode.js.map create mode 100644 node_modules/locutus/php/strings/index.js create mode 100644 node_modules/locutus/php/strings/index.js.map create mode 100644 node_modules/locutus/php/strings/join.js create mode 100644 node_modules/locutus/php/strings/join.js.map create mode 100644 node_modules/locutus/php/strings/lcfirst.js create mode 100644 node_modules/locutus/php/strings/lcfirst.js.map create mode 100644 node_modules/locutus/php/strings/levenshtein.js create mode 100644 node_modules/locutus/php/strings/levenshtein.js.map create mode 100644 node_modules/locutus/php/strings/localeconv.js create mode 100644 node_modules/locutus/php/strings/localeconv.js.map create mode 100644 node_modules/locutus/php/strings/ltrim.js create mode 100644 node_modules/locutus/php/strings/ltrim.js.map create mode 100644 node_modules/locutus/php/strings/md5.js create mode 100644 node_modules/locutus/php/strings/md5.js.map create mode 100644 node_modules/locutus/php/strings/md5_file.js create mode 100644 node_modules/locutus/php/strings/md5_file.js.map create mode 100644 node_modules/locutus/php/strings/metaphone.js create mode 100644 node_modules/locutus/php/strings/metaphone.js.map create mode 100644 node_modules/locutus/php/strings/money_format.js create mode 100644 node_modules/locutus/php/strings/money_format.js.map create mode 100644 node_modules/locutus/php/strings/nl2br.js create mode 100644 node_modules/locutus/php/strings/nl2br.js.map create mode 100644 node_modules/locutus/php/strings/nl_langinfo.js create mode 100644 node_modules/locutus/php/strings/nl_langinfo.js.map create mode 100644 node_modules/locutus/php/strings/number_format.js create mode 100644 node_modules/locutus/php/strings/number_format.js.map create mode 100644 node_modules/locutus/php/strings/ord.js create mode 100644 node_modules/locutus/php/strings/ord.js.map create mode 100644 node_modules/locutus/php/strings/parse_str.js create mode 100644 node_modules/locutus/php/strings/parse_str.js.map create mode 100644 node_modules/locutus/php/strings/printf.js create mode 100644 node_modules/locutus/php/strings/printf.js.map create mode 100644 node_modules/locutus/php/strings/quoted_printable_decode.js create mode 100644 node_modules/locutus/php/strings/quoted_printable_decode.js.map create mode 100644 node_modules/locutus/php/strings/quoted_printable_encode.js create mode 100644 node_modules/locutus/php/strings/quoted_printable_encode.js.map create mode 100644 node_modules/locutus/php/strings/quotemeta.js create mode 100644 node_modules/locutus/php/strings/quotemeta.js.map create mode 100644 node_modules/locutus/php/strings/rtrim.js create mode 100644 node_modules/locutus/php/strings/rtrim.js.map create mode 100644 node_modules/locutus/php/strings/setlocale.js create mode 100644 node_modules/locutus/php/strings/setlocale.js.map create mode 100644 node_modules/locutus/php/strings/sha1.js create mode 100644 node_modules/locutus/php/strings/sha1.js.map create mode 100644 node_modules/locutus/php/strings/sha1_file.js create mode 100644 node_modules/locutus/php/strings/sha1_file.js.map create mode 100644 node_modules/locutus/php/strings/similar_text.js create mode 100644 node_modules/locutus/php/strings/similar_text.js.map create mode 100644 node_modules/locutus/php/strings/soundex.js create mode 100644 node_modules/locutus/php/strings/soundex.js.map create mode 100644 node_modules/locutus/php/strings/split.js create mode 100644 node_modules/locutus/php/strings/split.js.map create mode 100644 node_modules/locutus/php/strings/sprintf.js create mode 100644 node_modules/locutus/php/strings/sprintf.js.map create mode 100644 node_modules/locutus/php/strings/sscanf.js create mode 100644 node_modules/locutus/php/strings/sscanf.js.map create mode 100644 node_modules/locutus/php/strings/str_getcsv.js create mode 100644 node_modules/locutus/php/strings/str_getcsv.js.map create mode 100644 node_modules/locutus/php/strings/str_ireplace.js create mode 100644 node_modules/locutus/php/strings/str_ireplace.js.map create mode 100644 node_modules/locutus/php/strings/str_pad.js create mode 100644 node_modules/locutus/php/strings/str_pad.js.map create mode 100644 node_modules/locutus/php/strings/str_repeat.js create mode 100644 node_modules/locutus/php/strings/str_repeat.js.map create mode 100644 node_modules/locutus/php/strings/str_replace.js create mode 100644 node_modules/locutus/php/strings/str_replace.js.map create mode 100644 node_modules/locutus/php/strings/str_rot13.js create mode 100644 node_modules/locutus/php/strings/str_rot13.js.map create mode 100644 node_modules/locutus/php/strings/str_shuffle.js create mode 100644 node_modules/locutus/php/strings/str_shuffle.js.map create mode 100644 node_modules/locutus/php/strings/str_split.js create mode 100644 node_modules/locutus/php/strings/str_split.js.map create mode 100644 node_modules/locutus/php/strings/str_word_count.js create mode 100644 node_modules/locutus/php/strings/str_word_count.js.map create mode 100644 node_modules/locutus/php/strings/strcasecmp.js create mode 100644 node_modules/locutus/php/strings/strcasecmp.js.map create mode 100644 node_modules/locutus/php/strings/strchr.js create mode 100644 node_modules/locutus/php/strings/strchr.js.map create mode 100644 node_modules/locutus/php/strings/strcmp.js create mode 100644 node_modules/locutus/php/strings/strcmp.js.map create mode 100644 node_modules/locutus/php/strings/strcoll.js create mode 100644 node_modules/locutus/php/strings/strcoll.js.map create mode 100644 node_modules/locutus/php/strings/strcspn.js create mode 100644 node_modules/locutus/php/strings/strcspn.js.map create mode 100644 node_modules/locutus/php/strings/strip_tags.js create mode 100644 node_modules/locutus/php/strings/strip_tags.js.map create mode 100644 node_modules/locutus/php/strings/stripos.js create mode 100644 node_modules/locutus/php/strings/stripos.js.map create mode 100644 node_modules/locutus/php/strings/stripslashes.js create mode 100644 node_modules/locutus/php/strings/stripslashes.js.map create mode 100644 node_modules/locutus/php/strings/stristr.js create mode 100644 node_modules/locutus/php/strings/stristr.js.map create mode 100644 node_modules/locutus/php/strings/strlen.js create mode 100644 node_modules/locutus/php/strings/strlen.js.map create mode 100644 node_modules/locutus/php/strings/strnatcasecmp.js create mode 100644 node_modules/locutus/php/strings/strnatcasecmp.js.map create mode 100644 node_modules/locutus/php/strings/strnatcmp.js create mode 100644 node_modules/locutus/php/strings/strnatcmp.js.map create mode 100644 node_modules/locutus/php/strings/strncasecmp.js create mode 100644 node_modules/locutus/php/strings/strncasecmp.js.map create mode 100644 node_modules/locutus/php/strings/strncmp.js create mode 100644 node_modules/locutus/php/strings/strncmp.js.map create mode 100644 node_modules/locutus/php/strings/strpbrk.js create mode 100644 node_modules/locutus/php/strings/strpbrk.js.map create mode 100644 node_modules/locutus/php/strings/strpos.js create mode 100644 node_modules/locutus/php/strings/strpos.js.map create mode 100644 node_modules/locutus/php/strings/strrchr.js create mode 100644 node_modules/locutus/php/strings/strrchr.js.map create mode 100644 node_modules/locutus/php/strings/strrev.js create mode 100644 node_modules/locutus/php/strings/strrev.js.map create mode 100644 node_modules/locutus/php/strings/strripos.js create mode 100644 node_modules/locutus/php/strings/strripos.js.map create mode 100644 node_modules/locutus/php/strings/strrpos.js create mode 100644 node_modules/locutus/php/strings/strrpos.js.map create mode 100644 node_modules/locutus/php/strings/strspn.js create mode 100644 node_modules/locutus/php/strings/strspn.js.map create mode 100644 node_modules/locutus/php/strings/strstr.js create mode 100644 node_modules/locutus/php/strings/strstr.js.map create mode 100644 node_modules/locutus/php/strings/strtok.js create mode 100644 node_modules/locutus/php/strings/strtok.js.map create mode 100644 node_modules/locutus/php/strings/strtolower.js create mode 100644 node_modules/locutus/php/strings/strtolower.js.map create mode 100644 node_modules/locutus/php/strings/strtoupper.js create mode 100644 node_modules/locutus/php/strings/strtoupper.js.map create mode 100644 node_modules/locutus/php/strings/strtr.js create mode 100644 node_modules/locutus/php/strings/strtr.js.map create mode 100644 node_modules/locutus/php/strings/substr.js create mode 100644 node_modules/locutus/php/strings/substr.js.map create mode 100644 node_modules/locutus/php/strings/substr_compare.js create mode 100644 node_modules/locutus/php/strings/substr_compare.js.map create mode 100644 node_modules/locutus/php/strings/substr_count.js create mode 100644 node_modules/locutus/php/strings/substr_count.js.map create mode 100644 node_modules/locutus/php/strings/substr_replace.js create mode 100644 node_modules/locutus/php/strings/substr_replace.js.map create mode 100644 node_modules/locutus/php/strings/trim.js create mode 100644 node_modules/locutus/php/strings/trim.js.map create mode 100644 node_modules/locutus/php/strings/ucfirst.js create mode 100644 node_modules/locutus/php/strings/ucfirst.js.map create mode 100644 node_modules/locutus/php/strings/ucwords.js create mode 100644 node_modules/locutus/php/strings/ucwords.js.map create mode 100644 node_modules/locutus/php/strings/vprintf.js create mode 100644 node_modules/locutus/php/strings/vprintf.js.map create mode 100644 node_modules/locutus/php/strings/vsprintf.js create mode 100644 node_modules/locutus/php/strings/vsprintf.js.map create mode 100644 node_modules/locutus/php/strings/wordwrap.js create mode 100644 node_modules/locutus/php/strings/wordwrap.js.map create mode 100644 node_modules/locutus/php/url/base64_decode.js create mode 100644 node_modules/locutus/php/url/base64_decode.js.map create mode 100644 node_modules/locutus/php/url/base64_encode.js create mode 100644 node_modules/locutus/php/url/base64_encode.js.map create mode 100644 node_modules/locutus/php/url/http_build_query.js create mode 100644 node_modules/locutus/php/url/http_build_query.js.map create mode 100644 node_modules/locutus/php/url/index.js create mode 100644 node_modules/locutus/php/url/index.js.map create mode 100644 node_modules/locutus/php/url/parse_url.js create mode 100644 node_modules/locutus/php/url/parse_url.js.map create mode 100644 node_modules/locutus/php/url/rawurldecode.js create mode 100644 node_modules/locutus/php/url/rawurldecode.js.map create mode 100644 node_modules/locutus/php/url/rawurlencode.js create mode 100644 node_modules/locutus/php/url/rawurlencode.js.map create mode 100644 node_modules/locutus/php/url/urldecode.js create mode 100644 node_modules/locutus/php/url/urldecode.js.map create mode 100644 node_modules/locutus/php/url/urlencode.js create mode 100644 node_modules/locutus/php/url/urlencode.js.map create mode 100644 node_modules/locutus/php/var/boolval.js create mode 100644 node_modules/locutus/php/var/boolval.js.map create mode 100644 node_modules/locutus/php/var/doubleval.js create mode 100644 node_modules/locutus/php/var/doubleval.js.map create mode 100644 node_modules/locutus/php/var/empty.js create mode 100644 node_modules/locutus/php/var/empty.js.map create mode 100644 node_modules/locutus/php/var/floatval.js create mode 100644 node_modules/locutus/php/var/floatval.js.map create mode 100644 node_modules/locutus/php/var/gettype.js create mode 100644 node_modules/locutus/php/var/gettype.js.map create mode 100644 node_modules/locutus/php/var/index.js create mode 100644 node_modules/locutus/php/var/index.js.map create mode 100644 node_modules/locutus/php/var/intval.js create mode 100644 node_modules/locutus/php/var/intval.js.map create mode 100644 node_modules/locutus/php/var/is_array.js create mode 100644 node_modules/locutus/php/var/is_array.js.map create mode 100644 node_modules/locutus/php/var/is_binary.js create mode 100644 node_modules/locutus/php/var/is_binary.js.map create mode 100644 node_modules/locutus/php/var/is_bool.js create mode 100644 node_modules/locutus/php/var/is_bool.js.map create mode 100644 node_modules/locutus/php/var/is_buffer.js create mode 100644 node_modules/locutus/php/var/is_buffer.js.map create mode 100644 node_modules/locutus/php/var/is_callable.js create mode 100644 node_modules/locutus/php/var/is_callable.js.map create mode 100644 node_modules/locutus/php/var/is_double.js create mode 100644 node_modules/locutus/php/var/is_double.js.map create mode 100644 node_modules/locutus/php/var/is_float.js create mode 100644 node_modules/locutus/php/var/is_float.js.map create mode 100644 node_modules/locutus/php/var/is_int.js create mode 100644 node_modules/locutus/php/var/is_int.js.map create mode 100644 node_modules/locutus/php/var/is_integer.js create mode 100644 node_modules/locutus/php/var/is_integer.js.map create mode 100644 node_modules/locutus/php/var/is_long.js create mode 100644 node_modules/locutus/php/var/is_long.js.map create mode 100644 node_modules/locutus/php/var/is_null.js create mode 100644 node_modules/locutus/php/var/is_null.js.map create mode 100644 node_modules/locutus/php/var/is_numeric.js create mode 100644 node_modules/locutus/php/var/is_numeric.js.map create mode 100644 node_modules/locutus/php/var/is_object.js create mode 100644 node_modules/locutus/php/var/is_object.js.map create mode 100644 node_modules/locutus/php/var/is_real.js create mode 100644 node_modules/locutus/php/var/is_real.js.map create mode 100644 node_modules/locutus/php/var/is_scalar.js create mode 100644 node_modules/locutus/php/var/is_scalar.js.map create mode 100644 node_modules/locutus/php/var/is_string.js create mode 100644 node_modules/locutus/php/var/is_string.js.map create mode 100644 node_modules/locutus/php/var/is_unicode.js create mode 100644 node_modules/locutus/php/var/is_unicode.js.map create mode 100644 node_modules/locutus/php/var/isset.js create mode 100644 node_modules/locutus/php/var/isset.js.map create mode 100644 node_modules/locutus/php/var/print_r.js create mode 100644 node_modules/locutus/php/var/print_r.js.map create mode 100644 node_modules/locutus/php/var/serialize.js create mode 100644 node_modules/locutus/php/var/serialize.js.map create mode 100644 node_modules/locutus/php/var/strval.js create mode 100644 node_modules/locutus/php/var/strval.js.map create mode 100644 node_modules/locutus/php/var/unserialize.js create mode 100644 node_modules/locutus/php/var/unserialize.js.map create mode 100644 node_modules/locutus/php/var/var_dump.js create mode 100644 node_modules/locutus/php/var/var_dump.js.map create mode 100644 node_modules/locutus/php/var/var_export.js create mode 100644 node_modules/locutus/php/var/var_export.js.map create mode 100644 node_modules/locutus/php/xdiff/index.js create mode 100644 node_modules/locutus/php/xdiff/index.js.map create mode 100644 node_modules/locutus/php/xdiff/xdiff_string_diff.js create mode 100644 node_modules/locutus/php/xdiff/xdiff_string_diff.js.map create mode 100644 node_modules/locutus/php/xdiff/xdiff_string_patch.js create mode 100644 node_modules/locutus/php/xdiff/xdiff_string_patch.js.map create mode 100644 node_modules/locutus/php/xml/index.js create mode 100644 node_modules/locutus/php/xml/index.js.map create mode 100644 node_modules/locutus/php/xml/utf8_decode.js create mode 100644 node_modules/locutus/php/xml/utf8_decode.js.map create mode 100644 node_modules/locutus/php/xml/utf8_encode.js create mode 100644 node_modules/locutus/php/xml/utf8_encode.js.map create mode 100644 node_modules/locutus/python/index.js create mode 100644 node_modules/locutus/python/index.js.map create mode 100644 node_modules/locutus/python/string/capwords.js create mode 100644 node_modules/locutus/python/string/capwords.js.map create mode 100644 node_modules/locutus/python/string/index.js create mode 100644 node_modules/locutus/python/string/index.js.map create mode 100644 node_modules/locutus/ruby/Math/acos.js create mode 100644 node_modules/locutus/ruby/Math/acos.js.map create mode 100644 node_modules/locutus/ruby/Math/index.js create mode 100644 node_modules/locutus/ruby/Math/index.js.map create mode 100644 node_modules/locutus/ruby/index.js create mode 100644 node_modules/locutus/ruby/index.js.map create mode 100644 node_modules/lodash/LICENSE create mode 100644 node_modules/lodash/README.md create mode 100644 node_modules/lodash/_DataView.js create mode 100644 node_modules/lodash/_Hash.js create mode 100644 node_modules/lodash/_LazyWrapper.js create mode 100644 node_modules/lodash/_ListCache.js create mode 100644 node_modules/lodash/_LodashWrapper.js create mode 100644 node_modules/lodash/_Map.js create mode 100644 node_modules/lodash/_MapCache.js create mode 100644 node_modules/lodash/_Promise.js create mode 100644 node_modules/lodash/_Set.js create mode 100644 node_modules/lodash/_SetCache.js create mode 100644 node_modules/lodash/_Stack.js create mode 100644 node_modules/lodash/_Symbol.js create mode 100644 node_modules/lodash/_Uint8Array.js create mode 100644 node_modules/lodash/_WeakMap.js create mode 100644 node_modules/lodash/_addMapEntry.js create mode 100644 node_modules/lodash/_addSetEntry.js create mode 100644 node_modules/lodash/_apply.js create mode 100644 node_modules/lodash/_arrayAggregator.js create mode 100644 node_modules/lodash/_arrayEach.js create mode 100644 node_modules/lodash/_arrayEachRight.js create mode 100644 node_modules/lodash/_arrayEvery.js create mode 100644 node_modules/lodash/_arrayFilter.js create mode 100644 node_modules/lodash/_arrayIncludes.js create mode 100644 node_modules/lodash/_arrayIncludesWith.js create mode 100644 node_modules/lodash/_arrayLikeKeys.js create mode 100644 node_modules/lodash/_arrayMap.js create mode 100644 node_modules/lodash/_arrayPush.js create mode 100644 node_modules/lodash/_arrayReduce.js create mode 100644 node_modules/lodash/_arrayReduceRight.js create mode 100644 node_modules/lodash/_arraySample.js create mode 100644 node_modules/lodash/_arraySampleSize.js create mode 100644 node_modules/lodash/_arrayShuffle.js create mode 100644 node_modules/lodash/_arraySome.js create mode 100644 node_modules/lodash/_asciiSize.js create mode 100644 node_modules/lodash/_asciiToArray.js create mode 100644 node_modules/lodash/_asciiWords.js create mode 100644 node_modules/lodash/_assignMergeValue.js create mode 100644 node_modules/lodash/_assignValue.js create mode 100644 node_modules/lodash/_assocIndexOf.js create mode 100644 node_modules/lodash/_baseAggregator.js create mode 100644 node_modules/lodash/_baseAssign.js create mode 100644 node_modules/lodash/_baseAssignIn.js create mode 100644 node_modules/lodash/_baseAssignValue.js create mode 100644 node_modules/lodash/_baseAt.js create mode 100644 node_modules/lodash/_baseClamp.js create mode 100644 node_modules/lodash/_baseClone.js create mode 100644 node_modules/lodash/_baseConforms.js create mode 100644 node_modules/lodash/_baseConformsTo.js create mode 100644 node_modules/lodash/_baseCreate.js create mode 100644 node_modules/lodash/_baseDelay.js create mode 100644 node_modules/lodash/_baseDifference.js create mode 100644 node_modules/lodash/_baseEach.js create mode 100644 node_modules/lodash/_baseEachRight.js create mode 100644 node_modules/lodash/_baseEvery.js create mode 100644 node_modules/lodash/_baseExtremum.js create mode 100644 node_modules/lodash/_baseFill.js create mode 100644 node_modules/lodash/_baseFilter.js create mode 100644 node_modules/lodash/_baseFindIndex.js create mode 100644 node_modules/lodash/_baseFindKey.js create mode 100644 node_modules/lodash/_baseFlatten.js create mode 100644 node_modules/lodash/_baseFor.js create mode 100644 node_modules/lodash/_baseForOwn.js create mode 100644 node_modules/lodash/_baseForOwnRight.js create mode 100644 node_modules/lodash/_baseForRight.js create mode 100644 node_modules/lodash/_baseFunctions.js create mode 100644 node_modules/lodash/_baseGet.js create mode 100644 node_modules/lodash/_baseGetAllKeys.js create mode 100644 node_modules/lodash/_baseGetTag.js create mode 100644 node_modules/lodash/_baseGt.js create mode 100644 node_modules/lodash/_baseHas.js create mode 100644 node_modules/lodash/_baseHasIn.js create mode 100644 node_modules/lodash/_baseInRange.js create mode 100644 node_modules/lodash/_baseIndexOf.js create mode 100644 node_modules/lodash/_baseIndexOfWith.js create mode 100644 node_modules/lodash/_baseIntersection.js create mode 100644 node_modules/lodash/_baseInverter.js create mode 100644 node_modules/lodash/_baseInvoke.js create mode 100644 node_modules/lodash/_baseIsArguments.js create mode 100644 node_modules/lodash/_baseIsArrayBuffer.js create mode 100644 node_modules/lodash/_baseIsDate.js create mode 100644 node_modules/lodash/_baseIsEqual.js create mode 100644 node_modules/lodash/_baseIsEqualDeep.js create mode 100644 node_modules/lodash/_baseIsMap.js create mode 100644 node_modules/lodash/_baseIsMatch.js create mode 100644 node_modules/lodash/_baseIsNaN.js create mode 100644 node_modules/lodash/_baseIsNative.js create mode 100644 node_modules/lodash/_baseIsRegExp.js create mode 100644 node_modules/lodash/_baseIsSet.js create mode 100644 node_modules/lodash/_baseIsTypedArray.js create mode 100644 node_modules/lodash/_baseIteratee.js create mode 100644 node_modules/lodash/_baseKeys.js create mode 100644 node_modules/lodash/_baseKeysIn.js create mode 100644 node_modules/lodash/_baseLodash.js create mode 100644 node_modules/lodash/_baseLt.js create mode 100644 node_modules/lodash/_baseMap.js create mode 100644 node_modules/lodash/_baseMatches.js create mode 100644 node_modules/lodash/_baseMatchesProperty.js create mode 100644 node_modules/lodash/_baseMean.js create mode 100644 node_modules/lodash/_baseMerge.js create mode 100644 node_modules/lodash/_baseMergeDeep.js create mode 100644 node_modules/lodash/_baseNth.js create mode 100644 node_modules/lodash/_baseOrderBy.js create mode 100644 node_modules/lodash/_basePick.js create mode 100644 node_modules/lodash/_basePickBy.js create mode 100644 node_modules/lodash/_baseProperty.js create mode 100644 node_modules/lodash/_basePropertyDeep.js create mode 100644 node_modules/lodash/_basePropertyOf.js create mode 100644 node_modules/lodash/_basePullAll.js create mode 100644 node_modules/lodash/_basePullAt.js create mode 100644 node_modules/lodash/_baseRandom.js create mode 100644 node_modules/lodash/_baseRange.js create mode 100644 node_modules/lodash/_baseReduce.js create mode 100644 node_modules/lodash/_baseRepeat.js create mode 100644 node_modules/lodash/_baseRest.js create mode 100644 node_modules/lodash/_baseSample.js create mode 100644 node_modules/lodash/_baseSampleSize.js create mode 100644 node_modules/lodash/_baseSet.js create mode 100644 node_modules/lodash/_baseSetData.js create mode 100644 node_modules/lodash/_baseSetToString.js create mode 100644 node_modules/lodash/_baseShuffle.js create mode 100644 node_modules/lodash/_baseSlice.js create mode 100644 node_modules/lodash/_baseSome.js create mode 100644 node_modules/lodash/_baseSortBy.js create mode 100644 node_modules/lodash/_baseSortedIndex.js create mode 100644 node_modules/lodash/_baseSortedIndexBy.js create mode 100644 node_modules/lodash/_baseSortedUniq.js create mode 100644 node_modules/lodash/_baseSum.js create mode 100644 node_modules/lodash/_baseTimes.js create mode 100644 node_modules/lodash/_baseToNumber.js create mode 100644 node_modules/lodash/_baseToPairs.js create mode 100644 node_modules/lodash/_baseToString.js create mode 100644 node_modules/lodash/_baseUnary.js create mode 100644 node_modules/lodash/_baseUniq.js create mode 100644 node_modules/lodash/_baseUnset.js create mode 100644 node_modules/lodash/_baseUpdate.js create mode 100644 node_modules/lodash/_baseValues.js create mode 100644 node_modules/lodash/_baseWhile.js create mode 100644 node_modules/lodash/_baseWrapperValue.js create mode 100644 node_modules/lodash/_baseXor.js create mode 100644 node_modules/lodash/_baseZipObject.js create mode 100644 node_modules/lodash/_cacheHas.js create mode 100644 node_modules/lodash/_castArrayLikeObject.js create mode 100644 node_modules/lodash/_castFunction.js create mode 100644 node_modules/lodash/_castPath.js create mode 100644 node_modules/lodash/_castRest.js create mode 100644 node_modules/lodash/_castSlice.js create mode 100644 node_modules/lodash/_charsEndIndex.js create mode 100644 node_modules/lodash/_charsStartIndex.js create mode 100644 node_modules/lodash/_cloneArrayBuffer.js create mode 100644 node_modules/lodash/_cloneBuffer.js create mode 100644 node_modules/lodash/_cloneDataView.js create mode 100644 node_modules/lodash/_cloneMap.js create mode 100644 node_modules/lodash/_cloneRegExp.js create mode 100644 node_modules/lodash/_cloneSet.js create mode 100644 node_modules/lodash/_cloneSymbol.js create mode 100644 node_modules/lodash/_cloneTypedArray.js create mode 100644 node_modules/lodash/_compareAscending.js create mode 100644 node_modules/lodash/_compareMultiple.js create mode 100644 node_modules/lodash/_composeArgs.js create mode 100644 node_modules/lodash/_composeArgsRight.js create mode 100644 node_modules/lodash/_copyArray.js create mode 100644 node_modules/lodash/_copyObject.js create mode 100644 node_modules/lodash/_copySymbols.js create mode 100644 node_modules/lodash/_copySymbolsIn.js create mode 100644 node_modules/lodash/_coreJsData.js create mode 100644 node_modules/lodash/_countHolders.js create mode 100644 node_modules/lodash/_createAggregator.js create mode 100644 node_modules/lodash/_createAssigner.js create mode 100644 node_modules/lodash/_createBaseEach.js create mode 100644 node_modules/lodash/_createBaseFor.js create mode 100644 node_modules/lodash/_createBind.js create mode 100644 node_modules/lodash/_createCaseFirst.js create mode 100644 node_modules/lodash/_createCompounder.js create mode 100644 node_modules/lodash/_createCtor.js create mode 100644 node_modules/lodash/_createCurry.js create mode 100644 node_modules/lodash/_createFind.js create mode 100644 node_modules/lodash/_createFlow.js create mode 100644 node_modules/lodash/_createHybrid.js create mode 100644 node_modules/lodash/_createInverter.js create mode 100644 node_modules/lodash/_createMathOperation.js create mode 100644 node_modules/lodash/_createOver.js create mode 100644 node_modules/lodash/_createPadding.js create mode 100644 node_modules/lodash/_createPartial.js create mode 100644 node_modules/lodash/_createRange.js create mode 100644 node_modules/lodash/_createRecurry.js create mode 100644 node_modules/lodash/_createRelationalOperation.js create mode 100644 node_modules/lodash/_createRound.js create mode 100644 node_modules/lodash/_createSet.js create mode 100644 node_modules/lodash/_createToPairs.js create mode 100644 node_modules/lodash/_createWrap.js create mode 100644 node_modules/lodash/_customDefaultsAssignIn.js create mode 100644 node_modules/lodash/_customDefaultsMerge.js create mode 100644 node_modules/lodash/_customOmitClone.js create mode 100644 node_modules/lodash/_deburrLetter.js create mode 100644 node_modules/lodash/_defineProperty.js create mode 100644 node_modules/lodash/_equalArrays.js create mode 100644 node_modules/lodash/_equalByTag.js create mode 100644 node_modules/lodash/_equalObjects.js create mode 100644 node_modules/lodash/_escapeHtmlChar.js create mode 100644 node_modules/lodash/_escapeStringChar.js create mode 100644 node_modules/lodash/_flatRest.js create mode 100644 node_modules/lodash/_freeGlobal.js create mode 100644 node_modules/lodash/_getAllKeys.js create mode 100644 node_modules/lodash/_getAllKeysIn.js create mode 100644 node_modules/lodash/_getData.js create mode 100644 node_modules/lodash/_getFuncName.js create mode 100644 node_modules/lodash/_getHolder.js create mode 100644 node_modules/lodash/_getMapData.js create mode 100644 node_modules/lodash/_getMatchData.js create mode 100644 node_modules/lodash/_getNative.js create mode 100644 node_modules/lodash/_getPrototype.js create mode 100644 node_modules/lodash/_getRawTag.js create mode 100644 node_modules/lodash/_getSymbols.js create mode 100644 node_modules/lodash/_getSymbolsIn.js create mode 100644 node_modules/lodash/_getTag.js create mode 100644 node_modules/lodash/_getValue.js create mode 100644 node_modules/lodash/_getView.js create mode 100644 node_modules/lodash/_getWrapDetails.js create mode 100644 node_modules/lodash/_hasPath.js create mode 100644 node_modules/lodash/_hasUnicode.js create mode 100644 node_modules/lodash/_hasUnicodeWord.js create mode 100644 node_modules/lodash/_hashClear.js create mode 100644 node_modules/lodash/_hashDelete.js create mode 100644 node_modules/lodash/_hashGet.js create mode 100644 node_modules/lodash/_hashHas.js create mode 100644 node_modules/lodash/_hashSet.js create mode 100644 node_modules/lodash/_initCloneArray.js create mode 100644 node_modules/lodash/_initCloneByTag.js create mode 100644 node_modules/lodash/_initCloneObject.js create mode 100644 node_modules/lodash/_insertWrapDetails.js create mode 100644 node_modules/lodash/_isFlattenable.js create mode 100644 node_modules/lodash/_isIndex.js create mode 100644 node_modules/lodash/_isIterateeCall.js create mode 100644 node_modules/lodash/_isKey.js create mode 100644 node_modules/lodash/_isKeyable.js create mode 100644 node_modules/lodash/_isLaziable.js create mode 100644 node_modules/lodash/_isMaskable.js create mode 100644 node_modules/lodash/_isMasked.js create mode 100644 node_modules/lodash/_isPrototype.js create mode 100644 node_modules/lodash/_isStrictComparable.js create mode 100644 node_modules/lodash/_iteratorToArray.js create mode 100644 node_modules/lodash/_lazyClone.js create mode 100644 node_modules/lodash/_lazyReverse.js create mode 100644 node_modules/lodash/_lazyValue.js create mode 100644 node_modules/lodash/_listCacheClear.js create mode 100644 node_modules/lodash/_listCacheDelete.js create mode 100644 node_modules/lodash/_listCacheGet.js create mode 100644 node_modules/lodash/_listCacheHas.js create mode 100644 node_modules/lodash/_listCacheSet.js create mode 100644 node_modules/lodash/_mapCacheClear.js create mode 100644 node_modules/lodash/_mapCacheDelete.js create mode 100644 node_modules/lodash/_mapCacheGet.js create mode 100644 node_modules/lodash/_mapCacheHas.js create mode 100644 node_modules/lodash/_mapCacheSet.js create mode 100644 node_modules/lodash/_mapToArray.js create mode 100644 node_modules/lodash/_matchesStrictComparable.js create mode 100644 node_modules/lodash/_memoizeCapped.js create mode 100644 node_modules/lodash/_mergeData.js create mode 100644 node_modules/lodash/_metaMap.js create mode 100644 node_modules/lodash/_nativeCreate.js create mode 100644 node_modules/lodash/_nativeKeys.js create mode 100644 node_modules/lodash/_nativeKeysIn.js create mode 100644 node_modules/lodash/_nodeUtil.js create mode 100644 node_modules/lodash/_objectToString.js create mode 100644 node_modules/lodash/_overArg.js create mode 100644 node_modules/lodash/_overRest.js create mode 100644 node_modules/lodash/_parent.js create mode 100644 node_modules/lodash/_reEscape.js create mode 100644 node_modules/lodash/_reEvaluate.js create mode 100644 node_modules/lodash/_reInterpolate.js create mode 100644 node_modules/lodash/_realNames.js create mode 100644 node_modules/lodash/_reorder.js create mode 100644 node_modules/lodash/_replaceHolders.js create mode 100644 node_modules/lodash/_root.js create mode 100644 node_modules/lodash/_setCacheAdd.js create mode 100644 node_modules/lodash/_setCacheHas.js create mode 100644 node_modules/lodash/_setData.js create mode 100644 node_modules/lodash/_setToArray.js create mode 100644 node_modules/lodash/_setToPairs.js create mode 100644 node_modules/lodash/_setToString.js create mode 100644 node_modules/lodash/_setWrapToString.js create mode 100644 node_modules/lodash/_shortOut.js create mode 100644 node_modules/lodash/_shuffleSelf.js create mode 100644 node_modules/lodash/_stackClear.js create mode 100644 node_modules/lodash/_stackDelete.js create mode 100644 node_modules/lodash/_stackGet.js create mode 100644 node_modules/lodash/_stackHas.js create mode 100644 node_modules/lodash/_stackSet.js create mode 100644 node_modules/lodash/_strictIndexOf.js create mode 100644 node_modules/lodash/_strictLastIndexOf.js create mode 100644 node_modules/lodash/_stringSize.js create mode 100644 node_modules/lodash/_stringToArray.js create mode 100644 node_modules/lodash/_stringToPath.js create mode 100644 node_modules/lodash/_toKey.js create mode 100644 node_modules/lodash/_toSource.js create mode 100644 node_modules/lodash/_unescapeHtmlChar.js create mode 100644 node_modules/lodash/_unicodeSize.js create mode 100644 node_modules/lodash/_unicodeToArray.js create mode 100644 node_modules/lodash/_unicodeWords.js create mode 100644 node_modules/lodash/_updateWrapDetails.js create mode 100644 node_modules/lodash/_wrapperClone.js create mode 100644 node_modules/lodash/add.js create mode 100644 node_modules/lodash/after.js create mode 100644 node_modules/lodash/array.js create mode 100644 node_modules/lodash/ary.js create mode 100644 node_modules/lodash/assign.js create mode 100644 node_modules/lodash/assignIn.js create mode 100644 node_modules/lodash/assignInWith.js create mode 100644 node_modules/lodash/assignWith.js create mode 100644 node_modules/lodash/at.js create mode 100644 node_modules/lodash/attempt.js create mode 100644 node_modules/lodash/before.js create mode 100644 node_modules/lodash/bind.js create mode 100644 node_modules/lodash/bindAll.js create mode 100644 node_modules/lodash/bindKey.js create mode 100644 node_modules/lodash/camelCase.js create mode 100644 node_modules/lodash/capitalize.js create mode 100644 node_modules/lodash/castArray.js create mode 100644 node_modules/lodash/ceil.js create mode 100644 node_modules/lodash/chain.js create mode 100644 node_modules/lodash/chunk.js create mode 100644 node_modules/lodash/clamp.js create mode 100644 node_modules/lodash/clone.js create mode 100644 node_modules/lodash/cloneDeep.js create mode 100644 node_modules/lodash/cloneDeepWith.js create mode 100644 node_modules/lodash/cloneWith.js create mode 100644 node_modules/lodash/collection.js create mode 100644 node_modules/lodash/commit.js create mode 100644 node_modules/lodash/compact.js create mode 100644 node_modules/lodash/concat.js create mode 100644 node_modules/lodash/cond.js create mode 100644 node_modules/lodash/conforms.js create mode 100644 node_modules/lodash/conformsTo.js create mode 100644 node_modules/lodash/constant.js create mode 100644 node_modules/lodash/core.js create mode 100644 node_modules/lodash/core.min.js create mode 100644 node_modules/lodash/countBy.js create mode 100644 node_modules/lodash/create.js create mode 100644 node_modules/lodash/curry.js create mode 100644 node_modules/lodash/curryRight.js create mode 100644 node_modules/lodash/date.js create mode 100644 node_modules/lodash/debounce.js create mode 100644 node_modules/lodash/deburr.js create mode 100644 node_modules/lodash/defaultTo.js create mode 100644 node_modules/lodash/defaults.js create mode 100644 node_modules/lodash/defaultsDeep.js create mode 100644 node_modules/lodash/defer.js create mode 100644 node_modules/lodash/delay.js create mode 100644 node_modules/lodash/difference.js create mode 100644 node_modules/lodash/differenceBy.js create mode 100644 node_modules/lodash/differenceWith.js create mode 100644 node_modules/lodash/divide.js create mode 100644 node_modules/lodash/drop.js create mode 100644 node_modules/lodash/dropRight.js create mode 100644 node_modules/lodash/dropRightWhile.js create mode 100644 node_modules/lodash/dropWhile.js create mode 100644 node_modules/lodash/each.js create mode 100644 node_modules/lodash/eachRight.js create mode 100644 node_modules/lodash/endsWith.js create mode 100644 node_modules/lodash/entries.js create mode 100644 node_modules/lodash/entriesIn.js create mode 100644 node_modules/lodash/eq.js create mode 100644 node_modules/lodash/escape.js create mode 100644 node_modules/lodash/escapeRegExp.js create mode 100644 node_modules/lodash/every.js create mode 100644 node_modules/lodash/extend.js create mode 100644 node_modules/lodash/extendWith.js create mode 100644 node_modules/lodash/fill.js create mode 100644 node_modules/lodash/filter.js create mode 100644 node_modules/lodash/find.js create mode 100644 node_modules/lodash/findIndex.js create mode 100644 node_modules/lodash/findKey.js create mode 100644 node_modules/lodash/findLast.js create mode 100644 node_modules/lodash/findLastIndex.js create mode 100644 node_modules/lodash/findLastKey.js create mode 100644 node_modules/lodash/first.js create mode 100644 node_modules/lodash/flatMap.js create mode 100644 node_modules/lodash/flatMapDeep.js create mode 100644 node_modules/lodash/flatMapDepth.js create mode 100644 node_modules/lodash/flatten.js create mode 100644 node_modules/lodash/flattenDeep.js create mode 100644 node_modules/lodash/flattenDepth.js create mode 100644 node_modules/lodash/flip.js create mode 100644 node_modules/lodash/floor.js create mode 100644 node_modules/lodash/flow.js create mode 100644 node_modules/lodash/flowRight.js create mode 100644 node_modules/lodash/forEach.js create mode 100644 node_modules/lodash/forEachRight.js create mode 100644 node_modules/lodash/forIn.js create mode 100644 node_modules/lodash/forInRight.js create mode 100644 node_modules/lodash/forOwn.js create mode 100644 node_modules/lodash/forOwnRight.js create mode 100644 node_modules/lodash/fp.js create mode 100644 node_modules/lodash/fp/F.js create mode 100644 node_modules/lodash/fp/T.js create mode 100644 node_modules/lodash/fp/__.js create mode 100644 node_modules/lodash/fp/_baseConvert.js create mode 100644 node_modules/lodash/fp/_convertBrowser.js create mode 100644 node_modules/lodash/fp/_falseOptions.js create mode 100644 node_modules/lodash/fp/_mapping.js create mode 100644 node_modules/lodash/fp/_util.js create mode 100644 node_modules/lodash/fp/add.js create mode 100644 node_modules/lodash/fp/after.js create mode 100644 node_modules/lodash/fp/all.js create mode 100644 node_modules/lodash/fp/allPass.js create mode 100644 node_modules/lodash/fp/always.js create mode 100644 node_modules/lodash/fp/any.js create mode 100644 node_modules/lodash/fp/anyPass.js create mode 100644 node_modules/lodash/fp/apply.js create mode 100644 node_modules/lodash/fp/array.js create mode 100644 node_modules/lodash/fp/ary.js create mode 100644 node_modules/lodash/fp/assign.js create mode 100644 node_modules/lodash/fp/assignAll.js create mode 100644 node_modules/lodash/fp/assignAllWith.js create mode 100644 node_modules/lodash/fp/assignIn.js create mode 100644 node_modules/lodash/fp/assignInAll.js create mode 100644 node_modules/lodash/fp/assignInAllWith.js create mode 100644 node_modules/lodash/fp/assignInWith.js create mode 100644 node_modules/lodash/fp/assignWith.js create mode 100644 node_modules/lodash/fp/assoc.js create mode 100644 node_modules/lodash/fp/assocPath.js create mode 100644 node_modules/lodash/fp/at.js create mode 100644 node_modules/lodash/fp/attempt.js create mode 100644 node_modules/lodash/fp/before.js create mode 100644 node_modules/lodash/fp/bind.js create mode 100644 node_modules/lodash/fp/bindAll.js create mode 100644 node_modules/lodash/fp/bindKey.js create mode 100644 node_modules/lodash/fp/camelCase.js create mode 100644 node_modules/lodash/fp/capitalize.js create mode 100644 node_modules/lodash/fp/castArray.js create mode 100644 node_modules/lodash/fp/ceil.js create mode 100644 node_modules/lodash/fp/chain.js create mode 100644 node_modules/lodash/fp/chunk.js create mode 100644 node_modules/lodash/fp/clamp.js create mode 100644 node_modules/lodash/fp/clone.js create mode 100644 node_modules/lodash/fp/cloneDeep.js create mode 100644 node_modules/lodash/fp/cloneDeepWith.js create mode 100644 node_modules/lodash/fp/cloneWith.js create mode 100644 node_modules/lodash/fp/collection.js create mode 100644 node_modules/lodash/fp/commit.js create mode 100644 node_modules/lodash/fp/compact.js create mode 100644 node_modules/lodash/fp/complement.js create mode 100644 node_modules/lodash/fp/compose.js create mode 100644 node_modules/lodash/fp/concat.js create mode 100644 node_modules/lodash/fp/cond.js create mode 100644 node_modules/lodash/fp/conforms.js create mode 100644 node_modules/lodash/fp/conformsTo.js create mode 100644 node_modules/lodash/fp/constant.js create mode 100644 node_modules/lodash/fp/contains.js create mode 100644 node_modules/lodash/fp/convert.js create mode 100644 node_modules/lodash/fp/countBy.js create mode 100644 node_modules/lodash/fp/create.js create mode 100644 node_modules/lodash/fp/curry.js create mode 100644 node_modules/lodash/fp/curryN.js create mode 100644 node_modules/lodash/fp/curryRight.js create mode 100644 node_modules/lodash/fp/curryRightN.js create mode 100644 node_modules/lodash/fp/date.js create mode 100644 node_modules/lodash/fp/debounce.js create mode 100644 node_modules/lodash/fp/deburr.js create mode 100644 node_modules/lodash/fp/defaultTo.js create mode 100644 node_modules/lodash/fp/defaults.js create mode 100644 node_modules/lodash/fp/defaultsAll.js create mode 100644 node_modules/lodash/fp/defaultsDeep.js create mode 100644 node_modules/lodash/fp/defaultsDeepAll.js create mode 100644 node_modules/lodash/fp/defer.js create mode 100644 node_modules/lodash/fp/delay.js create mode 100644 node_modules/lodash/fp/difference.js create mode 100644 node_modules/lodash/fp/differenceBy.js create mode 100644 node_modules/lodash/fp/differenceWith.js create mode 100644 node_modules/lodash/fp/dissoc.js create mode 100644 node_modules/lodash/fp/dissocPath.js create mode 100644 node_modules/lodash/fp/divide.js create mode 100644 node_modules/lodash/fp/drop.js create mode 100644 node_modules/lodash/fp/dropLast.js create mode 100644 node_modules/lodash/fp/dropLastWhile.js create mode 100644 node_modules/lodash/fp/dropRight.js create mode 100644 node_modules/lodash/fp/dropRightWhile.js create mode 100644 node_modules/lodash/fp/dropWhile.js create mode 100644 node_modules/lodash/fp/each.js create mode 100644 node_modules/lodash/fp/eachRight.js create mode 100644 node_modules/lodash/fp/endsWith.js create mode 100644 node_modules/lodash/fp/entries.js create mode 100644 node_modules/lodash/fp/entriesIn.js create mode 100644 node_modules/lodash/fp/eq.js create mode 100644 node_modules/lodash/fp/equals.js create mode 100644 node_modules/lodash/fp/escape.js create mode 100644 node_modules/lodash/fp/escapeRegExp.js create mode 100644 node_modules/lodash/fp/every.js create mode 100644 node_modules/lodash/fp/extend.js create mode 100644 node_modules/lodash/fp/extendAll.js create mode 100644 node_modules/lodash/fp/extendAllWith.js create mode 100644 node_modules/lodash/fp/extendWith.js create mode 100644 node_modules/lodash/fp/fill.js create mode 100644 node_modules/lodash/fp/filter.js create mode 100644 node_modules/lodash/fp/find.js create mode 100644 node_modules/lodash/fp/findFrom.js create mode 100644 node_modules/lodash/fp/findIndex.js create mode 100644 node_modules/lodash/fp/findIndexFrom.js create mode 100644 node_modules/lodash/fp/findKey.js create mode 100644 node_modules/lodash/fp/findLast.js create mode 100644 node_modules/lodash/fp/findLastFrom.js create mode 100644 node_modules/lodash/fp/findLastIndex.js create mode 100644 node_modules/lodash/fp/findLastIndexFrom.js create mode 100644 node_modules/lodash/fp/findLastKey.js create mode 100644 node_modules/lodash/fp/first.js create mode 100644 node_modules/lodash/fp/flatMap.js create mode 100644 node_modules/lodash/fp/flatMapDeep.js create mode 100644 node_modules/lodash/fp/flatMapDepth.js create mode 100644 node_modules/lodash/fp/flatten.js create mode 100644 node_modules/lodash/fp/flattenDeep.js create mode 100644 node_modules/lodash/fp/flattenDepth.js create mode 100644 node_modules/lodash/fp/flip.js create mode 100644 node_modules/lodash/fp/floor.js create mode 100644 node_modules/lodash/fp/flow.js create mode 100644 node_modules/lodash/fp/flowRight.js create mode 100644 node_modules/lodash/fp/forEach.js create mode 100644 node_modules/lodash/fp/forEachRight.js create mode 100644 node_modules/lodash/fp/forIn.js create mode 100644 node_modules/lodash/fp/forInRight.js create mode 100644 node_modules/lodash/fp/forOwn.js create mode 100644 node_modules/lodash/fp/forOwnRight.js create mode 100644 node_modules/lodash/fp/fromPairs.js create mode 100644 node_modules/lodash/fp/function.js create mode 100644 node_modules/lodash/fp/functions.js create mode 100644 node_modules/lodash/fp/functionsIn.js create mode 100644 node_modules/lodash/fp/get.js create mode 100644 node_modules/lodash/fp/getOr.js create mode 100644 node_modules/lodash/fp/groupBy.js create mode 100644 node_modules/lodash/fp/gt.js create mode 100644 node_modules/lodash/fp/gte.js create mode 100644 node_modules/lodash/fp/has.js create mode 100644 node_modules/lodash/fp/hasIn.js create mode 100644 node_modules/lodash/fp/head.js create mode 100644 node_modules/lodash/fp/identical.js create mode 100644 node_modules/lodash/fp/identity.js create mode 100644 node_modules/lodash/fp/inRange.js create mode 100644 node_modules/lodash/fp/includes.js create mode 100644 node_modules/lodash/fp/includesFrom.js create mode 100644 node_modules/lodash/fp/indexBy.js create mode 100644 node_modules/lodash/fp/indexOf.js create mode 100644 node_modules/lodash/fp/indexOfFrom.js create mode 100644 node_modules/lodash/fp/init.js create mode 100644 node_modules/lodash/fp/initial.js create mode 100644 node_modules/lodash/fp/intersection.js create mode 100644 node_modules/lodash/fp/intersectionBy.js create mode 100644 node_modules/lodash/fp/intersectionWith.js create mode 100644 node_modules/lodash/fp/invert.js create mode 100644 node_modules/lodash/fp/invertBy.js create mode 100644 node_modules/lodash/fp/invertObj.js create mode 100644 node_modules/lodash/fp/invoke.js create mode 100644 node_modules/lodash/fp/invokeArgs.js create mode 100644 node_modules/lodash/fp/invokeArgsMap.js create mode 100644 node_modules/lodash/fp/invokeMap.js create mode 100644 node_modules/lodash/fp/isArguments.js create mode 100644 node_modules/lodash/fp/isArray.js create mode 100644 node_modules/lodash/fp/isArrayBuffer.js create mode 100644 node_modules/lodash/fp/isArrayLike.js create mode 100644 node_modules/lodash/fp/isArrayLikeObject.js create mode 100644 node_modules/lodash/fp/isBoolean.js create mode 100644 node_modules/lodash/fp/isBuffer.js create mode 100644 node_modules/lodash/fp/isDate.js create mode 100644 node_modules/lodash/fp/isElement.js create mode 100644 node_modules/lodash/fp/isEmpty.js create mode 100644 node_modules/lodash/fp/isEqual.js create mode 100644 node_modules/lodash/fp/isEqualWith.js create mode 100644 node_modules/lodash/fp/isError.js create mode 100644 node_modules/lodash/fp/isFinite.js create mode 100644 node_modules/lodash/fp/isFunction.js create mode 100644 node_modules/lodash/fp/isInteger.js create mode 100644 node_modules/lodash/fp/isLength.js create mode 100644 node_modules/lodash/fp/isMap.js create mode 100644 node_modules/lodash/fp/isMatch.js create mode 100644 node_modules/lodash/fp/isMatchWith.js create mode 100644 node_modules/lodash/fp/isNaN.js create mode 100644 node_modules/lodash/fp/isNative.js create mode 100644 node_modules/lodash/fp/isNil.js create mode 100644 node_modules/lodash/fp/isNull.js create mode 100644 node_modules/lodash/fp/isNumber.js create mode 100644 node_modules/lodash/fp/isObject.js create mode 100644 node_modules/lodash/fp/isObjectLike.js create mode 100644 node_modules/lodash/fp/isPlainObject.js create mode 100644 node_modules/lodash/fp/isRegExp.js create mode 100644 node_modules/lodash/fp/isSafeInteger.js create mode 100644 node_modules/lodash/fp/isSet.js create mode 100644 node_modules/lodash/fp/isString.js create mode 100644 node_modules/lodash/fp/isSymbol.js create mode 100644 node_modules/lodash/fp/isTypedArray.js create mode 100644 node_modules/lodash/fp/isUndefined.js create mode 100644 node_modules/lodash/fp/isWeakMap.js create mode 100644 node_modules/lodash/fp/isWeakSet.js create mode 100644 node_modules/lodash/fp/iteratee.js create mode 100644 node_modules/lodash/fp/join.js create mode 100644 node_modules/lodash/fp/juxt.js create mode 100644 node_modules/lodash/fp/kebabCase.js create mode 100644 node_modules/lodash/fp/keyBy.js create mode 100644 node_modules/lodash/fp/keys.js create mode 100644 node_modules/lodash/fp/keysIn.js create mode 100644 node_modules/lodash/fp/lang.js create mode 100644 node_modules/lodash/fp/last.js create mode 100644 node_modules/lodash/fp/lastIndexOf.js create mode 100644 node_modules/lodash/fp/lastIndexOfFrom.js create mode 100644 node_modules/lodash/fp/lowerCase.js create mode 100644 node_modules/lodash/fp/lowerFirst.js create mode 100644 node_modules/lodash/fp/lt.js create mode 100644 node_modules/lodash/fp/lte.js create mode 100644 node_modules/lodash/fp/map.js create mode 100644 node_modules/lodash/fp/mapKeys.js create mode 100644 node_modules/lodash/fp/mapValues.js create mode 100644 node_modules/lodash/fp/matches.js create mode 100644 node_modules/lodash/fp/matchesProperty.js create mode 100644 node_modules/lodash/fp/math.js create mode 100644 node_modules/lodash/fp/max.js create mode 100644 node_modules/lodash/fp/maxBy.js create mode 100644 node_modules/lodash/fp/mean.js create mode 100644 node_modules/lodash/fp/meanBy.js create mode 100644 node_modules/lodash/fp/memoize.js create mode 100644 node_modules/lodash/fp/merge.js create mode 100644 node_modules/lodash/fp/mergeAll.js create mode 100644 node_modules/lodash/fp/mergeAllWith.js create mode 100644 node_modules/lodash/fp/mergeWith.js create mode 100644 node_modules/lodash/fp/method.js create mode 100644 node_modules/lodash/fp/methodOf.js create mode 100644 node_modules/lodash/fp/min.js create mode 100644 node_modules/lodash/fp/minBy.js create mode 100644 node_modules/lodash/fp/mixin.js create mode 100644 node_modules/lodash/fp/multiply.js create mode 100644 node_modules/lodash/fp/nAry.js create mode 100644 node_modules/lodash/fp/negate.js create mode 100644 node_modules/lodash/fp/next.js create mode 100644 node_modules/lodash/fp/noop.js create mode 100644 node_modules/lodash/fp/now.js create mode 100644 node_modules/lodash/fp/nth.js create mode 100644 node_modules/lodash/fp/nthArg.js create mode 100644 node_modules/lodash/fp/number.js create mode 100644 node_modules/lodash/fp/object.js create mode 100644 node_modules/lodash/fp/omit.js create mode 100644 node_modules/lodash/fp/omitAll.js create mode 100644 node_modules/lodash/fp/omitBy.js create mode 100644 node_modules/lodash/fp/once.js create mode 100644 node_modules/lodash/fp/orderBy.js create mode 100644 node_modules/lodash/fp/over.js create mode 100644 node_modules/lodash/fp/overArgs.js create mode 100644 node_modules/lodash/fp/overEvery.js create mode 100644 node_modules/lodash/fp/overSome.js create mode 100644 node_modules/lodash/fp/pad.js create mode 100644 node_modules/lodash/fp/padChars.js create mode 100644 node_modules/lodash/fp/padCharsEnd.js create mode 100644 node_modules/lodash/fp/padCharsStart.js create mode 100644 node_modules/lodash/fp/padEnd.js create mode 100644 node_modules/lodash/fp/padStart.js create mode 100644 node_modules/lodash/fp/parseInt.js create mode 100644 node_modules/lodash/fp/partial.js create mode 100644 node_modules/lodash/fp/partialRight.js create mode 100644 node_modules/lodash/fp/partition.js create mode 100644 node_modules/lodash/fp/path.js create mode 100644 node_modules/lodash/fp/pathEq.js create mode 100644 node_modules/lodash/fp/pathOr.js create mode 100644 node_modules/lodash/fp/paths.js create mode 100644 node_modules/lodash/fp/pick.js create mode 100644 node_modules/lodash/fp/pickAll.js create mode 100644 node_modules/lodash/fp/pickBy.js create mode 100644 node_modules/lodash/fp/pipe.js create mode 100644 node_modules/lodash/fp/placeholder.js create mode 100644 node_modules/lodash/fp/plant.js create mode 100644 node_modules/lodash/fp/pluck.js create mode 100644 node_modules/lodash/fp/prop.js create mode 100644 node_modules/lodash/fp/propEq.js create mode 100644 node_modules/lodash/fp/propOr.js create mode 100644 node_modules/lodash/fp/property.js create mode 100644 node_modules/lodash/fp/propertyOf.js create mode 100644 node_modules/lodash/fp/props.js create mode 100644 node_modules/lodash/fp/pull.js create mode 100644 node_modules/lodash/fp/pullAll.js create mode 100644 node_modules/lodash/fp/pullAllBy.js create mode 100644 node_modules/lodash/fp/pullAllWith.js create mode 100644 node_modules/lodash/fp/pullAt.js create mode 100644 node_modules/lodash/fp/random.js create mode 100644 node_modules/lodash/fp/range.js create mode 100644 node_modules/lodash/fp/rangeRight.js create mode 100644 node_modules/lodash/fp/rangeStep.js create mode 100644 node_modules/lodash/fp/rangeStepRight.js create mode 100644 node_modules/lodash/fp/rearg.js create mode 100644 node_modules/lodash/fp/reduce.js create mode 100644 node_modules/lodash/fp/reduceRight.js create mode 100644 node_modules/lodash/fp/reject.js create mode 100644 node_modules/lodash/fp/remove.js create mode 100644 node_modules/lodash/fp/repeat.js create mode 100644 node_modules/lodash/fp/replace.js create mode 100644 node_modules/lodash/fp/rest.js create mode 100644 node_modules/lodash/fp/restFrom.js create mode 100644 node_modules/lodash/fp/result.js create mode 100644 node_modules/lodash/fp/reverse.js create mode 100644 node_modules/lodash/fp/round.js create mode 100644 node_modules/lodash/fp/sample.js create mode 100644 node_modules/lodash/fp/sampleSize.js create mode 100644 node_modules/lodash/fp/seq.js create mode 100644 node_modules/lodash/fp/set.js create mode 100644 node_modules/lodash/fp/setWith.js create mode 100644 node_modules/lodash/fp/shuffle.js create mode 100644 node_modules/lodash/fp/size.js create mode 100644 node_modules/lodash/fp/slice.js create mode 100644 node_modules/lodash/fp/snakeCase.js create mode 100644 node_modules/lodash/fp/some.js create mode 100644 node_modules/lodash/fp/sortBy.js create mode 100644 node_modules/lodash/fp/sortedIndex.js create mode 100644 node_modules/lodash/fp/sortedIndexBy.js create mode 100644 node_modules/lodash/fp/sortedIndexOf.js create mode 100644 node_modules/lodash/fp/sortedLastIndex.js create mode 100644 node_modules/lodash/fp/sortedLastIndexBy.js create mode 100644 node_modules/lodash/fp/sortedLastIndexOf.js create mode 100644 node_modules/lodash/fp/sortedUniq.js create mode 100644 node_modules/lodash/fp/sortedUniqBy.js create mode 100644 node_modules/lodash/fp/split.js create mode 100644 node_modules/lodash/fp/spread.js create mode 100644 node_modules/lodash/fp/spreadFrom.js create mode 100644 node_modules/lodash/fp/startCase.js create mode 100644 node_modules/lodash/fp/startsWith.js create mode 100644 node_modules/lodash/fp/string.js create mode 100644 node_modules/lodash/fp/stubArray.js create mode 100644 node_modules/lodash/fp/stubFalse.js create mode 100644 node_modules/lodash/fp/stubObject.js create mode 100644 node_modules/lodash/fp/stubString.js create mode 100644 node_modules/lodash/fp/stubTrue.js create mode 100644 node_modules/lodash/fp/subtract.js create mode 100644 node_modules/lodash/fp/sum.js create mode 100644 node_modules/lodash/fp/sumBy.js create mode 100644 node_modules/lodash/fp/symmetricDifference.js create mode 100644 node_modules/lodash/fp/symmetricDifferenceBy.js create mode 100644 node_modules/lodash/fp/symmetricDifferenceWith.js create mode 100644 node_modules/lodash/fp/tail.js create mode 100644 node_modules/lodash/fp/take.js create mode 100644 node_modules/lodash/fp/takeLast.js create mode 100644 node_modules/lodash/fp/takeLastWhile.js create mode 100644 node_modules/lodash/fp/takeRight.js create mode 100644 node_modules/lodash/fp/takeRightWhile.js create mode 100644 node_modules/lodash/fp/takeWhile.js create mode 100644 node_modules/lodash/fp/tap.js create mode 100644 node_modules/lodash/fp/template.js create mode 100644 node_modules/lodash/fp/templateSettings.js create mode 100644 node_modules/lodash/fp/throttle.js create mode 100644 node_modules/lodash/fp/thru.js create mode 100644 node_modules/lodash/fp/times.js create mode 100644 node_modules/lodash/fp/toArray.js create mode 100644 node_modules/lodash/fp/toFinite.js create mode 100644 node_modules/lodash/fp/toInteger.js create mode 100644 node_modules/lodash/fp/toIterator.js create mode 100644 node_modules/lodash/fp/toJSON.js create mode 100644 node_modules/lodash/fp/toLength.js create mode 100644 node_modules/lodash/fp/toLower.js create mode 100644 node_modules/lodash/fp/toNumber.js create mode 100644 node_modules/lodash/fp/toPairs.js create mode 100644 node_modules/lodash/fp/toPairsIn.js create mode 100644 node_modules/lodash/fp/toPath.js create mode 100644 node_modules/lodash/fp/toPlainObject.js create mode 100644 node_modules/lodash/fp/toSafeInteger.js create mode 100644 node_modules/lodash/fp/toString.js create mode 100644 node_modules/lodash/fp/toUpper.js create mode 100644 node_modules/lodash/fp/transform.js create mode 100644 node_modules/lodash/fp/trim.js create mode 100644 node_modules/lodash/fp/trimChars.js create mode 100644 node_modules/lodash/fp/trimCharsEnd.js create mode 100644 node_modules/lodash/fp/trimCharsStart.js create mode 100644 node_modules/lodash/fp/trimEnd.js create mode 100644 node_modules/lodash/fp/trimStart.js create mode 100644 node_modules/lodash/fp/truncate.js create mode 100644 node_modules/lodash/fp/unapply.js create mode 100644 node_modules/lodash/fp/unary.js create mode 100644 node_modules/lodash/fp/unescape.js create mode 100644 node_modules/lodash/fp/union.js create mode 100644 node_modules/lodash/fp/unionBy.js create mode 100644 node_modules/lodash/fp/unionWith.js create mode 100644 node_modules/lodash/fp/uniq.js create mode 100644 node_modules/lodash/fp/uniqBy.js create mode 100644 node_modules/lodash/fp/uniqWith.js create mode 100644 node_modules/lodash/fp/uniqueId.js create mode 100644 node_modules/lodash/fp/unnest.js create mode 100644 node_modules/lodash/fp/unset.js create mode 100644 node_modules/lodash/fp/unzip.js create mode 100644 node_modules/lodash/fp/unzipWith.js create mode 100644 node_modules/lodash/fp/update.js create mode 100644 node_modules/lodash/fp/updateWith.js create mode 100644 node_modules/lodash/fp/upperCase.js create mode 100644 node_modules/lodash/fp/upperFirst.js create mode 100644 node_modules/lodash/fp/useWith.js create mode 100644 node_modules/lodash/fp/util.js create mode 100644 node_modules/lodash/fp/value.js create mode 100644 node_modules/lodash/fp/valueOf.js create mode 100644 node_modules/lodash/fp/values.js create mode 100644 node_modules/lodash/fp/valuesIn.js create mode 100644 node_modules/lodash/fp/where.js create mode 100644 node_modules/lodash/fp/whereEq.js create mode 100644 node_modules/lodash/fp/without.js create mode 100644 node_modules/lodash/fp/words.js create mode 100644 node_modules/lodash/fp/wrap.js create mode 100644 node_modules/lodash/fp/wrapperAt.js create mode 100644 node_modules/lodash/fp/wrapperChain.js create mode 100644 node_modules/lodash/fp/wrapperLodash.js create mode 100644 node_modules/lodash/fp/wrapperReverse.js create mode 100644 node_modules/lodash/fp/wrapperValue.js create mode 100644 node_modules/lodash/fp/xor.js create mode 100644 node_modules/lodash/fp/xorBy.js create mode 100644 node_modules/lodash/fp/xorWith.js create mode 100644 node_modules/lodash/fp/zip.js create mode 100644 node_modules/lodash/fp/zipAll.js create mode 100644 node_modules/lodash/fp/zipObj.js create mode 100644 node_modules/lodash/fp/zipObject.js create mode 100644 node_modules/lodash/fp/zipObjectDeep.js create mode 100644 node_modules/lodash/fp/zipWith.js create mode 100644 node_modules/lodash/fromPairs.js create mode 100644 node_modules/lodash/function.js create mode 100644 node_modules/lodash/functions.js create mode 100644 node_modules/lodash/functionsIn.js create mode 100644 node_modules/lodash/get.js create mode 100644 node_modules/lodash/groupBy.js create mode 100644 node_modules/lodash/gt.js create mode 100644 node_modules/lodash/gte.js create mode 100644 node_modules/lodash/has.js create mode 100644 node_modules/lodash/hasIn.js create mode 100644 node_modules/lodash/head.js create mode 100644 node_modules/lodash/identity.js create mode 100644 node_modules/lodash/inRange.js create mode 100644 node_modules/lodash/includes.js create mode 100644 node_modules/lodash/index.js create mode 100644 node_modules/lodash/indexOf.js create mode 100644 node_modules/lodash/initial.js create mode 100644 node_modules/lodash/intersection.js create mode 100644 node_modules/lodash/intersectionBy.js create mode 100644 node_modules/lodash/intersectionWith.js create mode 100644 node_modules/lodash/invert.js create mode 100644 node_modules/lodash/invertBy.js create mode 100644 node_modules/lodash/invoke.js create mode 100644 node_modules/lodash/invokeMap.js create mode 100644 node_modules/lodash/isArguments.js create mode 100644 node_modules/lodash/isArray.js create mode 100644 node_modules/lodash/isArrayBuffer.js create mode 100644 node_modules/lodash/isArrayLike.js create mode 100644 node_modules/lodash/isArrayLikeObject.js create mode 100644 node_modules/lodash/isBoolean.js create mode 100644 node_modules/lodash/isBuffer.js create mode 100644 node_modules/lodash/isDate.js create mode 100644 node_modules/lodash/isElement.js create mode 100644 node_modules/lodash/isEmpty.js create mode 100644 node_modules/lodash/isEqual.js create mode 100644 node_modules/lodash/isEqualWith.js create mode 100644 node_modules/lodash/isError.js create mode 100644 node_modules/lodash/isFinite.js create mode 100644 node_modules/lodash/isFunction.js create mode 100644 node_modules/lodash/isInteger.js create mode 100644 node_modules/lodash/isLength.js create mode 100644 node_modules/lodash/isMap.js create mode 100644 node_modules/lodash/isMatch.js create mode 100644 node_modules/lodash/isMatchWith.js create mode 100644 node_modules/lodash/isNaN.js create mode 100644 node_modules/lodash/isNative.js create mode 100644 node_modules/lodash/isNil.js create mode 100644 node_modules/lodash/isNull.js create mode 100644 node_modules/lodash/isNumber.js create mode 100644 node_modules/lodash/isObject.js create mode 100644 node_modules/lodash/isObjectLike.js create mode 100644 node_modules/lodash/isPlainObject.js create mode 100644 node_modules/lodash/isRegExp.js create mode 100644 node_modules/lodash/isSafeInteger.js create mode 100644 node_modules/lodash/isSet.js create mode 100644 node_modules/lodash/isString.js create mode 100644 node_modules/lodash/isSymbol.js create mode 100644 node_modules/lodash/isTypedArray.js create mode 100644 node_modules/lodash/isUndefined.js create mode 100644 node_modules/lodash/isWeakMap.js create mode 100644 node_modules/lodash/isWeakSet.js create mode 100644 node_modules/lodash/iteratee.js create mode 100644 node_modules/lodash/join.js create mode 100644 node_modules/lodash/kebabCase.js create mode 100644 node_modules/lodash/keyBy.js create mode 100644 node_modules/lodash/keys.js create mode 100644 node_modules/lodash/keysIn.js create mode 100644 node_modules/lodash/lang.js create mode 100644 node_modules/lodash/last.js create mode 100644 node_modules/lodash/lastIndexOf.js create mode 100644 node_modules/lodash/lodash.js create mode 100644 node_modules/lodash/lodash.min.js create mode 100644 node_modules/lodash/lowerCase.js create mode 100644 node_modules/lodash/lowerFirst.js create mode 100644 node_modules/lodash/lt.js create mode 100644 node_modules/lodash/lte.js create mode 100644 node_modules/lodash/map.js create mode 100644 node_modules/lodash/mapKeys.js create mode 100644 node_modules/lodash/mapValues.js create mode 100644 node_modules/lodash/matches.js create mode 100644 node_modules/lodash/matchesProperty.js create mode 100644 node_modules/lodash/math.js create mode 100644 node_modules/lodash/max.js create mode 100644 node_modules/lodash/maxBy.js create mode 100644 node_modules/lodash/mean.js create mode 100644 node_modules/lodash/meanBy.js create mode 100644 node_modules/lodash/memoize.js create mode 100644 node_modules/lodash/merge.js create mode 100644 node_modules/lodash/mergeWith.js create mode 100644 node_modules/lodash/method.js create mode 100644 node_modules/lodash/methodOf.js create mode 100644 node_modules/lodash/min.js create mode 100644 node_modules/lodash/minBy.js create mode 100644 node_modules/lodash/mixin.js create mode 100644 node_modules/lodash/multiply.js create mode 100644 node_modules/lodash/negate.js create mode 100644 node_modules/lodash/next.js create mode 100644 node_modules/lodash/noop.js create mode 100644 node_modules/lodash/now.js create mode 100644 node_modules/lodash/nth.js create mode 100644 node_modules/lodash/nthArg.js create mode 100644 node_modules/lodash/number.js create mode 100644 node_modules/lodash/object.js create mode 100644 node_modules/lodash/omit.js create mode 100644 node_modules/lodash/omitBy.js create mode 100644 node_modules/lodash/once.js create mode 100644 node_modules/lodash/orderBy.js create mode 100644 node_modules/lodash/over.js create mode 100644 node_modules/lodash/overArgs.js create mode 100644 node_modules/lodash/overEvery.js create mode 100644 node_modules/lodash/overSome.js create mode 100644 node_modules/lodash/package.json create mode 100644 node_modules/lodash/pad.js create mode 100644 node_modules/lodash/padEnd.js create mode 100644 node_modules/lodash/padStart.js create mode 100644 node_modules/lodash/parseInt.js create mode 100644 node_modules/lodash/partial.js create mode 100644 node_modules/lodash/partialRight.js create mode 100644 node_modules/lodash/partition.js create mode 100644 node_modules/lodash/pick.js create mode 100644 node_modules/lodash/pickBy.js create mode 100644 node_modules/lodash/plant.js create mode 100644 node_modules/lodash/property.js create mode 100644 node_modules/lodash/propertyOf.js create mode 100644 node_modules/lodash/pull.js create mode 100644 node_modules/lodash/pullAll.js create mode 100644 node_modules/lodash/pullAllBy.js create mode 100644 node_modules/lodash/pullAllWith.js create mode 100644 node_modules/lodash/pullAt.js create mode 100644 node_modules/lodash/random.js create mode 100644 node_modules/lodash/range.js create mode 100644 node_modules/lodash/rangeRight.js create mode 100644 node_modules/lodash/rearg.js create mode 100644 node_modules/lodash/reduce.js create mode 100644 node_modules/lodash/reduceRight.js create mode 100644 node_modules/lodash/reject.js create mode 100644 node_modules/lodash/remove.js create mode 100644 node_modules/lodash/repeat.js create mode 100644 node_modules/lodash/replace.js create mode 100644 node_modules/lodash/rest.js create mode 100644 node_modules/lodash/result.js create mode 100644 node_modules/lodash/reverse.js create mode 100644 node_modules/lodash/round.js create mode 100644 node_modules/lodash/sample.js create mode 100644 node_modules/lodash/sampleSize.js create mode 100644 node_modules/lodash/seq.js create mode 100644 node_modules/lodash/set.js create mode 100644 node_modules/lodash/setWith.js create mode 100644 node_modules/lodash/shuffle.js create mode 100644 node_modules/lodash/size.js create mode 100644 node_modules/lodash/slice.js create mode 100644 node_modules/lodash/snakeCase.js create mode 100644 node_modules/lodash/some.js create mode 100644 node_modules/lodash/sortBy.js create mode 100644 node_modules/lodash/sortedIndex.js create mode 100644 node_modules/lodash/sortedIndexBy.js create mode 100644 node_modules/lodash/sortedIndexOf.js create mode 100644 node_modules/lodash/sortedLastIndex.js create mode 100644 node_modules/lodash/sortedLastIndexBy.js create mode 100644 node_modules/lodash/sortedLastIndexOf.js create mode 100644 node_modules/lodash/sortedUniq.js create mode 100644 node_modules/lodash/sortedUniqBy.js create mode 100644 node_modules/lodash/split.js create mode 100644 node_modules/lodash/spread.js create mode 100644 node_modules/lodash/startCase.js create mode 100644 node_modules/lodash/startsWith.js create mode 100644 node_modules/lodash/string.js create mode 100644 node_modules/lodash/stubArray.js create mode 100644 node_modules/lodash/stubFalse.js create mode 100644 node_modules/lodash/stubObject.js create mode 100644 node_modules/lodash/stubString.js create mode 100644 node_modules/lodash/stubTrue.js create mode 100644 node_modules/lodash/subtract.js create mode 100644 node_modules/lodash/sum.js create mode 100644 node_modules/lodash/sumBy.js create mode 100644 node_modules/lodash/tail.js create mode 100644 node_modules/lodash/take.js create mode 100644 node_modules/lodash/takeRight.js create mode 100644 node_modules/lodash/takeRightWhile.js create mode 100644 node_modules/lodash/takeWhile.js create mode 100644 node_modules/lodash/tap.js create mode 100644 node_modules/lodash/template.js create mode 100644 node_modules/lodash/templateSettings.js create mode 100644 node_modules/lodash/throttle.js create mode 100644 node_modules/lodash/thru.js create mode 100644 node_modules/lodash/times.js create mode 100644 node_modules/lodash/toArray.js create mode 100644 node_modules/lodash/toFinite.js create mode 100644 node_modules/lodash/toInteger.js create mode 100644 node_modules/lodash/toIterator.js create mode 100644 node_modules/lodash/toJSON.js create mode 100644 node_modules/lodash/toLength.js create mode 100644 node_modules/lodash/toLower.js create mode 100644 node_modules/lodash/toNumber.js create mode 100644 node_modules/lodash/toPairs.js create mode 100644 node_modules/lodash/toPairsIn.js create mode 100644 node_modules/lodash/toPath.js create mode 100644 node_modules/lodash/toPlainObject.js create mode 100644 node_modules/lodash/toSafeInteger.js create mode 100644 node_modules/lodash/toString.js create mode 100644 node_modules/lodash/toUpper.js create mode 100644 node_modules/lodash/transform.js create mode 100644 node_modules/lodash/trim.js create mode 100644 node_modules/lodash/trimEnd.js create mode 100644 node_modules/lodash/trimStart.js create mode 100644 node_modules/lodash/truncate.js create mode 100644 node_modules/lodash/unary.js create mode 100644 node_modules/lodash/unescape.js create mode 100644 node_modules/lodash/union.js create mode 100644 node_modules/lodash/unionBy.js create mode 100644 node_modules/lodash/unionWith.js create mode 100644 node_modules/lodash/uniq.js create mode 100644 node_modules/lodash/uniqBy.js create mode 100644 node_modules/lodash/uniqWith.js create mode 100644 node_modules/lodash/uniqueId.js create mode 100644 node_modules/lodash/unset.js create mode 100644 node_modules/lodash/unzip.js create mode 100644 node_modules/lodash/unzipWith.js create mode 100644 node_modules/lodash/update.js create mode 100644 node_modules/lodash/updateWith.js create mode 100644 node_modules/lodash/upperCase.js create mode 100644 node_modules/lodash/upperFirst.js create mode 100644 node_modules/lodash/util.js create mode 100644 node_modules/lodash/value.js create mode 100644 node_modules/lodash/valueOf.js create mode 100644 node_modules/lodash/values.js create mode 100644 node_modules/lodash/valuesIn.js create mode 100644 node_modules/lodash/without.js create mode 100644 node_modules/lodash/words.js create mode 100644 node_modules/lodash/wrap.js create mode 100644 node_modules/lodash/wrapperAt.js create mode 100644 node_modules/lodash/wrapperChain.js create mode 100644 node_modules/lodash/wrapperLodash.js create mode 100644 node_modules/lodash/wrapperReverse.js create mode 100644 node_modules/lodash/wrapperValue.js create mode 100644 node_modules/lodash/xor.js create mode 100644 node_modules/lodash/xorBy.js create mode 100644 node_modules/lodash/xorWith.js create mode 100644 node_modules/lodash/zip.js create mode 100644 node_modules/lodash/zipObject.js create mode 100644 node_modules/lodash/zipObjectDeep.js create mode 100644 node_modules/lodash/zipWith.js create mode 100644 node_modules/media-typer/HISTORY.md create mode 100644 node_modules/media-typer/LICENSE create mode 100644 node_modules/media-typer/README.md create mode 100644 node_modules/media-typer/index.js create mode 100644 node_modules/media-typer/package.json create mode 100644 node_modules/merge-descriptors/.npmignore create mode 100644 node_modules/merge-descriptors/README.md create mode 100644 node_modules/merge-descriptors/component.json create mode 100644 node_modules/merge-descriptors/index.js create mode 100644 node_modules/merge-descriptors/package.json create mode 100644 node_modules/methods/.npmignore create mode 100644 node_modules/methods/History.md create mode 100644 node_modules/methods/LICENSE create mode 100644 node_modules/methods/Readme.md create mode 100644 node_modules/methods/index.js create mode 100644 node_modules/methods/package.json create mode 100644 node_modules/methods/test/methods.js create mode 100644 node_modules/mime-db/HISTORY.md create mode 100644 node_modules/mime-db/LICENSE create mode 100644 node_modules/mime-db/README.md create mode 100644 node_modules/mime-db/db.json create mode 100644 node_modules/mime-db/index.js create mode 100644 node_modules/mime-db/package.json create mode 100644 node_modules/mime-types/HISTORY.md create mode 100644 node_modules/mime-types/LICENSE create mode 100644 node_modules/mime-types/README.md create mode 100644 node_modules/mime-types/index.js create mode 100644 node_modules/mime-types/package.json create mode 100644 node_modules/mime/LICENSE create mode 100644 node_modules/mime/README.md create mode 100644 node_modules/mime/mime.js create mode 100644 node_modules/mime/package.json create mode 100644 node_modules/mime/test.js create mode 100644 node_modules/mime/types/mime.types create mode 100644 node_modules/mime/types/node.types create mode 100644 node_modules/minimatch/LICENSE create mode 100644 node_modules/minimatch/README.md create mode 100644 node_modules/minimatch/minimatch.js create mode 100644 node_modules/minimatch/package.json create mode 100644 node_modules/mongodb-core/.coveralls.yml create mode 100644 node_modules/mongodb-core/.eslintrc create mode 100644 node_modules/mongodb-core/HISTORY.md create mode 100644 node_modules/mongodb-core/LICENSE create mode 100644 node_modules/mongodb-core/Makefile create mode 100644 node_modules/mongodb-core/README.md create mode 100644 node_modules/mongodb-core/TESTING.md create mode 100644 node_modules/mongodb-core/THIRD-PARTY-NOTICES create mode 100644 node_modules/mongodb-core/blocking_test.js create mode 100644 node_modules/mongodb-core/conf.json create mode 100644 node_modules/mongodb-core/connect_test.js create mode 100644 node_modules/mongodb-core/index.js create mode 100644 node_modules/mongodb-core/lib/auth/gssapi.js create mode 100644 node_modules/mongodb-core/lib/auth/mongocr.js create mode 100644 node_modules/mongodb-core/lib/auth/plain.js create mode 100644 node_modules/mongodb-core/lib/auth/scram.js create mode 100644 node_modules/mongodb-core/lib/auth/sspi.js create mode 100644 node_modules/mongodb-core/lib/auth/x509.js create mode 100644 node_modules/mongodb-core/lib/connection/command_result.js create mode 100644 node_modules/mongodb-core/lib/connection/commands.js create mode 100644 node_modules/mongodb-core/lib/connection/connection.js create mode 100644 node_modules/mongodb-core/lib/connection/logger.js create mode 100644 node_modules/mongodb-core/lib/connection/pool.js create mode 100644 node_modules/mongodb-core/lib/connection/utils.js create mode 100644 node_modules/mongodb-core/lib/cursor.js create mode 100644 node_modules/mongodb-core/lib/error.js create mode 100644 node_modules/mongodb-core/lib/tools/smoke_plugin.js create mode 100644 node_modules/mongodb-core/lib/topologies/mongos.js create mode 100644 node_modules/mongodb-core/lib/topologies/read_preference.js create mode 100644 node_modules/mongodb-core/lib/topologies/replset.js create mode 100644 node_modules/mongodb-core/lib/topologies/replset_state.js create mode 100644 node_modules/mongodb-core/lib/topologies/server.js create mode 100644 node_modules/mongodb-core/lib/topologies/shared.js create mode 100644 node_modules/mongodb-core/lib/wireprotocol/2_4_support.js create mode 100644 node_modules/mongodb-core/lib/wireprotocol/2_6_support.js create mode 100644 node_modules/mongodb-core/lib/wireprotocol/3_2_support.js create mode 100644 node_modules/mongodb-core/lib/wireprotocol/commands.js create mode 100644 node_modules/mongodb-core/lib/wireprotocol/shared.js create mode 100644 node_modules/mongodb-core/package.json create mode 100644 node_modules/mongodb-core/simple_2_document_limit_toArray.dat create mode 100644 node_modules/mongodb-core/t.js create mode 100644 node_modules/mongodb-core/test.js create mode 100644 node_modules/mongodb-core/test1.js create mode 100644 node_modules/mongodb-core/test34.js create mode 100644 node_modules/mongodb-core/test_bug.js create mode 100644 node_modules/mongodb-core/yarn.lock create mode 100644 node_modules/mongodb/.coveralls.yml create mode 100644 node_modules/mongodb/.eslintrc create mode 100644 node_modules/mongodb/HISTORY.md create mode 100644 node_modules/mongodb/LICENSE create mode 100644 node_modules/mongodb/Makefile create mode 100644 node_modules/mongodb/README.md create mode 100644 node_modules/mongodb/THIRD-PARTY-NOTICES create mode 100644 node_modules/mongodb/boot_auth.js create mode 100644 node_modules/mongodb/conf.json create mode 100644 node_modules/mongodb/index.js create mode 100644 node_modules/mongodb/insert_bench.js create mode 100644 node_modules/mongodb/lib/admin.js create mode 100644 node_modules/mongodb/lib/aggregation_cursor.js create mode 100644 node_modules/mongodb/lib/apm.js create mode 100644 node_modules/mongodb/lib/authenticate.js create mode 100644 node_modules/mongodb/lib/bulk/common.js create mode 100644 node_modules/mongodb/lib/bulk/ordered.js create mode 100644 node_modules/mongodb/lib/bulk/unordered.js create mode 100644 node_modules/mongodb/lib/collection.js create mode 100644 node_modules/mongodb/lib/command_cursor.js create mode 100644 node_modules/mongodb/lib/cursor.js create mode 100644 node_modules/mongodb/lib/db.js create mode 100644 node_modules/mongodb/lib/gridfs-stream/download.js create mode 100644 node_modules/mongodb/lib/gridfs-stream/index.js create mode 100644 node_modules/mongodb/lib/gridfs-stream/upload.js create mode 100644 node_modules/mongodb/lib/gridfs/chunk.js create mode 100644 node_modules/mongodb/lib/gridfs/grid_store.js create mode 100644 node_modules/mongodb/lib/metadata.js create mode 100644 node_modules/mongodb/lib/mongo_client.js create mode 100644 node_modules/mongodb/lib/mongos.js create mode 100644 node_modules/mongodb/lib/read_preference.js create mode 100644 node_modules/mongodb/lib/replset.js create mode 100644 node_modules/mongodb/lib/server.js create mode 100644 node_modules/mongodb/lib/topology_base.js create mode 100644 node_modules/mongodb/lib/url_parser.js create mode 100644 node_modules/mongodb/lib/utils.js create mode 100644 node_modules/mongodb/package.json create mode 100644 node_modules/mongodb/t.js create mode 100644 node_modules/mongodb/t1.js create mode 100644 node_modules/mongodb/t2.js create mode 100644 node_modules/mongodb/yarn.lock create mode 100644 node_modules/mongoskin/.jshintrc create mode 100644 node_modules/mongoskin/.npmignore create mode 100644 node_modules/mongoskin/.travis.yml create mode 100644 node_modules/mongoskin/AUTHORS create mode 100644 node_modules/mongoskin/History.md create mode 100644 node_modules/mongoskin/LICENSE create mode 100644 node_modules/mongoskin/Makefile create mode 100644 node_modules/mongoskin/Readme.md create mode 100644 node_modules/mongoskin/coverage/coverage.json create mode 100644 node_modules/mongoskin/coverage/lcov-report/base.css create mode 100644 node_modules/mongoskin/coverage/lcov-report/index.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/index.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/index.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/admin.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/collection.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/constant.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/cursor.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/db.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/grid_store.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/helper.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/index.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/index.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/mongo_client.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/node-mongoskin/lib/utils.js.html create mode 100644 node_modules/mongoskin/coverage/lcov-report/prettify.css create mode 100644 node_modules/mongoskin/coverage/lcov-report/prettify.js create mode 100644 node_modules/mongoskin/coverage/lcov-report/sort-arrow-sprite.png create mode 100644 node_modules/mongoskin/coverage/lcov-report/sorter.js create mode 100644 node_modules/mongoskin/coverage/lcov.info create mode 100644 node_modules/mongoskin/examples/admin.js create mode 100644 node_modules/mongoskin/examples/close.js create mode 100644 node_modules/mongoskin/examples/config.js create mode 100644 node_modules/mongoskin/examples/generateId.js create mode 100644 node_modules/mongoskin/examples/gridfs.js create mode 100644 node_modules/mongoskin/examples/insert.js create mode 100644 node_modules/mongoskin/examples/replSetBenchmark.js create mode 100644 node_modules/mongoskin/examples/replset.js create mode 100644 node_modules/mongoskin/examples/update.js create mode 100644 node_modules/mongoskin/index.js create mode 100644 node_modules/mongoskin/lib/admin.js create mode 100644 node_modules/mongoskin/lib/collection.js create mode 100644 node_modules/mongoskin/lib/constant.js create mode 100644 node_modules/mongoskin/lib/cursor.js create mode 100644 node_modules/mongoskin/lib/db.js create mode 100644 node_modules/mongoskin/lib/grid_store.js create mode 100644 node_modules/mongoskin/lib/helper.js create mode 100644 node_modules/mongoskin/lib/index.js create mode 100644 node_modules/mongoskin/lib/mongo_client.js create mode 100644 node_modules/mongoskin/lib/utils.js create mode 100644 node_modules/mongoskin/package.json create mode 100644 node_modules/ms/index.js create mode 100644 node_modules/ms/license.md create mode 100644 node_modules/ms/package.json create mode 100644 node_modules/ms/readme.md create mode 100644 node_modules/nan/CHANGELOG.md create mode 100644 node_modules/nan/LICENSE.md create mode 100644 node_modules/nan/README.md create mode 100644 node_modules/nan/doc/asyncworker.md create mode 100644 node_modules/nan/doc/buffers.md create mode 100644 node_modules/nan/doc/callback.md create mode 100644 node_modules/nan/doc/converters.md create mode 100644 node_modules/nan/doc/errors.md create mode 100644 node_modules/nan/doc/json.md create mode 100644 node_modules/nan/doc/maybe_types.md create mode 100644 node_modules/nan/doc/methods.md create mode 100644 node_modules/nan/doc/new.md create mode 100644 node_modules/nan/doc/node_misc.md create mode 100644 node_modules/nan/doc/object_wrappers.md create mode 100644 node_modules/nan/doc/persistent.md create mode 100644 node_modules/nan/doc/scopes.md create mode 100644 node_modules/nan/doc/script.md create mode 100644 node_modules/nan/doc/string_bytes.md create mode 100644 node_modules/nan/doc/v8_internals.md create mode 100644 node_modules/nan/doc/v8_misc.md create mode 100644 node_modules/nan/include_dirs.js create mode 100644 node_modules/nan/nan.h create mode 100644 node_modules/nan/nan_callbacks.h create mode 100644 node_modules/nan/nan_callbacks_12_inl.h create mode 100644 node_modules/nan/nan_callbacks_pre_12_inl.h create mode 100644 node_modules/nan/nan_converters.h create mode 100644 node_modules/nan/nan_converters_43_inl.h create mode 100644 node_modules/nan/nan_converters_pre_43_inl.h create mode 100644 node_modules/nan/nan_implementation_12_inl.h create mode 100644 node_modules/nan/nan_implementation_pre_12_inl.h create mode 100644 node_modules/nan/nan_json.h create mode 100644 node_modules/nan/nan_maybe_43_inl.h create mode 100644 node_modules/nan/nan_maybe_pre_43_inl.h create mode 100644 node_modules/nan/nan_new.h create mode 100644 node_modules/nan/nan_object_wrap.h create mode 100644 node_modules/nan/nan_persistent_12_inl.h create mode 100644 node_modules/nan/nan_persistent_pre_12_inl.h create mode 100644 node_modules/nan/nan_private.h create mode 100644 node_modules/nan/nan_string_bytes.h create mode 100644 node_modules/nan/nan_typedarray_contents.h create mode 100644 node_modules/nan/nan_weak.h create mode 100644 node_modules/nan/package.json create mode 100755 node_modules/nan/tools/1to2.js create mode 100644 node_modules/nan/tools/README.md create mode 100644 node_modules/nan/tools/package.json create mode 100644 node_modules/negotiator/LICENSE create mode 100644 node_modules/negotiator/README.md create mode 100644 node_modules/negotiator/lib/charset.js create mode 100644 node_modules/negotiator/lib/encoding.js create mode 100644 node_modules/negotiator/lib/language.js create mode 100644 node_modules/negotiator/lib/mediaType.js create mode 100644 node_modules/negotiator/lib/negotiator.js create mode 100644 node_modules/negotiator/package.json create mode 100644 node_modules/nodeproxy/Cakefile create mode 100644 node_modules/nodeproxy/README.md create mode 100644 node_modules/nodeproxy/coffee/nodeproxy.coffee create mode 100644 node_modules/nodeproxy/example/example1.js create mode 100644 node_modules/nodeproxy/jscript/nodeproxy.js create mode 100644 node_modules/nodeproxy/package.json create mode 100644 node_modules/object-assign/index.js create mode 100644 node_modules/object-assign/license create mode 100644 node_modules/object-assign/package.json create mode 100644 node_modules/object-assign/readme.md create mode 100644 node_modules/object-component/.npmignore create mode 100644 node_modules/object-component/History.md create mode 100644 node_modules/object-component/Makefile create mode 100644 node_modules/object-component/Readme.md create mode 100644 node_modules/object-component/component.json create mode 100644 node_modules/object-component/index.js create mode 100644 node_modules/object-component/package.json create mode 100644 node_modules/object-component/test/object.js create mode 100644 node_modules/on-finished/HISTORY.md create mode 100644 node_modules/on-finished/LICENSE create mode 100644 node_modules/on-finished/README.md create mode 100644 node_modules/on-finished/index.js create mode 100644 node_modules/on-finished/package.json create mode 100644 node_modules/on-headers/HISTORY.md create mode 100644 node_modules/on-headers/LICENSE create mode 100644 node_modules/on-headers/README.md create mode 100644 node_modules/on-headers/index.js create mode 100644 node_modules/on-headers/package.json create mode 100644 node_modules/parsejson/.npmignore create mode 100644 node_modules/parsejson/LICENSE create mode 100644 node_modules/parsejson/Makefile create mode 100644 node_modules/parsejson/README.md create mode 100644 node_modules/parsejson/index.js create mode 100644 node_modules/parsejson/package.json create mode 100644 node_modules/parsejson/test.js create mode 100644 node_modules/parseqs/.npmignore create mode 100644 node_modules/parseqs/LICENSE create mode 100644 node_modules/parseqs/Makefile create mode 100644 node_modules/parseqs/README.md create mode 100644 node_modules/parseqs/index.js create mode 100644 node_modules/parseqs/package.json create mode 100644 node_modules/parseqs/test.js create mode 100644 node_modules/parseuri/.npmignore create mode 100644 node_modules/parseuri/History.md create mode 100644 node_modules/parseuri/LICENSE create mode 100644 node_modules/parseuri/Makefile create mode 100644 node_modules/parseuri/README.md create mode 100644 node_modules/parseuri/index.js create mode 100644 node_modules/parseuri/package.json create mode 100644 node_modules/parseuri/test.js create mode 100644 node_modules/parseurl/HISTORY.md create mode 100644 node_modules/parseurl/LICENSE create mode 100644 node_modules/parseurl/README.md create mode 100644 node_modules/parseurl/index.js create mode 100644 node_modules/parseurl/package.json create mode 100644 node_modules/path-to-regexp/.npmignore create mode 100644 node_modules/path-to-regexp/History.md create mode 100644 node_modules/path-to-regexp/Readme.md create mode 100644 node_modules/path-to-regexp/component.json create mode 100644 node_modules/path-to-regexp/index.js create mode 100644 node_modules/path-to-regexp/package.json create mode 100644 node_modules/path-to-regexp/test.js create mode 100644 node_modules/process-nextick-args/.travis.yml create mode 100644 node_modules/process-nextick-args/index.js create mode 100644 node_modules/process-nextick-args/license.md create mode 100644 node_modules/process-nextick-args/package.json create mode 100644 node_modules/process-nextick-args/readme.md create mode 100644 node_modules/process-nextick-args/test.js create mode 100644 node_modules/proxy-addr/HISTORY.md create mode 100644 node_modules/proxy-addr/LICENSE create mode 100644 node_modules/proxy-addr/README.md create mode 100644 node_modules/proxy-addr/index.js create mode 100644 node_modules/proxy-addr/package.json create mode 100644 node_modules/qs/.eslintignore create mode 100644 node_modules/qs/.eslintrc create mode 100644 node_modules/qs/.jscs.json create mode 100644 node_modules/qs/CHANGELOG.md create mode 100644 node_modules/qs/LICENSE create mode 100644 node_modules/qs/README.md create mode 100644 node_modules/qs/dist/qs.js create mode 100644 node_modules/qs/lib/formats.js create mode 100644 node_modules/qs/lib/index.js create mode 100644 node_modules/qs/lib/parse.js create mode 100644 node_modules/qs/lib/stringify.js create mode 100644 node_modules/qs/lib/utils.js create mode 100644 node_modules/qs/package.json create mode 100644 node_modules/qs/test/.eslintrc create mode 100644 node_modules/qs/test/index.js create mode 100644 node_modules/qs/test/parse.js create mode 100644 node_modules/qs/test/stringify.js create mode 100644 node_modules/qs/test/utils.js create mode 100644 node_modules/random-bytes/HISTORY.md create mode 100644 node_modules/random-bytes/LICENSE create mode 100644 node_modules/random-bytes/README.md create mode 100644 node_modules/random-bytes/index.js create mode 100644 node_modules/random-bytes/package.json create mode 100644 node_modules/range-parser/HISTORY.md create mode 100644 node_modules/range-parser/LICENSE create mode 100644 node_modules/range-parser/README.md create mode 100644 node_modules/range-parser/index.js create mode 100644 node_modules/range-parser/package.json create mode 100644 node_modules/raw-body/HISTORY.md create mode 100644 node_modules/raw-body/LICENSE create mode 100644 node_modules/raw-body/README.md create mode 100644 node_modules/raw-body/index.js create mode 100644 node_modules/raw-body/package.json create mode 100644 node_modules/readable-stream/.npmignore create mode 100644 node_modules/readable-stream/.travis.yml create mode 100644 node_modules/readable-stream/CONTRIBUTING.md create mode 100644 node_modules/readable-stream/GOVERNANCE.md create mode 100644 node_modules/readable-stream/LICENSE create mode 100644 node_modules/readable-stream/README.md create mode 100644 node_modules/readable-stream/doc/wg-meetings/2015-01-30.md create mode 100644 node_modules/readable-stream/duplex-browser.js create mode 100644 node_modules/readable-stream/duplex.js create mode 100644 node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/readable-stream/lib/internal/streams/BufferList.js create mode 100644 node_modules/readable-stream/package.json create mode 100644 node_modules/readable-stream/passthrough.js create mode 100644 node_modules/readable-stream/readable-browser.js create mode 100644 node_modules/readable-stream/readable.js create mode 100644 node_modules/readable-stream/transform.js create mode 100644 node_modules/readable-stream/writable-browser.js create mode 100644 node_modules/readable-stream/writable.js create mode 100644 node_modules/require_optional/.npmignore create mode 100644 node_modules/require_optional/.travis.yml create mode 100644 node_modules/require_optional/HISTORY.md create mode 100644 node_modules/require_optional/LICENSE create mode 100644 node_modules/require_optional/README.md create mode 100644 node_modules/require_optional/index.js create mode 100644 node_modules/require_optional/package.json create mode 100644 node_modules/require_optional/test/nestedTest/index.js create mode 100644 node_modules/require_optional/test/nestedTest/package.json create mode 100644 node_modules/require_optional/test/require_optional_tests.js create mode 100644 node_modules/resolve-from/index.js create mode 100644 node_modules/resolve-from/license create mode 100644 node_modules/resolve-from/package.json create mode 100644 node_modules/resolve-from/readme.md create mode 100644 node_modules/safe-buffer/.travis.yml create mode 100644 node_modules/safe-buffer/LICENSE create mode 100644 node_modules/safe-buffer/README.md create mode 100644 node_modules/safe-buffer/browser.js create mode 100644 node_modules/safe-buffer/index.js create mode 100644 node_modules/safe-buffer/package.json create mode 100644 node_modules/safe-buffer/test.js create mode 100644 node_modules/semver/LICENSE create mode 100644 node_modules/semver/README.md create mode 100755 node_modules/semver/bin/semver create mode 100644 node_modules/semver/package.json create mode 100644 node_modules/semver/range.bnf create mode 100644 node_modules/semver/semver.js create mode 100644 node_modules/send/History.md create mode 100644 node_modules/send/LICENSE create mode 100644 node_modules/send/Readme.md create mode 100644 node_modules/send/index.js create mode 100644 node_modules/send/node_modules/debug/.jshintrc create mode 100644 node_modules/send/node_modules/debug/.npmignore create mode 100644 node_modules/send/node_modules/debug/History.md create mode 100644 node_modules/send/node_modules/debug/Makefile create mode 100644 node_modules/send/node_modules/debug/Readme.md create mode 100644 node_modules/send/node_modules/debug/bower.json create mode 100644 node_modules/send/node_modules/debug/browser.js create mode 100644 node_modules/send/node_modules/debug/component.json create mode 100644 node_modules/send/node_modules/debug/debug.js create mode 100644 node_modules/send/node_modules/debug/node.js create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/.npmignore create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/LICENSE create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/README.md create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/index.js create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/package.json create mode 100644 node_modules/send/node_modules/debug/package.json create mode 100644 node_modules/send/node_modules/depd/History.md create mode 100644 node_modules/send/node_modules/depd/LICENSE create mode 100644 node_modules/send/node_modules/depd/Readme.md create mode 100644 node_modules/send/node_modules/depd/index.js create mode 100644 node_modules/send/node_modules/depd/lib/compat/buffer-concat.js create mode 100644 node_modules/send/node_modules/depd/lib/compat/callsite-tostring.js create mode 100644 node_modules/send/node_modules/depd/lib/compat/index.js create mode 100644 node_modules/send/node_modules/depd/package.json create mode 100644 node_modules/send/node_modules/ee-first/LICENSE create mode 100644 node_modules/send/node_modules/ee-first/README.md create mode 100644 node_modules/send/node_modules/ee-first/index.js create mode 100644 node_modules/send/node_modules/ee-first/package.json create mode 100644 node_modules/send/node_modules/ms/.npmignore create mode 100644 node_modules/send/node_modules/ms/README.md create mode 100644 node_modules/send/node_modules/ms/index.js create mode 100644 node_modules/send/node_modules/ms/package.json create mode 100644 node_modules/send/node_modules/on-finished/HISTORY.md create mode 100644 node_modules/send/node_modules/on-finished/LICENSE create mode 100644 node_modules/send/node_modules/on-finished/README.md create mode 100644 node_modules/send/node_modules/on-finished/index.js create mode 100644 node_modules/send/node_modules/on-finished/package.json create mode 100644 node_modules/send/package.json create mode 100644 node_modules/serve-static/HISTORY.md create mode 100644 node_modules/serve-static/LICENSE create mode 100644 node_modules/serve-static/README.md create mode 100644 node_modules/serve-static/index.js create mode 100644 node_modules/serve-static/package.json create mode 100644 node_modules/setprototypeof/LICENSE create mode 100644 node_modules/setprototypeof/README.md create mode 100644 node_modules/setprototypeof/index.js create mode 100644 node_modules/setprototypeof/package.json create mode 100644 node_modules/socket.io-adapter/.npmignore create mode 100644 node_modules/socket.io-adapter/History.md create mode 100644 node_modules/socket.io-adapter/LICENSE create mode 100644 node_modules/socket.io-adapter/Readme.md create mode 100644 node_modules/socket.io-adapter/index.js create mode 100644 node_modules/socket.io-adapter/node_modules/debug/.jshintrc create mode 100644 node_modules/socket.io-adapter/node_modules/debug/.npmignore create mode 100644 node_modules/socket.io-adapter/node_modules/debug/CHANGELOG.md create mode 100644 node_modules/socket.io-adapter/node_modules/debug/LICENSE create mode 100644 node_modules/socket.io-adapter/node_modules/debug/Makefile create mode 100644 node_modules/socket.io-adapter/node_modules/debug/Readme.md create mode 100644 node_modules/socket.io-adapter/node_modules/debug/bower.json create mode 100644 node_modules/socket.io-adapter/node_modules/debug/browser.js create mode 100644 node_modules/socket.io-adapter/node_modules/debug/component.json create mode 100644 node_modules/socket.io-adapter/node_modules/debug/debug.js create mode 100644 node_modules/socket.io-adapter/node_modules/debug/index.js create mode 100644 node_modules/socket.io-adapter/node_modules/debug/node.js create mode 100644 node_modules/socket.io-adapter/node_modules/debug/package.json create mode 100644 node_modules/socket.io-adapter/node_modules/ms/LICENSE.md create mode 100644 node_modules/socket.io-adapter/node_modules/ms/README.md create mode 100644 node_modules/socket.io-adapter/node_modules/ms/index.js create mode 100644 node_modules/socket.io-adapter/node_modules/ms/package.json create mode 100644 node_modules/socket.io-adapter/package.json create mode 100644 node_modules/socket.io-client/History.md create mode 100644 node_modules/socket.io-client/LICENSE create mode 100644 node_modules/socket.io-client/README.md create mode 100644 node_modules/socket.io-client/dist/socket.io.js create mode 100644 node_modules/socket.io-client/dist/socket.io.js.map create mode 100644 node_modules/socket.io-client/dist/socket.io.slim.js create mode 100644 node_modules/socket.io-client/dist/socket.io.slim.js.map create mode 100644 node_modules/socket.io-client/lib/index.js create mode 100644 node_modules/socket.io-client/lib/manager.js create mode 100644 node_modules/socket.io-client/lib/on.js create mode 100644 node_modules/socket.io-client/lib/socket.js create mode 100644 node_modules/socket.io-client/lib/url.js create mode 100644 node_modules/socket.io-client/package.json create mode 100644 node_modules/socket.io-parser/History.md create mode 100644 node_modules/socket.io-parser/LICENSE create mode 100644 node_modules/socket.io-parser/Readme.md create mode 100644 node_modules/socket.io-parser/binary.js create mode 100644 node_modules/socket.io-parser/index.js create mode 100644 node_modules/socket.io-parser/is-buffer.js create mode 100644 node_modules/socket.io-parser/node_modules/isarray/README.md create mode 100644 node_modules/socket.io-parser/node_modules/isarray/index.js create mode 100644 node_modules/socket.io-parser/node_modules/isarray/package.json create mode 100644 node_modules/socket.io-parser/package.json create mode 100644 node_modules/socket.io/History.md create mode 100644 node_modules/socket.io/LICENSE create mode 100644 node_modules/socket.io/Readme.md create mode 100644 node_modules/socket.io/lib/client.js create mode 100644 node_modules/socket.io/lib/index.js create mode 100644 node_modules/socket.io/lib/namespace.js create mode 100644 node_modules/socket.io/lib/socket.js create mode 100644 node_modules/socket.io/package.json create mode 100644 node_modules/statuses/HISTORY.md create mode 100644 node_modules/statuses/LICENSE create mode 100644 node_modules/statuses/README.md create mode 100644 node_modules/statuses/codes.json create mode 100644 node_modules/statuses/index.js create mode 100644 node_modules/statuses/package.json create mode 100644 node_modules/string_decoder/.npmignore create mode 100644 node_modules/string_decoder/LICENSE create mode 100644 node_modules/string_decoder/README.md create mode 100644 node_modules/string_decoder/lib/string_decoder.js create mode 100644 node_modules/string_decoder/package.json create mode 100644 node_modules/synchronize/.npmignore create mode 100644 node_modules/synchronize/.travis.yml create mode 100644 node_modules/synchronize/docs/assets/bootstrap/css/bootstrap.css create mode 100644 node_modules/synchronize/docs/assets/bootstrap/img/glyphicons-halflings-white.png create mode 100644 node_modules/synchronize/docs/assets/bootstrap/img/glyphicons-halflings.png create mode 100644 node_modules/synchronize/docs/assets/bootstrap/js/bootstrap.js create mode 100644 node_modules/synchronize/docs/assets/google-code-prettify/prettify.css create mode 100644 node_modules/synchronize/docs/assets/google-code-prettify/prettify.js create mode 100644 node_modules/synchronize/docs/assets/style.css create mode 100644 node_modules/synchronize/docs/index.html create mode 100644 node_modules/synchronize/examples/basic.js create mode 100644 node_modules/synchronize/examples/express.js create mode 100644 node_modules/synchronize/examples/list.js create mode 100644 node_modules/synchronize/examples/listAsync.js create mode 100644 node_modules/synchronize/examples/mocha.js create mode 100644 node_modules/synchronize/index.html create mode 100644 node_modules/synchronize/package.json create mode 100644 node_modules/synchronize/readme.md create mode 100644 node_modules/synchronize/sync.js create mode 100644 node_modules/synchronize/test/sync.js create mode 100644 node_modules/system-sleep/module.js create mode 100644 node_modules/system-sleep/package.json create mode 100644 node_modules/system-sleep/readme.md create mode 100644 node_modules/system-sleep/test.js create mode 100644 node_modules/to-array/.npmignore create mode 100644 node_modules/to-array/LICENCE create mode 100644 node_modules/to-array/README.md create mode 100644 node_modules/to-array/index.js create mode 100644 node_modules/to-array/package.json create mode 100644 node_modules/twig/.gitmodules create mode 100644 node_modules/twig/.npmignore create mode 100644 node_modules/twig/ASYNC.md create mode 100644 node_modules/twig/CHANGELOG.md create mode 100644 node_modules/twig/LICENSE create mode 100644 node_modules/twig/README.md create mode 100755 node_modules/twig/bin/twigjs create mode 100644 node_modules/twig/docs/docco.css create mode 100644 node_modules/twig/docs/licenses.md create mode 100644 node_modules/twig/docs/public/fonts/aller-bold.eot create mode 100644 node_modules/twig/docs/public/fonts/aller-bold.ttf create mode 100644 node_modules/twig/docs/public/fonts/aller-bold.woff create mode 100644 node_modules/twig/docs/public/fonts/aller-light.eot create mode 100644 node_modules/twig/docs/public/fonts/aller-light.ttf create mode 100644 node_modules/twig/docs/public/fonts/aller-light.woff create mode 100644 node_modules/twig/docs/public/fonts/novecento-bold.eot create mode 100644 node_modules/twig/docs/public/fonts/novecento-bold.ttf create mode 100644 node_modules/twig/docs/public/fonts/novecento-bold.woff create mode 100644 node_modules/twig/docs/public/stylesheets/normalize.css create mode 100644 node_modules/twig/docs/release checklist.md create mode 100644 node_modules/twig/docs/tests.md create mode 100644 node_modules/twig/docs/twig.html create mode 100644 node_modules/twig/lib/compile.js create mode 100644 node_modules/twig/lib/paths.js create mode 100644 node_modules/twig/package.json create mode 100755 node_modules/twig/test-ext/checkout.sh create mode 100644 node_modules/twig/test-ext/test.original.js create mode 100644 node_modules/twig/twig.js create mode 100644 node_modules/twig/twig.min.js create mode 100644 node_modules/type-is/HISTORY.md create mode 100644 node_modules/type-is/LICENSE create mode 100644 node_modules/type-is/README.md create mode 100644 node_modules/type-is/index.js create mode 100644 node_modules/type-is/package.json create mode 100644 node_modules/uid-safe/HISTORY.md create mode 100644 node_modules/uid-safe/LICENSE create mode 100644 node_modules/uid-safe/README.md create mode 100644 node_modules/uid-safe/index.js create mode 100644 node_modules/uid-safe/package.json create mode 100644 node_modules/ultron/LICENSE create mode 100644 node_modules/ultron/index.js create mode 100644 node_modules/ultron/package.json create mode 100644 node_modules/unpipe/HISTORY.md create mode 100644 node_modules/unpipe/LICENSE create mode 100644 node_modules/unpipe/README.md create mode 100644 node_modules/unpipe/index.js create mode 100644 node_modules/unpipe/package.json create mode 100644 node_modules/util-deprecate/History.md create mode 100644 node_modules/util-deprecate/LICENSE create mode 100644 node_modules/util-deprecate/README.md create mode 100644 node_modules/util-deprecate/browser.js create mode 100644 node_modules/util-deprecate/node.js create mode 100644 node_modules/util-deprecate/package.json create mode 100644 node_modules/utils-merge/.travis.yml create mode 100644 node_modules/utils-merge/LICENSE create mode 100644 node_modules/utils-merge/README.md create mode 100644 node_modules/utils-merge/index.js create mode 100644 node_modules/utils-merge/package.json create mode 100644 node_modules/uws/LICENSE create mode 100644 node_modules/uws/README.md create mode 100644 node_modules/uws/binding.gyp create mode 100644 node_modules/uws/build/Makefile create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/action_after_build.stamp.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Extensions.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Group.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/HTTPSocket.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Hub.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Networking.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Node.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Socket.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/WebSocket.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/addon.o.d create mode 100644 node_modules/uws/build/Release/.deps/Release/uws.node.d create mode 100644 node_modules/uws/build/Release/.deps/uws.d create mode 100644 node_modules/uws/build/Release/obj.target/action_after_build.stamp create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/Extensions.o create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/Group.o create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/HTTPSocket.o create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/Hub.o create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/Networking.o create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/Node.o create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/Socket.o create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/WebSocket.o create mode 100644 node_modules/uws/build/Release/obj.target/uws/src/addon.o create mode 100755 node_modules/uws/build/Release/uws.node create mode 100644 node_modules/uws/build/action_after_build.target.mk create mode 100644 node_modules/uws/build/binding.Makefile create mode 100644 node_modules/uws/build/config.gypi create mode 100755 node_modules/uws/build/gyp-mac-tool create mode 100644 node_modules/uws/build/uws.target.mk create mode 100644 node_modules/uws/build_log.txt create mode 100644 node_modules/uws/package.json create mode 100644 node_modules/uws/src/Asio.h create mode 100644 node_modules/uws/src/Backend.h create mode 100644 node_modules/uws/src/Epoll.cpp create mode 100644 node_modules/uws/src/Epoll.h create mode 100644 node_modules/uws/src/Extensions.cpp create mode 100644 node_modules/uws/src/Extensions.h create mode 100644 node_modules/uws/src/Group.cpp create mode 100644 node_modules/uws/src/Group.h create mode 100644 node_modules/uws/src/HTTPSocket.cpp create mode 100644 node_modules/uws/src/HTTPSocket.h create mode 100644 node_modules/uws/src/Hub.cpp create mode 100644 node_modules/uws/src/Hub.h create mode 100644 node_modules/uws/src/Libuv.h create mode 100644 node_modules/uws/src/Networking.cpp create mode 100644 node_modules/uws/src/Networking.h create mode 100644 node_modules/uws/src/Node.cpp create mode 100644 node_modules/uws/src/Node.h create mode 100644 node_modules/uws/src/Socket.cpp create mode 100644 node_modules/uws/src/Socket.h create mode 100644 node_modules/uws/src/WebSocket.cpp create mode 100644 node_modules/uws/src/WebSocket.h create mode 100644 node_modules/uws/src/WebSocketProtocol.h create mode 100644 node_modules/uws/src/addon.cpp create mode 100644 node_modules/uws/src/addon.h create mode 100644 node_modules/uws/src/http.h create mode 100644 node_modules/uws/src/uWS.h create mode 100644 node_modules/uws/uws.js create mode 100755 node_modules/uws/uws_darwin_46.node create mode 100755 node_modules/uws/uws_darwin_47.node create mode 100755 node_modules/uws/uws_darwin_48.node create mode 100755 node_modules/uws/uws_darwin_51.node create mode 100755 node_modules/uws/uws_linux_46.node create mode 100755 node_modules/uws/uws_linux_47.node create mode 100755 node_modules/uws/uws_linux_48.node create mode 100755 node_modules/uws/uws_linux_51.node create mode 100755 node_modules/uws/uws_win32_48.node create mode 100755 node_modules/uws/uws_win32_51.node create mode 100644 node_modules/vary/HISTORY.md create mode 100644 node_modules/vary/LICENSE create mode 100644 node_modules/vary/README.md create mode 100644 node_modules/vary/index.js create mode 100644 node_modules/vary/package.json create mode 100644 node_modules/walk/README.md create mode 100644 node_modules/walk/lib/node-type-emitter.js create mode 100644 node_modules/walk/lib/walk-async-only.js create mode 100644 node_modules/walk/lib/walk.js create mode 100644 node_modules/walk/package.json create mode 100644 node_modules/ws/LICENSE create mode 100644 node_modules/ws/README.md create mode 100644 node_modules/ws/index.js create mode 100644 node_modules/ws/lib/BufferUtil.js create mode 100644 node_modules/ws/lib/Constants.js create mode 100644 node_modules/ws/lib/ErrorCodes.js create mode 100644 node_modules/ws/lib/EventTarget.js create mode 100644 node_modules/ws/lib/Extensions.js create mode 100644 node_modules/ws/lib/PerMessageDeflate.js create mode 100644 node_modules/ws/lib/Receiver.js create mode 100644 node_modules/ws/lib/Sender.js create mode 100644 node_modules/ws/lib/Validation.js create mode 100644 node_modules/ws/lib/WebSocket.js create mode 100644 node_modules/ws/lib/WebSocketServer.js create mode 100644 node_modules/ws/package.json create mode 100644 node_modules/xmlhttprequest-ssl/LICENSE create mode 100644 node_modules/xmlhttprequest-ssl/README.md create mode 100644 node_modules/xmlhttprequest-ssl/autotest.watchr create mode 100644 node_modules/xmlhttprequest-ssl/example/demo.js create mode 100644 node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js create mode 100644 node_modules/xmlhttprequest-ssl/package.json create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-constants.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-events.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-exceptions.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-headers.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-redirect-302.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-redirect-303.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-redirect-307.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-request-methods.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/test-request-protocols.js create mode 100644 node_modules/xmlhttprequest-ssl/tests/testdata.txt create mode 100644 node_modules/yeast/LICENSE create mode 100644 node_modules/yeast/README.md create mode 100644 node_modules/yeast/index.js create mode 100644 node_modules/yeast/package.json create mode 100644 public/Jquery.js create mode 100644 public/chat.css create mode 100644 public/client.js create mode 100644 public/icon.png create mode 100644 public/login.css create mode 100644 public/register.js create mode 100644 public/socket.io.js create mode 100644 public/style.css create mode 100644 xxx/.DS_Store create mode 100644 xxx/battleship.js create mode 100644 xxx/dossier sans titre 2/.DS_Store create mode 120000 xxx/dossier sans titre 2/node_modules/.bin/mime create mode 100644 xxx/dossier sans titre 2/node_modules/accepts/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/accepts/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/accepts/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/accepts/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/accepts/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/after/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/after/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/after/LICENCE create mode 100644 xxx/dossier sans titre 2/node_modules/after/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/after/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/after/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/after/test/after-test.js create mode 100644 xxx/dossier sans titre 2/node_modules/array-flatten/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/array-flatten/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/array-flatten/array-flatten.js create mode 100644 xxx/dossier sans titre 2/node_modules/array-flatten/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/arraybuffer.slice/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/arraybuffer.slice/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/arraybuffer.slice/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/arraybuffer.slice/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/arraybuffer.slice/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/arraybuffer.slice/test/slice-buffer.js create mode 100644 xxx/dossier sans titre 2/node_modules/backo2/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/backo2/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/backo2/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/backo2/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/backo2/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/backo2/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/backo2/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/backo2/test/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/base64-arraybuffer/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/base64-arraybuffer/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/base64-arraybuffer/LICENSE-MIT create mode 100644 xxx/dossier sans titre 2/node_modules/base64-arraybuffer/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js create mode 100644 xxx/dossier sans titre 2/node_modules/base64-arraybuffer/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/base64id/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/base64id/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/base64id/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/base64id/lib/base64id.js create mode 100644 xxx/dossier sans titre 2/node_modules/base64id/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/better-assert/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/better-assert/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/better-assert/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/better-assert/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/better-assert/example.js create mode 100644 xxx/dossier sans titre 2/node_modules/better-assert/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/better-assert/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/blob/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/blob/.zuul.yml create mode 100644 xxx/dossier sans titre 2/node_modules/blob/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/blob/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/blob/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/blob/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/blob/test/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/callsite/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/callsite/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/callsite/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/callsite/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/callsite/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/callsite/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/component-bind/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/component-bind/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/component-bind/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/component-bind/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/component-bind/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/component-bind/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/component-bind/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/component-emitter/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/component-emitter/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/component-emitter/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/component-emitter/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/component-emitter/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/component-inherit/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/component-inherit/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/component-inherit/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/component-inherit/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/component-inherit/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/component-inherit/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/component-inherit/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/component-inherit/test/inherit.js create mode 100644 xxx/dossier sans titre 2/node_modules/content-disposition/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/content-disposition/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/content-disposition/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/content-disposition/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/content-disposition/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/content-type/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/content-type/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/content-type/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/content-type/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/content-type/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/cookie-signature/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/cookie-signature/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/cookie-signature/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/cookie-signature/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/cookie-signature/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/cookie/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/cookie/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/cookie/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/cookie/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/cookie/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/debug/.coveralls.yml create mode 100644 xxx/dossier sans titre 2/node_modules/debug/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/debug/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/debug/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/debug/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/debug/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/debug/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/debug/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/debug/bower.json create mode 100644 xxx/dossier sans titre 2/node_modules/debug/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/debug/karma.conf.js create mode 100644 xxx/dossier sans titre 2/node_modules/debug/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/debug/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/debug/src/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/debug/src/debug.js create mode 100644 xxx/dossier sans titre 2/node_modules/debug/src/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/debug/src/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/depd/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/depd/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/depd/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/depd/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/depd/lib/browser/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/depd/lib/compat/buffer-concat.js create mode 100644 xxx/dossier sans titre 2/node_modules/depd/lib/compat/callsite-tostring.js create mode 100644 xxx/dossier sans titre 2/node_modules/depd/lib/compat/event-listener-count.js create mode 100644 xxx/dossier sans titre 2/node_modules/depd/lib/compat/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/depd/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/destroy/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/destroy/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/destroy/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/destroy/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/ee-first/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/ee-first/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/ee-first/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/ee-first/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/Jakefile create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/ejs.js create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/ejs.min.js create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/lib/ejs.js create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/lib/utils.js create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/ejs.js create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/backslash.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/backslash.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/comments.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/comments.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/consecutive-tags.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/consecutive-tags.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/double-quote.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/double-quote.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/error.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/error.out create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/fail.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/hello-world.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include-abspath.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include-root.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include-simple.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include-simple.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include.css.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include.css.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_cache.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_cache.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor.css.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor.css.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor_cache.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor_cache.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor_line_slurp.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor_line_slurp.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/include_preprocessor_line_slurp_child.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/includes/bom.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/includes/menu-item.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/includes/menu/item.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/literal.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/literal.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/menu.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/menu.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/menu_preprocessor.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/menu_preprocessor.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/menu_var.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/messed.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/messed.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/newlines.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/newlines.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/newlines.mixed.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/newlines.mixed.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/no.newlines.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/no.newlines.error.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/no.newlines.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/no.semicolons.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/no.semicolons.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/para.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/pet.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/rmWhitespace.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/rmWhitespace.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/single-quote.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/single-quote.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/space-and-tab-slurp.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/space-and-tab-slurp.html create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/strict.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/style.css create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/user-no-with.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/user.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/fixtures/with-context.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/mocha.opts create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/tmp/include.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/tmp/include_preprocessor.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/ejs/test/tmp/renderFile.ejs create mode 100644 xxx/dossier sans titre 2/node_modules/encodeurl/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/encodeurl/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/encodeurl/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/encodeurl/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/encodeurl/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/engine.io.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/socket.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/transport.js create mode 100755 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/transports/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/transports/polling-jsonp.js create mode 100755 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/transports/polling-xhr.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/transports/polling.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/transports/websocket.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/lib/xmlhttprequest.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/.coveralls.yml create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/karma.conf.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/src/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/src/debug.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/src/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/debug/src/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/ms/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/ms/license.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/ms/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/node_modules/ms/readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-client/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/lib/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/lib/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/lib/keys.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/lib/utf8.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io-parser/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/engine.io.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/server.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/socket.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/transport.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/transports/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/transports/polling-jsonp.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/transports/polling-xhr.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/transports/polling.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/lib/transports/websocket.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/.coveralls.yml create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/karma.conf.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/src/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/src/debug.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/src/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/debug/src/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/ms/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/ms/license.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/ms/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/node_modules/ms/readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/engine.io/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/escape-html/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/escape-html/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/escape-html/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/escape-html/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/etag/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/etag/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/etag/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/etag/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/etag/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/express/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/express/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/express/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/express/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/application.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/express.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/middleware/init.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/middleware/query.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/request.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/response.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/router/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/router/layer.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/router/route.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/utils.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/lib/view.js create mode 100644 xxx/dossier sans titre 2/node_modules/express/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/.coveralls.yml create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/karma.conf.js create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/src/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/src/debug.js create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/src/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/debug/src/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/ms/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/ms/license.md create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/ms/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/node_modules/ms/readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/finalhandler/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/forwarded/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/forwarded/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/forwarded/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/forwarded/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/forwarded/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/fresh/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/fresh/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/fresh/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/fresh/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/fresh/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/has-binary2/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/has-binary2/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/has-binary2/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/has-binary2/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/has-binary2/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/has-cors/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/has-cors/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/has-cors/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/has-cors/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/has-cors/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/has-cors/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/has-cors/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/has-cors/test.js create mode 100644 xxx/dossier sans titre 2/node_modules/http-errors/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/http-errors/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/http-errors/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/http-errors/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/http-errors/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/indexof/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/indexof/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/indexof/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/indexof/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/indexof/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/indexof/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/inherits/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/inherits/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/inherits/inherits.js create mode 100644 xxx/dossier sans titre 2/node_modules/inherits/inherits_browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/inherits/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/Cakefile create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/bower.json create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/ipaddr.min.js create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/src/ipaddr.coffee create mode 100644 xxx/dossier sans titre 2/node_modules/ipaddr.js/test/ipaddr.test.coffee create mode 100644 xxx/dossier sans titre 2/node_modules/isarray/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/isarray/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/isarray/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/jsp/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/jsp/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/jsp/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/jsp/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/jsp/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/jsp/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/jsp/test.js create mode 100644 xxx/dossier sans titre 2/node_modules/media-typer/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/media-typer/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/media-typer/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/media-typer/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/media-typer/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/merge-descriptors/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/merge-descriptors/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/merge-descriptors/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/merge-descriptors/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/merge-descriptors/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/methods/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/methods/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/methods/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/methods/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/methods/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/mime-db/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/mime-db/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/mime-db/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/mime-db/db.json create mode 100644 xxx/dossier sans titre 2/node_modules/mime-db/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/mime-db/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/mime-types/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/mime-types/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/mime-types/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/mime-types/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/mime-types/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/mime/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/mime/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/mime/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/mime/build/build.js create mode 100644 xxx/dossier sans titre 2/node_modules/mime/build/test.js create mode 100755 xxx/dossier sans titre 2/node_modules/mime/cli.js create mode 100644 xxx/dossier sans titre 2/node_modules/mime/mime.js create mode 100644 xxx/dossier sans titre 2/node_modules/mime/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/mime/types.json create mode 100644 xxx/dossier sans titre 2/node_modules/ms/LICENSE.md create mode 100644 xxx/dossier sans titre 2/node_modules/ms/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/ms/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/ms/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/lib/charset.js create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/lib/encoding.js create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/lib/language.js create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/lib/mediaType.js create mode 100644 xxx/dossier sans titre 2/node_modules/negotiator/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/object-assign/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/object-assign/license create mode 100644 xxx/dossier sans titre 2/node_modules/object-assign/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/object-assign/readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/object-component/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/object-component/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/object-component/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/object-component/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/object-component/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/object-component/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/object-component/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/object-component/test/object.js create mode 100644 xxx/dossier sans titre 2/node_modules/on-finished/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/on-finished/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/on-finished/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/on-finished/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/on-finished/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/parsejson/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/parsejson/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/parsejson/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/parsejson/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/parsejson/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/parsejson/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/parsejson/test.js create mode 100644 xxx/dossier sans titre 2/node_modules/parseqs/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/parseqs/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/parseqs/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/parseqs/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/parseqs/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/parseqs/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/parseqs/test.js create mode 100644 xxx/dossier sans titre 2/node_modules/parseuri/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/parseuri/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/parseuri/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/parseuri/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/parseuri/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/parseuri/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/parseuri/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/parseuri/test.js create mode 100644 xxx/dossier sans titre 2/node_modules/parseurl/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/parseurl/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/parseurl/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/parseurl/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/parseurl/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/path-to-regexp/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/path-to-regexp/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/path-to-regexp/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/path-to-regexp/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/path-to-regexp/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/proxy-addr/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/proxy-addr/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/proxy-addr/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/proxy-addr/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/proxy-addr/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/qs/.eslintignore create mode 100644 xxx/dossier sans titre 2/node_modules/qs/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/qs/.jscs.json create mode 100644 xxx/dossier sans titre 2/node_modules/qs/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/qs/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/qs/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/qs/dist/qs.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/lib/formats.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/lib/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/lib/parse.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/lib/stringify.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/lib/utils.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/qs/test/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/qs/test/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/test/parse.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/test/stringify.js create mode 100644 xxx/dossier sans titre 2/node_modules/qs/test/utils.js create mode 100644 xxx/dossier sans titre 2/node_modules/range-parser/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/range-parser/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/range-parser/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/range-parser/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/range-parser/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/safe-buffer/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/safe-buffer/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/safe-buffer/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/safe-buffer/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/safe-buffer/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/safe-buffer/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/safe-buffer/test.js create mode 100644 xxx/dossier sans titre 2/node_modules/send/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/send/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/send/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/send/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/send/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/serve-static/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/serve-static/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/serve-static/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/serve-static/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/serve-static/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/setprototypeof/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/setprototypeof/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/setprototypeof/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/setprototypeof/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/.jshintrc create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/bower.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/debug.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/node_modules/debug/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-adapter/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/dist/socket.io.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/dist/socket.io.js.map create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/dist/socket.io.slim.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/dist/socket.io.slim.js.map create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/lib/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/lib/manager.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/lib/on.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/lib/socket.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/lib/url.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/.coveralls.yml create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/karma.conf.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/src/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/src/debug.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/src/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/debug/src/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/ms/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/ms/license.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/ms/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/node_modules/ms/readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-client/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/binary.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/is-buffer.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/.coveralls.yml create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/karma.conf.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/src/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/src/debug.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/src/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/debug/src/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/ms/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/ms/license.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/ms/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/node_modules/ms/readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io-parser/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/History.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/Readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/lib/client.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/lib/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/lib/namespace.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/lib/socket.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/.coveralls.yml create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/.eslintrc create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/CHANGELOG.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/component.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/karma.conf.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/src/browser.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/src/debug.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/src/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/debug/src/node.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/ms/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/ms/license.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/ms/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/node_modules/ms/readme.md create mode 100644 xxx/dossier sans titre 2/node_modules/socket.io/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/statuses/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/statuses/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/statuses/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/statuses/codes.json create mode 100644 xxx/dossier sans titre 2/node_modules/statuses/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/statuses/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/to-array/.npmignore create mode 100644 xxx/dossier sans titre 2/node_modules/to-array/LICENCE create mode 100644 xxx/dossier sans titre 2/node_modules/to-array/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/to-array/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/to-array/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/type-is/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/type-is/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/type-is/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/type-is/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/type-is/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/ultron/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/ultron/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/ultron/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/unpipe/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/unpipe/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/unpipe/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/unpipe/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/unpipe/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/utils-merge/.travis.yml create mode 100644 xxx/dossier sans titre 2/node_modules/utils-merge/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/utils-merge/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/utils-merge/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/utils-merge/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/uws/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/uws/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/uws/binding.gyp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/action_after_build.stamp.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Extensions.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Group.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/HTTPSocket.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Hub.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Networking.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Node.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Socket.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/WebSocket.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/addon.o.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/Release/uws.node.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/.deps/uws.d create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/action_after_build.stamp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/Extensions.o create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/Group.o create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/HTTPSocket.o create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/Hub.o create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/Networking.o create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/Node.o create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/Socket.o create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/WebSocket.o create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/Release/obj.target/uws/src/addon.o create mode 100755 xxx/dossier sans titre 2/node_modules/uws/build/Release/uws.node create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/action_after_build.target.mk create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/binding.Makefile create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/config.gypi create mode 100755 xxx/dossier sans titre 2/node_modules/uws/build/gyp-mac-tool create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build/uws.target.mk create mode 100644 xxx/dossier sans titre 2/node_modules/uws/build_log.txt create mode 100644 xxx/dossier sans titre 2/node_modules/uws/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Asio.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Backend.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Epoll.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Epoll.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Extensions.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Extensions.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Group.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Group.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/HTTPSocket.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/HTTPSocket.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Hub.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Hub.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Libuv.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Networking.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Networking.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Node.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Node.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Socket.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/Socket.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/WebSocket.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/WebSocket.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/WebSocketProtocol.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/addon.cpp create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/addon.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/http.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/src/uWS.h create mode 100644 xxx/dossier sans titre 2/node_modules/uws/uws.js create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_darwin_46.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_darwin_47.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_darwin_48.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_darwin_51.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_linux_46.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_linux_47.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_linux_48.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_linux_51.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_win32_48.node create mode 100755 xxx/dossier sans titre 2/node_modules/uws/uws_win32_51.node create mode 100644 xxx/dossier sans titre 2/node_modules/vary/HISTORY.md create mode 100644 xxx/dossier sans titre 2/node_modules/vary/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/vary/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/vary/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/vary/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/ws/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/ws/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/ws/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/BufferUtil.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/Constants.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/ErrorCodes.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/EventTarget.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/Extensions.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/PerMessageDeflate.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/Receiver.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/Sender.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/Validation.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/WebSocket.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/lib/WebSocketServer.js create mode 100644 xxx/dossier sans titre 2/node_modules/ws/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/autotest.watchr create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/example/demo.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/package.json create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-constants.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-events.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-exceptions.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-headers.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-redirect-302.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-redirect-303.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-redirect-307.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-request-methods.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/test-request-protocols.js create mode 100644 xxx/dossier sans titre 2/node_modules/xmlhttprequest-ssl/tests/testdata.txt create mode 100644 xxx/dossier sans titre 2/node_modules/yeast/LICENSE create mode 100644 xxx/dossier sans titre 2/node_modules/yeast/README.md create mode 100644 xxx/dossier sans titre 2/node_modules/yeast/index.js create mode 100644 xxx/dossier sans titre 2/node_modules/yeast/package.json create mode 100644 xxx/dossier sans titre 2/server.js create mode 100644 xxx/dossier sans titre 2/views/chambre.ejs create mode 100644 xxx/dossier sans titre 2/views/chambre.jsp create mode 100644 xxx/dossier sans titre/.DS_Store create mode 100644 xxx/dossier sans titre/monmodule.js create mode 100644 xxx/dossier sans titre/node_modules/.DS_Store create mode 120000 xxx/dossier sans titre/node_modules/.bin/md2html create mode 120000 xxx/dossier sans titre/node_modules/.bin/nopt create mode 100644 xxx/dossier sans titre/node_modules/abbrev/LICENSE create mode 100644 xxx/dossier sans titre/node_modules/abbrev/README.md create mode 100644 xxx/dossier sans titre/node_modules/abbrev/abbrev.js create mode 100644 xxx/dossier sans titre/node_modules/abbrev/package.json create mode 100644 xxx/dossier sans titre/node_modules/markdown/.npmignore create mode 100644 xxx/dossier sans titre/node_modules/markdown/.travis.yml create mode 100644 xxx/dossier sans titre/node_modules/markdown/Changes.markdown create mode 100644 xxx/dossier sans titre/node_modules/markdown/README.markdown create mode 100755 xxx/dossier sans titre/node_modules/markdown/bin/md2html.js create mode 100644 xxx/dossier sans titre/node_modules/markdown/lib/index.js create mode 100644 xxx/dossier sans titre/node_modules/markdown/lib/markdown.js create mode 100644 xxx/dossier sans titre/node_modules/markdown/markdown-js.sublime-project create mode 100644 xxx/dossier sans titre/node_modules/markdown/markdown-js.sublime-workspace create mode 100644 xxx/dossier sans titre/node_modules/markdown/package.json create mode 100644 xxx/dossier sans titre/node_modules/markdown/seed.yml create mode 100644 xxx/dossier sans titre/node_modules/nopt/.npmignore create mode 100644 xxx/dossier sans titre/node_modules/nopt/LICENSE create mode 100644 xxx/dossier sans titre/node_modules/nopt/README.md create mode 100755 xxx/dossier sans titre/node_modules/nopt/bin/nopt.js create mode 100755 xxx/dossier sans titre/node_modules/nopt/examples/my-program.js create mode 100644 xxx/dossier sans titre/node_modules/nopt/lib/nopt.js create mode 100644 xxx/dossier sans titre/node_modules/nopt/package.json create mode 100644 xxx/dossier sans titre/server.js create mode 100644 xxx/index.html create mode 100644 xxx/server.js create mode 100644 xxx/style.css create mode 100644 xxx/webSocket/.DS_Store create mode 100644 xxx/webSocket/app.js create mode 100644 xxx/webSocket/courNodeJs.js create mode 100644 xxx/webSocket/fonction callBack.js create mode 100644 xxx/webSocket/index.html create mode 100644 xxx/webSocket/node_modules/accepts/HISTORY.md create mode 100644 xxx/webSocket/node_modules/accepts/LICENSE create mode 100644 xxx/webSocket/node_modules/accepts/README.md create mode 100644 xxx/webSocket/node_modules/accepts/index.js create mode 100644 xxx/webSocket/node_modules/accepts/package.json create mode 100644 xxx/webSocket/node_modules/after/.npmignore create mode 100644 xxx/webSocket/node_modules/after/.travis.yml create mode 100644 xxx/webSocket/node_modules/after/LICENCE create mode 100644 xxx/webSocket/node_modules/after/README.md create mode 100644 xxx/webSocket/node_modules/after/index.js create mode 100644 xxx/webSocket/node_modules/after/package.json create mode 100644 xxx/webSocket/node_modules/after/test/after-test.js create mode 100644 xxx/webSocket/node_modules/arraybuffer.slice/.npmignore create mode 100644 xxx/webSocket/node_modules/arraybuffer.slice/Makefile create mode 100644 xxx/webSocket/node_modules/arraybuffer.slice/README.md create mode 100644 xxx/webSocket/node_modules/arraybuffer.slice/index.js create mode 100644 xxx/webSocket/node_modules/arraybuffer.slice/package.json create mode 100644 xxx/webSocket/node_modules/arraybuffer.slice/test/slice-buffer.js create mode 100644 xxx/webSocket/node_modules/backo2/.npmignore create mode 100644 xxx/webSocket/node_modules/backo2/History.md create mode 100644 xxx/webSocket/node_modules/backo2/Makefile create mode 100644 xxx/webSocket/node_modules/backo2/Readme.md create mode 100644 xxx/webSocket/node_modules/backo2/component.json create mode 100644 xxx/webSocket/node_modules/backo2/index.js create mode 100644 xxx/webSocket/node_modules/backo2/package.json create mode 100644 xxx/webSocket/node_modules/backo2/test/index.js create mode 100644 xxx/webSocket/node_modules/base64-arraybuffer/.npmignore create mode 100644 xxx/webSocket/node_modules/base64-arraybuffer/.travis.yml create mode 100644 xxx/webSocket/node_modules/base64-arraybuffer/LICENSE-MIT create mode 100644 xxx/webSocket/node_modules/base64-arraybuffer/README.md create mode 100644 xxx/webSocket/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js create mode 100644 xxx/webSocket/node_modules/base64-arraybuffer/package.json create mode 100644 xxx/webSocket/node_modules/base64id/.npmignore create mode 100644 xxx/webSocket/node_modules/base64id/LICENSE create mode 100644 xxx/webSocket/node_modules/base64id/README.md create mode 100644 xxx/webSocket/node_modules/base64id/lib/base64id.js create mode 100644 xxx/webSocket/node_modules/base64id/package.json create mode 100644 xxx/webSocket/node_modules/better-assert/.npmignore create mode 100644 xxx/webSocket/node_modules/better-assert/History.md create mode 100644 xxx/webSocket/node_modules/better-assert/Makefile create mode 100644 xxx/webSocket/node_modules/better-assert/Readme.md create mode 100644 xxx/webSocket/node_modules/better-assert/example.js create mode 100644 xxx/webSocket/node_modules/better-assert/index.js create mode 100644 xxx/webSocket/node_modules/better-assert/package.json create mode 100644 xxx/webSocket/node_modules/blob/.npmignore create mode 100644 xxx/webSocket/node_modules/blob/.zuul.yml create mode 100644 xxx/webSocket/node_modules/blob/Makefile create mode 100644 xxx/webSocket/node_modules/blob/README.md create mode 100644 xxx/webSocket/node_modules/blob/index.js create mode 100644 xxx/webSocket/node_modules/blob/package.json create mode 100644 xxx/webSocket/node_modules/blob/test/index.js create mode 100644 xxx/webSocket/node_modules/callsite/.npmignore create mode 100644 xxx/webSocket/node_modules/callsite/History.md create mode 100644 xxx/webSocket/node_modules/callsite/Makefile create mode 100644 xxx/webSocket/node_modules/callsite/Readme.md create mode 100644 xxx/webSocket/node_modules/callsite/index.js create mode 100644 xxx/webSocket/node_modules/callsite/package.json create mode 100644 xxx/webSocket/node_modules/component-bind/.npmignore create mode 100644 xxx/webSocket/node_modules/component-bind/History.md create mode 100644 xxx/webSocket/node_modules/component-bind/Makefile create mode 100644 xxx/webSocket/node_modules/component-bind/Readme.md create mode 100644 xxx/webSocket/node_modules/component-bind/component.json create mode 100644 xxx/webSocket/node_modules/component-bind/index.js create mode 100644 xxx/webSocket/node_modules/component-bind/package.json create mode 100644 xxx/webSocket/node_modules/component-emitter/History.md create mode 100644 xxx/webSocket/node_modules/component-emitter/LICENSE create mode 100644 xxx/webSocket/node_modules/component-emitter/Readme.md create mode 100644 xxx/webSocket/node_modules/component-emitter/index.js create mode 100644 xxx/webSocket/node_modules/component-emitter/package.json create mode 100644 xxx/webSocket/node_modules/component-inherit/.npmignore create mode 100644 xxx/webSocket/node_modules/component-inherit/History.md create mode 100644 xxx/webSocket/node_modules/component-inherit/Makefile create mode 100644 xxx/webSocket/node_modules/component-inherit/Readme.md create mode 100644 xxx/webSocket/node_modules/component-inherit/component.json create mode 100644 xxx/webSocket/node_modules/component-inherit/index.js create mode 100644 xxx/webSocket/node_modules/component-inherit/package.json create mode 100644 xxx/webSocket/node_modules/component-inherit/test/inherit.js create mode 100644 xxx/webSocket/node_modules/cookie/HISTORY.md create mode 100644 xxx/webSocket/node_modules/cookie/LICENSE create mode 100644 xxx/webSocket/node_modules/cookie/README.md create mode 100644 xxx/webSocket/node_modules/cookie/index.js create mode 100644 xxx/webSocket/node_modules/cookie/package.json create mode 100644 xxx/webSocket/node_modules/debug/.coveralls.yml create mode 100644 xxx/webSocket/node_modules/debug/.eslintrc create mode 100644 xxx/webSocket/node_modules/debug/.npmignore create mode 100644 xxx/webSocket/node_modules/debug/.travis.yml create mode 100644 xxx/webSocket/node_modules/debug/CHANGELOG.md create mode 100644 xxx/webSocket/node_modules/debug/LICENSE create mode 100644 xxx/webSocket/node_modules/debug/Makefile create mode 100644 xxx/webSocket/node_modules/debug/README.md create mode 100644 xxx/webSocket/node_modules/debug/component.json create mode 100644 xxx/webSocket/node_modules/debug/karma.conf.js create mode 100644 xxx/webSocket/node_modules/debug/node.js create mode 100644 xxx/webSocket/node_modules/debug/package.json create mode 100644 xxx/webSocket/node_modules/debug/src/browser.js create mode 100644 xxx/webSocket/node_modules/debug/src/debug.js create mode 100644 xxx/webSocket/node_modules/debug/src/index.js create mode 100644 xxx/webSocket/node_modules/debug/src/node.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/History.md create mode 100644 xxx/webSocket/node_modules/engine.io-client/LICENSE create mode 100644 xxx/webSocket/node_modules/engine.io-client/README.md create mode 100644 xxx/webSocket/node_modules/engine.io-client/engine.io.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/index.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/lib/index.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/lib/socket.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/lib/transport.js create mode 100755 xxx/webSocket/node_modules/engine.io-client/lib/transports/index.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/lib/transports/polling-jsonp.js create mode 100755 xxx/webSocket/node_modules/engine.io-client/lib/transports/polling-xhr.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/lib/transports/polling.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/lib/transports/websocket.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/lib/xmlhttprequest.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/.coveralls.yml create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/.eslintrc create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/.npmignore create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/.travis.yml create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/CHANGELOG.md create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/LICENSE create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/Makefile create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/README.md create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/component.json create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/karma.conf.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/node.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/package.json create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/src/browser.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/src/debug.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/src/index.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/node_modules/debug/src/node.js create mode 100644 xxx/webSocket/node_modules/engine.io-client/package.json create mode 100644 xxx/webSocket/node_modules/engine.io-parser/History.md create mode 100644 xxx/webSocket/node_modules/engine.io-parser/LICENSE create mode 100644 xxx/webSocket/node_modules/engine.io-parser/Readme.md create mode 100644 xxx/webSocket/node_modules/engine.io-parser/index.js create mode 100644 xxx/webSocket/node_modules/engine.io-parser/lib/browser.js create mode 100644 xxx/webSocket/node_modules/engine.io-parser/lib/index.js create mode 100644 xxx/webSocket/node_modules/engine.io-parser/lib/keys.js create mode 100644 xxx/webSocket/node_modules/engine.io-parser/lib/utf8.js create mode 100644 xxx/webSocket/node_modules/engine.io-parser/package.json create mode 100644 xxx/webSocket/node_modules/engine.io/History.md create mode 100644 xxx/webSocket/node_modules/engine.io/LICENSE create mode 100644 xxx/webSocket/node_modules/engine.io/README.md create mode 100644 xxx/webSocket/node_modules/engine.io/index.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/engine.io.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/server.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/socket.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/transport.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/transports/index.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/transports/polling-jsonp.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/transports/polling-xhr.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/transports/polling.js create mode 100644 xxx/webSocket/node_modules/engine.io/lib/transports/websocket.js create mode 100644 xxx/webSocket/node_modules/engine.io/package.json create mode 100644 xxx/webSocket/node_modules/has-binary2/History.md create mode 100644 xxx/webSocket/node_modules/has-binary2/LICENSE create mode 100644 xxx/webSocket/node_modules/has-binary2/README.md create mode 100644 xxx/webSocket/node_modules/has-binary2/index.js create mode 100644 xxx/webSocket/node_modules/has-binary2/package.json create mode 100644 xxx/webSocket/node_modules/has-cors/.npmignore create mode 100644 xxx/webSocket/node_modules/has-cors/History.md create mode 100644 xxx/webSocket/node_modules/has-cors/Makefile create mode 100644 xxx/webSocket/node_modules/has-cors/Readme.md create mode 100644 xxx/webSocket/node_modules/has-cors/component.json create mode 100644 xxx/webSocket/node_modules/has-cors/index.js create mode 100644 xxx/webSocket/node_modules/has-cors/package.json create mode 100644 xxx/webSocket/node_modules/has-cors/test.js create mode 100644 xxx/webSocket/node_modules/indexof/.npmignore create mode 100644 xxx/webSocket/node_modules/indexof/Makefile create mode 100644 xxx/webSocket/node_modules/indexof/Readme.md create mode 100644 xxx/webSocket/node_modules/indexof/component.json create mode 100644 xxx/webSocket/node_modules/indexof/index.js create mode 100644 xxx/webSocket/node_modules/indexof/package.json create mode 100644 xxx/webSocket/node_modules/isarray/README.md create mode 100644 xxx/webSocket/node_modules/isarray/index.js create mode 100644 xxx/webSocket/node_modules/isarray/package.json create mode 100644 xxx/webSocket/node_modules/mime-db/HISTORY.md create mode 100644 xxx/webSocket/node_modules/mime-db/LICENSE create mode 100644 xxx/webSocket/node_modules/mime-db/README.md create mode 100644 xxx/webSocket/node_modules/mime-db/db.json create mode 100644 xxx/webSocket/node_modules/mime-db/index.js create mode 100644 xxx/webSocket/node_modules/mime-db/package.json create mode 100644 xxx/webSocket/node_modules/mime-types/HISTORY.md create mode 100644 xxx/webSocket/node_modules/mime-types/LICENSE create mode 100644 xxx/webSocket/node_modules/mime-types/README.md create mode 100644 xxx/webSocket/node_modules/mime-types/index.js create mode 100644 xxx/webSocket/node_modules/mime-types/package.json create mode 100644 xxx/webSocket/node_modules/ms/index.js create mode 100644 xxx/webSocket/node_modules/ms/license.md create mode 100644 xxx/webSocket/node_modules/ms/package.json create mode 100644 xxx/webSocket/node_modules/ms/readme.md create mode 100644 xxx/webSocket/node_modules/negotiator/HISTORY.md create mode 100644 xxx/webSocket/node_modules/negotiator/LICENSE create mode 100644 xxx/webSocket/node_modules/negotiator/README.md create mode 100644 xxx/webSocket/node_modules/negotiator/index.js create mode 100644 xxx/webSocket/node_modules/negotiator/lib/charset.js create mode 100644 xxx/webSocket/node_modules/negotiator/lib/encoding.js create mode 100644 xxx/webSocket/node_modules/negotiator/lib/language.js create mode 100644 xxx/webSocket/node_modules/negotiator/lib/mediaType.js create mode 100644 xxx/webSocket/node_modules/negotiator/package.json create mode 100644 xxx/webSocket/node_modules/object-assign/index.js create mode 100644 xxx/webSocket/node_modules/object-assign/license create mode 100644 xxx/webSocket/node_modules/object-assign/package.json create mode 100644 xxx/webSocket/node_modules/object-assign/readme.md create mode 100644 xxx/webSocket/node_modules/object-component/.npmignore create mode 100644 xxx/webSocket/node_modules/object-component/History.md create mode 100644 xxx/webSocket/node_modules/object-component/Makefile create mode 100644 xxx/webSocket/node_modules/object-component/Readme.md create mode 100644 xxx/webSocket/node_modules/object-component/component.json create mode 100644 xxx/webSocket/node_modules/object-component/index.js create mode 100644 xxx/webSocket/node_modules/object-component/package.json create mode 100644 xxx/webSocket/node_modules/object-component/test/object.js create mode 100644 xxx/webSocket/node_modules/parsejson/.npmignore create mode 100644 xxx/webSocket/node_modules/parsejson/LICENSE create mode 100644 xxx/webSocket/node_modules/parsejson/Makefile create mode 100644 xxx/webSocket/node_modules/parsejson/README.md create mode 100644 xxx/webSocket/node_modules/parsejson/index.js create mode 100644 xxx/webSocket/node_modules/parsejson/package.json create mode 100644 xxx/webSocket/node_modules/parsejson/test.js create mode 100644 xxx/webSocket/node_modules/parseqs/.npmignore create mode 100644 xxx/webSocket/node_modules/parseqs/LICENSE create mode 100644 xxx/webSocket/node_modules/parseqs/Makefile create mode 100644 xxx/webSocket/node_modules/parseqs/README.md create mode 100644 xxx/webSocket/node_modules/parseqs/index.js create mode 100644 xxx/webSocket/node_modules/parseqs/package.json create mode 100644 xxx/webSocket/node_modules/parseqs/test.js create mode 100644 xxx/webSocket/node_modules/parseuri/.npmignore create mode 100644 xxx/webSocket/node_modules/parseuri/History.md create mode 100644 xxx/webSocket/node_modules/parseuri/LICENSE create mode 100644 xxx/webSocket/node_modules/parseuri/Makefile create mode 100644 xxx/webSocket/node_modules/parseuri/README.md create mode 100644 xxx/webSocket/node_modules/parseuri/index.js create mode 100644 xxx/webSocket/node_modules/parseuri/package.json create mode 100644 xxx/webSocket/node_modules/parseuri/test.js create mode 100644 xxx/webSocket/node_modules/safe-buffer/.travis.yml create mode 100644 xxx/webSocket/node_modules/safe-buffer/LICENSE create mode 100644 xxx/webSocket/node_modules/safe-buffer/README.md create mode 100644 xxx/webSocket/node_modules/safe-buffer/browser.js create mode 100644 xxx/webSocket/node_modules/safe-buffer/index.js create mode 100644 xxx/webSocket/node_modules/safe-buffer/package.json create mode 100644 xxx/webSocket/node_modules/safe-buffer/test.js create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/.npmignore create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/History.md create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/LICENSE create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/Readme.md create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/index.js create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/.jshintrc create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/.npmignore create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/CHANGELOG.md create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/LICENSE create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/Makefile create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/Readme.md create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/bower.json create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/browser.js create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/component.json create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/debug.js create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/index.js create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/node.js create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/debug/package.json create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/ms/LICENSE.md create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/ms/README.md create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/ms/index.js create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/node_modules/ms/package.json create mode 100644 xxx/webSocket/node_modules/socket.io-adapter/package.json create mode 100644 xxx/webSocket/node_modules/socket.io-client/.DS_Store create mode 100644 xxx/webSocket/node_modules/socket.io-client/History.md create mode 100644 xxx/webSocket/node_modules/socket.io-client/LICENSE create mode 100644 xxx/webSocket/node_modules/socket.io-client/README.md create mode 100644 xxx/webSocket/node_modules/socket.io-client/dist/socket.io.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/dist/socket.io.js.map create mode 100644 xxx/webSocket/node_modules/socket.io-client/dist/socket.io.slim.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/dist/socket.io.slim.js.map create mode 100644 xxx/webSocket/node_modules/socket.io-client/lib/index.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/lib/manager.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/lib/on.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/lib/socket.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/lib/url.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/.coveralls.yml create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/.eslintrc create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/.npmignore create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/.travis.yml create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/CHANGELOG.md create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/LICENSE create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/Makefile create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/README.md create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/component.json create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/karma.conf.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/node.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/package.json create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/src/browser.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/src/debug.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/src/index.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/node_modules/debug/src/node.js create mode 100644 xxx/webSocket/node_modules/socket.io-client/package.json create mode 100644 xxx/webSocket/node_modules/socket.io-parser/History.md create mode 100644 xxx/webSocket/node_modules/socket.io-parser/LICENSE create mode 100644 xxx/webSocket/node_modules/socket.io-parser/Readme.md create mode 100644 xxx/webSocket/node_modules/socket.io-parser/binary.js create mode 100644 xxx/webSocket/node_modules/socket.io-parser/index.js create mode 100644 xxx/webSocket/node_modules/socket.io-parser/is-buffer.js create mode 100644 xxx/webSocket/node_modules/socket.io-parser/package.json create mode 100644 xxx/webSocket/node_modules/socket.io/History.md create mode 100644 xxx/webSocket/node_modules/socket.io/LICENSE create mode 100644 xxx/webSocket/node_modules/socket.io/Readme.md create mode 100644 xxx/webSocket/node_modules/socket.io/lib/client.js create mode 100644 xxx/webSocket/node_modules/socket.io/lib/index.js create mode 100644 xxx/webSocket/node_modules/socket.io/lib/namespace.js create mode 100644 xxx/webSocket/node_modules/socket.io/lib/socket.js create mode 100644 xxx/webSocket/node_modules/socket.io/package.json create mode 100644 xxx/webSocket/node_modules/to-array/.npmignore create mode 100644 xxx/webSocket/node_modules/to-array/LICENCE create mode 100644 xxx/webSocket/node_modules/to-array/README.md create mode 100644 xxx/webSocket/node_modules/to-array/index.js create mode 100644 xxx/webSocket/node_modules/to-array/package.json create mode 100644 xxx/webSocket/node_modules/ultron/LICENSE create mode 100644 xxx/webSocket/node_modules/ultron/index.js create mode 100644 xxx/webSocket/node_modules/ultron/package.json create mode 100644 xxx/webSocket/node_modules/uws/LICENSE create mode 100644 xxx/webSocket/node_modules/uws/README.md create mode 100644 xxx/webSocket/node_modules/uws/binding.gyp create mode 100644 xxx/webSocket/node_modules/uws/build/Makefile create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/action_after_build.stamp.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Extensions.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Group.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/HTTPSocket.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Hub.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Networking.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Node.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/Socket.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/WebSocket.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/obj.target/uws/src/addon.o.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/Release/uws.node.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/.deps/uws.d create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/action_after_build.stamp create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/Extensions.o create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/Group.o create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/HTTPSocket.o create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/Hub.o create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/Networking.o create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/Node.o create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/Socket.o create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/WebSocket.o create mode 100644 xxx/webSocket/node_modules/uws/build/Release/obj.target/uws/src/addon.o create mode 100755 xxx/webSocket/node_modules/uws/build/Release/uws.node create mode 100644 xxx/webSocket/node_modules/uws/build/action_after_build.target.mk create mode 100644 xxx/webSocket/node_modules/uws/build/binding.Makefile create mode 100644 xxx/webSocket/node_modules/uws/build/config.gypi create mode 100755 xxx/webSocket/node_modules/uws/build/gyp-mac-tool create mode 100644 xxx/webSocket/node_modules/uws/build/uws.target.mk create mode 100644 xxx/webSocket/node_modules/uws/build_log.txt create mode 100644 xxx/webSocket/node_modules/uws/package.json create mode 100644 xxx/webSocket/node_modules/uws/src/Asio.h create mode 100644 xxx/webSocket/node_modules/uws/src/Backend.h create mode 100644 xxx/webSocket/node_modules/uws/src/Epoll.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/Epoll.h create mode 100644 xxx/webSocket/node_modules/uws/src/Extensions.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/Extensions.h create mode 100644 xxx/webSocket/node_modules/uws/src/Group.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/Group.h create mode 100644 xxx/webSocket/node_modules/uws/src/HTTPSocket.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/HTTPSocket.h create mode 100644 xxx/webSocket/node_modules/uws/src/Hub.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/Hub.h create mode 100644 xxx/webSocket/node_modules/uws/src/Libuv.h create mode 100644 xxx/webSocket/node_modules/uws/src/Networking.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/Networking.h create mode 100644 xxx/webSocket/node_modules/uws/src/Node.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/Node.h create mode 100644 xxx/webSocket/node_modules/uws/src/Socket.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/Socket.h create mode 100644 xxx/webSocket/node_modules/uws/src/WebSocket.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/WebSocket.h create mode 100644 xxx/webSocket/node_modules/uws/src/WebSocketProtocol.h create mode 100644 xxx/webSocket/node_modules/uws/src/addon.cpp create mode 100644 xxx/webSocket/node_modules/uws/src/addon.h create mode 100644 xxx/webSocket/node_modules/uws/src/http.h create mode 100644 xxx/webSocket/node_modules/uws/src/uWS.h create mode 100644 xxx/webSocket/node_modules/uws/uws.js create mode 100755 xxx/webSocket/node_modules/uws/uws_darwin_46.node create mode 100755 xxx/webSocket/node_modules/uws/uws_darwin_47.node create mode 100755 xxx/webSocket/node_modules/uws/uws_darwin_48.node create mode 100755 xxx/webSocket/node_modules/uws/uws_darwin_51.node create mode 100755 xxx/webSocket/node_modules/uws/uws_linux_46.node create mode 100755 xxx/webSocket/node_modules/uws/uws_linux_47.node create mode 100755 xxx/webSocket/node_modules/uws/uws_linux_48.node create mode 100755 xxx/webSocket/node_modules/uws/uws_linux_51.node create mode 100755 xxx/webSocket/node_modules/uws/uws_win32_48.node create mode 100755 xxx/webSocket/node_modules/uws/uws_win32_51.node create mode 100644 xxx/webSocket/node_modules/ws/LICENSE create mode 100644 xxx/webSocket/node_modules/ws/README.md create mode 100644 xxx/webSocket/node_modules/ws/index.js create mode 100644 xxx/webSocket/node_modules/ws/lib/BufferUtil.js create mode 100644 xxx/webSocket/node_modules/ws/lib/Constants.js create mode 100644 xxx/webSocket/node_modules/ws/lib/ErrorCodes.js create mode 100644 xxx/webSocket/node_modules/ws/lib/EventTarget.js create mode 100644 xxx/webSocket/node_modules/ws/lib/Extensions.js create mode 100644 xxx/webSocket/node_modules/ws/lib/PerMessageDeflate.js create mode 100644 xxx/webSocket/node_modules/ws/lib/Receiver.js create mode 100644 xxx/webSocket/node_modules/ws/lib/Sender.js create mode 100644 xxx/webSocket/node_modules/ws/lib/Validation.js create mode 100644 xxx/webSocket/node_modules/ws/lib/WebSocket.js create mode 100644 xxx/webSocket/node_modules/ws/lib/WebSocketServer.js create mode 100644 xxx/webSocket/node_modules/ws/package.json create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/LICENSE create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/README.md create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/autotest.watchr create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/example/demo.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/package.json create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-constants.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-events.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-exceptions.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-headers.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-redirect-302.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-redirect-303.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-redirect-307.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-request-methods.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/test-request-protocols.js create mode 100644 xxx/webSocket/node_modules/xmlhttprequest-ssl/tests/testdata.txt create mode 100644 xxx/webSocket/node_modules/yeast/LICENSE create mode 100644 xxx/webSocket/node_modules/yeast/README.md create mode 100644 xxx/webSocket/node_modules/yeast/index.js create mode 100644 xxx/webSocket/node_modules/yeast/package.json create mode 100644 xxx/webSocket/test.html diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e50486e3ebf522440f4cb24c6d7650999ce7508c GIT binary patch literal 6148 zcmeHKO-sW-5Php{Dd?d`kNX$=2cg8Hr-E0dNfjYYiZKeF@+bX2zS$WisX2KNkr~*1 zv-6eggY0GigmqV50xJMZ4#6PGgot_4bz;E_Vn{Wrm(5dMHTAnD?zJGvEw31I~am@N)*_8lo)E6n%CEoB?Oxivc+wB8OmR*ej-^gHvh& zh%=g#P?ugpa-v~o*elXQ37SgO)L<<}&~)0P#bt)QqNXEQ^AYUHpUq21PiOs@!Vxk> zpPd0`V9da&E?08@U-6TfZ1Tq`zH$bffq%w8nB|*%%}v?e`fYo1*G7&z4iSm#MWIk1 k{RD6!=g38Jsy~X(xXiFulqzCR=|uk#NQC(04EzEEAH{$(i2wiq literal 0 HcmV?d00001 diff --git a/.idea/NodeJs.iml b/.idea/NodeJs.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/NodeJs.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..96731af --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..4a0f945 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,682 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + db + usernale + console.log + .push + io + x + $ele + jque + chat-contact + + + targetName + $(this) + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + project + + + true + + + + DIRECTORY + + false + + + + + + + + + 1497781821132 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Model/Beans/User.js b/Model/Beans/User.js new file mode 100644 index 0000000..dc5db32 --- /dev/null +++ b/Model/Beans/User.js @@ -0,0 +1,37 @@ +/** + * Created by macbookpro on 18/06/2017. + */ +function User () { + this.username = ""; + this.password = ""; + this.email = ""; +} + +User.prototype = { + setUserName : function (username) { + this.username = username; + }, + + getUserName: function () { + return this.username; + }, + + setPassword : function (password) { + this.password = password; + }, + + getPassword: function () { + return this.password; + }, + + setEmail : function (email) { + this.email = email; + }, + + getEmail: function () { + return this.email; + } +}; + + +module.exports = User; diff --git a/Model/Vendor/Count.js b/Model/Vendor/Count.js new file mode 100644 index 0000000..539d71a --- /dev/null +++ b/Model/Vendor/Count.js @@ -0,0 +1,58 @@ +var sleep = require('system-sleep'); + +function Count () { + +} + +Count.prototype = { + countUser: function (user) { + var test = true; + + + var MongoClient = require('mongodb').MongoClient; + + MongoClient.connect("mongodb://localhost:27017/Battleship", function(err, db) { + if (!err) { + db.collection('user').find({"email":user.getEmail()}).count() + .then(function(numItems) { + + + if(numItems > 0){ + test = false; + } + }) + } + }); + + var sleep = require('system-sleep'); + sleep(200); + return test; + }, + + countUserForLogin: function(user) { + var test = false; + var MongoClient = require('mongodb').MongoClient; + + MongoClient.connect("mongodb://localhost:27017/Battleship", function(err, db) { + if (!err) { + db.collection('user').find( { $and : [ {"email":user.getEmail()}, {"password": user.getPassword() } ] }).count() + .then(function(numItems) { + + if(numItems > 0){ + test = true; + + } + }) + } + }); + + var sleep = require('system-sleep'); + sleep(200); + + return test; + } +}; + + + +module.exports = Count; \ No newline at end of file diff --git a/Model/Vendor/Insert.js b/Model/Vendor/Insert.js new file mode 100644 index 0000000..c6ace31 --- /dev/null +++ b/Model/Vendor/Insert.js @@ -0,0 +1,30 @@ +/** + * Created by macbookpro on 18/06/2017. + */ + +function Insert () { + +} + +Insert.prototype = { + insertUser : function (user) { + const User = require('../Beans/User'); + + var MongoClient = require('mongodb').MongoClient; + + MongoClient.connect("mongodb://localhost:27017/Battleship", function(err, db) { + if (!err) { + var collection = db.collection('user'); + + var doc1 = {username: user.getUserName(), password: user.getPassword(), email: user.getEmail()}; + collection.insert(doc1); + + } + }); + + } +} + + + +module.exports = Insert; \ No newline at end of file diff --git a/Model/Vendor/SelectUser.js b/Model/Vendor/SelectUser.js new file mode 100644 index 0000000..f3f54ed --- /dev/null +++ b/Model/Vendor/SelectUser.js @@ -0,0 +1,44 @@ +/** + * Created by macbookpro on 19/06/2017. + */ + +var sleep = require('system-sleep'); + +function SelectUser () { + +} + +SelectUser.prototype = { + selectUser : function (user) { + var retur; + const User = require('../Beans/User'); + var user2 = new User(); + + var MongoClient = require('mongodb').MongoClient; + + MongoClient.connect("mongodb://localhost:27017/Battleship", function(err, db) { + if (!err) { + + + + db.collection('user').findOne({ $and : [ {"email":user.getEmail()}, {"password": user.getPassword() } ] }, function(err, document) { + user2.setPassword(document.password); + user2.setEmail(document.email); + user2.setUserName(document.username); + + + }); + + } + }); + + var sleep = require('system-sleep'); + sleep(200); + + return user2; + } +} + + + +module.exports = SelectUser; \ No newline at end of file diff --git a/Views/chat.html.twig b/Views/chat.html.twig new file mode 100644 index 0000000..073c0eb --- /dev/null +++ b/Views/chat.html.twig @@ -0,0 +1,237 @@ + + + + + + Profil and Chat + + + + +
+
+
+
Connected users
+ +
+

public

+

public

+
+
+
+ +
+
+
Chat with public
+ +
+
    + +
+
+
+ + Send Message +
+
+
+
+ + + + + + + + + + diff --git a/Views/login.html.twig b/Views/login.html.twig new file mode 100644 index 0000000..0904bf9 --- /dev/null +++ b/Views/login.html.twig @@ -0,0 +1,59 @@ + + + + + + Login + + + +
+

+ Welcome, if you want to play our version of Battelship or make new acquaintances to chat with people like you who love our site, you need to log in to your account if you do not have an account you can To register very easily by clicking on Create Account ?, if you want to discover our team you can at any time click on the info button which is in the top right. +

+
+ + + + + + + + + diff --git a/Views/profil.html.twig b/Views/profil.html.twig new file mode 100644 index 0000000..2a252ab --- /dev/null +++ b/Views/profil.html.twig @@ -0,0 +1,173 @@ + + + + + + Profil and Chat + + + +
+
+ +
+
+
+
    +
    + +
    +
    + + +

    Bienvenue {{ user.getUserName() }}

    + + +Destroy +
      + +
    + +

    Envoyer a tout le monde

    + + + + + + + + + + + + diff --git a/Views/register.html.twig b/Views/register.html.twig new file mode 100644 index 0000000..eb46a82 --- /dev/null +++ b/Views/register.html.twig @@ -0,0 +1,60 @@ + + + + + Register + + + + + +
    +

    + Hi everyone, sign up, it's simple and it only takes a few seconds. +

    +
    + + + + + + + + + \ No newline at end of file diff --git a/Views/zzz.html b/Views/zzz.html new file mode 100644 index 0000000..051c47b --- /dev/null +++ b/Views/zzz.html @@ -0,0 +1,6 @@ +{{ user.getEmail() }} +
    +{{ user.getPassword() }} +
    +{{ user.getUserName() }} +
    \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..40f0dbc --- /dev/null +++ b/app.js @@ -0,0 +1,21 @@ +var http = require('http'); +var fs = require('fs'); + +// Chargement du fichier index.html affiché au client +var server = http.createServer(function(req, res) { + fs.readFile('./index.html', 'utf-8', function(error, content) { + res.writeHead(200, {"Content-Type": "text/html"}); + res.end(content); + }); +}); + +// Chargement de socket.io +var io = require('socket.io').listen(server); + +// Quand un client se connecte, on le note dans la console +io.sockets.on('connection', function (socket) { + console.log('Un client est connecté !'); +}); + + +server.listen(9998); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..0edd31d --- /dev/null +++ b/index.html @@ -0,0 +1,25 @@ + + + + + Socket.io + + + + +

    Communication avec socket.io !

    + + + + \ No newline at end of file diff --git a/newServer.js b/newServer.js new file mode 100644 index 0000000..1e2fb25 --- /dev/null +++ b/newServer.js @@ -0,0 +1,259 @@ +var express = require("express"); +var bodyParser = require("body-parser"); +var session = require('express-session'); + +var url = require('url'); // generation des URL automatiquement en cas de changement de pc + +var app = express(); // express + +var server = app.listen(9999, function () { + console.log('sever listen in port 9999'); +}); // demarrer le serveur sur sur le port 9999 + +var io = require('socket.io').listen(server); // Utilisation des Sockets + + +app.use('/public', express.static(__dirname + '/public')); // Rendre le dossier public public + +app.use(session({secret: 'ssshhhhh'})); // utilisation des sessions + +// recuperation des parametres de la requete +app.use(bodyParser.urlencoded({ extended: true })); +app.use(bodyParser.json()); + +const User = require('./Model/Beans/user.js'); +var sess; + +function generateUrl(req) { + var requrl = url.format({ + protocol: req.protocol, + host: req.get('host'), + }); + return requrl; +} + +//Login : +app.get('/login',function(req,res){ + sess = req.session; + + + if(sess.email){ + res.redirect(generateUrl(req)+'/chat'); + }else { + res.render('login.html.twig'); + } +}); + +app.post('/login',function(req,res){ + sess = req.session; + + if(sess.email){ + + res.redirect(generateUrl(req) +'/chat'); + }else { + var user = new User(); + user.setEmail( req.body.email ); + user.setPassword( req.body.password ); + + const Count = require('./Model/Vendor/Count'); + var countUser = new Count(); + var test = countUser.countUserForLogin(user); + + + if (test){ + var select = require('./Model/Vendor/SelectUser'); + var selectUser = new select(); + var userJson = selectUser.selectUser(user); + sess.username = userJson.getUserName(); + sess.password = userJson.getPassword(); + sess.email = userJson.getEmail(); + + res.redirect(generateUrl(req) + '/chat'); + }else { + res.render('login.html.twig', {url : generateUrl(req) ,Dfalse : "Username or Password doesn't exists"}); + } + } + +}); + + +// Register +app.get('/register',function (req,res) { + sess = req.session; + + if(sess.email) { + res.redirect(generateUrl(req) + '/chat'); + }else { + res.render('register.html.twig'); + } +}); + +app.post('/register',function(req,res){ + sess = req.session; + + var user = new User(); + user.setUserName( req.body.username ); + user.setPassword( req.body.password ); + user.setEmail( req.body.email ); + + const Count = require('./Model/Vendor/Count'); + var countUser = new Count(); + var test = countUser.countUser(user); + + if (test){ + const Insert = require('./Model/Vendor/Insert'); + var insertUser = new Insert(); + insertUser.insertUser(user); + + sess.email = user.getEmail(); + sess.username = user.getUserName(); + sess.password = user.getPassword(); + + res.redirect( generateUrl(req) + '/chat'); + }else{ + res.render('register.html.twig', {url : generateUrl(req) ,Dusername : "Username already Exists, please choose another username", Demail : "email already exists"}); + } +}); + + +//Profil : + +app.get('/profil',function (req,res) { + sess = req.session; + + if(sess.email) { + var user = new User(); + user.setEmail(sess.email); + user.setPassword(sess.password); + user.setUserName(sess.username); + + res.render('profil.html.twig', {url : generateUrl(req) ,user : user }); + }else{ + res.redirect( generateUrl(req) + '/login'); + } +}); + +//Deconnect + +app.get('/deconnect',function (req,res) { + req.session.destroy(); + res.redirect(generateUrl(req) + '/login'); + +}); + + +//Chat + +app.get('/chat',function (req,res) { + sess = req.session; + + if(sess.email) { + var user = new User(); + user.setEmail(sess.email); + user.setPassword(sess.password); + user.setUserName(sess.username); + + res.render('chat.html.twig', {url : generateUrl(req) ,user : user }); + }else{ + res.redirect( generateUrl(req) + '/login'); + } +}); + + + + +var listUserConnected = []; +var tt = []; + +setInterval( function () { + console.log('********************'); + console.log('User connected in our servers : '); + if (listUserConnected.length == 0){ + console.log('nobody is there'); + } + for(var i=0; i < listUserConnected.length; i++){ + console.log(listUserConnected[i].username + ' is connected '); + }; + console.log('********************'); +}, 5000); + + +io.on('connection', function(socket){ + + socket.on('sendInformationUser', function(data){ + console.log(data.username + ' just logged in'); + + data.sock = socket; + + data.sock.on('disconnect', function(){ + for(var i=0; i < listUserConnected.length; i++){ + if (listUserConnected[i].sock.id == data.sock.id){ + console.log (listUserConnected[i].username + ' is left'); + listUserConnected.splice(i , 1); + } + } + }); + + listUserConnected.push(data); + }); + + socket.on('message', function (data) { + sendForUser(data); + }); + + + + socket.on('getListUsersConnected',function (data) { + for(var i=0; i < listUserConnected.length; i++){ + if (listUserConnected[i].email == data.email){ + //nothing + }else { + var user = new User(); + user.setUserName(listUserConnected[i].username); + user.setEmail(listUserConnected[i].email); + tt.push(user); + } + } + if (tt.length == 0){ + socket.emit('setListUsersConnected', "nobody is there" ); + } + socket.emit('setListUsersConnected', tt ); + tt = []; + + }); + + + socket.on('broadcast', function (data) { + socket.broadcast.emit('broadcasting', data); + }) + + + +}); + + + + +function sendForUser(data) { + for (var i = 0; i < listUserConnected.length; i++) { + if (listUserConnected[i].email == data.email) { + listUserConnected[i].sock.emit('message', data.userSender +' : '+ data.message); + } + + } +} + + + + + + + + + + + + + + + diff --git a/node_modules/.DS_Store b/node_modules/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6e424ed5cfe9d593ecc64019f9956dff94dff820 GIT binary patch literal 6148 zcmeHK%}&BV5S|sHjS%GE!DC;5gKy9fd;%UoTU)UT#k7EW>!bV4?1ab`uY{Nxvh!`{ zZ?_-pE=xpiy3Oy2#zYjMG4`*ajtKj?b>u=VBcPKS1=Td6hF+=cM4Q1FFb2+z0baX9 z%4kb3`21eKD{6N0x>~NQ1!Aziu?ZCTOb}OMoj0@z{5^Qzj%1ZoVMpNFC2czXD_YSS z5ew*?vY_Vh(2LQZ5m!?Y#0{i|pIe1-cn>Nl529}A1G#I|C=k)0T7}*hW>v!Wj^`Bq zMQ4r?tSNoMpUEu0gSt07BShqA87Jm`}-hKyN2fj$E zrx;-?QQFD*&($vk3Zpm*AXOF;Q$i!UJ(W73fo)UNM|chdtJ~M6vbg)5+=O!|BLQZzxVi zNBvmB$t5058w19`Ap<@CIOg;J;qUwZVUj%=1IEC=V!-uh^Vt-yq-SgA<@l_P(Voy) nIIi_5DNuSGONWo*J2VmaV(tJF#nvM%5c?w_G?+35PRhU!0IPNA literal 0 HcmV?d00001 diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 0000000..317eb29 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver \ No newline at end of file diff --git a/node_modules/.bin/twigjs b/node_modules/.bin/twigjs new file mode 120000 index 0000000..716ab8c --- /dev/null +++ b/node_modules/.bin/twigjs @@ -0,0 +1 @@ +../twig/bin/twigjs \ No newline at end of file diff --git a/node_modules/accepts/HISTORY.md b/node_modules/accepts/HISTORY.md new file mode 100644 index 0000000..0508481 --- /dev/null +++ b/node_modules/accepts/HISTORY.md @@ -0,0 +1,74 @@ +1.1.4 / 2014-12-10 +================== + + * deps: mime-types@~2.0.4 + - deps: mime-db@~1.3.0 + +1.1.3 / 2014-11-09 +================== + + * deps: mime-types@~2.0.3 + - deps: mime-db@~1.2.0 + +1.1.2 / 2014-10-14 +================== + + * deps: negotiator@0.4.9 + - Fix error when media type has invalid parameter + +1.1.1 / 2014-09-28 +================== + + * deps: mime-types@~2.0.2 + - deps: mime-db@~1.1.0 + * deps: negotiator@0.4.8 + - Fix all negotiations to be case-insensitive + - Stable sort preferences of same quality according to client order + +1.1.0 / 2014-09-02 +================== + + * update `mime-types` + +1.0.7 / 2014-07-04 +================== + + * Fix wrong type returned from `type` when match after unknown extension + +1.0.6 / 2014-06-24 +================== + + * deps: negotiator@0.4.7 + +1.0.5 / 2014-06-20 +================== + + * fix crash when unknown extension given + +1.0.4 / 2014-06-19 +================== + + * use `mime-types` + +1.0.3 / 2014-06-11 +================== + + * deps: negotiator@0.4.6 + - Order by specificity when quality is the same + +1.0.2 / 2014-05-29 +================== + + * Fix interpretation when header not in request + * deps: pin negotiator@0.4.5 + +1.0.1 / 2014-01-18 +================== + + * Identity encoding isn't always acceptable + * deps: negotiator@~0.4.0 + +1.0.0 / 2013-12-27 +================== + + * Genesis diff --git a/node_modules/accepts/LICENSE b/node_modules/accepts/LICENSE new file mode 100644 index 0000000..f23dca8 --- /dev/null +++ b/node_modules/accepts/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/accepts/README.md b/node_modules/accepts/README.md new file mode 100644 index 0000000..a9bc28a --- /dev/null +++ b/node_modules/accepts/README.md @@ -0,0 +1,94 @@ +# accepts + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Higher level content negotation based on [negotiator](https://github.com/federomero/negotiator). Extracted from [koa](https://github.com/koajs/koa) for general use. + +In addition to negotatior, it allows: + +- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`. +- Allows type shorthands such as `json`. +- Returns `false` when no types match +- Treats non-existent headers as `*` + +## API + +### var accept = new Accepts(req) + +```js +var accepts = require('accepts') + +http.createServer(function (req, res) { + var accept = accepts(req) +}) +``` + +### accept\[property\]\(\) + +Returns all the explicitly accepted content property as an array in descending priority. + +- `accept.types()` +- `accept.encodings()` +- `accept.charsets()` +- `accept.languages()` + +They are also aliased in singular form such as `accept.type()`. `accept.languages()` is also aliased as `accept.langs()`, etc. + +Note: you should almost never do this in a real app as it defeats the purpose of content negotiation. + +Example: + +```js +// in Google Chrome +var encodings = accept.encodings() // -> ['sdch', 'gzip', 'deflate'] +``` + +Since you probably don't support `sdch`, you should just supply the encodings you support: + +```js +var encoding = accept.encodings('gzip', 'deflate') // -> 'gzip', probably +``` + +### accept\[property\]\(values, ...\) + +You can either have `values` be an array or have an argument list of values. + +If the client does not accept any `values`, `false` will be returned. +If the client accepts any `values`, the preferred `value` will be return. + +For `accept.types()`, shorthand mime types are allowed. + +Example: + +```js +// req.headers.accept = 'application/json' + +accept.types('json') // -> 'json' +accept.types('html', 'json') // -> 'json' +accept.types('html') // -> false + +// req.headers.accept = '' +// which is equivalent to `*` + +accept.types() // -> [], no explicit types +accept.types('text/html', 'text/json') // -> 'text/html', since it was first +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/accepts.svg?style=flat +[npm-url]: https://npmjs.org/package/accepts +[node-version-image]: https://img.shields.io/node/v/accepts.svg?style=flat +[node-version-url]: http://nodejs.org/download/ +[travis-image]: https://img.shields.io/travis/jshttp/accepts.svg?style=flat +[travis-url]: https://travis-ci.org/jshttp/accepts +[coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts.svg?style=flat +[coveralls-url]: https://coveralls.io/r/jshttp/accepts +[downloads-image]: https://img.shields.io/npm/dm/accepts.svg?style=flat +[downloads-url]: https://npmjs.org/package/accepts diff --git a/node_modules/accepts/index.js b/node_modules/accepts/index.js new file mode 100644 index 0000000..805e33a --- /dev/null +++ b/node_modules/accepts/index.js @@ -0,0 +1,160 @@ +var Negotiator = require('negotiator') +var mime = require('mime-types') + +var slice = [].slice + +module.exports = Accepts + +function Accepts(req) { + if (!(this instanceof Accepts)) + return new Accepts(req) + + this.headers = req.headers + this.negotiator = Negotiator(req) +} + +/** + * 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" 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 + * this.types('html'); + * // => "html" + * + * // Accept: text/*, application/json + * this.types('html'); + * // => "html" + * this.types('text/html'); + * // => "text/html" + * this.types('json', 'text'); + * // => "json" + * this.types('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * this.types('image/png'); + * this.types('png'); + * // => undefined + * + * // Accept: text/*;q=.5, application/json + * this.types(['html', 'json']); + * this.types('html', 'json'); + * // => "json" + * + * @param {String|Array} type(s)... + * @return {String|Array|Boolean} + * @api public + */ + +Accepts.prototype.type = +Accepts.prototype.types = function (types) { + if (!Array.isArray(types)) types = slice.call(arguments); + var n = this.negotiator; + if (!types.length) return n.mediaTypes(); + if (!this.headers.accept) return types[0]; + var mimes = types.map(extToMime); + var accepts = n.mediaTypes(mimes.filter(validMime)); + var first = accepts[0]; + if (!first) return false; + return types[mimes.indexOf(first)]; +} + +/** + * Return accepted encodings or best fit based on `encodings`. + * + * Given `Accept-Encoding: gzip, deflate` + * an array sorted by quality is returned: + * + * ['gzip', 'deflate'] + * + * @param {String|Array} encoding(s)... + * @return {String|Array} + * @api public + */ + +Accepts.prototype.encoding = +Accepts.prototype.encodings = function (encodings) { + if (!Array.isArray(encodings)) encodings = slice.call(arguments); + var n = this.negotiator; + if (!encodings.length) return n.encodings(); + return n.encodings(encodings)[0] || false; +} + +/** + * Return accepted charsets or best fit based on `charsets`. + * + * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` + * an array sorted by quality is returned: + * + * ['utf-8', 'utf-7', 'iso-8859-1'] + * + * @param {String|Array} charset(s)... + * @return {String|Array} + * @api public + */ + +Accepts.prototype.charset = +Accepts.prototype.charsets = function (charsets) { + if (!Array.isArray(charsets)) charsets = [].slice.call(arguments); + var n = this.negotiator; + if (!charsets.length) return n.charsets(); + if (!this.headers['accept-charset']) return charsets[0]; + return n.charsets(charsets)[0] || false; +} + +/** + * Return accepted languages or best fit based on `langs`. + * + * Given `Accept-Language: en;q=0.8, es, pt` + * an array sorted by quality is returned: + * + * ['es', 'pt', 'en'] + * + * @param {String|Array} lang(s)... + * @return {Array|String} + * @api public + */ + +Accepts.prototype.lang = +Accepts.prototype.langs = +Accepts.prototype.language = +Accepts.prototype.languages = function (langs) { + if (!Array.isArray(langs)) langs = slice.call(arguments); + var n = this.negotiator; + if (!langs.length) return n.languages(); + if (!this.headers['accept-language']) return langs[0]; + return n.languages(langs)[0] || false; +} + +/** + * Convert extnames to mime. + * + * @param {String} type + * @return {String} + * @api private + */ + +function extToMime(type) { + if (~type.indexOf('/')) return type; + return mime.lookup(type); +} + +/** + * Check if mime is valid. + * + * @param {String} type + * @return {String} + * @api private + */ + +function validMime(type) { + return typeof type === 'string'; +} diff --git a/node_modules/accepts/node_modules/mime-db/HISTORY.md b/node_modules/accepts/node_modules/mime-db/HISTORY.md new file mode 100644 index 0000000..d559c26 --- /dev/null +++ b/node_modules/accepts/node_modules/mime-db/HISTORY.md @@ -0,0 +1,212 @@ +1.12.0 / 2015-06-05 +=================== + + * Add `application/bdoc` + * Add `application/vnd.hyperdrive+json` + * Add `application/x-bdoc` + * Add extension `.rtf` to `text/rtf` + +1.11.0 / 2015-05-31 +=================== + + * Add `audio/wav` + * Add `audio/wave` + * Add extension `.litcoffee` to `text/coffeescript` + * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` + * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` + +1.10.0 / 2015-05-19 +=================== + + * Add `application/vnd.balsamiq.bmpr` + * Add `application/vnd.microsoft.portable-executable` + * Add `application/x-ns-proxy-autoconfig` + +1.9.1 / 2015-04-19 +================== + + * Remove `.json` extension from `application/manifest+json` + - This is causing bugs downstream + +1.9.0 / 2015-04-19 +================== + + * Add `application/manifest+json` + * Add `application/vnd.micro+json` + * Add `image/vnd.zbrush.pcx` + * Add `image/x-ms-bmp` + +1.8.0 / 2015-03-13 +================== + + * Add `application/vnd.citationstyles.style+xml` + * Add `application/vnd.fastcopy-disk-image` + * Add `application/vnd.gov.sk.xmldatacontainer+xml` + * Add extension `.jsonld` to `application/ld+json` + +1.7.0 / 2015-02-08 +================== + + * Add `application/vnd.gerber` + * Add `application/vnd.msa-disk-image` + +1.6.1 / 2015-02-05 +================== + + * Community extensions ownership transferred from `node-mime` + +1.6.0 / 2015-01-29 +================== + + * Add `application/jose` + * Add `application/jose+json` + * Add `application/json-seq` + * Add `application/jwk+json` + * Add `application/jwk-set+json` + * Add `application/jwt` + * Add `application/rdap+json` + * Add `application/vnd.gov.sk.e-form+xml` + * Add `application/vnd.ims.imsccv1p3` + +1.5.0 / 2014-12-30 +================== + + * Add `application/vnd.oracle.resource+json` + * Fix various invalid MIME type entries + - `application/mbox+xml` + - `application/oscp-response` + - `application/vwg-multiplexed` + - `audio/g721` + +1.4.0 / 2014-12-21 +================== + + * Add `application/vnd.ims.imsccv1p2` + * Fix various invalid MIME type entries + - `application/vnd-acucobol` + - `application/vnd-curl` + - `application/vnd-dart` + - `application/vnd-dxr` + - `application/vnd-fdf` + - `application/vnd-mif` + - `application/vnd-sema` + - `application/vnd-wap-wmlc` + - `application/vnd.adobe.flash-movie` + - `application/vnd.dece-zip` + - `application/vnd.dvb_service` + - `application/vnd.micrografx-igx` + - `application/vnd.sealed-doc` + - `application/vnd.sealed-eml` + - `application/vnd.sealed-mht` + - `application/vnd.sealed-ppt` + - `application/vnd.sealed-tiff` + - `application/vnd.sealed-xls` + - `application/vnd.sealedmedia.softseal-html` + - `application/vnd.sealedmedia.softseal-pdf` + - `application/vnd.wap-slc` + - `application/vnd.wap-wbxml` + - `audio/vnd.sealedmedia.softseal-mpeg` + - `image/vnd-djvu` + - `image/vnd-svf` + - `image/vnd-wap-wbmp` + - `image/vnd.sealed-png` + - `image/vnd.sealedmedia.softseal-gif` + - `image/vnd.sealedmedia.softseal-jpg` + - `model/vnd-dwf` + - `model/vnd.parasolid.transmit-binary` + - `model/vnd.parasolid.transmit-text` + - `text/vnd-a` + - `text/vnd-curl` + - `text/vnd.wap-wml` + * Remove example template MIME types + - `application/example` + - `audio/example` + - `image/example` + - `message/example` + - `model/example` + - `multipart/example` + - `text/example` + - `video/example` + +1.3.1 / 2014-12-16 +================== + + * Fix missing extensions + - `application/json5` + - `text/hjson` + +1.3.0 / 2014-12-07 +================== + + * Add `application/a2l` + * Add `application/aml` + * Add `application/atfx` + * Add `application/atxml` + * Add `application/cdfx+xml` + * Add `application/dii` + * Add `application/json5` + * Add `application/lxf` + * Add `application/mf4` + * Add `application/vnd.apache.thrift.compact` + * Add `application/vnd.apache.thrift.json` + * Add `application/vnd.coffeescript` + * Add `application/vnd.enphase.envoy` + * Add `application/vnd.ims.imsccv1p1` + * Add `text/csv-schema` + * Add `text/hjson` + * Add `text/markdown` + * Add `text/yaml` + +1.2.0 / 2014-11-09 +================== + + * Add `application/cea` + * Add `application/dit` + * Add `application/vnd.gov.sk.e-form+zip` + * Add `application/vnd.tmd.mediaflex.api+xml` + * Type `application/epub+zip` is now IANA-registered + +1.1.2 / 2014-10-23 +================== + + * Rebuild database for `application/x-www-form-urlencoded` change + +1.1.1 / 2014-10-20 +================== + + * Mark `application/x-www-form-urlencoded` as compressible. + +1.1.0 / 2014-09-28 +================== + + * Add `application/font-woff2` + +1.0.3 / 2014-09-25 +================== + + * Fix engine requirement in package + +1.0.2 / 2014-09-25 +================== + + * Add `application/coap-group+json` + * Add `application/dcd` + * Add `application/vnd.apache.thrift.binary` + * Add `image/vnd.tencent.tap` + * Mark all JSON-derived types as compressible + * Update `text/vtt` data + +1.0.1 / 2014-08-30 +================== + + * Fix extension ordering + +1.0.0 / 2014-08-30 +================== + + * Add `application/atf` + * Add `application/merge-patch+json` + * Add `multipart/x-mixed-replace` + * Add `source: 'apache'` metadata + * Add `source: 'iana'` metadata + * Remove badly-assumed charset data diff --git a/node_modules/accepts/node_modules/mime-db/LICENSE b/node_modules/accepts/node_modules/mime-db/LICENSE new file mode 100644 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/accepts/node_modules/mime-db/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 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/accepts/node_modules/mime-db/README.md b/node_modules/accepts/node_modules/mime-db/README.md new file mode 100644 index 0000000..2c54bb4 --- /dev/null +++ b/node_modules/accepts/node_modules/mime-db/README.md @@ -0,0 +1,76 @@ +# mime-db + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][travis-image]][travis-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +This is a database of all mime types. +It consists of a single, public JSON file and does not include any logic, +allowing it to remain as un-opinionated as possible with an API. +It aggregates data from the following sources: + +- http://www.iana.org/assignments/media-types/media-types.xhtml +- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types + +## Installation + +```bash +npm install mime-db +``` + +If you're crazy enough to use this in the browser, +you can just grab the JSON file: + +``` +https://cdn.rawgit.com/jshttp/mime-db/master/db.json +``` + +## Usage + +```js +var db = require('mime-db'); + +// grab data on .js files +var data = db['application/javascript']; +``` + +## Data Structure + +The JSON file is a map lookup for lowercased mime types. +Each mime type has the following properties: + +- `.source` - where the mime type is defined. + If not set, it's probably a custom media type. + - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) + - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) +- `.extensions[]` - known extensions associated with this mime type. +- `.compressible` - whether a file of this type is can be gzipped. +- `.charset` - the default charset associated with this type, if any. + +If unknown, every property could be `undefined`. + +## Contributing + +To edit the database, only make PRs against `src/custom.json` or +`src/custom-suffix.json`. + +To update the build, run `npm run update`. + +## Adding Custom Media Types + +The best way to get new media types included in this library is to register +them with the IANA. The community registration procedure is outlined in +[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types +registered with the IANA are automatically pulled into this library. + +[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg +[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg +[npm-url]: https://npmjs.org/package/mime-db +[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg +[travis-url]: https://travis-ci.org/jshttp/mime-db +[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master +[node-image]: https://img.shields.io/node/v/mime-db.svg +[node-url]: http://nodejs.org/download/ diff --git a/node_modules/accepts/node_modules/mime-db/db.json b/node_modules/accepts/node_modules/mime-db/db.json new file mode 100644 index 0000000..5f111be --- /dev/null +++ b/node_modules/accepts/node_modules/mime-db/db.json @@ -0,0 +1,6359 @@ +{ + "application/1d-interleaved-parityfec": { + "source": "iana" + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana" + }, + "application/3gpp-ims+xml": { + "source": "iana" + }, + "application/a2l": { + "source": "iana" + }, + "application/activemessage": { + "source": "iana" + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/aml": { + "source": "iana" + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"] + }, + "application/applefile": { + "source": "iana" + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"] + }, + "application/atf": { + "source": "iana" + }, + "application/atfx": { + "source": "iana" + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"] + }, + "application/atomcat+xml": { + "source": "iana", + "extensions": ["atomcat"] + }, + "application/atomdeleted+xml": { + "source": "iana" + }, + "application/atomicmail": { + "source": "iana" + }, + "application/atomsvc+xml": { + "source": "iana", + "extensions": ["atomsvc"] + }, + "application/atxml": { + "source": "iana" + }, + "application/auth-policy+xml": { + "source": "iana" + }, + "application/bacnet-xdd+zip": { + "source": "iana" + }, + "application/batch-smtp": { + "source": "iana" + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/beep+xml": { + "source": "iana" + }, + "application/calendar+json": { + "source": "iana", + "compressible": true + }, + "application/calendar+xml": { + "source": "iana" + }, + "application/call-completion": { + "source": "iana" + }, + "application/cals-1840": { + "source": "iana" + }, + "application/cbor": { + "source": "iana" + }, + "application/ccmp+xml": { + "source": "iana" + }, + "application/ccxml+xml": { + "source": "iana", + "extensions": ["ccxml"] + }, + "application/cdfx+xml": { + "source": "iana" + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"] + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"] + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"] + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"] + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"] + }, + "application/cea": { + "source": "iana" + }, + "application/cea-2018+xml": { + "source": "iana" + }, + "application/cellml+xml": { + "source": "iana" + }, + "application/cfw": { + "source": "iana" + }, + "application/cms": { + "source": "iana" + }, + "application/cnrp+xml": { + "source": "iana" + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true + }, + "application/commonground": { + "source": "iana" + }, + "application/conference-info+xml": { + "source": "iana" + }, + "application/cpl+xml": { + "source": "iana" + }, + "application/csrattrs": { + "source": "iana" + }, + "application/csta+xml": { + "source": "iana" + }, + "application/cstadata+xml": { + "source": "iana" + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"] + }, + "application/cybercash": { + "source": "iana" + }, + "application/dart": { + "compressible": true + }, + "application/dash+xml": { + "source": "iana", + "extensions": ["mdp"] + }, + "application/dashdelta": { + "source": "iana" + }, + "application/davmount+xml": { + "source": "iana", + "extensions": ["davmount"] + }, + "application/dca-rft": { + "source": "iana" + }, + "application/dcd": { + "source": "iana" + }, + "application/dec-dx": { + "source": "iana" + }, + "application/dialog-info+xml": { + "source": "iana" + }, + "application/dicom": { + "source": "iana" + }, + "application/dii": { + "source": "iana" + }, + "application/dit": { + "source": "iana" + }, + "application/dns": { + "source": "iana" + }, + "application/docbook+xml": { + "source": "apache", + "extensions": ["dbk"] + }, + "application/dskpp+xml": { + "source": "iana" + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"] + }, + "application/dssc+xml": { + "source": "iana", + "extensions": ["xdssc"] + }, + "application/dvcs": { + "source": "iana" + }, + "application/ecmascript": { + "source": "iana", + "compressible": true, + "extensions": ["ecma"] + }, + "application/edi-consent": { + "source": "iana" + }, + "application/edi-x12": { + "source": "iana", + "compressible": false + }, + "application/edifact": { + "source": "iana", + "compressible": false + }, + "application/emma+xml": { + "source": "iana", + "extensions": ["emma"] + }, + "application/emotionml+xml": { + "source": "iana" + }, + "application/encaprtp": { + "source": "iana" + }, + "application/epp+xml": { + "source": "iana" + }, + "application/epub+zip": { + "source": "iana", + "extensions": ["epub"] + }, + "application/eshop": { + "source": "iana" + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"] + }, + "application/fastinfoset": { + "source": "iana" + }, + "application/fastsoap": { + "source": "iana" + }, + "application/fdt+xml": { + "source": "iana" + }, + "application/fits": { + "source": "iana" + }, + "application/font-sfnt": { + "source": "iana" + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"] + }, + "application/font-woff": { + "source": "iana", + "compressible": false, + "extensions": ["woff"] + }, + "application/font-woff2": { + "compressible": false, + "extensions": ["woff2"] + }, + "application/framework-attributes+xml": { + "source": "iana" + }, + "application/gml+xml": { + "source": "apache", + "extensions": ["gml"] + }, + "application/gpx+xml": { + "source": "apache", + "extensions": ["gpx"] + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"] + }, + "application/gzip": { + "source": "iana", + "compressible": false + }, + "application/h224": { + "source": "iana" + }, + "application/held+xml": { + "source": "iana" + }, + "application/http": { + "source": "iana" + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"] + }, + "application/ibe-key-request+xml": { + "source": "iana" + }, + "application/ibe-pkg-reply+xml": { + "source": "iana" + }, + "application/ibe-pp-data": { + "source": "iana" + }, + "application/iges": { + "source": "iana" + }, + "application/im-iscomposing+xml": { + "source": "iana" + }, + "application/index": { + "source": "iana" + }, + "application/index.cmd": { + "source": "iana" + }, + "application/index.obj": { + "source": "iana" + }, + "application/index.response": { + "source": "iana" + }, + "application/index.vnd": { + "source": "iana" + }, + "application/inkml+xml": { + "source": "iana", + "extensions": ["ink","inkml"] + }, + "application/iotp": { + "source": "iana" + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"] + }, + "application/ipp": { + "source": "iana" + }, + "application/isup": { + "source": "iana" + }, + "application/its+xml": { + "source": "iana" + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar"] + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"] + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"] + }, + "application/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js"] + }, + "application/jose": { + "source": "iana" + }, + "application/jose+json": { + "source": "iana", + "compressible": true + }, + "application/jrd+json": { + "source": "iana", + "compressible": true + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json","map"] + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true + }, + "application/json-seq": { + "source": "iana" + }, + "application/json5": { + "extensions": ["json5"] + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"] + }, + "application/jwk+json": { + "source": "iana", + "compressible": true + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true + }, + "application/jwt": { + "source": "iana" + }, + "application/kpml-request+xml": { + "source": "iana" + }, + "application/kpml-response+xml": { + "source": "iana" + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"] + }, + "application/link-format": { + "source": "iana" + }, + "application/load-control+xml": { + "source": "iana" + }, + "application/lost+xml": { + "source": "iana", + "extensions": ["lostxml"] + }, + "application/lostsync+xml": { + "source": "iana" + }, + "application/lxf": { + "source": "iana" + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"] + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"] + }, + "application/macwriteii": { + "source": "iana" + }, + "application/mads+xml": { + "source": "iana", + "extensions": ["mads"] + }, + "application/manifest+json": { + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"] + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"] + }, + "application/marcxml+xml": { + "source": "iana", + "extensions": ["mrcx"] + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma","nb","mb"] + }, + "application/mathml+xml": { + "source": "iana", + "extensions": ["mathml"] + }, + "application/mathml-content+xml": { + "source": "iana" + }, + "application/mathml-presentation+xml": { + "source": "iana" + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana" + }, + "application/mbms-deregister+xml": { + "source": "iana" + }, + "application/mbms-envelope+xml": { + "source": "iana" + }, + "application/mbms-msk+xml": { + "source": "iana" + }, + "application/mbms-msk-response+xml": { + "source": "iana" + }, + "application/mbms-protection-description+xml": { + "source": "iana" + }, + "application/mbms-reception-report+xml": { + "source": "iana" + }, + "application/mbms-register+xml": { + "source": "iana" + }, + "application/mbms-register-response+xml": { + "source": "iana" + }, + "application/mbms-schedule+xml": { + "source": "iana" + }, + "application/mbms-user-service-description+xml": { + "source": "iana" + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"] + }, + "application/media-policy-dataset+xml": { + "source": "iana" + }, + "application/media_control+xml": { + "source": "iana" + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "extensions": ["mscml"] + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true + }, + "application/metalink+xml": { + "source": "apache", + "extensions": ["metalink"] + }, + "application/metalink4+xml": { + "source": "iana", + "extensions": ["meta4"] + }, + "application/mets+xml": { + "source": "iana", + "extensions": ["mets"] + }, + "application/mf4": { + "source": "iana" + }, + "application/mikey": { + "source": "iana" + }, + "application/mods+xml": { + "source": "iana", + "extensions": ["mods"] + }, + "application/moss-keys": { + "source": "iana" + }, + "application/moss-signature": { + "source": "iana" + }, + "application/mosskey-data": { + "source": "iana" + }, + "application/mosskey-request": { + "source": "iana" + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21","mp21"] + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4s","m4p"] + }, + "application/mpeg4-generic": { + "source": "iana" + }, + "application/mpeg4-iod": { + "source": "iana" + }, + "application/mpeg4-iod-xmt": { + "source": "iana" + }, + "application/mrb-consumer+xml": { + "source": "iana" + }, + "application/mrb-publish+xml": { + "source": "iana" + }, + "application/msc-ivr+xml": { + "source": "iana" + }, + "application/msc-mixer+xml": { + "source": "iana" + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc","dot"] + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"] + }, + "application/nasdata": { + "source": "iana" + }, + "application/news-checkgroups": { + "source": "iana" + }, + "application/news-groupinfo": { + "source": "iana" + }, + "application/news-transmission": { + "source": "iana" + }, + "application/nlsml+xml": { + "source": "iana" + }, + "application/nss": { + "source": "iana" + }, + "application/ocsp-request": { + "source": "iana" + }, + "application/ocsp-response": { + "source": "iana" + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","buffer"] + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"] + }, + "application/odx": { + "source": "iana" + }, + "application/oebps-package+xml": { + "source": "iana", + "extensions": ["opf"] + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"] + }, + "application/omdoc+xml": { + "source": "apache", + "extensions": ["omdoc"] + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc","onetoc2","onetmp","onepkg"] + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"] + }, + "application/p2p-overlay+xml": { + "source": "iana" + }, + "application/parityfec": { + "source": "iana" + }, + "application/patch-ops-error+xml": { + "source": "iana", + "extensions": ["xer"] + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"] + }, + "application/pdx": { + "source": "iana" + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"] + }, + "application/pgp-keys": { + "source": "iana" + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["asc","sig"] + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"] + }, + "application/pidf+xml": { + "source": "iana" + }, + "application/pidf-diff+xml": { + "source": "iana" + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"] + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m","p7c"] + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"] + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"] + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"] + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"] + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"] + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"] + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"] + }, + "application/pls+xml": { + "source": "iana", + "extensions": ["pls"] + }, + "application/poc-settings+xml": { + "source": "iana" + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai","eps","ps"] + }, + "application/provenance+xml": { + "source": "iana" + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana" + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"] + }, + "application/prs.hpub+zip": { + "source": "iana" + }, + "application/prs.nprend": { + "source": "iana" + }, + "application/prs.plucker": { + "source": "iana" + }, + "application/prs.rdf-xml-crypt": { + "source": "iana" + }, + "application/prs.xsf+xml": { + "source": "iana" + }, + "application/pskc+xml": { + "source": "iana", + "extensions": ["pskcxml"] + }, + "application/qsig": { + "source": "iana" + }, + "application/raptorfec": { + "source": "iana" + }, + "application/rdap+json": { + "source": "iana", + "compressible": true + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf"] + }, + "application/reginfo+xml": { + "source": "iana", + "extensions": ["rif"] + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"] + }, + "application/remote-printing": { + "source": "iana" + }, + "application/reputon+json": { + "source": "iana", + "compressible": true + }, + "application/resource-lists+xml": { + "source": "iana", + "extensions": ["rl"] + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "extensions": ["rld"] + }, + "application/riscos": { + "source": "iana" + }, + "application/rlmi+xml": { + "source": "iana" + }, + "application/rls-services+xml": { + "source": "iana", + "extensions": ["rs"] + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"] + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"] + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"] + }, + "application/rpki-updown": { + "source": "iana" + }, + "application/rsd+xml": { + "source": "apache", + "extensions": ["rsd"] + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"] + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "application/rtploopback": { + "source": "iana" + }, + "application/rtx": { + "source": "iana" + }, + "application/samlassertion+xml": { + "source": "iana" + }, + "application/samlmetadata+xml": { + "source": "iana" + }, + "application/sbml+xml": { + "source": "iana", + "extensions": ["sbml"] + }, + "application/scaip+xml": { + "source": "iana" + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"] + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"] + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"] + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"] + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"] + }, + "application/sep+xml": { + "source": "iana" + }, + "application/sep-exi": { + "source": "iana" + }, + "application/session-info": { + "source": "iana" + }, + "application/set-payment": { + "source": "iana" + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"] + }, + "application/set-registration": { + "source": "iana" + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"] + }, + "application/sgml": { + "source": "iana" + }, + "application/sgml-open-catalog": { + "source": "iana" + }, + "application/shf+xml": { + "source": "iana", + "extensions": ["shf"] + }, + "application/sieve": { + "source": "iana" + }, + "application/simple-filter+xml": { + "source": "iana" + }, + "application/simple-message-summary": { + "source": "iana" + }, + "application/simplesymbolcontainer": { + "source": "iana" + }, + "application/slate": { + "source": "iana" + }, + "application/smil": { + "source": "iana" + }, + "application/smil+xml": { + "source": "iana", + "extensions": ["smi","smil"] + }, + "application/smpte336m": { + "source": "iana" + }, + "application/soap+fastinfoset": { + "source": "iana" + }, + "application/soap+xml": { + "source": "iana", + "compressible": true + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"] + }, + "application/sparql-results+xml": { + "source": "iana", + "extensions": ["srx"] + }, + "application/spirits-event+xml": { + "source": "iana" + }, + "application/sql": { + "source": "iana" + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"] + }, + "application/srgs+xml": { + "source": "iana", + "extensions": ["grxml"] + }, + "application/sru+xml": { + "source": "iana", + "extensions": ["sru"] + }, + "application/ssdl+xml": { + "source": "apache", + "extensions": ["ssdl"] + }, + "application/ssml+xml": { + "source": "iana", + "extensions": ["ssml"] + }, + "application/tamp-apex-update": { + "source": "iana" + }, + "application/tamp-apex-update-confirm": { + "source": "iana" + }, + "application/tamp-community-update": { + "source": "iana" + }, + "application/tamp-community-update-confirm": { + "source": "iana" + }, + "application/tamp-error": { + "source": "iana" + }, + "application/tamp-sequence-adjust": { + "source": "iana" + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana" + }, + "application/tamp-status-query": { + "source": "iana" + }, + "application/tamp-status-response": { + "source": "iana" + }, + "application/tamp-update": { + "source": "iana" + }, + "application/tamp-update-confirm": { + "source": "iana" + }, + "application/tar": { + "compressible": true + }, + "application/tei+xml": { + "source": "iana", + "extensions": ["tei","teicorpus"] + }, + "application/thraud+xml": { + "source": "iana", + "extensions": ["tfi"] + }, + "application/timestamp-query": { + "source": "iana" + }, + "application/timestamp-reply": { + "source": "iana" + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"] + }, + "application/ttml+xml": { + "source": "iana" + }, + "application/tve-trigger": { + "source": "iana" + }, + "application/ulpfec": { + "source": "iana" + }, + "application/urc-grpsheet+xml": { + "source": "iana" + }, + "application/urc-ressheet+xml": { + "source": "iana" + }, + "application/urc-targetdesc+xml": { + "source": "iana" + }, + "application/urc-uisocketdesc+xml": { + "source": "iana" + }, + "application/vcard+json": { + "source": "iana", + "compressible": true + }, + "application/vcard+xml": { + "source": "iana" + }, + "application/vemmi": { + "source": "iana" + }, + "application/vividence.scriptfile": { + "source": "apache" + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"] + }, + "application/vnd.3gpp.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana" + }, + "application/vnd.3gpp2.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"] + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"] + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"] + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"] + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc","acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "extensions": ["air"] + }, + "application/vnd.adobe.flash.movie": { + "source": "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"] + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp","fxpl"] + }, + "application/vnd.adobe.partial-upload": { + "source": "iana" + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "extensions": ["xdp"] + }, + "application/vnd.adobe.xfdf": { + "source": "iana", + "extensions": ["xfdf"] + }, + "application/vnd.aether.imp": { + "source": "iana" + }, + "application/vnd.ah-barcode": { + "source": "iana" + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"] + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"] + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"] + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana" + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"] + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"] + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"] + }, + "application/vnd.apache.thrift.binary": { + "source": "iana" + }, + "application/vnd.apache.thrift.compact": { + "source": "iana" + }, + "application/vnd.apache.thrift.json": { + "source": "iana" + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "extensions": ["mpkg"] + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"] + }, + "application/vnd.arastra.swi": { + "source": "iana" + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"] + }, + "application/vnd.artsquare": { + "source": "iana" + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"] + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"] + }, + "application/vnd.autopackage": { + "source": "iana" + }, + "application/vnd.avistar+xml": { + "source": "iana" + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana" + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana" + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana" + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana" + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"] + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"] + }, + "application/vnd.cab-jscript": { + "source": "iana" + }, + "application/vnd.canon-cpdl": { + "source": "iana" + }, + "application/vnd.canon-lips": { + "source": "iana" + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana" + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana" + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "extensions": ["cdxml"] + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"] + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana" + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana" + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"] + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"] + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g","c4d","c4f","c4p","c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"] + }, + "application/vnd.coffeescript": { + "source": "iana" + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.commerce-battelle": { + "source": "iana" + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"] + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"] + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"] + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"] + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "extensions": ["wbs"] + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"] + }, + "application/vnd.ctct.ws+xml": { + "source": "iana" + }, + "application/vnd.cups-pdf": { + "source": "iana" + }, + "application/vnd.cups-postscript": { + "source": "iana" + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"] + }, + "application/vnd.cups-raster": { + "source": "iana" + }, + "application/vnd.cups-raw": { + "source": "iana" + }, + "application/vnd.curl": { + "source": "iana" + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"] + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana" + }, + "application/vnd.cybank": { + "source": "iana" + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"] + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"] + }, + "application/vnd.debian.binary-package": { + "source": "iana" + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf","uvvf","uvd","uvvd"] + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "extensions": ["uvt","uvvt"] + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx","uvvx"] + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz","uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"] + }, + "application/vnd.desmume-movie": { + "source": "iana" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana" + }, + "application/vnd.dm.delegation+xml": { + "source": "iana" + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"] + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + "source": "iana" + }, + "application/vnd.dolby.mobile.2": { + "source": "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana" + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"] + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"] + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"] + }, + "application/vnd.dtg.local": { + "source": "iana" + }, + "application/vnd.dtg.local.flash": { + "source": "iana" + }, + "application/vnd.dtg.local.html": { + "source": "iana" + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"] + }, + "application/vnd.dvb.dvbj": { + "source": "iana" + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana" + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana" + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana" + }, + "application/vnd.dvb.pfr": { + "source": "iana" + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"] + }, + "application/vnd.dxr": { + "source": "iana" + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"] + }, + "application/vnd.dzr": { + "source": "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana" + }, + "application/vnd.ecdis-update": { + "source": "iana" + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"] + }, + "application/vnd.ecowin.filerequest": { + "source": "iana" + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana" + }, + "application/vnd.ecowin.series": { + "source": "iana" + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana" + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana" + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"] + }, + "application/vnd.enphase.envoy": { + "source": "iana" + }, + "application/vnd.eprints.data+xml": { + "source": "iana" + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"] + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"] + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"] + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"] + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + "source": "iana" + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "extensions": ["es3","et3"] + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana" + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana" + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana" + }, + "application/vnd.etsi.cug+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana" + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana" + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana" + }, + "application/vnd.etsi.mheg5": { + "source": "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana" + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana" + }, + "application/vnd.etsi.sci+xml": { + "source": "iana" + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana" + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana" + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana" + }, + "application/vnd.etsi.tsl.der": { + "source": "iana" + }, + "application/vnd.eudora.data": { + "source": "iana" + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"] + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"] + }, + "application/vnd.f-secure.mobile": { + "source": "iana" + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana" + }, + "application/vnd.fdf": { + "source": "iana", + "extensions": ["fdf"] + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"] + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed","dataless"] + }, + "application/vnd.ffsns": { + "source": "iana" + }, + "application/vnd.fints": { + "source": "iana" + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"] + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana" + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm","frame","maker","book"] + }, + "application/vnd.frogans.fnc": { + "source": "iana", + "extensions": ["fnc"] + }, + "application/vnd.frogans.ltf": { + "source": "iana", + "extensions": ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"] + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana" + }, + "application/vnd.fujixerox.art4": { + "source": "iana" + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana" + }, + "application/vnd.fut-misnet": { + "source": "iana" + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"] + }, + "application/vnd.geo+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geocube+xml": { + "source": "iana" + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"] + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"] + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex","gre"] + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"] + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"] + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"] + }, + "application/vnd.gerber": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana" + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"] + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"] + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana" + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana" + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana" + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf","gqs"] + }, + "application/vnd.gridmp": { + "source": "iana" + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"] + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"] + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"] + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"] + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"] + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"] + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"] + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hal+xml": { + "source": "iana", + "extensions": ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "extensions": ["zmm"] + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"] + }, + "application/vnd.hcl-bireports": { + "source": "iana" + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"] + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"] + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"] + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"] + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"] + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"] + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"] + }, + "application/vnd.httphone": { + "source": "iana" + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"] + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana" + }, + "application/vnd.ibm.afplinedata": { + "source": "iana" + }, + "application/vnd.ibm.electronic-media": { + "source": "iana" + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"] + }, + "application/vnd.ibm.modcap": { + "source": "iana", + "extensions": ["afp","listafp","list3820"] + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"] + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"] + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc","icm"] + }, + "application/vnd.ieee.1905": { + "source": "iana" + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"] + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"] + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana" + }, + "application/vnd.informix-visionary": { + "source": "iana" + }, + "application/vnd.infotech.project": { + "source": "iana" + }, + "application/vnd.infotech.project+xml": { + "source": "iana" + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana" + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"] + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw","xpx"] + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"] + }, + "application/vnd.intertrust.digibox": { + "source": "iana" + }, + "application/vnd.intertrust.nncp": { + "source": "iana" + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"] + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana" + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana" + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "extensions": ["irp"] + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"] + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"] + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"] + }, + "application/vnd.japannet-directory-service": { + "source": "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-registration": { + "source": "iana" + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-verification": { + "source": "iana" + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"] + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"] + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana" + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz","ktr"] + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"] + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"] + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"] + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"] + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"] + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr","kpt"] + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"] + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd","kwt"] + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"] + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"] + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne","knp"] + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp","skd","skt","skm"] + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"] + }, + "application/vnd.las.las+xml": { + "source": "iana", + "extensions": ["lasxml"] + }, + "application/vnd.liberty-request+xml": { + "source": "iana" + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "extensions": ["lbe"] + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"] + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"] + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"] + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"] + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"] + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"] + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"] + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"] + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana" + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana" + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana" + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana" + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana" + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"] + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + "source": "iana" + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"] + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"] + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"] + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana" + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana" + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"] + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"] + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"] + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"] + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"] + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"] + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"] + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"] + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana" + }, + "application/vnd.motorola.iprm": { + "source": "iana" + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"] + }, + "application/vnd.ms-3mfdocument": { + "source": "iana" + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"] + }, + "application/vnd.ms-asf": { + "source": "iana" + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache" + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"] + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"] + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"] + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"] + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana" + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"] + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache" + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"] + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana" + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt","pps","pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"] + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache" + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp","mpt"] + }, + "application/vnd.ms-tnef": { + "source": "iana" + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"] + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps","wks","wcm","wdb"] + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"] + }, + "application/vnd.msa-disk-image": { + "source": "iana" + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"] + }, + "application/vnd.msign": { + "source": "iana" + }, + "application/vnd.multiad.creator": { + "source": "iana" + }, + "application/vnd.multiad.creator.cif": { + "source": "iana" + }, + "application/vnd.music-niff": { + "source": "iana" + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"] + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"] + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"] + }, + "application/vnd.ncd.control": { + "source": "iana" + }, + "application/vnd.ncd.reference": { + "source": "iana" + }, + "application/vnd.nervana": { + "source": "iana" + }, + "application/vnd.netfpx": { + "source": "iana" + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"] + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana" + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana" + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf","nitf"] + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"] + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"] + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"] + }, + "application/vnd.nokia.catalogs": { + "source": "iana" + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.conml+xml": { + "source": "iana" + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana" + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana" + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana" + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana" + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "iana", + "extensions": ["n-gage"] + }, + "application/vnd.nokia.ncd": { + "source": "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana" + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"] + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"] + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"] + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"] + }, + "application/vnd.ntt-local.content-share": { + "source": "iana" + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana" + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + "source": "iana", + "extensions": ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"] + }, + "application/vnd.obn": { + "source": "iana" + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana" + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana" + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana" + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana" + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana" + }, + "application/vnd.oipf.pae.gem": { + "source": "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana" + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana" + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana" + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana" + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"] + }, + "application/vnd.oma-scws-config": { + "source": "iana" + }, + "application/vnd.oma-scws-http-request": { + "source": "iana" + }, + "application/vnd.oma-scws-http-response": { + "source": "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana" + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana" + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana" + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana" + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana" + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana" + }, + "application/vnd.oma.dcd": { + "source": "iana" + }, + "application/vnd.oma.dcdc": { + "source": "iana" + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "extensions": ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana" + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana" + }, + "application/vnd.oma.pal+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana" + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana" + }, + "application/vnd.oma.push": { + "source": "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana" + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana" + }, + "application/vnd.omads-email+xml": { + "source": "iana" + }, + "application/vnd.omads-file+xml": { + "source": "iana" + }, + "application/vnd.omads-folder+xml": { + "source": "iana" + }, + "application/vnd.omaloc-supl-init": { + "source": "iana" + }, + "application/vnd.openeye.oeb": { + "source": "iana" + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"] + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml-template": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "apache", + "extensions": ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml-template": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "apache", + "extensions": ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml-template": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "apache", + "extensions": ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana" + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana" + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.orange.indata": { + "source": "iana" + }, + "application/vnd.osa.netdeploy": { + "source": "iana" + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"] + }, + "application/vnd.osgi.bundle": { + "source": "iana" + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"] + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana" + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb","pqa","oprc"] + }, + "application/vnd.panoply": { + "source": "iana" + }, + "application/vnd.paos+xml": { + "source": "iana" + }, + "application/vnd.paos.xml": { + "source": "apache" + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"] + }, + "application/vnd.pcos": { + "source": "iana" + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"] + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + "source": "iana" + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"] + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana" + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"] + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + "source": "iana" + }, + "application/vnd.powerbuilder7": { + "source": "iana" + }, + "application/vnd.powerbuilder7-s": { + "source": "iana" + }, + "application/vnd.powerbuilder75": { + "source": "iana" + }, + "application/vnd.powerbuilder75-s": { + "source": "iana" + }, + "application/vnd.preminet": { + "source": "iana" + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"] + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"] + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"] + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + "source": "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana" + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana" + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana" + }, + "application/vnd.radisys.moml+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana" + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana" + }, + "application/vnd.rainstor.data": { + "source": "iana" + }, + "application/vnd.rapid": { + "source": "iana" + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"] + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "extensions": ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + "source": "iana" + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"] + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"] + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "extensions": ["link66"] + }, + "application/vnd.rs-274x": { + "source": "iana" + }, + "application/vnd.ruckus.download": { + "source": "iana" + }, + "application/vnd.s3sms": { + "source": "iana" + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"] + }, + "application/vnd.sbm.cid": { + "source": "iana" + }, + "application/vnd.sbm.mid2": { + "source": "iana" + }, + "application/vnd.scribus": { + "source": "iana" + }, + "application/vnd.sealed.3df": { + "source": "iana" + }, + "application/vnd.sealed.csf": { + "source": "iana" + }, + "application/vnd.sealed.doc": { + "source": "iana" + }, + "application/vnd.sealed.eml": { + "source": "iana" + }, + "application/vnd.sealed.mht": { + "source": "iana" + }, + "application/vnd.sealed.net": { + "source": "iana" + }, + "application/vnd.sealed.ppt": { + "source": "iana" + }, + "application/vnd.sealed.tiff": { + "source": "iana" + }, + "application/vnd.sealed.xls": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana" + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"] + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"] + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"] + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"] + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"] + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"] + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"] + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd","twds"] + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"] + }, + "application/vnd.smart.notebook": { + "source": "iana" + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"] + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana" + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana" + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "extensions": ["sdkm","sdkd"] + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"] + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"] + }, + "application/vnd.sss-cod": { + "source": "iana" + }, + "application/vnd.sss-dtf": { + "source": "iana" + }, + "application/vnd.sss-ntf": { + "source": "iana" + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"] + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"] + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"] + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"] + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw","vor"] + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"] + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"] + }, + "application/vnd.street-stream": { + "source": "iana" + }, + "application/vnd.sun.wadl+xml": { + "source": "iana" + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"] + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"] + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"] + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"] + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"] + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus","susp"] + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"] + }, + "application/vnd.swiftview-ics": { + "source": "iana" + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis","sisx"] + }, + "application/vnd.syncml+xml": { + "source": "iana", + "extensions": ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "extensions": ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "extensions": ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana" + }, + "application/vnd.syncml.ds.notification": { + "source": "iana" + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"] + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap","cap","dmp"] + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana" + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"] + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"] + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"] + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"] + }, + "application/vnd.truedoc": { + "source": "iana" + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana" + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd","ufdl"] + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"] + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"] + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"] + }, + "application/vnd.uoml+xml": { + "source": "iana", + "extensions": ["uoml"] + }, + "application/vnd.uplanet.alert": { + "source": "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.channel": { + "source": "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.list": { + "source": "iana" + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.signal": { + "source": "iana" + }, + "application/vnd.valve.source.material": { + "source": "iana" + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"] + }, + "application/vnd.vd-study": { + "source": "iana" + }, + "application/vnd.vectorworks": { + "source": "iana" + }, + "application/vnd.verimatrix.vcas": { + "source": "iana" + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana" + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd","vst","vss","vsw"] + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"] + }, + "application/vnd.vividence.scriptfile": { + "source": "iana" + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"] + }, + "application/vnd.wap.sic": { + "source": "iana" + }, + "application/vnd.wap.slc": { + "source": "iana" + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "extensions": ["wbxml"] + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"] + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"] + }, + "application/vnd.wfa.p2p": { + "source": "iana" + }, + "application/vnd.wfa.wsc": { + "source": "iana" + }, + "application/vnd.windows.devicepairing": { + "source": "iana" + }, + "application/vnd.wmc": { + "source": "iana" + }, + "application/vnd.wmf.bootstrap": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana" + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"] + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"] + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana" + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana" + }, + "application/vnd.wv.csp+xml": { + "source": "iana" + }, + "application/vnd.wv.ssp+xml": { + "source": "iana" + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"] + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"] + }, + "application/vnd.xfdl.webform": { + "source": "iana" + }, + "application/vnd.xmi+xml": { + "source": "iana" + }, + "application/vnd.xmpie.cpkg": { + "source": "iana" + }, + "application/vnd.xmpie.dpkg": { + "source": "iana" + }, + "application/vnd.xmpie.plan": { + "source": "iana" + }, + "application/vnd.xmpie.ppkg": { + "source": "iana" + }, + "application/vnd.xmpie.xlim": { + "source": "iana" + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "extensions": ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana" + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana" + }, + "application/vnd.yaoweme": { + "source": "iana" + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"] + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir","zirz"] + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "extensions": ["zaz"] + }, + "application/voicexml+xml": { + "source": "iana", + "extensions": ["vxml"] + }, + "application/vq-rtcpxr": { + "source": "iana" + }, + "application/watcherinfo+xml": { + "source": "iana" + }, + "application/whoispp-query": { + "source": "iana" + }, + "application/whoispp-response": { + "source": "iana" + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"] + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"] + }, + "application/wita": { + "source": "iana" + }, + "application/wordperfect5.1": { + "source": "iana" + }, + "application/wsdl+xml": { + "source": "iana", + "extensions": ["wsdl"] + }, + "application/wspolicy+xml": { + "source": "iana", + "extensions": ["wspolicy"] + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"] + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"] + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"] + }, + "application/x-amf": { + "source": "apache" + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"] + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab","x32","u32","vox"] + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"] + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"] + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"] + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"] + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb","blorb"] + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"] + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2","boz"] + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr","cba","cbt","cbz","cb7"] + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"] + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"] + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"] + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"] + }, + "application/x-chrome-extension": { + "extensions": ["crx"] + }, + "application/x-compress": { + "source": "apache" + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"] + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"] + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"] + }, + "application/x-deb": { + "compressible": false + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb","udeb"] + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"] + }, + "application/x-director": { + "source": "apache", + "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"] + }, + "application/x-dtbncx+xml": { + "source": "apache", + "extensions": ["ncx"] + }, + "application/x-dtbook+xml": { + "source": "apache", + "extensions": ["dtb"] + }, + "application/x-dtbresource+xml": { + "source": "apache", + "extensions": ["res"] + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"] + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"] + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"] + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"] + }, + "application/x-font-dos": { + "source": "apache" + }, + "application/x-font-framemaker": { + "source": "apache" + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"] + }, + "application/x-font-libgrx": { + "source": "apache" + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"] + }, + "application/x-font-otf": { + "source": "apache", + "compressible": true, + "extensions": ["otf"] + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"] + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"] + }, + "application/x-font-speedo": { + "source": "apache" + }, + "application/x-font-sunos-news": { + "source": "apache" + }, + "application/x-font-ttf": { + "source": "apache", + "compressible": true, + "extensions": ["ttf","ttc"] + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa","pfb","pfm","afm"] + }, + "application/x-font-vfont": { + "source": "apache" + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"] + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"] + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"] + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"] + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"] + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"] + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"] + }, + "application/x-gzip": { + "source": "apache" + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"] + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"] + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"] + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"] + }, + "application/x-javascript": { + "compressible": true + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"] + }, + "application/x-lua-bytecode": { + "extensions": ["luac"] + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh","lha"] + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"] + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc","mobi"] + }, + "application/x-mpegurl": { + "compressible": false + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"] + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"] + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"] + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"] + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"] + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"] + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"] + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"] + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"] + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe","dll","com","bat","msi"] + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb","m13","m14"] + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf","wmz","emf","emz"] + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"] + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"] + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"] + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"] + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"] + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc","cdf"] + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"] + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"] + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12","pfx"] + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b","spc"] + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"] + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"] + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"] + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"] + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"] + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"] + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"] + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"] + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"] + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"] + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"] + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"] + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"] + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"] + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"] + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"] + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl"] + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"] + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"] + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo","texi"] + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"] + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"] + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"] + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"] + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true + }, + "application/x-x509-ca-cert": { + "source": "apache", + "extensions": ["der","crt"] + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"] + }, + "application/x-xliff+xml": { + "source": "apache", + "extensions": ["xlf"] + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"] + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"] + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] + }, + "application/x400-bp": { + "source": "iana" + }, + "application/xacml+xml": { + "source": "iana" + }, + "application/xaml+xml": { + "source": "apache", + "extensions": ["xaml"] + }, + "application/xcap-att+xml": { + "source": "iana" + }, + "application/xcap-caps+xml": { + "source": "iana" + }, + "application/xcap-diff+xml": { + "source": "iana", + "extensions": ["xdf"] + }, + "application/xcap-el+xml": { + "source": "iana" + }, + "application/xcap-error+xml": { + "source": "iana" + }, + "application/xcap-ns+xml": { + "source": "iana" + }, + "application/xcon-conference-info+xml": { + "source": "iana" + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana" + }, + "application/xenc+xml": { + "source": "iana", + "extensions": ["xenc"] + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml","xht"] + }, + "application/xhtml-voice+xml": { + "source": "apache" + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml","xsl","xsd"] + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"] + }, + "application/xml-external-parsed-entity": { + "source": "iana" + }, + "application/xml-patch+xml": { + "source": "iana" + }, + "application/xmpp+xml": { + "source": "iana" + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"] + }, + "application/xproc+xml": { + "source": "apache", + "extensions": ["xpl"] + }, + "application/xslt+xml": { + "source": "iana", + "extensions": ["xslt"] + }, + "application/xspf+xml": { + "source": "apache", + "extensions": ["xspf"] + }, + "application/xv+xml": { + "source": "iana", + "extensions": ["mxml","xhvml","xvml","xvm"] + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"] + }, + "application/yin+xml": { + "source": "iana", + "extensions": ["yin"] + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"] + }, + "application/zlib": { + "source": "iana" + }, + "audio/1d-interleaved-parityfec": { + "source": "iana" + }, + "audio/32kadpcm": { + "source": "iana" + }, + "audio/3gpp": { + "source": "iana" + }, + "audio/3gpp2": { + "source": "iana" + }, + "audio/ac3": { + "source": "iana" + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"] + }, + "audio/amr": { + "source": "iana" + }, + "audio/amr-wb": { + "source": "iana" + }, + "audio/amr-wb+": { + "source": "iana" + }, + "audio/aptx": { + "source": "iana" + }, + "audio/asc": { + "source": "iana" + }, + "audio/atrac-advanced-lossless": { + "source": "iana" + }, + "audio/atrac-x": { + "source": "iana" + }, + "audio/atrac3": { + "source": "iana" + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au","snd"] + }, + "audio/bv16": { + "source": "iana" + }, + "audio/bv32": { + "source": "iana" + }, + "audio/clearmode": { + "source": "iana" + }, + "audio/cn": { + "source": "iana" + }, + "audio/dat12": { + "source": "iana" + }, + "audio/dls": { + "source": "iana" + }, + "audio/dsr-es201108": { + "source": "iana" + }, + "audio/dsr-es202050": { + "source": "iana" + }, + "audio/dsr-es202211": { + "source": "iana" + }, + "audio/dsr-es202212": { + "source": "iana" + }, + "audio/dv": { + "source": "iana" + }, + "audio/dvi4": { + "source": "iana" + }, + "audio/eac3": { + "source": "iana" + }, + "audio/encaprtp": { + "source": "iana" + }, + "audio/evrc": { + "source": "iana" + }, + "audio/evrc-qcp": { + "source": "iana" + }, + "audio/evrc0": { + "source": "iana" + }, + "audio/evrc1": { + "source": "iana" + }, + "audio/evrcb": { + "source": "iana" + }, + "audio/evrcb0": { + "source": "iana" + }, + "audio/evrcb1": { + "source": "iana" + }, + "audio/evrcnw": { + "source": "iana" + }, + "audio/evrcnw0": { + "source": "iana" + }, + "audio/evrcnw1": { + "source": "iana" + }, + "audio/evrcwb": { + "source": "iana" + }, + "audio/evrcwb0": { + "source": "iana" + }, + "audio/evrcwb1": { + "source": "iana" + }, + "audio/fwdred": { + "source": "iana" + }, + "audio/g719": { + "source": "iana" + }, + "audio/g722": { + "source": "iana" + }, + "audio/g7221": { + "source": "iana" + }, + "audio/g723": { + "source": "iana" + }, + "audio/g726-16": { + "source": "iana" + }, + "audio/g726-24": { + "source": "iana" + }, + "audio/g726-32": { + "source": "iana" + }, + "audio/g726-40": { + "source": "iana" + }, + "audio/g728": { + "source": "iana" + }, + "audio/g729": { + "source": "iana" + }, + "audio/g7291": { + "source": "iana" + }, + "audio/g729d": { + "source": "iana" + }, + "audio/g729e": { + "source": "iana" + }, + "audio/gsm": { + "source": "iana" + }, + "audio/gsm-efr": { + "source": "iana" + }, + "audio/gsm-hr-08": { + "source": "iana" + }, + "audio/ilbc": { + "source": "iana" + }, + "audio/ip-mr_v2.5": { + "source": "iana" + }, + "audio/isac": { + "source": "apache" + }, + "audio/l16": { + "source": "iana" + }, + "audio/l20": { + "source": "iana" + }, + "audio/l24": { + "source": "iana", + "compressible": false + }, + "audio/l8": { + "source": "iana" + }, + "audio/lpc": { + "source": "iana" + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid","midi","kar","rmi"] + }, + "audio/mobile-xmf": { + "source": "iana" + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["mp4a","m4a"] + }, + "audio/mp4a-latm": { + "source": "iana" + }, + "audio/mpa": { + "source": "iana" + }, + "audio/mpa-robust": { + "source": "iana" + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] + }, + "audio/mpeg4-generic": { + "source": "iana" + }, + "audio/musepack": { + "source": "apache" + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga","ogg","spx"] + }, + "audio/opus": { + "source": "iana" + }, + "audio/parityfec": { + "source": "iana" + }, + "audio/pcma": { + "source": "iana" + }, + "audio/pcma-wb": { + "source": "iana" + }, + "audio/pcmu": { + "source": "iana" + }, + "audio/pcmu-wb": { + "source": "iana" + }, + "audio/prs.sid": { + "source": "iana" + }, + "audio/qcelp": { + "source": "iana" + }, + "audio/raptorfec": { + "source": "iana" + }, + "audio/red": { + "source": "iana" + }, + "audio/rtp-enc-aescm128": { + "source": "iana" + }, + "audio/rtp-midi": { + "source": "iana" + }, + "audio/rtploopback": { + "source": "iana" + }, + "audio/rtx": { + "source": "iana" + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"] + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"] + }, + "audio/smv": { + "source": "iana" + }, + "audio/smv-qcp": { + "source": "iana" + }, + "audio/smv0": { + "source": "iana" + }, + "audio/sp-midi": { + "source": "iana" + }, + "audio/speex": { + "source": "iana" + }, + "audio/t140c": { + "source": "iana" + }, + "audio/t38": { + "source": "iana" + }, + "audio/telephone-event": { + "source": "iana" + }, + "audio/tone": { + "source": "iana" + }, + "audio/uemclip": { + "source": "iana" + }, + "audio/ulpfec": { + "source": "iana" + }, + "audio/vdvi": { + "source": "iana" + }, + "audio/vmr-wb": { + "source": "iana" + }, + "audio/vnd.3gpp.iufp": { + "source": "iana" + }, + "audio/vnd.4sb": { + "source": "iana" + }, + "audio/vnd.audiokoz": { + "source": "iana" + }, + "audio/vnd.celp": { + "source": "iana" + }, + "audio/vnd.cisco.nse": { + "source": "iana" + }, + "audio/vnd.cmles.radio-events": { + "source": "iana" + }, + "audio/vnd.cns.anp1": { + "source": "iana" + }, + "audio/vnd.cns.inf1": { + "source": "iana" + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva","uvva"] + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"] + }, + "audio/vnd.dlna.adts": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana" + }, + "audio/vnd.dolby.mlp": { + "source": "iana" + }, + "audio/vnd.dolby.mps": { + "source": "iana" + }, + "audio/vnd.dolby.pl2": { + "source": "iana" + }, + "audio/vnd.dolby.pl2x": { + "source": "iana" + }, + "audio/vnd.dolby.pl2z": { + "source": "iana" + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana" + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"] + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"] + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"] + }, + "audio/vnd.dvb.file": { + "source": "iana" + }, + "audio/vnd.everad.plj": { + "source": "iana" + }, + "audio/vnd.hns.audio": { + "source": "iana" + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana" + }, + "audio/vnd.nortel.vbk": { + "source": "iana" + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + "source": "iana" + }, + "audio/vnd.qcelp": { + "source": "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana" + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"] + }, + "audio/vnd.rn-realaudio": { + "compressible": false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana" + }, + "audio/vnd.vmx.cvsd": { + "source": "iana" + }, + "audio/vnd.wave": { + "compressible": false + }, + "audio/vorbis": { + "source": "iana", + "compressible": false + }, + "audio/vorbis-config": { + "source": "iana" + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"] + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"] + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif","aiff","aifc"] + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"] + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"] + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"] + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"] + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"] + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"] + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram","ra"] + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"] + }, + "audio/x-tta": { + "source": "apache" + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"] + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"] + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"] + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"] + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"] + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"] + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"] + }, + "chemical/x-pdb": { + "source": "apache" + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"] + }, + "font/opentype": { + "compressible": true, + "extensions": ["otf"] + }, + "image/bmp": { + "source": "apache", + "compressible": true, + "extensions": ["bmp"] + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"] + }, + "image/fits": { + "source": "iana" + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"] + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"] + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"] + }, + "image/jp2": { + "source": "iana" + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg","jpg","jpe"] + }, + "image/jpm": { + "source": "iana" + }, + "image/jpx": { + "source": "iana" + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"] + }, + "image/naplps": { + "source": "iana" + }, + "image/pjpeg": { + "compressible": false + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"] + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif"] + }, + "image/prs.pti": { + "source": "iana" + }, + "image/pwg-raster": { + "source": "iana" + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"] + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg","svgz"] + }, + "image/t38": { + "source": "iana" + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tiff","tif"] + }, + "image/tiff-fx": { + "source": "iana" + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana" + }, + "image/vnd.cns.inf2": { + "source": "iana" + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi","uvvi","uvg","uvvg"] + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu","djv"] + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"] + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"] + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"] + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"] + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana" + }, + "image/vnd.microsoft.icon": { + "source": "iana" + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"] + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"] + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"] + }, + "image/vnd.radiance": { + "source": "iana" + }, + "image/vnd.sealed.png": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana" + }, + "image/vnd.svf": { + "source": "iana" + }, + "image/vnd.tencent.tap": { + "source": "iana" + }, + "image/vnd.valve.source.texture": { + "source": "iana" + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"] + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"] + }, + "image/vnd.zbrush.pcx": { + "source": "iana" + }, + "image/webp": { + "source": "apache", + "extensions": ["webp"] + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"] + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"] + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"] + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh","fhc","fh4","fh5","fh7"] + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"] + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"] + }, + "image/x-ms-bmp": { + "compressible": true, + "extensions": ["bmp"] + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"] + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic","pct"] + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"] + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"] + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"] + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"] + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"] + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"] + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"] + }, + "image/x-xcf": { + "compressible": false + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"] + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"] + }, + "message/cpim": { + "source": "iana" + }, + "message/delivery-status": { + "source": "iana" + }, + "message/disposition-notification": { + "source": "iana" + }, + "message/external-body": { + "source": "iana" + }, + "message/feedback-report": { + "source": "iana" + }, + "message/global": { + "source": "iana" + }, + "message/global-delivery-status": { + "source": "iana" + }, + "message/global-disposition-notification": { + "source": "iana" + }, + "message/global-headers": { + "source": "iana" + }, + "message/http": { + "source": "iana", + "compressible": false + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true + }, + "message/news": { + "source": "iana" + }, + "message/partial": { + "source": "iana", + "compressible": false + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml","mime"] + }, + "message/s-http": { + "source": "iana" + }, + "message/sip": { + "source": "iana" + }, + "message/sipfrag": { + "source": "iana" + }, + "message/tracking-status": { + "source": "iana" + }, + "message/vnd.si.simp": { + "source": "iana" + }, + "message/vnd.wfa.wsc": { + "source": "iana" + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs","iges"] + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh","mesh","silo"] + }, + "model/vnd.collada+xml": { + "source": "iana", + "extensions": ["dae"] + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"] + }, + "model/vnd.flatland.3dml": { + "source": "iana" + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"] + }, + "model/vnd.gs-gdl": { + "source": "apache" + }, + "model/vnd.gs.gdl": { + "source": "iana" + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"] + }, + "model/vnd.moml+xml": { + "source": "iana" + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"] + }, + "model/vnd.opengex": { + "source": "iana" + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana" + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana" + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana" + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"] + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl","vrml"] + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db","x3dbz"] + }, + "model/x3d+fastinfoset": { + "source": "iana" + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv","x3dvz"] + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d","x3dz"] + }, + "model/x3d-vrml": { + "source": "iana" + }, + "multipart/alternative": { + "source": "iana", + "compressible": false + }, + "multipart/appledouble": { + "source": "iana" + }, + "multipart/byteranges": { + "source": "iana" + }, + "multipart/digest": { + "source": "iana" + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false + }, + "multipart/form-data": { + "source": "iana", + "compressible": false + }, + "multipart/header-set": { + "source": "iana" + }, + "multipart/mixed": { + "source": "iana", + "compressible": false + }, + "multipart/parallel": { + "source": "iana" + }, + "multipart/related": { + "source": "iana", + "compressible": false + }, + "multipart/report": { + "source": "iana" + }, + "multipart/signed": { + "source": "iana", + "compressible": false + }, + "multipart/voice-message": { + "source": "iana" + }, + "multipart/x-mixed-replace": { + "source": "iana" + }, + "text/1d-interleaved-parityfec": { + "source": "iana" + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache","manifest"] + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics","ifb"] + }, + "text/calender": { + "compressible": true + }, + "text/cmd": { + "compressible": true + }, + "text/coffeescript": { + "extensions": ["coffee","litcoffee"] + }, + "text/css": { + "source": "iana", + "compressible": true, + "extensions": ["css"] + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"] + }, + "text/csv-schema": { + "source": "iana" + }, + "text/directory": { + "source": "iana" + }, + "text/dns": { + "source": "iana" + }, + "text/ecmascript": { + "source": "iana" + }, + "text/encaprtp": { + "source": "iana" + }, + "text/enriched": { + "source": "iana" + }, + "text/fwdred": { + "source": "iana" + }, + "text/grammar-ref-list": { + "source": "iana" + }, + "text/hjson": { + "extensions": ["hjson"] + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html","htm"] + }, + "text/jade": { + "extensions": ["jade"] + }, + "text/javascript": { + "source": "iana", + "compressible": true + }, + "text/jcr-cnd": { + "source": "iana" + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"] + }, + "text/less": { + "extensions": ["less"] + }, + "text/markdown": { + "source": "iana" + }, + "text/mizar": { + "source": "iana" + }, + "text/n3": { + "source": "iana", + "compressible": true, + "extensions": ["n3"] + }, + "text/parameters": { + "source": "iana" + }, + "text/parityfec": { + "source": "iana" + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt","text","conf","def","list","log","in","ini"] + }, + "text/provenance-notation": { + "source": "iana" + }, + "text/prs.fallenstein.rst": { + "source": "iana" + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"] + }, + "text/raptorfec": { + "source": "iana" + }, + "text/red": { + "source": "iana" + }, + "text/rfc822-headers": { + "source": "iana" + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"] + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "text/rtp-enc-aescm128": { + "source": "iana" + }, + "text/rtploopback": { + "source": "iana" + }, + "text/rtx": { + "source": "iana" + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml","sgm"] + }, + "text/stylus": { + "extensions": ["stylus","styl"] + }, + "text/t140": { + "source": "iana" + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"] + }, + "text/troff": { + "source": "iana", + "extensions": ["t","tr","roff","man","me","ms"] + }, + "text/turtle": { + "source": "iana", + "extensions": ["ttl"] + }, + "text/ulpfec": { + "source": "iana" + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri","uris","urls"] + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"] + }, + "text/vnd.a": { + "source": "iana" + }, + "text/vnd.abc": { + "source": "iana" + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"] + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"] + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"] + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"] + }, + "text/vnd.debian.copyright": { + "source": "iana" + }, + "text/vnd.dmclientscript": { + "source": "iana" + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana" + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"] + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"] + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"] + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"] + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"] + }, + "text/vnd.iptc.newsml": { + "source": "iana" + }, + "text/vnd.iptc.nitf": { + "source": "iana" + }, + "text/vnd.latex-z": { + "source": "iana" + }, + "text/vnd.motorola.reflex": { + "source": "iana" + }, + "text/vnd.ms-mediapackage": { + "source": "iana" + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana" + }, + "text/vnd.si.uricatalogue": { + "source": "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "extensions": ["jad"] + }, + "text/vnd.trolltech.linguist": { + "source": "iana" + }, + "text/vnd.wap.si": { + "source": "iana" + }, + "text/vnd.wap.sl": { + "source": "iana" + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"] + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"] + }, + "text/vtt": { + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"] + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s","asm"] + }, + "text/x-c": { + "source": "apache", + "extensions": ["c","cc","cxx","cpp","h","hh","dic"] + }, + "text/x-component": { + "extensions": ["htc"] + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f","for","f77","f90"] + }, + "text/x-gwt-rpc": { + "compressible": true + }, + "text/x-handlebars-template": { + "extensions": ["hbs"] + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"] + }, + "text/x-jquery-tmpl": { + "compressible": true + }, + "text/x-lua": { + "extensions": ["lua"] + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["markdown","md","mkd"] + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"] + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"] + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p","pas"] + }, + "text/x-sass": { + "extensions": ["sass"] + }, + "text/x-scss": { + "extensions": ["scss"] + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"] + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"] + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"] + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"] + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"] + }, + "text/xml": { + "source": "iana", + "compressible": true + }, + "text/xml-external-parsed-entity": { + "source": "iana" + }, + "text/yaml": { + "extensions": ["yaml","yml"] + }, + "video/1d-interleaved-parityfec": { + "source": "apache" + }, + "video/3gpp": { + "source": "apache", + "extensions": ["3gp"] + }, + "video/3gpp-tt": { + "source": "apache" + }, + "video/3gpp2": { + "source": "apache", + "extensions": ["3g2"] + }, + "video/bmpeg": { + "source": "apache" + }, + "video/bt656": { + "source": "apache" + }, + "video/celb": { + "source": "apache" + }, + "video/dv": { + "source": "apache" + }, + "video/h261": { + "source": "apache", + "extensions": ["h261"] + }, + "video/h263": { + "source": "apache", + "extensions": ["h263"] + }, + "video/h263-1998": { + "source": "apache" + }, + "video/h263-2000": { + "source": "apache" + }, + "video/h264": { + "source": "apache", + "extensions": ["h264"] + }, + "video/h264-rcdo": { + "source": "apache" + }, + "video/h264-svc": { + "source": "apache" + }, + "video/jpeg": { + "source": "apache", + "extensions": ["jpgv"] + }, + "video/jpeg2000": { + "source": "apache" + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm","jpgm"] + }, + "video/mj2": { + "source": "apache", + "extensions": ["mj2","mjp2"] + }, + "video/mp1s": { + "source": "apache" + }, + "video/mp2p": { + "source": "apache" + }, + "video/mp2t": { + "source": "apache", + "extensions": ["ts"] + }, + "video/mp4": { + "source": "apache", + "compressible": false, + "extensions": ["mp4","mp4v","mpg4"] + }, + "video/mp4v-es": { + "source": "apache" + }, + "video/mpeg": { + "source": "apache", + "compressible": false, + "extensions": ["mpeg","mpg","mpe","m1v","m2v"] + }, + "video/mpeg4-generic": { + "source": "apache" + }, + "video/mpv": { + "source": "apache" + }, + "video/nv": { + "source": "apache" + }, + "video/ogg": { + "source": "apache", + "compressible": false, + "extensions": ["ogv"] + }, + "video/parityfec": { + "source": "apache" + }, + "video/pointer": { + "source": "apache" + }, + "video/quicktime": { + "source": "apache", + "compressible": false, + "extensions": ["qt","mov"] + }, + "video/raw": { + "source": "apache" + }, + "video/rtp-enc-aescm128": { + "source": "apache" + }, + "video/rtx": { + "source": "apache" + }, + "video/smpte292m": { + "source": "apache" + }, + "video/ulpfec": { + "source": "apache" + }, + "video/vc1": { + "source": "apache" + }, + "video/vnd.cctv": { + "source": "apache" + }, + "video/vnd.dece.hd": { + "source": "apache", + "extensions": ["uvh","uvvh"] + }, + "video/vnd.dece.mobile": { + "source": "apache", + "extensions": ["uvm","uvvm"] + }, + "video/vnd.dece.mp4": { + "source": "apache" + }, + "video/vnd.dece.pd": { + "source": "apache", + "extensions": ["uvp","uvvp"] + }, + "video/vnd.dece.sd": { + "source": "apache", + "extensions": ["uvs","uvvs"] + }, + "video/vnd.dece.video": { + "source": "apache", + "extensions": ["uvv","uvvv"] + }, + "video/vnd.directv.mpeg": { + "source": "apache" + }, + "video/vnd.directv.mpeg-tts": { + "source": "apache" + }, + "video/vnd.dlna.mpeg-tts": { + "source": "apache" + }, + "video/vnd.dvb.file": { + "source": "apache", + "extensions": ["dvb"] + }, + "video/vnd.fvt": { + "source": "apache", + "extensions": ["fvt"] + }, + "video/vnd.hns.video": { + "source": "apache" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "apache" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "apache" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "apache" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "apache" + }, + "video/vnd.iptvforum.ttsavc": { + "source": "apache" + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "apache" + }, + "video/vnd.motorola.video": { + "source": "apache" + }, + "video/vnd.motorola.videop": { + "source": "apache" + }, + "video/vnd.mpegurl": { + "source": "apache", + "extensions": ["mxu","m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + "source": "apache", + "extensions": ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "apache" + }, + "video/vnd.nokia.videovoip": { + "source": "apache" + }, + "video/vnd.objectvideo": { + "source": "apache" + }, + "video/vnd.sealed.mpeg1": { + "source": "apache" + }, + "video/vnd.sealed.mpeg4": { + "source": "apache" + }, + "video/vnd.sealed.swf": { + "source": "apache" + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "apache" + }, + "video/vnd.uvvu.mp4": { + "source": "apache", + "extensions": ["uvu","uvvu"] + }, + "video/vnd.vivo": { + "source": "apache", + "extensions": ["viv"] + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"] + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"] + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"] + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"] + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"] + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv","mk3d","mks"] + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"] + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf","asx"] + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"] + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"] + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"] + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"] + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"] + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"] + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"] + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"] + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"] + }, + "x-shader/x-fragment": { + "compressible": true + }, + "x-shader/x-vertex": { + "compressible": true + } +} diff --git a/node_modules/accepts/node_modules/mime-db/index.js b/node_modules/accepts/node_modules/mime-db/index.js new file mode 100644 index 0000000..551031f --- /dev/null +++ b/node_modules/accepts/node_modules/mime-db/index.js @@ -0,0 +1,11 @@ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = require('./db.json') diff --git a/node_modules/accepts/node_modules/mime-db/package.json b/node_modules/accepts/node_modules/mime-db/package.json new file mode 100644 index 0000000..f59c7f5 --- /dev/null +++ b/node_modules/accepts/node_modules/mime-db/package.json @@ -0,0 +1,128 @@ +{ + "_args": [ + [ + { + "raw": "mime-db@~1.12.0", + "scope": null, + "escapedName": "mime-db", + "name": "mime-db", + "rawSpec": "~1.12.0", + "spec": ">=1.12.0 <1.13.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/accepts/node_modules/mime-types" + ] + ], + "_from": "mime-db@>=1.12.0 <1.13.0", + "_id": "mime-db@1.12.0", + "_inCache": true, + "_location": "/accepts/mime-db", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "mime-db@~1.12.0", + "scope": null, + "escapedName": "mime-db", + "name": "mime-db", + "rawSpec": "~1.12.0", + "spec": ">=1.12.0 <1.13.0", + "type": "range" + }, + "_requiredBy": [ + "/accepts/mime-types" + ], + "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "_shasum": "3d0c63180f458eb10d325aaa37d7c58ae312e9d7", + "_shrinkwrap": null, + "_spec": "mime-db@~1.12.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/accepts/node_modules/mime-types", + "bugs": { + "url": "https://github.com/jshttp/mime-db/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + { + "name": "Robert Kieffer", + "email": "robert@broofa.com", + "url": "http://github.com/broofa" + } + ], + "dependencies": {}, + "description": "Media Type Database", + "devDependencies": { + "bluebird": "2.9.27", + "co": "4.5.4", + "cogent": "1.0.1", + "csv-parse": "0.1.2", + "gnode": "0.1.1", + "istanbul": "0.3.9", + "mocha": "1.21.5", + "raw-body": "2.1.0", + "stream-to-array": "2" + }, + "directories": {}, + "dist": { + "shasum": "3d0c63180f458eb10d325aaa37d7c58ae312e9d7", + "tarball": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "gitHead": "cf35cbba6b22f4a3b3eef9a32129ea5b7f0f91ee", + "homepage": "https://github.com/jshttp/mime-db", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "license": "MIT", + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "mime-db", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/mime-db.git" + }, + "scripts": { + "build": "node scripts/build", + "fetch": "gnode scripts/extensions && gnode scripts/types", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", + "update": "npm run fetch && npm run build" + }, + "version": "1.12.0" +} diff --git a/node_modules/accepts/node_modules/mime-types/HISTORY.md b/node_modules/accepts/node_modules/mime-types/HISTORY.md new file mode 100644 index 0000000..fb90c27 --- /dev/null +++ b/node_modules/accepts/node_modules/mime-types/HISTORY.md @@ -0,0 +1,115 @@ +2.0.14 / 2015-06-06 +=================== + + * deps: mime-db@~1.12.0 + - Add new mime types + +2.0.13 / 2015-05-31 +=================== + + * deps: mime-db@~1.11.0 + - Add new mime types + +2.0.12 / 2015-05-19 +=================== + + * deps: mime-db@~1.10.0 + - Add new mime types + +2.0.11 / 2015-05-05 +=================== + + * deps: mime-db@~1.9.1 + - Add new mime types + +2.0.10 / 2015-03-13 +=================== + + * deps: mime-db@~1.8.0 + - Add new mime types + +2.0.9 / 2015-02-09 +================== + + * deps: mime-db@~1.7.0 + - Add new mime types + - Community extensions ownership transferred from `node-mime` + +2.0.8 / 2015-01-29 +================== + + * deps: mime-db@~1.6.0 + - Add new mime types + +2.0.7 / 2014-12-30 +================== + + * deps: mime-db@~1.5.0 + - Add new mime types + - Fix various invalid MIME type entries + +2.0.6 / 2014-12-30 +================== + + * deps: mime-db@~1.4.0 + - Add new mime types + - Fix various invalid MIME type entries + - Remove example template MIME types + +2.0.5 / 2014-12-29 +================== + + * deps: mime-db@~1.3.1 + - Fix missing extensions + +2.0.4 / 2014-12-10 +================== + + * deps: mime-db@~1.3.0 + - Add new mime types + +2.0.3 / 2014-11-09 +================== + + * deps: mime-db@~1.2.0 + - Add new mime types + +2.0.2 / 2014-09-28 +================== + + * deps: mime-db@~1.1.0 + - Add new mime types + - Add additional compressible + - Update charsets + +2.0.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + +2.0.0 / 2014-09-02 +================== + + * Use `mime-db` + * Remove `.define()` + +1.0.2 / 2014-08-04 +================== + + * Set charset=utf-8 for `text/javascript` + +1.0.1 / 2014-06-24 +================== + + * Add `text/jsx` type + +1.0.0 / 2014-05-12 +================== + + * Return `false` for unknown types + * Set charset=utf-8 for `application/json` + +0.1.0 / 2014-05-02 +================== + + * Initial release diff --git a/node_modules/accepts/node_modules/mime-types/LICENSE b/node_modules/accepts/node_modules/mime-types/LICENSE new file mode 100644 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/accepts/node_modules/mime-types/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 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/accepts/node_modules/mime-types/README.md b/node_modules/accepts/node_modules/mime-types/README.md new file mode 100644 index 0000000..3727493 --- /dev/null +++ b/node_modules/accepts/node_modules/mime-types/README.md @@ -0,0 +1,102 @@ +# mime-types + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [node-mime](https://github.com/broofa/node-mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`, + so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db) +- No `.define()` functionality + +Otherwise, the API is compatible. + +## Install + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://github.com/jshttp/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/x-markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/x-markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/mime-types.svg +[npm-url]: https://npmjs.org/package/mime-types +[node-version-image]: https://img.shields.io/node/v/mime-types.svg +[node-version-url]: http://nodejs.org/download/ +[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg +[travis-url]: https://travis-ci.org/jshttp/mime-types +[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types +[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg +[downloads-url]: https://npmjs.org/package/mime-types diff --git a/node_modules/accepts/node_modules/mime-types/index.js b/node_modules/accepts/node_modules/mime-types/index.js new file mode 100644 index 0000000..b46a202 --- /dev/null +++ b/node_modules/accepts/node_modules/mime-types/index.js @@ -0,0 +1,63 @@ + +var db = require('mime-db') + +// types[extension] = type +exports.types = Object.create(null) +// extensions[type] = [extensions] +exports.extensions = Object.create(null) + +Object.keys(db).forEach(function (name) { + var mime = db[name] + var exts = mime.extensions + if (!exts || !exts.length) return + exports.extensions[name] = exts + exts.forEach(function (ext) { + exports.types[ext] = name + }) +}) + +exports.lookup = function (string) { + if (!string || typeof string !== "string") return false + // remove any leading paths, though we should just use path.basename + string = string.replace(/.*[\.\/\\]/, '').toLowerCase() + if (!string) return false + return exports.types[string] || false +} + +exports.extension = function (type) { + if (!type || typeof type !== "string") return false + // to do: use media-typer + type = type.match(/^\s*([^;\s]*)(?:;|\s|$)/) + if (!type) return false + var exts = exports.extensions[type[1].toLowerCase()] + if (!exts || !exts.length) return false + return exts[0] +} + +// type has to be an exact mime type +exports.charset = function (type) { + var mime = db[type] + if (mime && mime.charset) return mime.charset + + // default text/* to utf-8 + if (/^text\//.test(type)) return 'UTF-8' + + return false +} + +// backwards compatibility +exports.charsets = { + lookup: exports.charset +} + +// to do: maybe use set-type module or something +exports.contentType = function (type) { + if (!type || typeof type !== "string") return false + if (!~type.indexOf('/')) type = exports.lookup(type) + if (!type) return false + if (!~type.indexOf('charset')) { + var charset = exports.charset(type) + if (charset) type += '; charset=' + charset.toLowerCase() + } + return type +} diff --git a/node_modules/accepts/node_modules/mime-types/package.json b/node_modules/accepts/node_modules/mime-types/package.json new file mode 100644 index 0000000..40d47d1 --- /dev/null +++ b/node_modules/accepts/node_modules/mime-types/package.json @@ -0,0 +1,117 @@ +{ + "_args": [ + [ + { + "raw": "mime-types@~2.0.4", + "scope": null, + "escapedName": "mime-types", + "name": "mime-types", + "rawSpec": "~2.0.4", + "spec": ">=2.0.4 <2.1.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/accepts" + ] + ], + "_from": "mime-types@>=2.0.4 <2.1.0", + "_id": "mime-types@2.0.14", + "_inCache": true, + "_location": "/accepts/mime-types", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "mime-types@~2.0.4", + "scope": null, + "escapedName": "mime-types", + "name": "mime-types", + "rawSpec": "~2.0.4", + "spec": ">=2.0.4 <2.1.0", + "type": "range" + }, + "_requiredBy": [ + "/accepts" + ], + "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "_shasum": "310e159db23e077f8bb22b748dabfa4957140aa6", + "_shrinkwrap": null, + "_spec": "mime-types@~2.0.4", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/accepts", + "bugs": { + "url": "https://github.com/jshttp/mime-types/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": "https://searchbeam.jit.su" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "mime-db": "~1.12.0" + }, + "description": "The ultimate javascript content-type utility.", + "devDependencies": { + "istanbul": "0.3.9", + "mocha": "~1.21.5" + }, + "directories": {}, + "dist": { + "shasum": "310e159db23e077f8bb22b748dabfa4957140aa6", + "tarball": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "gitHead": "7d53a3351581eb3d7ae1e846ea860037bce6fe3f", + "homepage": "https://github.com/jshttp/mime-types", + "keywords": [ + "mime", + "types" + ], + "license": "MIT", + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "fishrock123", + "email": "fishrock123@rocketmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "mime-types", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/mime-types.git" + }, + "scripts": { + "test": "mocha --reporter spec test/test.js", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js" + }, + "version": "2.0.14" +} diff --git a/node_modules/accepts/package.json b/node_modules/accepts/package.json new file mode 100644 index 0000000..17e90c5 --- /dev/null +++ b/node_modules/accepts/package.json @@ -0,0 +1,125 @@ +{ + "_args": [ + [ + { + "raw": "accepts@~1.1.3", + "scope": null, + "escapedName": "accepts", + "name": "accepts", + "rawSpec": "~1.1.3", + "spec": ">=1.1.3 <1.2.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/express" + ] + ], + "_from": "accepts@>=1.1.3 <1.2.0", + "_id": "accepts@1.1.4", + "_inCache": true, + "_location": "/accepts", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.21", + "_phantomChildren": {}, + "_requested": { + "raw": "accepts@~1.1.3", + "scope": null, + "escapedName": "accepts", + "name": "accepts", + "rawSpec": "~1.1.3", + "spec": ">=1.1.3 <1.2.0", + "type": "range" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz", + "_shasum": "d71c96f7d41d0feda2c38cd14e8a27c04158df4a", + "_shrinkwrap": null, + "_spec": "accepts@~1.1.3", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/express", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "bugs": { + "url": "https://github.com/jshttp/accepts/issues" + }, + "dependencies": { + "mime-types": "~2.0.4", + "negotiator": "0.4.9" + }, + "description": "Higher-level content negotiation", + "devDependencies": { + "istanbul": "~0.3.4", + "mocha": "~2.0.1" + }, + "directories": {}, + "dist": { + "shasum": "d71c96f7d41d0feda2c38cd14e8a27c04158df4a", + "tarball": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "gitHead": "df66414d80f096627b28f137127fce0a851d7900", + "homepage": "https://github.com/jshttp/accepts", + "keywords": [ + "content", + "negotiation", + "accept", + "accepts" + ], + "license": "MIT", + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "federomero", + "email": "federomero@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "shtylman", + "email": "shtylman@gmail.com" + }, + { + "name": "mscdex", + "email": "mscdex@mscdex.net" + }, + { + "name": "fishrock123", + "email": "fishrock123@rocketmail.com" + } + ], + "name": "accepts", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/accepts.git" + }, + "scripts": { + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "version": "1.1.4" +} diff --git a/node_modules/after/.npmignore b/node_modules/after/.npmignore new file mode 100644 index 0000000..6c78602 --- /dev/null +++ b/node_modules/after/.npmignore @@ -0,0 +1,2 @@ +node_modules +.monitor diff --git a/node_modules/after/.travis.yml b/node_modules/after/.travis.yml new file mode 100644 index 0000000..afd72d0 --- /dev/null +++ b/node_modules/after/.travis.yml @@ -0,0 +1,12 @@ +language: node_js +node_js: + - 0.6 + - 0.8 + - 0.9 + - 0.10 + - 0.12 + - 4.2.4 + - 5.4.1 + - iojs-1 + - iojs-2 + - iojs-3 diff --git a/node_modules/after/LICENCE b/node_modules/after/LICENCE new file mode 100644 index 0000000..7c35130 --- /dev/null +++ b/node_modules/after/LICENCE @@ -0,0 +1,19 @@ +Copyright (c) 2011 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/after/README.md b/node_modules/after/README.md new file mode 100644 index 0000000..fc69096 --- /dev/null +++ b/node_modules/after/README.md @@ -0,0 +1,115 @@ +# After [![Build Status][1]][2] + +Invoke callback after n calls + +## Status: production ready + +## Example + +```js +var after = require("after") +var db = require("./db") // some db. + +var updateUser = function (req, res) { + // use after to run two tasks in parallel, + // namely get request body and get session + // then run updateUser with the results + var next = after(2, updateUser) + var results = {} + + getJSONBody(req, res, function (err, body) { + if (err) return next(err) + + results.body = body + next(null, results) + }) + + getSessionUser(req, res, function (err, user) { + if (err) return next(err) + + results.user = user + next(null, results) + }) + + // now do the thing! + function updateUser(err, result) { + if (err) { + res.statusCode = 500 + return res.end("Unexpected Error") + } + + if (!result.user || result.user.role !== "admin") { + res.statusCode = 403 + return res.end("Permission Denied") + } + + db.put("users:" + req.params.userId, result.body, function (err) { + if (err) { + res.statusCode = 500 + return res.end("Unexpected Error") + } + + res.statusCode = 200 + res.end("Ok") + }) + } +} +``` + +## Naive Example + +```js +var after = require("after") + , next = after(3, logItWorks) + +next() +next() +next() // it works + +function logItWorks() { + console.log("it works!") +} +``` + +## Example with error handling + +```js +var after = require("after") + , next = after(3, logError) + +next() +next(new Error("oops")) // logs oops +next() // does nothing + +// This callback is only called once. +// If there is an error the callback gets called immediately +// this avoids the situation where errors get lost. +function logError(err) { + console.log(err) +} +``` + +## Installation + +`npm install after` + +## Tests + +`npm test` + +## Contributors + + - Raynos + - defunctzombie + +## MIT Licenced + + [1]: https://secure.travis-ci.org/Raynos/after.png + [2]: http://travis-ci.org/Raynos/after + [3]: http://raynos.org/blog/2/Flow-control-in-node.js + [4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307 + [5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031 + [6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419 + [7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091 + [8]: http://github.com/Raynos/iterators + [9]: http://github.com/Raynos/composite diff --git a/node_modules/after/index.js b/node_modules/after/index.js new file mode 100644 index 0000000..ec24879 --- /dev/null +++ b/node_modules/after/index.js @@ -0,0 +1,28 @@ +module.exports = after + +function after(count, callback, err_cb) { + var bail = false + err_cb = err_cb || noop + proxy.count = count + + return (count === 0) ? callback() : proxy + + function proxy(err, result) { + if (proxy.count <= 0) { + throw new Error('after called too many times') + } + --proxy.count + + // after first error, rest are passed to err_cb + if (err) { + bail = true + callback(err) + // future error callbacks will go to error handler + callback = err_cb + } else if (proxy.count === 0 && !bail) { + callback(null, result) + } + } +} + +function noop() {} diff --git a/node_modules/after/package.json b/node_modules/after/package.json new file mode 100644 index 0000000..dbea5a0 --- /dev/null +++ b/node_modules/after/package.json @@ -0,0 +1,103 @@ +{ + "_args": [ + [ + { + "raw": "after@0.8.2", + "scope": null, + "escapedName": "after", + "name": "after", + "rawSpec": "0.8.2", + "spec": "0.8.2", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-parser" + ] + ], + "_from": "after@0.8.2", + "_id": "after@0.8.2", + "_inCache": true, + "_location": "/after", + "_nodeVersion": "0.10.32", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/after-0.8.2.tgz_1471308639186_0.9132961586583406" + }, + "_npmUser": { + "name": "raynos", + "email": "raynos2@gmail.com" + }, + "_npmVersion": "2.15.9", + "_phantomChildren": {}, + "_requested": { + "raw": "after@0.8.2", + "scope": null, + "escapedName": "after", + "name": "after", + "rawSpec": "0.8.2", + "spec": "0.8.2", + "type": "version" + }, + "_requiredBy": [ + "/engine.io-parser" + ], + "_resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "_shasum": "fedb394f9f0e02aa9768e702bda23b505fae7e1f", + "_shrinkwrap": null, + "_spec": "after@0.8.2", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-parser", + "author": { + "name": "Raynos", + "email": "raynos2@gmail.com" + }, + "bugs": { + "url": "https://github.com/Raynos/after/issues" + }, + "contributors": [ + { + "name": "Raynos", + "email": "raynos2@gmail.com", + "url": "http://raynos.org" + } + ], + "dependencies": {}, + "description": "after - tiny flow control", + "devDependencies": { + "mocha": "~1.8.1" + }, + "directories": {}, + "dist": { + "shasum": "fedb394f9f0e02aa9768e702bda23b505fae7e1f", + "tarball": "https://registry.npmjs.org/after/-/after-0.8.2.tgz" + }, + "gitHead": "e8c26046f36962b90e68dc5df33a9672a54b25f5", + "homepage": "https://github.com/Raynos/after#readme", + "keywords": [ + "flowcontrol", + "after", + "flow", + "control", + "arch" + ], + "license": "MIT", + "maintainers": [ + { + "name": "raynos", + "email": "raynos2@gmail.com" + }, + { + "name": "defunctzombie", + "email": "shtylman@gmail.com" + } + ], + "name": "after", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/Raynos/after.git" + }, + "scripts": { + "test": "mocha --ui tdd --reporter spec test/*.js" + }, + "version": "0.8.2" +} diff --git a/node_modules/after/test/after-test.js b/node_modules/after/test/after-test.js new file mode 100644 index 0000000..0d63f4c --- /dev/null +++ b/node_modules/after/test/after-test.js @@ -0,0 +1,120 @@ +/*global suite, test*/ + +var assert = require("assert") + , after = require("../") + +test("exists", function () { + assert(typeof after === "function", "after is not a function") +}) + +test("after when called with 0 invokes", function (done) { + after(0, done) +}); + +test("after 1", function (done) { + var next = after(1, done) + next() +}) + +test("after 5", function (done) { + var next = after(5, done) + , i = 5 + + while (i--) { + next() + } +}) + +test("manipulate count", function (done) { + var next = after(1, done) + , i = 5 + + next.count = i + while (i--) { + next() + } +}) + +test("after terminates on error", function (done) { + var next = after(2, function(err) { + assert.equal(err.message, 'test'); + done(); + }) + next(new Error('test')) + next(new Error('test2')) +}) + +test('gee', function(done) { + done = after(2, done) + + function cb(err) { + assert.equal(err.message, 1); + done() + } + + var next = after(3, cb, function(err) { + assert.equal(err.message, 2) + done() + }); + + next() + next(new Error(1)) + next(new Error(2)) +}) + +test('eee', function(done) { + done = after(3, done) + + function cb(err) { + assert.equal(err.message, 1); + done() + } + + var next = after(3, cb, function(err) { + assert.equal(err.message, 2) + done() + }); + + next(new Error(1)) + next(new Error(2)) + next(new Error(2)) +}) + +test('gge', function(done) { + function cb(err) { + assert.equal(err.message, 1); + done() + } + + var next = after(3, cb, function(err) { + // should not happen + assert.ok(false); + }); + + next() + next() + next(new Error(1)) +}) + +test('egg', function(done) { + function cb(err) { + assert.equal(err.message, 1); + done() + } + + var next = after(3, cb, function(err) { + // should not happen + assert.ok(false); + }); + + next(new Error(1)) + next() + next() +}) + +test('throws on too many calls', function(done) { + var next = after(1, done); + next() + assert.throws(next, /after called too many times/); +}); + diff --git a/node_modules/arraybuffer.slice/.npmignore b/node_modules/arraybuffer.slice/.npmignore new file mode 100644 index 0000000..cfbee8d --- /dev/null +++ b/node_modules/arraybuffer.slice/.npmignore @@ -0,0 +1,17 @@ +lib-cov +lcov.info +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results +build +.grunt + +node_modules diff --git a/node_modules/arraybuffer.slice/Makefile b/node_modules/arraybuffer.slice/Makefile new file mode 100644 index 0000000..849887f --- /dev/null +++ b/node_modules/arraybuffer.slice/Makefile @@ -0,0 +1,8 @@ + +REPORTER = dot + +test: + @./node_modules/.bin/mocha \ + --reporter $(REPORTER) + +.PHONY: test diff --git a/node_modules/arraybuffer.slice/README.md b/node_modules/arraybuffer.slice/README.md new file mode 100644 index 0000000..15e465e --- /dev/null +++ b/node_modules/arraybuffer.slice/README.md @@ -0,0 +1,17 @@ +# How to +```javascript +var sliceBuffer = require('arraybuffer.slice'); +var ab = (new Int8Array(5)).buffer; +var sliced = sliceBuffer(ab, 1, 3); +sliced = sliceBuffer(ab, 1); +``` + +# Licence (MIT) +Copyright (C) 2013 Rase- + + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/arraybuffer.slice/index.js b/node_modules/arraybuffer.slice/index.js new file mode 100644 index 0000000..11ac556 --- /dev/null +++ b/node_modules/arraybuffer.slice/index.js @@ -0,0 +1,29 @@ +/** + * An abstraction for slicing an arraybuffer even when + * ArrayBuffer.prototype.slice is not supported + * + * @api public + */ + +module.exports = function(arraybuffer, start, end) { + var bytes = arraybuffer.byteLength; + start = start || 0; + end = end || bytes; + + if (arraybuffer.slice) { return arraybuffer.slice(start, end); } + + if (start < 0) { start += bytes; } + if (end < 0) { end += bytes; } + if (end > bytes) { end = bytes; } + + if (start >= bytes || start >= end || bytes === 0) { + return new ArrayBuffer(0); + } + + var abv = new Uint8Array(arraybuffer); + var result = new Uint8Array(end - start); + for (var i = start, ii = 0; i < end; i++, ii++) { + result[ii] = abv[i]; + } + return result.buffer; +}; diff --git a/node_modules/arraybuffer.slice/package.json b/node_modules/arraybuffer.slice/package.json new file mode 100644 index 0000000..fdd54bb --- /dev/null +++ b/node_modules/arraybuffer.slice/package.json @@ -0,0 +1,72 @@ +{ + "_args": [ + [ + { + "raw": "arraybuffer.slice@0.0.6", + "scope": null, + "escapedName": "arraybuffer.slice", + "name": "arraybuffer.slice", + "rawSpec": "0.0.6", + "spec": "0.0.6", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-parser" + ] + ], + "_from": "arraybuffer.slice@0.0.6", + "_id": "arraybuffer.slice@0.0.6", + "_inCache": true, + "_location": "/arraybuffer.slice", + "_npmUser": { + "name": "rase-", + "email": "tonykovanen@hotmail.com" + }, + "_npmVersion": "1.3.5", + "_phantomChildren": {}, + "_requested": { + "raw": "arraybuffer.slice@0.0.6", + "scope": null, + "escapedName": "arraybuffer.slice", + "name": "arraybuffer.slice", + "rawSpec": "0.0.6", + "spec": "0.0.6", + "type": "version" + }, + "_requiredBy": [ + "/engine.io-parser" + ], + "_resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "_shasum": "f33b2159f0532a3f3107a272c0ccfbd1ad2979ca", + "_shrinkwrap": null, + "_spec": "arraybuffer.slice@0.0.6", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-parser", + "bugs": { + "url": "https://github.com/rase-/arraybuffer.slice/issues" + }, + "dependencies": {}, + "description": "Exports a function for slicing ArrayBuffers (no polyfilling)", + "devDependencies": { + "expect.js": "0.2.0", + "mocha": "1.17.1" + }, + "directories": {}, + "dist": { + "shasum": "f33b2159f0532a3f3107a272c0ccfbd1ad2979ca", + "tarball": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz" + }, + "homepage": "https://github.com/rase-/arraybuffer.slice", + "maintainers": [ + { + "name": "rase-", + "email": "tonykovanen@hotmail.com" + } + ], + "name": "arraybuffer.slice", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/rase-/arraybuffer.slice.git" + }, + "version": "0.0.6" +} diff --git a/node_modules/arraybuffer.slice/test/slice-buffer.js b/node_modules/arraybuffer.slice/test/slice-buffer.js new file mode 100644 index 0000000..4778da6 --- /dev/null +++ b/node_modules/arraybuffer.slice/test/slice-buffer.js @@ -0,0 +1,227 @@ +/* + * Test dependencies + */ + +var sliceBuffer = require('../index.js'); +var expect = require('expect.js'); + +/** + * Tests + */ + +describe('sliceBuffer', function() { + describe('using standard slice', function() { + it('should slice correctly with only start provided', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + + var sliced = sliceBuffer(abv.buffer, 3); + var sabv = new Uint8Array(sliced); + for (var i = 3, ii = 0; i < abv.length; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with start and end provided', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + + var sliced = sliceBuffer(abv.buffer, 3, 8); + var sabv = new Uint8Array(sliced); + for (var i = 3, ii = 0; i < 8; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with negative start', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + + var sliced = sliceBuffer(abv.buffer, -3); + var sabv = new Uint8Array(sliced); + for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with negative end', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + + var sliced = sliceBuffer(abv.buffer, 0, -3); + var sabv = new Uint8Array(sliced); + for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with negative start and end', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + + var sliced = sliceBuffer(abv.buffer, -6, -3); + var sabv = new Uint8Array(sliced); + for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with equal start and end', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + + var sliced = sliceBuffer(abv.buffer, 1, 1); + expect(sliced.byteLength).to.equal(0); + }); + + it('should slice correctly when end larger than buffer', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + + var sliced = sliceBuffer(abv.buffer, 0, 100); + expect(new Uint8Array(sliced)).to.eql(abv); + }); + + it('shoud slice correctly when start larger than end', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + + var sliced = sliceBuffer(abv.buffer, 6, 5); + expect(sliced.byteLength).to.equal(0); + }); + }); + + describe('using fallback', function() { + it('should slice correctly with only start provided', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + var ab = abv.buffer; + ab.slice = undefined; + + var sliced = sliceBuffer(ab, 3); + var sabv = new Uint8Array(sliced); + for (var i = 3, ii = 0; i < abv.length; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with start and end provided', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + var ab = abv.buffer; + ab.slice = undefined; + + + var sliced = sliceBuffer(ab, 3, 8); + var sabv = new Uint8Array(sliced); + for (var i = 3, ii = 0; i < 8; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with negative start', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + var ab = abv.buffer; + ab.slice = undefined; + + + var sliced = sliceBuffer(ab, -3); + var sabv = new Uint8Array(sliced); + for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with negative end', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + var ab = abv.buffer; + ab.slice = undefined; + + var sliced = sliceBuffer(ab, 0, -3); + var sabv = new Uint8Array(sliced); + for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with negative start and end', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + var ab = abv.buffer; + ab.slice = undefined; + + var sliced = sliceBuffer(ab, -6, -3); + var sabv = new Uint8Array(sliced); + for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) { + expect(abv[i]).to.equal(sabv[ii]); + } + }); + + it('should slice correctly with equal start and end', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + var ab = abv.buffer; + ab.slice = undefined; + + var sliced = sliceBuffer(ab, 1, 1); + expect(sliced.byteLength).to.equal(0); + }); + + it('should slice correctly when end larger than buffer', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + var ab = abv.buffer; + ab.slice = undefined; + + var sliced = sliceBuffer(ab, 0, 100); + var sabv = new Uint8Array(sliced); + for (var i = 0; i < abv.length; i++) { + expect(abv[i]).to.equal(sabv[i]); + } + }); + + it('shoud slice correctly when start larger than end', function() { + var abv = new Uint8Array(10); + for (var i = 0; i < abv.length; i++) { + abv[i] = i; + } + var ab = abv.buffer; + ab.slice = undefined; + + var sliced = sliceBuffer(ab, 6, 5); + expect(sliced.byteLength).to.equal(0); + }); + }); +}); diff --git a/node_modules/async/CHANGELOG.md b/node_modules/async/CHANGELOG.md new file mode 100644 index 0000000..6ff975f --- /dev/null +++ b/node_modules/async/CHANGELOG.md @@ -0,0 +1,248 @@ +# v2.4.0 +- Added `tryEach`, for running async functions in parallel, where you only expect one to succeed. (#1365, #687) +- Improved performance, most notably in `parallel` and `waterfall` (#1395) +- Added `queue.remove()`, for removing items in a `queue` (#1397, #1391) +- Fixed using `eval`, preventing Async from running in pages with Content Security Policy (#1404, #1403) +- Fixed errors thrown in an `asyncify`ed function's callback being caught by the underlying Promise (#1408) +- Fixed timing of `queue.empty()` (#1367) +- Various doc fixes (#1314, #1394, #1412) + +# v2.3.0 +- Added support for ES2017 `async` functions. Wherever you can pass a Node-style/CPS function that uses a callback, you can also pass an `async` function. Previously, you had to wrap `async` functions with `asyncify`. The caveat is that it will only work if `async` functions are supported natively in your environment, transpiled implementations can't be detected. ([#1386](https://github.com/caolan/async/issues/1386), [#1390](https://github.com/caolan/async/issues/1390)) +- Small doc fix ([#1392](https://github.com/caolan/async/issues/1392)) + +# v2.2.0 +- Added `groupBy`, and the `Series`/`Limit` equivalents, analogous to [`_.groupBy`](http://lodash.com/docs#groupBy) ([#1364](https://github.com/caolan/async/issues/1364)) +- Fixed `transform` bug when `callback` was not passed ([#1381](https://github.com/caolan/async/issues/1381)) +- Added note about `reflect` to `parallel` docs ([#1385](https://github.com/caolan/async/issues/1385)) + +# v2.1.5 +- Fix `auto` bug when function names collided with Array.prototype ([#1358](https://github.com/caolan/async/issues/1358)) +- Improve some error messages ([#1349](https://github.com/caolan/async/issues/1349)) +- Avoid stack overflow case in queue +- Fixed an issue in `some`, `every` and `find` where processing would continue after the result was determined. +- Cleanup implementations of `some`, `every` and `find` + +# v2.1.3 +- Make bundle size smaller +- Create optimized hotpath for `filter` in array case. + +# v2.1.2 +- Fixed a stackoverflow bug with `detect`, `some`, `every` on large inputs ([#1293](https://github.com/caolan/async/issues/1293)). + +# v2.1.0 + +- `retry` and `retryable` now support an optional `errorFilter` function that determines if the `task` should retry on the error ([#1256](https://github.com/caolan/async/issues/1256), [#1261](https://github.com/caolan/async/issues/1261)) +- Optimized array iteration in `race`, `cargo`, `queue`, and `priorityQueue` ([#1253](https://github.com/caolan/async/issues/1253)) +- Added alias documentation to doc site ([#1251](https://github.com/caolan/async/issues/1251), [#1254](https://github.com/caolan/async/issues/1254)) +- Added [BootStrap scrollspy](http://getbootstrap.com/javascript/#scrollspy) to docs to highlight in the sidebar the current method being viewed ([#1289](https://github.com/caolan/async/issues/1289), [#1300](https://github.com/caolan/async/issues/1300)) +- Various minor doc fixes ([#1263](https://github.com/caolan/async/issues/1263), [#1264](https://github.com/caolan/async/issues/1264), [#1271](https://github.com/caolan/async/issues/1271), [#1278](https://github.com/caolan/async/issues/1278), [#1280](https://github.com/caolan/async/issues/1280), [#1282](https://github.com/caolan/async/issues/1282), [#1302](https://github.com/caolan/async/issues/1302)) + +# v2.0.1 + +- Significantly optimized all iteration based collection methods such as `each`, `map`, `filter`, etc ([#1245](https://github.com/caolan/async/issues/1245), [#1246](https://github.com/caolan/async/issues/1246), [#1247](https://github.com/caolan/async/issues/1247)). + +# v2.0.0 + +Lots of changes here! + +First and foremost, we have a slick new [site for docs](https://caolan.github.io/async/). Special thanks to [**@hargasinski**](https://github.com/hargasinski) for his work converting our old docs to `jsdoc` format and implementing the new website. Also huge ups to [**@ivanseidel**](https://github.com/ivanseidel) for designing our new logo. It was a long process for both of these tasks, but I think these changes turned out extraordinary well. + +The biggest feature is modularization. You can now `require("async/series")` to only require the `series` function. Every Async library function is available this way. You still can `require("async")` to require the entire library, like you could do before. + +We also provide Async as a collection of ES2015 modules. You can now `import {each} from 'async-es'` or `import waterfall from 'async-es/waterfall'`. If you are using only a few Async functions, and are using a ES bundler such as Rollup, this can significantly lower your build size. + +Major thanks to [**@Kikobeats**](github.com/Kikobeats), [**@aearly**](github.com/aearly) and [**@megawac**](github.com/megawac) for doing the majority of the modularization work, as well as [**@jdalton**](github.com/jdalton) and [**@Rich-Harris**](github.com/Rich-Harris) for advisory work on the general modularization strategy. + +Another one of the general themes of the 2.0 release is standardization of what an "async" function is. We are now more strictly following the node-style continuation passing style. That is, an async function is a function that: + +1. Takes a variable number of arguments +2. The last argument is always a callback +3. The callback can accept any number of arguments +4. The first argument passed to the callback will be treated as an error result, if the argument is truthy +5. Any number of result arguments can be passed after the "error" argument +6. The callback is called once and exactly once, either on the same tick or later tick of the JavaScript event loop. + +There were several cases where Async accepted some functions that did not strictly have these properties, most notably `auto`, `every`, `some`, and `filter`. + +Another theme is performance. We have eliminated internal deferrals in all cases where they make sense. For example, in `waterfall` and `auto`, there was a `setImmediate` between each task -- these deferrals have been removed. A `setImmediate` call can add up to 1ms of delay. This might not seem like a lot, but it can add up if you are using many Async functions in the course of processing a HTTP request, for example. Nearly all asynchronous functions that do I/O already have some sort of deferral built in, so the extra deferral is unnecessary. The trade-off of this change is removing our built-in stack-overflow defense. Many synchronous callback calls in series can quickly overflow the JS call stack. If you do have a function that is sometimes synchronous (calling its callback on the same tick), and are running into stack overflows, wrap it with `async.ensureAsync()`. + +Another big performance win has been re-implementing `queue`, `cargo`, and `priorityQueue` with [doubly linked lists](https://en.wikipedia.org/wiki/Doubly_linked_list) instead of arrays. This has lead to queues being an order of [magnitude faster on large sets of tasks](https://github.com/caolan/async/pull/1205). + +## New Features + +- Async is now modularized. Individual functions can be `require()`d from the main package. (`require('async/auto')`) ([#984](https://github.com/caolan/async/issues/984), [#996](https://github.com/caolan/async/issues/996)) +- Async is also available as a collection of ES2015 modules in the new `async-es` package. (`import {forEachSeries} from 'async-es'`) ([#984](https://github.com/caolan/async/issues/984), [#996](https://github.com/caolan/async/issues/996)) +- Added `race`, analogous to `Promise.race()`. It will run an array of async tasks in parallel and will call its callback with the result of the first task to respond. ([#568](https://github.com/caolan/async/issues/568), [#1038](https://github.com/caolan/async/issues/1038)) +- Collection methods now accept ES2015 iterators. Maps, Sets, and anything that implements the iterator spec can now be passed directly to `each`, `map`, `parallel`, etc.. ([#579](https://github.com/caolan/async/issues/579), [#839](https://github.com/caolan/async/issues/839), [#1074](https://github.com/caolan/async/issues/1074)) +- Added `mapValues`, for mapping over the properties of an object and returning an object with the same keys. ([#1157](https://github.com/caolan/async/issues/1157), [#1177](https://github.com/caolan/async/issues/1177)) +- Added `timeout`, a wrapper for an async function that will make the task time-out after the specified time. ([#1007](https://github.com/caolan/async/issues/1007), [#1027](https://github.com/caolan/async/issues/1027)) +- Added `reflect` and `reflectAll`, analagous to [`Promise.reflect()`](http://bluebirdjs.com/docs/api/reflect.html), a wrapper for async tasks that always succeeds, by gathering results and errors into an object. ([#942](https://github.com/caolan/async/issues/942), [#1012](https://github.com/caolan/async/issues/1012), [#1095](https://github.com/caolan/async/issues/1095)) +- `constant` supports dynamic arguments -- it will now always use its last argument as the callback. ([#1016](https://github.com/caolan/async/issues/1016), [#1052](https://github.com/caolan/async/issues/1052)) +- `setImmediate` and `nextTick` now support arguments to partially apply to the deferred function, like the node-native versions do. ([#940](https://github.com/caolan/async/issues/940), [#1053](https://github.com/caolan/async/issues/1053)) +- `auto` now supports resolving cyclic dependencies using [Kahn's algorithm](https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm) ([#1140](https://github.com/caolan/async/issues/1140)). +- Added `autoInject`, a relative of `auto` that automatically spreads a task's dependencies as arguments to the task function. ([#608](https://github.com/caolan/async/issues/608), [#1055](https://github.com/caolan/async/issues/1055), [#1099](https://github.com/caolan/async/issues/1099), [#1100](https://github.com/caolan/async/issues/1100)) +- You can now limit the concurrency of `auto` tasks. ([#635](https://github.com/caolan/async/issues/635), [#637](https://github.com/caolan/async/issues/637)) +- Added `retryable`, a relative of `retry` that wraps an async function, making it retry when called. ([#1058](https://github.com/caolan/async/issues/1058)) +- `retry` now supports specifying a function that determines the next time interval, useful for exponential backoff, logging and other retry strategies. ([#1161](https://github.com/caolan/async/issues/1161)) +- `retry` will now pass all of the arguments the task function was resolved with to the callback ([#1231](https://github.com/caolan/async/issues/1231)). +- Added `q.unsaturated` -- callback called when a `queue`'s number of running workers falls below a threshold. ([#868](https://github.com/caolan/async/issues/868), [#1030](https://github.com/caolan/async/issues/1030), [#1033](https://github.com/caolan/async/issues/1033), [#1034](https://github.com/caolan/async/issues/1034)) +- Added `q.error` -- a callback called whenever a `queue` task calls its callback with an error. ([#1170](https://github.com/caolan/async/issues/1170)) +- `applyEach` and `applyEachSeries` now pass results to the final callback. ([#1088](https://github.com/caolan/async/issues/1088)) + +## Breaking changes + +- Calling a callback more than once is considered an error, and an error will be thrown. This had an explicit breaking change in `waterfall`. If you were relying on this behavior, you should more accurately represent your control flow as an event emitter or stream. ([#814](https://github.com/caolan/async/issues/814), [#815](https://github.com/caolan/async/issues/815), [#1048](https://github.com/caolan/async/issues/1048), [#1050](https://github.com/caolan/async/issues/1050)) +- `auto` task functions now always take the callback as the last argument. If a task has dependencies, the `results` object will be passed as the first argument. To migrate old task functions, wrap them with [`_.flip`](https://lodash.com/docs#flip) ([#1036](https://github.com/caolan/async/issues/1036), [#1042](https://github.com/caolan/async/issues/1042)) +- Internal `setImmediate` calls have been refactored away. This may make existing flows vulnerable to stack overflows if you use many synchronous functions in series. Use `ensureAsync` to work around this. ([#696](https://github.com/caolan/async/issues/696), [#704](https://github.com/caolan/async/issues/704), [#1049](https://github.com/caolan/async/issues/1049), [#1050](https://github.com/caolan/async/issues/1050)) +- `map` used to return an object when iterating over an object. `map` now always returns an array, like in other libraries. The previous object behavior has been split out into `mapValues`. ([#1157](https://github.com/caolan/async/issues/1157), [#1177](https://github.com/caolan/async/issues/1177)) +- `filter`, `reject`, `some`, `every`, and related functions now expect an error as the first callback argument, rather than just a simple boolean. Pass `null` as the first argument, or use `fs.access` instead of `fs.exists`. ([#118](https://github.com/caolan/async/issues/118), [#774](https://github.com/caolan/async/issues/774), [#1028](https://github.com/caolan/async/issues/1028), [#1041](https://github.com/caolan/async/issues/1041)) +- `{METHOD}` and `{METHOD}Series` are now implemented in terms of `{METHOD}Limit`. This is a major internal simplification, and is not expected to cause many problems, but it does subtly affect how functions execute internally. ([#778](https://github.com/caolan/async/issues/778), [#847](https://github.com/caolan/async/issues/847)) +- `retry`'s callback is now optional. Previously, omitting the callback would partially apply the function, meaning it could be passed directly as a task to `series` or `auto`. The partially applied "control-flow" behavior has been separated out into `retryable`. ([#1054](https://github.com/caolan/async/issues/1054), [#1058](https://github.com/caolan/async/issues/1058)) +- The test function for `whilst`, `until`, and `during` used to be passed non-error args from the iteratee function's callback, but this led to weirdness where the first call of the test function would be passed no args. We have made it so the test function is never passed extra arguments, and only the `doWhilst`, `doUntil`, and `doDuring` functions pass iteratee callback arguments to the test function ([#1217](https://github.com/caolan/async/issues/1217), [#1224](https://github.com/caolan/async/issues/1224)) +- The `q.tasks` array has been renamed `q._tasks` and is now implemented as a doubly linked list (DLL). Any code that used to interact with this array will need to be updated to either use the provided helpers or support DLLs ([#1205](https://github.com/caolan/async/issues/1205)). +- The timing of the `q.saturated()` callback in a `queue` has been modified to better reflect when tasks pushed to the queue will start queueing. ([#724](https://github.com/caolan/async/issues/724), [#1078](https://github.com/caolan/async/issues/1078)) +- Removed `iterator` method in favour of [ES2015 iterator protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators ) which natively supports arrays ([#1237](https://github.com/caolan/async/issues/1237)) +- Dropped support for Component, Jam, SPM, and Volo ([#1175](https://github.com/caolan/async/issues/1175), #[#176](https://github.com/caolan/async/issues/176)) + +## Bug Fixes + +- Improved handling of no dependency cases in `auto` & `autoInject` ([#1147](https://github.com/caolan/async/issues/1147)). +- Fixed a bug where the callback generated by `asyncify` with `Promises` could resolve twice ([#1197](https://github.com/caolan/async/issues/1197)). +- Fixed several documented optional callbacks not actually being optional ([#1223](https://github.com/caolan/async/issues/1223)). + +## Other + +- Added `someSeries` and `everySeries` for symmetry, as well as a complete set of `any`/`anyLimit`/`anySeries` and `all`/`/allLmit`/`allSeries` aliases. +- Added `find` as an alias for `detect. (as well as `findLimit` and `findSeries`). +- Various doc fixes ([#1005](https://github.com/caolan/async/issues/1005), [#1008](https://github.com/caolan/async/issues/1008), [#1010](https://github.com/caolan/async/issues/1010), [#1015](https://github.com/caolan/async/issues/1015), [#1021](https://github.com/caolan/async/issues/1021), [#1037](https://github.com/caolan/async/issues/1037), [#1039](https://github.com/caolan/async/issues/1039), [#1051](https://github.com/caolan/async/issues/1051), [#1102](https://github.com/caolan/async/issues/1102), [#1107](https://github.com/caolan/async/issues/1107), [#1121](https://github.com/caolan/async/issues/1121), [#1123](https://github.com/caolan/async/issues/1123), [#1129](https://github.com/caolan/async/issues/1129), [#1135](https://github.com/caolan/async/issues/1135), [#1138](https://github.com/caolan/async/issues/1138), [#1141](https://github.com/caolan/async/issues/1141), [#1153](https://github.com/caolan/async/issues/1153), [#1216](https://github.com/caolan/async/issues/1216), [#1217](https://github.com/caolan/async/issues/1217), [#1232](https://github.com/caolan/async/issues/1232), [#1233](https://github.com/caolan/async/issues/1233), [#1236](https://github.com/caolan/async/issues/1236), [#1238](https://github.com/caolan/async/issues/1238)) + +Thank you [**@aearly**](github.com/aearly) and [**@megawac**](github.com/megawac) for taking the lead on version 2 of async. + +------------------------------------------ + +# v1.5.2 +- Allow using `"constructor"` as an argument in `memoize` ([#998](https://github.com/caolan/async/issues/998)) +- Give a better error messsage when `auto` dependency checking fails ([#994](https://github.com/caolan/async/issues/994)) +- Various doc updates ([#936](https://github.com/caolan/async/issues/936), [#956](https://github.com/caolan/async/issues/956), [#979](https://github.com/caolan/async/issues/979), [#1002](https://github.com/caolan/async/issues/1002)) + +# v1.5.1 +- Fix issue with `pause` in `queue` with concurrency enabled ([#946](https://github.com/caolan/async/issues/946)) +- `while` and `until` now pass the final result to callback ([#963](https://github.com/caolan/async/issues/963)) +- `auto` will properly handle concurrency when there is no callback ([#966](https://github.com/caolan/async/issues/966)) +- `auto` will no. properly stop execution when an error occurs ([#988](https://github.com/caolan/async/issues/988), [#993](https://github.com/caolan/async/issues/993)) +- Various doc fixes ([#971](https://github.com/caolan/async/issues/971), [#980](https://github.com/caolan/async/issues/980)) + +# v1.5.0 + +- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) ([#892](https://github.com/caolan/async/issues/892)) +- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. ([#873](https://github.com/caolan/async/issues/873)) +- `auto` now accepts an optional `concurrency` argument to limit the number o. running tasks ([#637](https://github.com/caolan/async/issues/637)) +- Added `queue#workersList()`, to retrieve the lis. of currently running tasks. ([#891](https://github.com/caolan/async/issues/891)) +- Various code simplifications ([#896](https://github.com/caolan/async/issues/896), [#904](https://github.com/caolan/async/issues/904)) +- Various doc fixes :scroll: ([#890](https://github.com/caolan/async/issues/890), [#894](https://github.com/caolan/async/issues/894), [#903](https://github.com/caolan/async/issues/903), [#905](https://github.com/caolan/async/issues/905), [#912](https://github.com/caolan/async/issues/912)) + +# v1.4.2 + +- Ensure coverage files don't get published on npm ([#879](https://github.com/caolan/async/issues/879)) + +# v1.4.1 + +- Add in overlooked `detectLimit` method ([#866](https://github.com/caolan/async/issues/866)) +- Removed unnecessary files from npm releases ([#861](https://github.com/caolan/async/issues/861)) +- Removed usage of a reserved word to prevent :boom: in older environments ([#870](https://github.com/caolan/async/issues/870)) + +# v1.4.0 + +- `asyncify` now supports promises ([#840](https://github.com/caolan/async/issues/840)) +- Added `Limit` versions of `filter` and `reject` ([#836](https://github.com/caolan/async/issues/836)) +- Add `Limit` versions of `detect`, `some` and `every` ([#828](https://github.com/caolan/async/issues/828), [#829](https://github.com/caolan/async/issues/829)) +- `some`, `every` and `detect` now short circuit early ([#828](https://github.com/caolan/async/issues/828), [#829](https://github.com/caolan/async/issues/829)) +- Improve detection of the global object ([#804](https://github.com/caolan/async/issues/804)), enabling use in WebWorkers +- `whilst` now called with arguments from iterator ([#823](https://github.com/caolan/async/issues/823)) +- `during` now gets called with arguments from iterator ([#824](https://github.com/caolan/async/issues/824)) +- Code simplifications and optimizations aplenty ([diff](https://github.com/caolan/async/compare/v1.3.0...v1.4.0)) + + +# v1.3.0 + +New Features: +- Added `constant` +- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. ([#671](https://github.com/caolan/async/issues/671), [#806](https://github.com/caolan/async/issues/806)) +- Added `during` and `doDuring`, which are like `whilst` with an async truth test. ([#800](https://github.com/caolan/async/issues/800)) +- `retry` now accepts an `interval` parameter to specify a delay between retries. ([#793](https://github.com/caolan/async/issues/793)) +- `async` should work better in Web Workers due to better `root` detection ([#804](https://github.com/caolan/async/issues/804)) +- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` ([#642](https://github.com/caolan/async/issues/642)) +- Various internal updates ([#786](https://github.com/caolan/async/issues/786), [#801](https://github.com/caolan/async/issues/801), [#802](https://github.com/caolan/async/issues/802), [#803](https://github.com/caolan/async/issues/803)) +- Various doc fixes ([#790](https://github.com/caolan/async/issues/790), [#794](https://github.com/caolan/async/issues/794)) + +Bug Fixes: +- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. ([#740](https://github.com/caolan/async/issues/740), [#744](https://github.com/caolan/async/issues/744), [#783](https://github.com/caolan/async/issues/783)) + + +# v1.2.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. ([#782](https://github.com/caolan/async/issues/782)) + + +# v1.2.0 + +New Features: + +- Added `timesLimit` ([#743](https://github.com/caolan/async/issues/743)) +- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. ([#747](https://github.com/caolan/async/issues/747), [#772](https://github.com/caolan/async/issues/772)) + +Bug Fixes: + +- Fixed a regression in `each` and family with empty arrays that have additional properties. ([#775](https://github.com/caolan/async/issues/775), [#777](https://github.com/caolan/async/issues/777)) + + +# v1.1.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. ([#782](https://github.com/caolan/async/issues/782)) + + +# v1.1.0 + +New Features: + +- `cargo` now supports all of the same methods and event callbacks as `queue`. +- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. ([#769](https://github.com/caolan/async/issues/769)) +- Optimized `map`, `eachOf`, and `waterfall` families of functions +- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array ([#667](https://github.com/caolan/async/issues/667)). +- The callback is now optional for the composed results of `compose` and `seq`. ([#618](https://github.com/caolan/async/issues/618)) +- Reduced file size by 4kb, (minified version by 1kb) +- Added code coverage through `nyc` and `coveralls` ([#768](https://github.com/caolan/async/issues/768)) + +Bug Fixes: + +- `forever` will no longer stack overflow with a synchronous iterator ([#622](https://github.com/caolan/async/issues/622)) +- `eachLimit` and other limit functions will stop iterating once an error occurs ([#754](https://github.com/caolan/async/issues/754)) +- Always pass `null` in callbacks when there is no error ([#439](https://github.com/caolan/async/issues/439)) +- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue ([#668](https://github.com/caolan/async/issues/668)) +- `each` and family will properly handle an empty array ([#578](https://github.com/caolan/async/issues/578)) +- `eachSeries` and family will finish if the underlying array is modified during execution ([#557](https://github.com/caolan/async/issues/557)) +- `queue` will throw if a non-function is passed to `q.push()` ([#593](https://github.com/caolan/async/issues/593)) +- Doc fixes ([#629](https://github.com/caolan/async/issues/629), [#766](https://github.com/caolan/async/issues/766)) + + +# v1.0.0 + +No known breaking changes, we are simply complying with semver from here on out. + +Changes: + +- Start using a changelog! +- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) ([#168](https://github.com/caolan/async/issues/168) [#704](https://github.com/caolan/async/issues/704) [#321](https://github.com/caolan/async/issues/321)) +- Detect deadlocks in `auto` ([#663](https://github.com/caolan/async/issues/663)) +- Better support for require.js ([#527](https://github.com/caolan/async/issues/527)) +- Throw if queue created with concurrency `0` ([#714](https://github.com/caolan/async/issues/714)) +- Fix unneeded iteration in `queue.resume()` ([#758](https://github.com/caolan/async/issues/758)) +- Guard against timer mocking overriding `setImmediate` ([#609](https://github.com/caolan/async/issues/609) [#611](https://github.com/caolan/async/issues/611)) +- Miscellaneous doc fixes ([#542](https://github.com/caolan/async/issues/542) [#596](https://github.com/caolan/async/issues/596) [#615](https://github.com/caolan/async/issues/615) [#628](https://github.com/caolan/async/issues/628) [#631](https://github.com/caolan/async/issues/631) [#690](https://github.com/caolan/async/issues/690) [#729](https://github.com/caolan/async/issues/729)) +- Use single noop function internally ([#546](https://github.com/caolan/async/issues/546)) +- Optimize internal `_each`, `_map` and `_keys` functions. diff --git a/node_modules/async/LICENSE b/node_modules/async/LICENSE new file mode 100644 index 0000000..d807c05 --- /dev/null +++ b/node_modules/async/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010-2017 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/async/README.md b/node_modules/async/README.md new file mode 100644 index 0000000..f59b13c --- /dev/null +++ b/node_modules/async/README.md @@ -0,0 +1,14 @@ +![Async Logo](https://raw.githubusercontent.com/caolan/async/master/logo/async-logo_readme.jpg) + +[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async) +[![NPM version](https://img.shields.io/npm/v/async.svg)](https://www.npmjs.com/package/async) +[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master) +[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![libhive - Open source examples](https://www.libhive.com/providers/npm/packages/async/examples/badge.svg)](https://www.libhive.com/providers/npm/packages/async) + + +Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with [Node.js](https://nodejs.org/) and installable via `npm install --save async`, it can also be used directly in the browser. + +For Documentation, visit + +*For Async v1.5.x documentation, go [HERE](https://github.com/caolan/async/blob/v1.5.2/README.md)* diff --git a/node_modules/async/apply.js b/node_modules/async/apply.js new file mode 100644 index 0000000..f590fa5 --- /dev/null +++ b/node_modules/async/apply.js @@ -0,0 +1,68 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (fn /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + return function () /*callArgs*/{ + var callArgs = (0, _slice2.default)(arguments); + return fn.apply(null, args.concat(callArgs)); + }; +}; + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +; + +/** + * Creates a continuation function with some arguments already applied. + * + * Useful as a shorthand when combined with other control flow functions. Any + * arguments passed to the returned function are added to the arguments + * originally passed to apply. + * + * @name apply + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {Function} fn - The function you want to eventually apply all + * arguments to. Invokes with (arguments...). + * @param {...*} arguments... - Any number of arguments to automatically apply + * when the continuation is called. + * @returns {Function} the partially-applied function + * @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 + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/applyEach.js b/node_modules/async/applyEach.js new file mode 100644 index 0000000..06c0845 --- /dev/null +++ b/node_modules/async/applyEach.js @@ -0,0 +1,51 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _applyEach = require('./internal/applyEach'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _map = require('./map'); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Applies the provided arguments to each function in the array, calling + * `callback` after all functions have completed. If you only provide the first + * argument, `fns`, then it will return a function which lets you pass in the + * arguments as if it were a single function call. If more arguments are + * provided, `callback` is required while `args` is still optional. + * + * @name applyEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s + * to all call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument, `fns`, is provided, it will + * return a function which lets you pass in the arguments as if it were a single + * function call. The signature is `(..args, callback)`. If invoked with any + * arguments, `callback` is required. + * @example + * + * async.applyEach([enableSearch, updateSchema], 'bucket', callback); + * + * // partial application example: + * async.each( + * buckets, + * async.applyEach([enableSearch, updateSchema]), + * callback + * ); + */ +exports.default = (0, _applyEach2.default)(_map2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/applyEachSeries.js b/node_modules/async/applyEachSeries.js new file mode 100644 index 0000000..ad80280 --- /dev/null +++ b/node_modules/async/applyEachSeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _applyEach = require('./internal/applyEach'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _mapSeries = require('./mapSeries'); + +var _mapSeries2 = _interopRequireDefault(_mapSeries); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. + * + * @name applyEachSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.applyEach]{@link module:ControlFlow.applyEach} + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s to all + * call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument is provided, it will return + * a function which lets you pass in the arguments as if it were a single + * function call. + */ +exports.default = (0, _applyEach2.default)(_mapSeries2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/asyncify.js b/node_modules/async/asyncify.js new file mode 100644 index 0000000..5e3fc91 --- /dev/null +++ b/node_modules/async/asyncify.js @@ -0,0 +1,110 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = asyncify; + +var _isObject = require('lodash/isObject'); + +var _isObject2 = _interopRequireDefault(_isObject); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + return (0, _initialParams2.default)(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if ((0, _isObject2.default)(result) && typeof result.then === 'function') { + result.then(function (value) { + invokeCallback(callback, null, value); + }, function (err) { + invokeCallback(callback, err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (e) { + (0, _setImmediate2.default)(rethrow, e); + } +} + +function rethrow(error) { + throw error; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/auto.js b/node_modules/async/auto.js new file mode 100644 index 0000000..26c1d56 --- /dev/null +++ b/node_modules/async/auto.js @@ -0,0 +1,289 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (tasks, concurrency, callback) { + if (typeof concurrency === 'function') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = (0, _once2.default)(callback || _noop2.default); + var keys = (0, _keys2.default)(tasks); + var numTasks = keys.length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + (0, _baseForOwn2.default)(tasks, function (task, key) { + if (!(0, _isArray2.default)(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + (0, _arrayEach2.default)(dependencies, function (dependencyName) { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + '` has a non-existent dependency `' + dependencyName + '` in ' + dependencies.join(', ')); + } + addListener(dependencyName, function () { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(function () { + runTask(key, task); + }); + } + + function processQueue() { + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while (readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + (0, _arrayEach2.default)(taskListeners, function (fn) { + fn(); + }); + processQueue(); + } + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = (0, _onlyOnce2.default)(function (err, result) { + runningTasks--; + if (arguments.length > 2) { + result = (0, _slice2.default)(arguments, 1); + } + if (err) { + var safeResults = {}; + (0, _baseForOwn2.default)(results, function (val, rkey) { + safeResults[rkey] = val; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = (0, _wrapAsync2.default)(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + (0, _arrayEach2.default)(getDependents(currentTask), function (dependent) { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error('async.auto cannot execute tasks due to a recursive dependency'); + } + } + + function getDependents(taskName) { + var result = []; + (0, _baseForOwn2.default)(tasks, function (task, key) { + if ((0, _isArray2.default)(task) && (0, _baseIndexOf2.default)(task, taskName, 0) >= 0) { + result.push(key); + } + }); + return result; + } +}; + +var _arrayEach = require('lodash/_arrayEach'); + +var _arrayEach2 = _interopRequireDefault(_arrayEach); + +var _baseForOwn = require('lodash/_baseForOwn'); + +var _baseForOwn2 = _interopRequireDefault(_baseForOwn); + +var _baseIndexOf = require('lodash/_baseIndexOf'); + +var _baseIndexOf2 = _interopRequireDefault(_baseIndexOf); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _keys = require('lodash/keys'); + +var _keys2 = _interopRequireDefault(_keys); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, 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 {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns undefined + * @example + * + * async.auto({ + * // this function will just be passed a callback + * readData: async.apply(fs.readFile, 'data.txt', 'utf-8'), + * showData: ['readData', function(results, cb) { + * // results.readData is the file's contents + * // ... + * }] + * }, callback); + * + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * console.log('in write_file', JSON.stringify(results)); + * // 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(results, callback) { + * console.log('in email_link', JSON.stringify(results)); + * // once the file is written let's email a link to it... + * // results.write_file contains the filename returned by write_file. + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * console.log('err = ', err); + * console.log('results = ', results); + * }); + */ \ No newline at end of file diff --git a/node_modules/async/autoInject.js b/node_modules/async/autoInject.js new file mode 100644 index 0000000..bfbe7e8 --- /dev/null +++ b/node_modules/async/autoInject.js @@ -0,0 +1,170 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = autoInject; + +var _auto = require('./auto'); + +var _auto2 = _interopRequireDefault(_auto); + +var _baseForOwn = require('lodash/_baseForOwn'); + +var _baseForOwn2 = _interopRequireDefault(_baseForOwn); + +var _arrayMap = require('lodash/_arrayMap'); + +var _arrayMap2 = _interopRequireDefault(_arrayMap); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _trim = require('lodash/trim'); + +var _trim2 = _interopRequireDefault(_trim); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var FN_ARGS = /^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARG_SPLIT = /,/; +var FN_ARG = /(=.+)?(\s*)$/; +var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; + +function parseParams(func) { + func = func.toString().replace(STRIP_COMMENTS, ''); + func = func.match(FN_ARGS)[2].replace(' ', ''); + func = func ? func.split(FN_ARG_SPLIT) : []; + func = func.map(function (arg) { + return (0, _trim2.default)(arg.replace(FN_ARG, '')); + }); + return func; +} + +/** + * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent + * tasks are specified as parameters to the function, after the usual callback + * parameter, with the parameter names matching the names of the tasks it + * depends on. This can provide even more readable task graphs which can be + * easier to maintain. + * + * If a final callback is specified, the task results are similarly injected, + * specified as named parameters after the initial error parameter. + * + * The autoInject function is purely syntactic sugar and its semantics are + * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. + * + * @name autoInject + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.auto]{@link module:ControlFlow.auto} + * @category Control Flow + * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of + * the form 'func([dependencies...], callback). The object's key of a property + * serves as the name of the task defined by that property, i.e. can be used + * when specifying requirements for other tasks. + * * The `callback` parameter is 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. The remaining parameters name other tasks on + * which the task is dependent, and the results from those tasks are the + * arguments of those parameters. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback, and a `results` object with any completed + * task results, similar to `auto`. + * @example + * + * // The example from `auto` can be rewritten as follows: + * async.autoInject({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * 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 + * callback(null, 'folder'); + * }, + * write_file: function(get_data, make_folder, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }, + * email_link: function(write_file, callback) { + * // once the file is written let's email a link to it... + * // write_file contains the filename returned by write_file. + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * } + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + * + * // If you are using a JS minifier that mangles parameter names, `autoInject` + * // will not work with plain functions, since the parameter names will be + * // collapsed to a single letter identifier. To work around this, you can + * // explicitly specify the names of the parameters your task function needs + * // in an array, similar to Angular.js dependency injection. + * + * // This still has an advantage over plain `auto`, since the results a task + * // depends on are still spread into arguments. + * async.autoInject({ + * //... + * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(write_file, callback) { + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * }] + * //... + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + */ +function autoInject(tasks, callback) { + var newTasks = {}; + + (0, _baseForOwn2.default)(tasks, function (taskFn, key) { + var params; + var fnIsAsync = (0, _wrapAsync.isAsync)(taskFn); + var hasNoDeps = !fnIsAsync && taskFn.length === 1 || fnIsAsync && taskFn.length === 0; + + if ((0, _isArray2.default)(taskFn)) { + params = taskFn.slice(0, -1); + taskFn = taskFn[taskFn.length - 1]; + + newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); + } else if (hasNoDeps) { + // no dependencies, use the function as-is + newTasks[key] = taskFn; + } else { + params = parseParams(taskFn); + if (taskFn.length === 0 && !fnIsAsync && params.length === 0) { + throw new Error("autoInject task functions require explicit parameters."); + } + + // remove callback param + if (!fnIsAsync) params.pop(); + + newTasks[key] = params.concat(newTask); + } + + function newTask(results, taskCb) { + var newArgs = (0, _arrayMap2.default)(params, function (name) { + return results[name]; + }); + newArgs.push(taskCb); + (0, _wrapAsync2.default)(taskFn).apply(null, newArgs); + } + }); + + (0, _auto2.default)(newTasks, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/bower.json b/node_modules/async/bower.json new file mode 100644 index 0000000..7dbeb14 --- /dev/null +++ b/node_modules/async/bower.json @@ -0,0 +1,17 @@ +{ + "name": "async", + "main": "dist/async.js", + "ignore": [ + "bower_components", + "lib", + "mocha_test", + "node_modules", + "perf", + "support", + "**/.*", + "*.config.js", + "*.json", + "index.js", + "Makefile" + ] +} diff --git a/node_modules/async/cargo.js b/node_modules/async/cargo.js new file mode 100644 index 0000000..c7e59c7 --- /dev/null +++ b/node_modules/async/cargo.js @@ -0,0 +1,94 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = cargo; + +var _queue = require('./internal/queue'); + +var _queue2 = _interopRequireDefault(_queue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A cargo of tasks for the worker function to complete. Cargo inherits all of + * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}. + * @typedef {Object} CargoObject + * @memberOf module:ControlFlow + * @property {Function} length - A function returning the number of items + * waiting to be processed. Invoke like `cargo.length()`. + * @property {number} 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. + * @property {Function} push - Adds `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. Invoke like `cargo.push(task, [callback])`. + * @property {Function} saturated - A callback that is called when the + * `queue.length()` hits the concurrency and further tasks will be queued. + * @property {Function} empty - A callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - A callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke like `cargo.idle()`. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke like `cargo.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke like `cargo.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`. + */ + +/** + * 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 becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i async.dir(hello, 'world'); + * {hello: 'world'} + */ +exports.default = (0, _consoleFunc2.default)('dir'); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/dist/async.js b/node_modules/async/dist/async.js new file mode 100644 index 0000000..a0f30b0 --- /dev/null +++ b/node_modules/async/dist/async.js @@ -0,0 +1,5549 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.async = global.async || {}))); +}(this, (function (exports) { 'use strict'; + +function slice(arrayLike, start) { + start = start|0; + var newLen = Math.max(arrayLike.length - start, 0); + var newArr = Array(newLen); + for(var idx = 0; idx < newLen; idx++) { + newArr[idx] = arrayLike[start + idx]; + } + return newArr; +} + +var initialParams = function (fn) { + return function (/*...args, callback*/) { + var args = slice(arguments); + var callback = args.pop(); + fn.call(this, args, callback); + }; +}; + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +var hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +function fallback(fn) { + setTimeout(fn, 0); +} + +function wrap(defer) { + return function (fn/*, ...args*/) { + var args = slice(arguments, 1); + defer(function () { + fn.apply(null, args); + }); + }; +} + +var _defer; + +if (hasSetImmediate) { + _defer = setImmediate; +} else if (hasNextTick) { + _defer = process.nextTick; +} else { + _defer = fallback; +} + +var setImmediate$1 = wrap(_defer); + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + return initialParams(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (isObject(result) && typeof result.then === 'function') { + result.then(function(value) { + invokeCallback(callback, null, value); + }, function(err) { + invokeCallback(callback, err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (e) { + setImmediate$1(rethrow, e); + } +} + +function rethrow(error) { + throw error; +} + +var supportsSymbol = typeof Symbol === 'function'; + +function isAsync(fn) { + return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function wrapAsync(asyncFn) { + return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn; +} + +function applyEach$1(eachfn) { + return function(fns/*, ...args*/) { + var args = slice(arguments, 1); + var go = initialParams(function(args, callback) { + var that = this; + return eachfn(fns, function (fn, cb) { + wrapAsync(fn).apply(that, args.concat(cb)); + }, callback); + }); + if (args.length) { + return go.apply(this, args); + } + else { + return go; + } + }; +} + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Built-in value references. */ +var Symbol$1 = root.Symbol; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$1.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString$1.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]'; +var undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + value = Object(value); + return (symToStringTag && symToStringTag in value) + ? getRawTag(value) + : objectToString(value); +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]'; +var funcTag = '[object Function]'; +var genTag = '[object GeneratorFunction]'; +var proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +// A temporary value used to identify if the loop should be broken. +// See #1064, #1293 +var breakLoop = {}; + +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +function once(fn) { + return function () { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} + +var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; + +var getIterator = function (coll) { + return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); +}; + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER$1 : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]'; +var arrayTag = '[object Array]'; +var boolTag = '[object Boolean]'; +var dateTag = '[object Date]'; +var errorTag = '[object Error]'; +var funcTag$1 = '[object Function]'; +var mapTag = '[object Map]'; +var numberTag = '[object Number]'; +var objectTag = '[object Object]'; +var regexpTag = '[object RegExp]'; +var setTag = '[object Set]'; +var stringTag = '[object String]'; +var weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]'; +var dataViewTag = '[object DataView]'; +var float32Tag = '[object Float32Array]'; +var float64Tag = '[object Float64Array]'; +var int8Tag = '[object Int8Array]'; +var int16Tag = '[object Int16Array]'; +var int32Tag = '[object Int32Array]'; +var uint8Tag = '[object Uint8Array]'; +var uint8ClampedTag = '[object Uint8ClampedArray]'; +var uint16Tag = '[object Uint16Array]'; +var uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports$1 && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + return freeProcess && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$1.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5; + + return value === proto; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$4.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$3.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? {value: coll[i], key: i} : null; + } +} + +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) + return null; + i++; + return {value: item.value, key: i}; + } +} + +function createObjectIterator(obj) { + var okeys = keys(obj); + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + return i < len ? {value: obj[key], key: key} : null; + }; +} + +function iterator(coll) { + if (isArrayLike(coll)) { + return createArrayIterator(coll); + } + + var iterator = getIterator(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} + +function onlyOnce(fn) { + return function() { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} + +function _eachOfLimit(limit) { + return function (obj, iteratee, callback) { + callback = once(callback || noop); + if (limit <= 0 || !obj) { + return callback(null); + } + var nextElem = iterator(obj); + var done = false; + var running = 0; + + function iterateeCallback(err, value) { + running -= 1; + if (err) { + done = true; + callback(err); + } + else if (value === breakLoop || (done && running <= 0)) { + done = true; + return callback(null); + } + else { + replenish(); + } + } + + function replenish () { + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, onlyOnce(iterateeCallback)); + } + } + + replenish(); + }; +} + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachOfLimit(coll, limit, iteratee, callback) { + _eachOfLimit(limit)(coll, wrapAsync(iteratee), callback); +} + +function doLimit(fn, limit) { + return function (iterable, iteratee, callback) { + return fn(iterable, limit, iteratee, callback); + }; +} + +// eachOf implementation optimized for array-likes +function eachOfArrayLike(coll, iteratee, callback) { + callback = once(callback || noop); + var index = 0, + completed = 0, + length = coll.length; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err) { + callback(err); + } else if ((++completed === length) || value === breakLoop) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, onlyOnce(iteratorCallback)); + } +} + +// a generic version of eachOf which can handle array, object, and iterator cases. +var eachOfGeneric = doLimit(eachOfLimit, Infinity); + +/** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @example + * + * var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; + * var configs = {}; + * + * async.forEachOf(obj, function (value, key, callback) { + * fs.readFile(__dirname + value, "utf8", function (err, data) { + * if (err) return callback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * }, function (err) { + * if (err) console.error(err.message); + * // configs is now a map of JSON data + * doSomethingWith(configs); + * }); + */ +var eachOf = function(coll, iteratee, callback) { + var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric; + eachOfImplementation(coll, wrapAsync(iteratee), callback); +}; + +function doParallel(fn) { + return function (obj, iteratee, callback) { + return fn(eachOf, obj, wrapAsync(iteratee), callback); + }; +} + +function _asyncMap(eachfn, arr, iteratee, callback) { + callback = callback || noop; + arr = arr || []; + var results = []; + var counter = 0; + var _iteratee = wrapAsync(iteratee); + + eachfn(arr, function (value, _, callback) { + var index = counter++; + _iteratee(value, function (err, v) { + results[index] = v; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} + +/** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callback + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @example + * + * async.map(['file1','file2','file3'], fs.stat, function(err, results) { + * // results is now an array of stats for each file + * }); + */ +var map = doParallel(_asyncMap); + +/** + * Applies the provided arguments to each function in the array, calling + * `callback` after all functions have completed. If you only provide the first + * argument, `fns`, then it will return a function which lets you pass in the + * arguments as if it were a single function call. If more arguments are + * provided, `callback` is required while `args` is still optional. + * + * @name applyEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s + * to all call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument, `fns`, is provided, it will + * return a function which lets you pass in the arguments as if it were a single + * function call. The signature is `(..args, callback)`. If invoked with any + * arguments, `callback` is required. + * @example + * + * async.applyEach([enableSearch, updateSchema], 'bucket', callback); + * + * // partial application example: + * async.each( + * buckets, + * async.applyEach([enableSearch, updateSchema]), + * callback + * ); + */ +var applyEach = applyEach$1(map); + +function doParallelLimit(fn) { + return function (obj, limit, iteratee, callback) { + return fn(_eachOfLimit(limit), obj, wrapAsync(iteratee), callback); + }; +} + +/** + * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. + * + * @name mapLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +var mapLimit = doParallelLimit(_asyncMap); + +/** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +var mapSeries = doLimit(mapLimit, 1); + +/** + * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. + * + * @name applyEachSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.applyEach]{@link module:ControlFlow.applyEach} + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s to all + * call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument is provided, it will return + * a function which lets you pass in the arguments as if it were a single + * function call. + */ +var applyEachSeries = applyEach$1(mapSeries); + +/** + * Creates a continuation function with some arguments already applied. + * + * Useful as a shorthand when combined with other control flow functions. Any + * arguments passed to the returned function are added to the arguments + * originally passed to apply. + * + * @name apply + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {Function} fn - The function you want to eventually apply all + * arguments to. Invokes with (arguments...). + * @param {...*} arguments... - Any number of arguments to automatically apply + * when the continuation is called. + * @returns {Function} the partially-applied function + * @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 + */ +var apply = function(fn/*, ...args*/) { + var args = slice(arguments, 1); + return function(/*callArgs*/) { + var callArgs = slice(arguments); + return fn.apply(null, args.concat(callArgs)); + }; +}; + +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); +} + +/** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, 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 {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns undefined + * @example + * + * async.auto({ + * // this function will just be passed a callback + * readData: async.apply(fs.readFile, 'data.txt', 'utf-8'), + * showData: ['readData', function(results, cb) { + * // results.readData is the file's contents + * // ... + * }] + * }, callback); + * + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * console.log('in write_file', JSON.stringify(results)); + * // 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(results, callback) { + * console.log('in email_link', JSON.stringify(results)); + * // once the file is written let's email a link to it... + * // results.write_file contains the filename returned by write_file. + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * console.log('err = ', err); + * console.log('results = ', results); + * }); + */ +var auto = function (tasks, concurrency, callback) { + if (typeof concurrency === 'function') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = once(callback || noop); + var keys$$1 = keys(tasks); + var numTasks = keys$$1.length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + baseForOwn(tasks, function (task, key) { + if (!isArray(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + arrayEach(dependencies, function (dependencyName) { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + + '` has a non-existent dependency `' + + dependencyName + '` in ' + + dependencies.join(', ')); + } + addListener(dependencyName, function () { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(function () { + runTask(key, task); + }); + } + + function processQueue() { + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while(readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + arrayEach(taskListeners, function (fn) { + fn(); + }); + processQueue(); + } + + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = onlyOnce(function(err, result) { + runningTasks--; + if (arguments.length > 2) { + result = slice(arguments, 1); + } + if (err) { + var safeResults = {}; + baseForOwn(results, function(val, rkey) { + safeResults[rkey] = val; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = wrapAsync(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + arrayEach(getDependents(currentTask), function (dependent) { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error( + 'async.auto cannot execute tasks due to a recursive dependency' + ); + } + } + + function getDependents(taskName) { + var result = []; + baseForOwn(tasks, function (task, key) { + if (isArray(task) && baseIndexOf(task, taskName, 0) >= 0) { + result.push(key); + } + }); + return result; + } +}; + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined; +var symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ +function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +/** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ +function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff'; +var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23'; +var rsComboSymbolsRange = '\\u20d0-\\u20f0'; +var rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange$1 = '\\ud800-\\udfff'; +var rsComboMarksRange$1 = '\\u0300-\\u036f\\ufe20-\\ufe23'; +var rsComboSymbolsRange$1 = '\\u20d0-\\u20f0'; +var rsVarRange$1 = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange$1 + ']'; +var rsCombo = '[' + rsComboMarksRange$1 + rsComboSymbolsRange$1 + ']'; +var rsFitz = '\\ud83c[\\udffb-\\udfff]'; +var rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')'; +var rsNonAstral = '[^' + rsAstralRange$1 + ']'; +var rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}'; +var rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]'; +var rsZWJ$1 = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?'; +var rsOptVar = '[' + rsVarRange$1 + ']?'; +var rsOptJoin = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*'; +var rsSeq = rsOptVar + reOptMod + rsOptJoin; +var rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** + * Removes leading and trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trim(' abc '); + * // => 'abc' + * + * _.trim('-_-abc-_-', '_-'); + * // => 'abc' + * + * _.map([' foo ', ' bar '], _.trim); + * // => ['foo', 'bar'] + */ +function trim(string, chars, guard) { + string = toString(string); + if (string && (guard || chars === undefined)) { + return string.replace(reTrim, ''); + } + if (!string || !(chars = baseToString(chars))) { + return string; + } + var strSymbols = stringToArray(string), + chrSymbols = stringToArray(chars), + start = charsStartIndex(strSymbols, chrSymbols), + end = charsEndIndex(strSymbols, chrSymbols) + 1; + + return castSlice(strSymbols, start, end).join(''); +} + +var FN_ARGS = /^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARG_SPLIT = /,/; +var FN_ARG = /(=.+)?(\s*)$/; +var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; + +function parseParams(func) { + func = func.toString().replace(STRIP_COMMENTS, ''); + func = func.match(FN_ARGS)[2].replace(' ', ''); + func = func ? func.split(FN_ARG_SPLIT) : []; + func = func.map(function (arg){ + return trim(arg.replace(FN_ARG, '')); + }); + return func; +} + +/** + * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent + * tasks are specified as parameters to the function, after the usual callback + * parameter, with the parameter names matching the names of the tasks it + * depends on. This can provide even more readable task graphs which can be + * easier to maintain. + * + * If a final callback is specified, the task results are similarly injected, + * specified as named parameters after the initial error parameter. + * + * The autoInject function is purely syntactic sugar and its semantics are + * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. + * + * @name autoInject + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.auto]{@link module:ControlFlow.auto} + * @category Control Flow + * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of + * the form 'func([dependencies...], callback). The object's key of a property + * serves as the name of the task defined by that property, i.e. can be used + * when specifying requirements for other tasks. + * * The `callback` parameter is 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. The remaining parameters name other tasks on + * which the task is dependent, and the results from those tasks are the + * arguments of those parameters. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback, and a `results` object with any completed + * task results, similar to `auto`. + * @example + * + * // The example from `auto` can be rewritten as follows: + * async.autoInject({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * 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 + * callback(null, 'folder'); + * }, + * write_file: function(get_data, make_folder, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }, + * email_link: function(write_file, callback) { + * // once the file is written let's email a link to it... + * // write_file contains the filename returned by write_file. + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * } + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + * + * // If you are using a JS minifier that mangles parameter names, `autoInject` + * // will not work with plain functions, since the parameter names will be + * // collapsed to a single letter identifier. To work around this, you can + * // explicitly specify the names of the parameters your task function needs + * // in an array, similar to Angular.js dependency injection. + * + * // This still has an advantage over plain `auto`, since the results a task + * // depends on are still spread into arguments. + * async.autoInject({ + * //... + * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(write_file, callback) { + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * }] + * //... + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + */ +function autoInject(tasks, callback) { + var newTasks = {}; + + baseForOwn(tasks, function (taskFn, key) { + var params; + var fnIsAsync = isAsync(taskFn); + var hasNoDeps = + (!fnIsAsync && taskFn.length === 1) || + (fnIsAsync && taskFn.length === 0); + + if (isArray(taskFn)) { + params = taskFn.slice(0, -1); + taskFn = taskFn[taskFn.length - 1]; + + newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); + } else if (hasNoDeps) { + // no dependencies, use the function as-is + newTasks[key] = taskFn; + } else { + params = parseParams(taskFn); + if (taskFn.length === 0 && !fnIsAsync && params.length === 0) { + throw new Error("autoInject task functions require explicit parameters."); + } + + // remove callback param + if (!fnIsAsync) params.pop(); + + newTasks[key] = params.concat(newTask); + } + + function newTask(results, taskCb) { + var newArgs = arrayMap(params, function (name) { + return results[name]; + }); + newArgs.push(taskCb); + wrapAsync(taskFn).apply(null, newArgs); + } + }); + + auto(newTasks, callback); +} + +// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation +// used for queues. This implementation assumes that the node provided by the user can be modified +// to adjust the next and last properties. We implement only the minimal functionality +// for queue support. +function DLL() { + this.head = this.tail = null; + this.length = 0; +} + +function setInitial(dll, node) { + dll.length = 1; + dll.head = dll.tail = node; +} + +DLL.prototype.removeLink = function(node) { + if (node.prev) node.prev.next = node.next; + else this.head = node.next; + if (node.next) node.next.prev = node.prev; + else this.tail = node.prev; + + node.prev = node.next = null; + this.length -= 1; + return node; +}; + +DLL.prototype.empty = function () { + while(this.head) this.shift(); + return this; +}; + +DLL.prototype.insertAfter = function(node, newNode) { + newNode.prev = node; + newNode.next = node.next; + if (node.next) node.next.prev = newNode; + else this.tail = newNode; + node.next = newNode; + this.length += 1; +}; + +DLL.prototype.insertBefore = function(node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) node.prev.next = newNode; + else this.head = newNode; + node.prev = newNode; + this.length += 1; +}; + +DLL.prototype.unshift = function(node) { + if (this.head) this.insertBefore(this.head, node); + else setInitial(this, node); +}; + +DLL.prototype.push = function(node) { + if (this.tail) this.insertAfter(this.tail, node); + else setInitial(this, node); +}; + +DLL.prototype.shift = function() { + return this.head && this.removeLink(this.head); +}; + +DLL.prototype.pop = function() { + return this.tail && this.removeLink(this.tail); +}; + +DLL.prototype.toArray = function () { + var arr = Array(this.length); + var curr = this.head; + for(var idx = 0; idx < this.length; idx++) { + arr[idx] = curr.data; + curr = curr.next; + } + return arr; +}; + +DLL.prototype.remove = function (testFn) { + var curr = this.head; + while(!!curr) { + var next = curr.next; + if (testFn(curr)) { + this.removeLink(curr); + } + curr = next; + } + return this; +}; + +function queue(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } + else if(concurrency === 0) { + throw new Error('Concurrency must not be zero'); + } + + var _worker = wrapAsync(worker); + var numRunning = 0; + var workersList = []; + + function _insert(data, insertAtFront, callback) { + if (callback != null && typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!isArray(data)) { + data = [data]; + } + if (data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + return setImmediate$1(function() { + q.drain(); + }); + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + callback: callback || noop + }; + + if (insertAtFront) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + } + setImmediate$1(q.process); + } + + function _next(tasks) { + return function(err){ + numRunning -= 1; + + for (var i = 0, l = tasks.length; i < l; i++) { + var task = tasks[i]; + var index = baseIndexOf(workersList, task, 0); + if (index >= 0) { + workersList.splice(index); + } + + task.callback.apply(task, arguments); + + if (err != null) { + q.error(err, task.data); + } + } + + if (numRunning <= (q.concurrency - q.buffer) ) { + q.unsaturated(); + } + + if (q.idle()) { + q.drain(); + } + q.process(); + }; + } + + var isProcessing = false; + var q = { + _tasks: new DLL(), + concurrency: concurrency, + payload: payload, + saturated: noop, + unsaturated:noop, + buffer: concurrency / 4, + empty: noop, + drain: noop, + error: noop, + started: false, + paused: false, + push: function (data, callback) { + _insert(data, false, callback); + }, + kill: function () { + q.drain = noop; + q._tasks.empty(); + }, + unshift: function (data, callback) { + _insert(data, true, callback); + }, + remove: function (testFn) { + q._tasks.remove(testFn); + }, + process: function () { + // Avoid trying to start too many processing operations. This can occur + // when callbacks resolve synchronously (#1267). + if (isProcessing) { + return; + } + isProcessing = true; + while(!q.paused && numRunning < q.concurrency && q._tasks.length){ + var tasks = [], data = []; + var l = q._tasks.length; + if (q.payload) l = Math.min(l, q.payload); + for (var i = 0; i < l; i++) { + var node = q._tasks.shift(); + tasks.push(node); + data.push(node.data); + } + + numRunning += 1; + workersList.push(tasks[0]); + + if (q._tasks.length === 0) { + q.empty(); + } + + if (numRunning === q.concurrency) { + q.saturated(); + } + + var cb = onlyOnce(_next(tasks)); + _worker(data, cb); + } + isProcessing = false; + }, + length: function () { + return q._tasks.length; + }, + running: function () { + return numRunning; + }, + workersList: function () { + return workersList; + }, + idle: function() { + return q._tasks.length + numRunning === 0; + }, + pause: function () { + q.paused = true; + }, + resume: function () { + if (q.paused === false) { return; } + q.paused = false; + setImmediate$1(q.process); + } + }; + return q; +} + +/** + * A cargo of tasks for the worker function to complete. Cargo inherits all of + * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}. + * @typedef {Object} CargoObject + * @memberOf module:ControlFlow + * @property {Function} length - A function returning the number of items + * waiting to be processed. Invoke like `cargo.length()`. + * @property {number} 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. + * @property {Function} push - Adds `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. Invoke like `cargo.push(task, [callback])`. + * @property {Function} saturated - A callback that is called when the + * `queue.length()` hits the concurrency and further tasks will be queued. + * @property {Function} empty - A callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - A callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke like `cargo.idle()`. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke like `cargo.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke like `cargo.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`. + */ + +/** + * 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 becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i true + */ +function identity(value) { + return value; +} + +function _createTester(check, getResult) { + return function(eachfn, arr, iteratee, cb) { + cb = cb || noop; + var testPassed = false; + var testResult; + eachfn(arr, function(value, _, callback) { + iteratee(value, function(err, result) { + if (err) { + callback(err); + } else if (check(result) && !testResult) { + testPassed = true; + testResult = getResult(true, value); + callback(null, breakLoop); + } else { + callback(); + } + }); + }, function(err) { + if (err) { + cb(err); + } else { + cb(null, testPassed ? testResult : getResult(false)); + } + }); + }; +} + +function _findGetResult(v, x) { + return x; +} + +/** + * Returns the first value in `coll` that passes an async truth test. The + * `iteratee` is applied in parallel, meaning the first iteratee to return + * `true` will fire the detect `callback` with that result. That means the + * result might not be the first item in the original `coll` (in terms of order) + * that passes the test. + + * If order within the original `coll` is important, then look at + * [`detectSeries`]{@link module:Collections.detectSeries}. + * + * @name detect + * @static + * @memberOf module:Collections + * @method + * @alias find + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @example + * + * async.detect(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // result now equals the first file in the list that exists + * }); + */ +var detect = doParallel(_createTester(identity, _findGetResult)); + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a + * time. + * + * @name detectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findLimit + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + */ +var detectLimit = doParallelLimit(_createTester(identity, _findGetResult)); + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time. + * + * @name detectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findSeries + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + */ +var detectSeries = doLimit(detectLimit, 1); + +function consoleFunc(name) { + return function (fn/*, ...args*/) { + var args = slice(arguments, 1); + args.push(function (err/*, ...args*/) { + var args = slice(arguments, 1); + if (typeof console === 'object') { + if (err) { + if (console.error) { + console.error(err); + } + } else if (console[name]) { + arrayEach(args, function (x) { + console[name](x); + }); + } + } + }); + wrapAsync(fn).apply(null, args); + }; +} + +/** + * Logs the result of an [`async` function]{@link AsyncFunction} 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. + * + * @name dir + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, {hello: name}); + * }, 1000); + * }; + * + * // in the node repl + * node> async.dir(hello, 'world'); + * {hello: 'world'} + */ +var dir = consoleFunc('dir'); + +/** + * The post-check version of [`during`]{@link module:ControlFlow.during}. To reflect the difference in + * the order of operations, the arguments `test` and `fn` are switched. + * + * Also a version of [`doWhilst`]{@link module:ControlFlow.doWhilst} with asynchronous `test` function. + * @name doDuring + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.during]{@link module:ControlFlow.during} + * @category Control Flow + * @param {AsyncFunction} fn - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `fn`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `fn`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `fn` has stopped. `callback` + * will be passed an error if one occurred, otherwise `null`. + */ +function doDuring(fn, test, callback) { + callback = onlyOnce(callback || noop); + var _fn = wrapAsync(fn); + var _test = wrapAsync(test); + + function next(err/*, ...args*/) { + if (err) return callback(err); + var args = slice(arguments, 1); + args.push(check); + _test.apply(this, args); + } + + function check(err, truth) { + if (err) return callback(err); + if (!truth) return callback(null); + _fn(next); + } + + check(null, true); + +} + +/** + * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in + * the order of operations, the arguments `test` and `iteratee` are switched. + * + * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + * + * @name doWhilst + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - A function which is called each time `test` + * passes. Invoked with (callback). + * @param {Function} test - synchronous truth test to perform after each + * execution of `iteratee`. Invoked with any non-error callback results of + * `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. + * `callback` will be passed an error and any arguments passed to the final + * `iteratee`'s callback. Invoked with (err, [results]); + */ +function doWhilst(iteratee, test, callback) { + callback = onlyOnce(callback || noop); + var _iteratee = wrapAsync(iteratee); + var next = function(err/*, ...args*/) { + if (err) return callback(err); + var args = slice(arguments, 1); + if (test.apply(this, args)) return _iteratee(next); + callback.apply(null, [null].concat(args)); + }; + _iteratee(next); +} + +/** + * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the + * argument ordering differs from `until`. + * + * @name doUntil + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.doWhilst]{@link module:ControlFlow.doWhilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} test - synchronous truth test to perform after each + * execution of `iteratee`. Invoked with any non-error callback results of + * `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function doUntil(iteratee, test, callback) { + doWhilst(iteratee, function() { + return !test.apply(this, arguments); + }, callback); +} + +/** + * Like [`whilst`]{@link module:ControlFlow.whilst}, except the `test` is an asynchronous function that + * is passed a callback in the form of `function (err, truth)`. If error is + * passed to `test` or `fn`, the main callback is immediately called with the + * value of the error. + * + * @name during + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `fn`. Invoked with (callback). + * @param {AsyncFunction} fn - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `fn` has stopped. `callback` + * will be passed an error, if one occurred, otherwise `null`. + * @example + * + * var count = 0; + * + * async.during( + * function (callback) { + * return callback(null, count < 5); + * }, + * function (callback) { + * count++; + * setTimeout(callback, 1000); + * }, + * function (err) { + * // 5 seconds have passed + * } + * ); + */ +function during(test, fn, callback) { + callback = onlyOnce(callback || noop); + var _fn = wrapAsync(fn); + var _test = wrapAsync(test); + + function next(err) { + if (err) return callback(err); + _test(check); + } + + function check(err, truth) { + if (err) return callback(err); + if (!truth) return callback(null); + _fn(next); + } + + _test(check); +} + +function _withoutIndex(iteratee) { + return function (value, index, callback) { + return iteratee(value, callback); + }; +} + +/** + * Applies the function `iteratee` to each item in `coll`, in parallel. + * The `iteratee` is called with an item from the list, and a callback for when + * it has finished. If the `iteratee` passes an error to its `callback`, the + * main `callback` (for the `each` function) is immediately called with the + * error. + * + * Note, that since this function applies `iteratee` to each item in parallel, + * there is no guarantee that the iteratee functions will complete in order. + * + * @name each + * @static + * @memberOf module:Collections + * @method + * @alias forEach + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to + * each item in `coll`. Invoked with (item, callback). + * The array index is not passed to the iteratee. + * If you need the index, use `eachOf`. + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @example + * + * // 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 + * }); + * + * // assuming openFiles is an array of file names + * async.each(openFiles, function(file, callback) { + * + * // Perform operation on file here. + * console.log('Processing file ' + file); + * + * if( file.length > 32 ) { + * console.log('This file name is too long'); + * callback('File name too long'); + * } else { + * // Do work to process file here + * console.log('File processed'); + * callback(); + * } + * }, function(err) { + * // if any of the file processing produced an error, err would equal that error + * if( err ) { + * // One of the iterations produced an error. + * // All processing will now stop. + * console.log('A file failed to process'); + * } else { + * console.log('All files have been processed successfully'); + * } + * }); + */ +function eachLimit(coll, iteratee, callback) { + eachOf(coll, _withoutIndex(wrapAsync(iteratee)), callback); +} + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachLimit$1(coll, limit, iteratee, callback) { + _eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback); +} + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +var eachSeries = doLimit(eachLimit$1, 1); + +/** + * Wrap an async function and ensure it calls its callback on a later tick of + * the event loop. If the function already calls its callback on a next tick, + * no extra deferral is added. This is useful for preventing stack overflows + * (`RangeError: Maximum call stack size exceeded`) and generally keeping + * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) + * contained. ES2017 `async` functions are returned as-is -- they are immune + * to Zalgo's corrupting influences, as they always resolve on a later tick. + * + * @name ensureAsync + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - an async function, one that expects a node-style + * callback as its last argument. + * @returns {AsyncFunction} Returns a wrapped function with the exact same call + * signature as the function passed in. + * @example + * + * function sometimesAsync(arg, callback) { + * if (cache[arg]) { + * return callback(null, cache[arg]); // this would be synchronous!! + * } else { + * doSomeIO(arg, callback); // this IO would be asynchronous + * } + * } + * + * // this has a risk of stack overflows if many results are cached in a row + * async.mapSeries(args, sometimesAsync, done); + * + * // this will defer sometimesAsync's callback if necessary, + * // preventing stack overflows + * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + */ +function ensureAsync(fn) { + if (isAsync(fn)) return fn; + return initialParams(function (args, callback) { + var sync = true; + args.push(function () { + var innerArgs = arguments; + if (sync) { + setImmediate$1(function () { + callback.apply(null, innerArgs); + }); + } else { + callback.apply(null, innerArgs); + } + }); + fn.apply(this, args); + sync = false; + }); +} + +function notId(v) { + return !v; +} + +/** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @example + * + * async.every(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then every file exists + * }); + */ +var every = doParallel(_createTester(notId, notId)); + +/** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +var everyLimit = doParallelLimit(_createTester(notId, notId)); + +/** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +var everySeries = doLimit(everyLimit, 1); + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +function filterArray(eachfn, arr, iteratee, callback) { + var truthValues = new Array(arr.length); + eachfn(arr, function (x, index, callback) { + iteratee(x, function (err, v) { + truthValues[index] = !!v; + callback(err); + }); + }, function (err) { + if (err) return callback(err); + var results = []; + for (var i = 0; i < arr.length; i++) { + if (truthValues[i]) results.push(arr[i]); + } + callback(null, results); + }); +} + +function filterGeneric(eachfn, coll, iteratee, callback) { + var results = []; + eachfn(coll, function (x, index, callback) { + iteratee(x, function (err, v) { + if (err) { + callback(err); + } else { + if (v) { + results.push({index: index, value: x}); + } + callback(); + } + }); + }, function (err) { + if (err) { + callback(err); + } else { + callback(null, arrayMap(results.sort(function (a, b) { + return a.index - b.index; + }), baseProperty('value'))); + } + }); +} + +function _filter(eachfn, coll, iteratee, callback) { + var filter = isArrayLike(coll) ? filterArray : filterGeneric; + filter(eachfn, coll, wrapAsync(iteratee), callback || noop); +} + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.filter(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of the existing files + * }); + */ +var filter = doParallel(_filter); + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var filterLimit = doParallelLimit(_filter); + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + */ +var filterSeries = doLimit(filterLimit, 1); + +/** + * Calls the asynchronous function `fn` with a callback parameter that allows it + * to call itself again, in series, indefinitely. + + * If an error is passed to the callback then `errback` is called with the + * error, and execution stops, otherwise it will never be called. + * + * @name forever + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} fn - an async function to call repeatedly. + * Invoked with (next). + * @param {Function} [errback] - when `fn` passes an error to it's callback, + * this function will be called, and execution stops. Invoked with (err). + * @example + * + * async.forever( + * function(next) { + * // next is suitable for passing to things that need a callback(err [, whatever]); + * // it will result in this function being called again. + * }, + * function(err) { + * // if next is called with a value in its first parameter, it will appear + * // in here as 'err', and execution will stop. + * } + * ); + */ +function forever(fn, errback) { + var done = onlyOnce(errback || noop); + var task = wrapAsync(ensureAsync(fn)); + + function next(err) { + if (err) return done(err); + task(next); + } + next(); +} + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. + * + * @name groupByLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +var groupByLimit = function(coll, limit, iteratee, callback) { + callback = callback || noop; + var _iteratee = wrapAsync(iteratee); + mapLimit(coll, limit, function(val, callback) { + _iteratee(val, function(err, key) { + if (err) return callback(err); + return callback(null, {key: key, val: val}); + }); + }, function(err, mapResults) { + var result = {}; + // from MDN, handle object having an `hasOwnProperty` prop + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + var key = mapResults[i].key; + var val = mapResults[i].val; + + if (hasOwnProperty.call(result, key)) { + result[key].push(val); + } else { + result[key] = [val]; + } + } + } + + return callback(err, result); + }); +}; + +/** + * Returns a new object, where each value corresponds to an array of items, from + * `coll`, that returned the corresponding key. That is, the keys of the object + * correspond to the values passed to the `iteratee` callback. + * + * Note: Since this function applies the `iteratee` to each item in parallel, + * there is no guarantee that the `iteratee` functions will complete in order. + * However, the values for each key in the `result` will be in the same order as + * the original `coll`. For Objects, the values will roughly be in the order of + * the original Objects' keys (but this can vary across JavaScript engines). + * + * @name groupBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @example + * + * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) { + * db.findById(userId, function(err, user) { + * if (err) return callback(err); + * return callback(null, user.age); + * }); + * }, function(err, result) { + * // result is object containing the userIds grouped by age + * // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']}; + * }); + */ +var groupBy = doLimit(groupByLimit, Infinity); + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +var groupBySeries = doLimit(groupByLimit, 1); + +/** + * 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. + * + * @name log + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, 'hello ' + name); + * }, 1000); + * }; + * + * // in the node repl + * node> async.log(hello, 'world'); + * 'hello world' + */ +var log = consoleFunc('log'); + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a + * time. + * + * @name mapValuesLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +function mapValuesLimit(obj, limit, iteratee, callback) { + callback = once(callback || noop); + var newObj = {}; + var _iteratee = wrapAsync(iteratee); + eachOfLimit(obj, limit, function(val, key, next) { + _iteratee(val, key, function (err, result) { + if (err) return next(err); + newObj[key] = result; + next(); + }); + }, function (err) { + callback(err, newObj); + }); +} + +/** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @example + * + * async.mapValues({ + * f1: 'file1', + * f2: 'file2', + * f3: 'file3' + * }, function (file, key, callback) { + * fs.stat(file, callback); + * }, function(err, result) { + * // result is now a map of stats for each file, e.g. + * // { + * // f1: [stats for file1], + * // f2: [stats for file2], + * // f3: [stats for file3] + * // } + * }); + */ + +var mapValues = doLimit(mapValuesLimit, Infinity); + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. + * + * @name mapValuesSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +var mapValuesSeries = doLimit(mapValuesLimit, 1); + +function has(obj, key) { + return key in obj; +} + +/** + * 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. + * + * If no hash function is specified, the first argument is used as a hash key, + * which may work reasonably if it is a string or a data type that converts to a + * distinct string. Note that objects and arrays will not behave reasonably. + * Neither will cases where the other arguments are significant. In such cases, + * specify your own hash function. + * + * The cache of results is exposed as the `memo` property of the function + * returned by `memoize`. + * + * @name memoize + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function to proxy and cache results from. + * @param {Function} 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. + * @returns {AsyncFunction} a memoized version of `fn` + * @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 + * }); + */ +function memoize(fn, hasher) { + var memo = Object.create(null); + var queues = Object.create(null); + hasher = hasher || identity; + var _fn = wrapAsync(fn); + var memoized = initialParams(function memoized(args, callback) { + var key = hasher.apply(null, args); + if (has(memo, key)) { + setImmediate$1(function() { + callback.apply(null, memo[key]); + }); + } else if (has(queues, key)) { + queues[key].push(callback); + } else { + queues[key] = [callback]; + _fn.apply(null, args.concat(function(/*args*/) { + var args = slice(arguments); + memo[key] = args; + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i].apply(null, args); + } + })); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; +} + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `setImmediate`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @alias setImmediate + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +var _defer$1; + +if (hasNextTick) { + _defer$1 = process.nextTick; +} else if (hasSetImmediate) { + _defer$1 = setImmediate; +} else { + _defer$1 = fallback; +} + +var nextTick = wrap(_defer$1); + +function _parallel(eachfn, tasks, callback) { + callback = callback || noop; + var results = isArrayLike(tasks) ? [] : {}; + + eachfn(tasks, function (task, key, callback) { + wrapAsync(task)(function (err, result) { + if (arguments.length > 2) { + result = slice(arguments, 1); + } + results[key] = result; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} + +/** + * Run the `tasks` collection 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. + * + * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about + * parallel execution of code. If your tasks do not use any timers or perform + * any I/O, they will actually be executed in series. Any synchronous setup + * sections for each task will happen one after the other. JavaScript remains + * single-threaded. + * + * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the + * execution of other tasks when a task fails. + * + * 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 {@link async.parallel}. + * + * @name parallel + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * + * @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} + * }); + */ +function parallelLimit(tasks, callback) { + _parallel(eachOf, tasks, callback); +} + +/** + * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a + * time. + * + * @name parallelLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.parallel]{@link module:ControlFlow.parallel} + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + */ +function parallelLimit$1(tasks, limit, callback) { + _parallel(_eachOfLimit(limit), tasks, callback); +} + +/** + * A queue of tasks for the worker function to complete. + * @typedef {Object} QueueObject + * @memberOf module:ControlFlow + * @property {Function} length - a function returning the number of items + * waiting to be processed. Invoke with `queue.length()`. + * @property {boolean} started - a boolean indicating whether or not any + * items have been pushed and processed by the queue. + * @property {Function} running - a function returning the number of items + * currently being processed. Invoke with `queue.running()`. + * @property {Function} workersList - a function returning the array of items + * currently being processed. Invoke with `queue.workersList()`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke with `queue.idle()`. + * @property {number} 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. + * @property {Function} push - add a new task to the `queue`. Calls `callback` + * once the `worker` has finished processing the task. Instead of a single task, + * a `tasks` array can be submitted. The respective callback is used for every + * task in the list. Invoke with `queue.push(task, [callback])`, + * @property {Function} unshift - add a new task to the front of the `queue`. + * Invoke with `queue.unshift(task, [callback])`. + * @property {Function} remove - remove items from the queue that match a test + * function. The test function will be passed an object with a `data` property, + * and a `priority` property, if this is a + * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. + * Invoked with `queue.remove(testFn)`, where `testFn` is of the form + * `function ({data, priority}) {}` and returns a Boolean. + * @property {Function} saturated - a callback that is called when the number of + * running workers hits the `concurrency` limit, and further tasks will be + * queued. + * @property {Function} unsaturated - a callback that is called when the number + * of running workers is less than the `concurrency` & `buffer` limits, and + * further tasks will not be queued. + * @property {number} buffer - A minimum threshold buffer in order to say that + * the `queue` is `unsaturated`. + * @property {Function} empty - a callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - a callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} error - a callback that is called when a task errors. + * Has the signature `function(error, task)`. + * @property {boolean} paused - a boolean for determining whether the queue is + * in a paused state. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke with `queue.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke with `queue.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. Invoke with `queue.kill()`. + */ + +/** + * Creates a `queue` object with the specified `concurrency`. Tasks added to the + * `queue` are processed in parallel (up to the `concurrency` limit). If all + * `worker`s are in progress, the task is queued until one becomes available. + * Once a `worker` completes a `task`, that `task`'s callback is called. + * + * @name queue + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. Invoked with (task, callback). + * @param {number} [concurrency=1] - An `integer` for determining how many + * `worker` functions should be run in parallel. If omitted, the concurrency + * defaults to `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the queue. + * @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 item'); + * }); + * + * // add some items to the front of the queue + * q.unshift({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + */ +var queue$1 = function (worker, concurrency) { + var _worker = wrapAsync(worker); + return queue(function (items, cb) { + _worker(items[0], cb); + }, concurrency, 1); +}; + +/** + * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and + * completed in ascending priority order. + * + * @name priorityQueue + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. + * Invoked with (task, callback). + * @param {number} concurrency - An `integer` for determining how many `worker` + * functions should be run in parallel. If omitted, the concurrency defaults to + * `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two + * differences between `queue` and `priorityQueue` objects: + * * `push(task, priority, [callback])` - `priority` should be a number. If an + * array of `tasks` is given, all tasks will be assigned the same priority. + * * The `unshift` method was removed. + */ +var priorityQueue = function(worker, concurrency) { + // Start with a normal queue + var q = queue$1(worker, concurrency); + + // Override push to accept second parameter representing priority + q.push = function(data, priority, callback) { + if (callback == null) callback = noop; + if (typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!isArray(data)) { + data = [data]; + } + if (data.length === 0) { + // call drain immediately if there are no tasks + return setImmediate$1(function() { + q.drain(); + }); + } + + priority = priority || 0; + var nextNode = q._tasks.head; + while (nextNode && priority >= nextNode.priority) { + nextNode = nextNode.next; + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + priority: priority, + callback: callback + }; + + if (nextNode) { + q._tasks.insertBefore(nextNode, item); + } else { + q._tasks.push(item); + } + } + setImmediate$1(q.process); + }; + + // Remove unshift function + delete q.unshift; + + return q; +}; + +/** + * Runs the `tasks` array of functions in parallel, without waiting until the + * previous function has completed. Once any of the `tasks` complete or pass an + * error to its callback, the main `callback` is immediately called. It's + * equivalent to `Promise.race()`. + * + * @name race + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} + * to run. Each function can complete with an optional `result` value. + * @param {Function} callback - A callback to run once any of the functions have + * completed. This function gets an error or result from the first function that + * completed. Invoked with (err, result). + * @returns undefined + * @example + * + * async.race([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // main callback + * function(err, result) { + * // the result will be equal to 'two' as it finishes earlier + * }); + */ +function race(tasks, callback) { + callback = once(callback || noop); + if (!isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); + if (!tasks.length) return callback(); + for (var i = 0, l = tasks.length; i < l; i++) { + wrapAsync(tasks[i])(callback); + } +} + +/** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee complete with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + */ +function reduceRight (array, memo, iteratee, callback) { + var reversed = slice(array).reverse(); + reduce(reversed, memo, iteratee, callback); +} + +/** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ +function reflect(fn) { + var _fn = wrapAsync(fn); + return initialParams(function reflectOn(args, reflectCallback) { + args.push(function callback(error, cbArg) { + if (error) { + reflectCallback(null, { error: error }); + } else { + var value; + if (arguments.length <= 2) { + value = cbArg; + } else { + value = slice(arguments, 1); + } + reflectCallback(null, { value: value }); + } + }); + + return _fn.apply(this, args); + }); +} + +function reject$1(eachfn, arr, iteratee, callback) { + _filter(eachfn, arr, function(value, cb) { + iteratee(value, function(err, v) { + cb(err, !v); + }); + }, callback); +} + +/** + * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. + * + * @name reject + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.reject(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of missing files + * createFiles(results); + * }); + */ +var reject = doParallel(reject$1); + +/** + * A helper function that wraps an array or an object of functions with `reflect`. + * + * @name reflectAll + * @static + * @memberOf module:Utils + * @method + * @see [async.reflect]{@link module:Utils.reflect} + * @category Util + * @param {Array|Object|Iterable} tasks - The collection of + * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. + * @returns {Array} Returns an array of async functions, each wrapped in + * `async.reflect` + * @example + * + * let tasks = [ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * // do some more stuff but error ... + * callback(new Error('bad stuff happened')); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = Error('bad stuff happened') + * // results[2].value = 'two' + * }); + * + * // an example using an object instead of an array + * let tasks = { + * one: function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * two: function(callback) { + * callback('two'); + * }, + * three: function(callback) { + * setTimeout(function() { + * callback(null, 'three'); + * }, 100); + * } + * }; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results.one.value = 'one' + * // results.two.error = 'two' + * // results.three.value = 'three' + * }); + */ +function reflectAll(tasks) { + var results; + if (isArray(tasks)) { + results = arrayMap(tasks, reflect); + } else { + results = {}; + baseForOwn(tasks, function(task, key) { + results[key] = reflect.call(this, task); + }); + } + return results; +} + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var rejectLimit = doParallelLimit(reject$1); + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var rejectSeries = doLimit(rejectLimit, 1); + +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant$1(value) { + return function() { + return value; + }; +} + +/** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // It can also be embedded within other control flow functions to retry + * // individual methods that are not as reliable, like this: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ +function retry(opts, task, callback) { + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var options = { + times: DEFAULT_TIMES, + intervalFunc: constant$1(DEFAULT_INTERVAL) + }; + + function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? + t.interval : + constant$1(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } + } + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || noop; + task = opts; + } else { + parseTimes(options, opts); + callback = callback || noop; + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = wrapAsync(task); + + var attempt = 1; + function retryAttempt() { + _task(function(err) { + if (err && attempt++ < options.times && + (typeof options.errorFilter != 'function' || + options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt)); + } else { + callback.apply(null, arguments); + } + }); + } + + retryAttempt(); +} + +/** + * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method + * wraps a task and makes it retryable, rather than immediately calling it + * with retries. + * + * @name retryable + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.retry]{@link module:ControlFlow.retry} + * @category Control Flow + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional + * options, exactly the same as from `retry` + * @param {AsyncFunction} task - the asynchronous function to wrap. + * This function will be passed any arguments passed to the returned wrapper. + * Invoked with (...args, callback). + * @returns {AsyncFunction} The wrapped function, which when invoked, will + * retry on an error, based on the parameters specified in `opts`. + * This function will accept the same parameters as `task`. + * @example + * + * async.auto({ + * dep1: async.retryable(3, getFromFlakyService), + * process: ["dep1", async.retryable(3, function (results, cb) { + * maybeProcessData(results.dep1, cb); + * })] + * }, callback); + */ +var retryable = function (opts, task) { + if (!task) { + task = opts; + opts = null; + } + var _task = wrapAsync(task); + return initialParams(function (args, callback) { + function taskFn(cb) { + _task.apply(null, args.concat(cb)); + } + + if (opts) retry(opts, taskFn, callback); + else retry(taskFn, callback); + + }); +}; + +/** + * Run the functions in the `tasks` collection 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 `callback` is + * immediately called with the value of the error. Otherwise, `callback` + * receives an array of results when `tasks` have completed. + * + * 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 {@link async.series}. + * + * **Note** that while many implementations preserve the order of object + * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) + * explicitly states that + * + * > The mechanics and order of enumerating the properties is not specified. + * + * So if you rely on the order in which your series of functions are executed, + * and want this to work on all platforms, consider using an array. + * + * @name series + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing + * [async functions]{@link AsyncFunction} to run in series. + * Each function can complete with any number of optional `result` values. + * @param {Function} [callback] - 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. Invoked + * with (err, result). + * @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'] + * }); + * + * 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} + * }); + */ +function series(tasks, callback) { + _parallel(eachOfSeries, tasks, callback); +} + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @example + * + * async.some(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then at least one of the files exists + * }); + */ +var some = doParallel(_createTester(Boolean, identity)); + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +var someLimit = doParallelLimit(_createTester(Boolean, identity)); + +/** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +var someSeries = doLimit(someLimit, 1); + +/** + * Sorts a list by the results of running each `coll` value through an async + * `iteratee`. + * + * @name sortBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a value to use as the sort criteria as + * its `result`. + * Invoked with (item, callback). + * @param {Function} callback - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is the items + * from the original `coll` sorted by the values returned by the `iteratee` + * calls. Invoked with (err, results). + * @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 + * }); + * + * // By modifying the callback parameter the + * // sorting order can be influenced: + * + * // ascending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x); + * }, function(err,result) { + * // result callback + * }); + * + * // descending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x*-1); //<- x*-1 instead of x, turns the order around + * }, function(err,result) { + * // result callback + * }); + */ +function sortBy (coll, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + map(coll, function (x, callback) { + _iteratee(x, function (err, criteria) { + if (err) return callback(err); + callback(null, {value: x, criteria: criteria}); + }); + }, function (err, results) { + if (err) return callback(err); + callback(null, arrayMap(results.sort(comparator), baseProperty('value'))); + }); + + function comparator(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } +} + +/** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ +function timeout(asyncFn, milliseconds, info) { + var fn = wrapAsync(asyncFn); + + return initialParams(function (args, callback) { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push(function () { + if (!timedOut) { + callback.apply(null, arguments); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn.apply(null, args); + }); +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil; +var nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/** + * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a + * time. + * + * @name timesLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} count - The number of times to run the function. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see [async.map]{@link module:Collections.map}. + */ +function timeLimit(count, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + mapLimit(baseRange(0, count, 1), limit, _iteratee, callback); +} + +/** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @example + * + * // 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 + * }); + */ +var times = doLimit(timeLimit, Infinity); + +/** + * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. + * + * @name timesSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + */ +var timesSeries = doLimit(timeLimit, 1); + +/** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in series, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @example + * + * async.transform([1,2,3], function(acc, item, index, callback) { + * // pointless async: + * process.nextTick(function() { + * acc.push(item * 2) + * callback(null) + * }); + * }, function(err, result) { + * // result is now equal to [2, 4, 6] + * }); + * + * @example + * + * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) { + * setImmediate(function () { + * obj[key] = val * 2; + * callback(); + * }) + * }, function (err, result) { + * // result is equal to {a: 2, b: 4, c: 6} + * }) + */ +function transform (coll, accumulator, iteratee, callback) { + if (arguments.length <= 3) { + callback = iteratee; + iteratee = accumulator; + accumulator = isArray(coll) ? [] : {}; + } + callback = once(callback || noop); + var _iteratee = wrapAsync(iteratee); + + eachOf(coll, function(v, k, cb) { + _iteratee(accumulator, v, k, cb); + }, function(err) { + callback(err, accumulator); + }); +} + +/** + * It runs each task in series but stops whenever any of the functions were + * successful. If one of the tasks were successful, the `callback` will be + * passed the result of the successful task. If all tasks fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name tryEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing functions to + * run, each function is passed a `callback(err, result)` it must call on + * completion with an error `err` (which can be `null`) and an optional `result` + * value. + * @param {Function} [callback] - An optional callback which is called when one + * of the tasks has succeeded, or all have failed. It receives the `err` and + * `result` arguments of the last attempt at completing the `task`. Invoked with + * (err, results). + * @example + * async.try([ + * function getDataFromFirstWebsite(callback) { + * // Try getting the data from the first website + * callback(err, data); + * }, + * function getDataFromSecondWebsite(callback) { + * // First website failed, + * // Try getting the data from the backup website + * callback(err, data); + * } + * ], + * // optional callback + * function(err, results) { + * Now do something with the data. + * }); + * + */ +function tryEach(tasks, callback) { + var error = null; + var result; + callback = callback || noop; + eachSeries(tasks, function(task, callback) { + wrapAsync(task)(function (err, res/*, ...args*/) { + if (arguments.length > 2) { + result = slice(arguments, 1); + } else { + result = res; + } + error = err; + callback(!err); + }); + }, function () { + callback(error, result); + }); +} + +/** + * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, + * unmemoized form. Handy for testing. + * + * @name unmemoize + * @static + * @memberOf module:Utils + * @method + * @see [async.memoize]{@link module:Utils.memoize} + * @category Util + * @param {AsyncFunction} fn - the memoized function + * @returns {AsyncFunction} a function that calls the original unmemoized function + */ +function unmemoize(fn) { + return function () { + return (fn.unmemoized || fn).apply(null, arguments); + }; +} + +/** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns undefined + * @example + * + * var count = 0; + * async.whilst( + * function() { return count < 5; }, + * function(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ +function whilst(test, iteratee, callback) { + callback = onlyOnce(callback || noop); + var _iteratee = wrapAsync(iteratee); + if (!test()) return callback(null); + var next = function(err/*, ...args*/) { + if (err) return callback(err); + if (test()) return _iteratee(next); + var args = slice(arguments, 1); + callback.apply(null, [null].concat(args)); + }; + _iteratee(next); +} + +/** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function until(test, iteratee, callback) { + whilst(function() { + return !test.apply(this, arguments); + }, iteratee, callback); +} + +/** + * Runs the `tasks` array of functions in series, each passing their results to + * the next in the array. However, if any of the `tasks` pass an error to their + * own callback, the next function is not executed, and the main `callback` is + * immediately called with the error. + * + * @name waterfall + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} + * to run. + * Each function should complete with any number of `result` values. + * The `result` values will be passed as arguments, in order, to the next task. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This will be passed the results of the last task's + * callback. Invoked with (err, [results]). + * @returns undefined + * @example + * + * async.waterfall([ + * function(callback) { + * callback(null, 'one', 'two'); + * }, + * function(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * }, + * function(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + * ], function (err, result) { + * // result now equals 'done' + * }); + * + * // Or, with named functions: + * async.waterfall([ + * myFirstFunction, + * mySecondFunction, + * myLastFunction, + * ], function (err, result) { + * // result now equals 'done' + * }); + * function myFirstFunction(callback) { + * callback(null, 'one', 'two'); + * } + * function mySecondFunction(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * } + * function myLastFunction(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + */ +var waterfall = function(tasks, callback) { + callback = once(callback || noop); + if (!isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); + if (!tasks.length) return callback(); + var taskIndex = 0; + + function nextTask(args) { + var task = wrapAsync(tasks[taskIndex++]); + args.push(onlyOnce(next)); + task.apply(null, args); + } + + function next(err/*, ...args*/) { + if (err || taskIndex === tasks.length) { + return callback.apply(null, arguments); + } + nextTask(slice(arguments, 1)); + } + + nextTask([]); +}; + +/** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + +/** + * 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) and installable via + * `npm install --save async`, it can also be used directly in the browser. + * @module async + * @see AsyncFunction + */ + + +/** + * A collection of `async` functions for manipulating collections, such as + * arrays and objects. + * @module Collections + */ + +/** + * A collection of `async` functions for controlling the flow through a script. + * @module ControlFlow + */ + +/** + * A collection of `async` utility functions. + * @module Utils + */ + +var index = { + applyEach: applyEach, + applyEachSeries: applyEachSeries, + apply: apply, + asyncify: asyncify, + auto: auto, + autoInject: autoInject, + cargo: cargo, + compose: compose, + concat: concat, + concatSeries: concatSeries, + constant: constant, + detect: detect, + detectLimit: detectLimit, + detectSeries: detectSeries, + dir: dir, + doDuring: doDuring, + doUntil: doUntil, + doWhilst: doWhilst, + during: during, + each: eachLimit, + eachLimit: eachLimit$1, + eachOf: eachOf, + eachOfLimit: eachOfLimit, + eachOfSeries: eachOfSeries, + eachSeries: eachSeries, + ensureAsync: ensureAsync, + every: every, + everyLimit: everyLimit, + everySeries: everySeries, + filter: filter, + filterLimit: filterLimit, + filterSeries: filterSeries, + forever: forever, + groupBy: groupBy, + groupByLimit: groupByLimit, + groupBySeries: groupBySeries, + log: log, + map: map, + mapLimit: mapLimit, + mapSeries: mapSeries, + mapValues: mapValues, + mapValuesLimit: mapValuesLimit, + mapValuesSeries: mapValuesSeries, + memoize: memoize, + nextTick: nextTick, + parallel: parallelLimit, + parallelLimit: parallelLimit$1, + priorityQueue: priorityQueue, + queue: queue$1, + race: race, + reduce: reduce, + reduceRight: reduceRight, + reflect: reflect, + reflectAll: reflectAll, + reject: reject, + rejectLimit: rejectLimit, + rejectSeries: rejectSeries, + retry: retry, + retryable: retryable, + seq: seq, + series: series, + setImmediate: setImmediate$1, + some: some, + someLimit: someLimit, + someSeries: someSeries, + sortBy: sortBy, + timeout: timeout, + times: times, + timesLimit: timeLimit, + timesSeries: timesSeries, + transform: transform, + tryEach: tryEach, + unmemoize: unmemoize, + until: until, + waterfall: waterfall, + whilst: whilst, + + // aliases + all: every, + any: some, + forEach: eachLimit, + forEachSeries: eachSeries, + forEachLimit: eachLimit$1, + forEachOf: eachOf, + forEachOfSeries: eachOfSeries, + forEachOfLimit: eachOfLimit, + inject: reduce, + foldl: reduce, + foldr: reduceRight, + select: filter, + selectLimit: filterLimit, + selectSeries: filterSeries, + wrapSync: asyncify +}; + +exports['default'] = index; +exports.applyEach = applyEach; +exports.applyEachSeries = applyEachSeries; +exports.apply = apply; +exports.asyncify = asyncify; +exports.auto = auto; +exports.autoInject = autoInject; +exports.cargo = cargo; +exports.compose = compose; +exports.concat = concat; +exports.concatSeries = concatSeries; +exports.constant = constant; +exports.detect = detect; +exports.detectLimit = detectLimit; +exports.detectSeries = detectSeries; +exports.dir = dir; +exports.doDuring = doDuring; +exports.doUntil = doUntil; +exports.doWhilst = doWhilst; +exports.during = during; +exports.each = eachLimit; +exports.eachLimit = eachLimit$1; +exports.eachOf = eachOf; +exports.eachOfLimit = eachOfLimit; +exports.eachOfSeries = eachOfSeries; +exports.eachSeries = eachSeries; +exports.ensureAsync = ensureAsync; +exports.every = every; +exports.everyLimit = everyLimit; +exports.everySeries = everySeries; +exports.filter = filter; +exports.filterLimit = filterLimit; +exports.filterSeries = filterSeries; +exports.forever = forever; +exports.groupBy = groupBy; +exports.groupByLimit = groupByLimit; +exports.groupBySeries = groupBySeries; +exports.log = log; +exports.map = map; +exports.mapLimit = mapLimit; +exports.mapSeries = mapSeries; +exports.mapValues = mapValues; +exports.mapValuesLimit = mapValuesLimit; +exports.mapValuesSeries = mapValuesSeries; +exports.memoize = memoize; +exports.nextTick = nextTick; +exports.parallel = parallelLimit; +exports.parallelLimit = parallelLimit$1; +exports.priorityQueue = priorityQueue; +exports.queue = queue$1; +exports.race = race; +exports.reduce = reduce; +exports.reduceRight = reduceRight; +exports.reflect = reflect; +exports.reflectAll = reflectAll; +exports.reject = reject; +exports.rejectLimit = rejectLimit; +exports.rejectSeries = rejectSeries; +exports.retry = retry; +exports.retryable = retryable; +exports.seq = seq; +exports.series = series; +exports.setImmediate = setImmediate$1; +exports.some = some; +exports.someLimit = someLimit; +exports.someSeries = someSeries; +exports.sortBy = sortBy; +exports.timeout = timeout; +exports.times = times; +exports.timesLimit = timeLimit; +exports.timesSeries = timesSeries; +exports.transform = transform; +exports.tryEach = tryEach; +exports.unmemoize = unmemoize; +exports.until = until; +exports.waterfall = waterfall; +exports.whilst = whilst; +exports.all = every; +exports.allLimit = everyLimit; +exports.allSeries = everySeries; +exports.any = some; +exports.anyLimit = someLimit; +exports.anySeries = someSeries; +exports.find = detect; +exports.findLimit = detectLimit; +exports.findSeries = detectSeries; +exports.forEach = eachLimit; +exports.forEachSeries = eachSeries; +exports.forEachLimit = eachLimit$1; +exports.forEachOf = eachOf; +exports.forEachOfSeries = eachOfSeries; +exports.forEachOfLimit = eachOfLimit; +exports.inject = reduce; +exports.foldl = reduce; +exports.foldr = reduceRight; +exports.select = filter; +exports.selectLimit = filterLimit; +exports.selectSeries = filterSeries; +exports.wrapSync = asyncify; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/node_modules/async/dist/async.min.js b/node_modules/async/dist/async.min.js new file mode 100644 index 0000000..61e48cb --- /dev/null +++ b/node_modules/async/dist/async.min.js @@ -0,0 +1,2 @@ +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.async=n.async||{})}(this,function(n){"use strict";function t(n,t){t|=0;for(var e=Math.max(n.length-t,0),r=Array(e),u=0;u-1&&n%1==0&&n<=Bt}function d(n){return null!=n&&v(n.length)&&!y(n)}function m(){}function g(n){return function(){if(null!==n){var t=n;n=null,t.apply(this,arguments)}}}function b(n,t){for(var e=-1,r=Array(n);++e-1&&n%1==0&&nu?0:u+t),e=e>u?u:e,e<0&&(e+=u),u=t>e?0:e-t>>>0,t>>>=0;for(var o=Array(u);++r=r?n:Z(n,t,e)}function tn(n,t){for(var e=n.length;e--&&J(t,n[e],0)>-1;);return e}function en(n,t){for(var e=-1,r=n.length;++e-1;);return e}function rn(n){return n.split("")}function un(n){return Xe.test(n)}function on(n){return n.match(vr)||[]}function cn(n){return un(n)?on(n):rn(n)}function fn(n){return null==n?"":Y(n)}function an(n,t,e){if(n=fn(n),n&&(e||void 0===t))return n.replace(dr,"");if(!n||!(t=Y(t)))return n;var r=cn(n),u=cn(t),o=en(r,u),i=tn(r,u)+1;return nn(r,o,i).join("")}function ln(n){return n=n.toString().replace(jr,""),n=n.match(mr)[2].replace(" ",""),n=n?n.split(gr):[],n=n.map(function(n){return an(n.replace(br,""))})}function sn(n,t){var e={};N(n,function(n,t){function r(t,e){var r=K(u,function(n){return t[n]});r.push(e),a(n).apply(null,r)}var u,o=f(n),i=!o&&1===n.length||o&&0===n.length;if(qt(n))u=n.slice(0,-1),n=n[n.length-1],e[t]=u.concat(u.length>0?r:n);else if(i)e[t]=n;else{if(u=ln(n),0===n.length&&!o&&0===u.length)throw new Error("autoInject task functions require explicit parameters.");o||u.pop(),e[t]=u.concat(r)}}),Re(e,t)}function pn(){this.head=this.tail=null,this.length=0}function hn(n,t){n.length=1,n.head=n.tail=t}function yn(n,t,e){function r(n,t,e){if(null!=e&&"function"!=typeof e)throw new Error("task callback must be a function");if(l.started=!0,qt(n)||(n=[n]),0===n.length&&l.idle())return st(function(){l.drain()});for(var r=0,u=n.length;r=0&&c.splice(o),u.callback.apply(u,arguments),null!=t&&l.error(t,u.data)}i<=l.concurrency-l.buffer&&l.unsaturated(),l.idle()&&l.drain(),l.process()}}if(null==t)t=1;else if(0===t)throw new Error("Concurrency must not be zero");var o=a(n),i=0,c=[],f=!1,l={_tasks:new pn,concurrency:t,payload:e,saturated:m,unsaturated:m,buffer:t/4,empty:m,drain:m,error:m,started:!1,paused:!1,push:function(n,t){r(n,!1,t)},kill:function(){l.drain=m,l._tasks.empty()},unshift:function(n,t){r(n,!0,t)},remove:function(n){l._tasks.remove(n)},process:function(){if(!f){for(f=!0;!l.paused&&i2&&(o=t(arguments,1)),u[e]=o,r(n)})},function(n){r(n,u)})}function Cn(n,t){Rn(_e,n,t)}function $n(n,t,e){Rn(z(t),n,e)}function Wn(n,t){if(t=g(t||m),!qt(n))return t(new TypeError("First argument to race must be an array of functions"));if(!n.length)return t();for(var e=0,r=n.length;er?1:0}var u=a(t);Me(n,function(n,t){u(n,function(e,r){return e?t(e):void t(null,{value:n,criteria:r})})},function(n,t){return n?e(n):void e(null,K(t.sort(r),_n("value")))})}function Zn(n,t,e){var r=a(n);return ft(function(u,o){function i(){var t=n.name||"anonymous",r=new Error('Callback function "'+t+'" timed out.');r.code="ETIMEDOUT",e&&(r.info=e),f=!0,o(r)}var c,f=!1;u.push(function(){f||(o.apply(null,arguments),clearTimeout(c))}),c=setTimeout(i,t),r.apply(null,u)})}function nt(n,t,e,r){for(var u=-1,o=tu(nu((t-n)/(e||1)),0),i=Array(o);o--;)i[r?o:++u]=n,n+=e;return i}function tt(n,t,e,r){var u=a(e);ze(nt(0,n,1),t,u,r)}function et(n,t,e,r){arguments.length<=3&&(r=e,e=t,t=qt(n)?[]:{}),r=g(r||m);var u=a(e);_e(n,function(n,e,r){u(t,n,e,r)},function(n){r(n,t)})}function rt(n,e){var r,u=null;e=e||m,Fr(n,function(n,e){a(n)(function(n,o){r=arguments.length>2?t(arguments,1):o,u=n,e(!n)})},function(){e(u,r)})}function ut(n){return function(){return(n.unmemoized||n).apply(null,arguments)}}function ot(n,e,r){r=U(r||m);var u=a(e);if(!n())return r(null);var o=function(e){if(e)return r(e);if(n())return u(o);var i=t(arguments,1);r.apply(null,[null].concat(i))};u(o)}function it(n,t,e){ot(function(){return!n.apply(this,arguments)},t,e)}var ct,ft=function(n){return function(){var e=t(arguments),r=e.pop();n.call(this,e,r)}},at="function"==typeof setImmediate&&setImmediate,lt="object"==typeof process&&"function"==typeof process.nextTick;ct=at?setImmediate:lt?process.nextTick:r;var st=u(ct),pt="function"==typeof Symbol,ht="object"==typeof global&&global&&global.Object===Object&&global,yt="object"==typeof self&&self&&self.Object===Object&&self,vt=ht||yt||Function("return this")(),dt=vt.Symbol,mt=Object.prototype,gt=mt.hasOwnProperty,bt=mt.toString,jt=dt?dt.toStringTag:void 0,St=Object.prototype,kt=St.toString,Ot="[object Null]",wt="[object Undefined]",xt=dt?dt.toStringTag:void 0,Lt="[object AsyncFunction]",Et="[object Function]",At="[object GeneratorFunction]",Tt="[object Proxy]",Bt=9007199254740991,Ft={},It="function"==typeof Symbol&&Symbol.iterator,_t=function(n){return It&&n[It]&&n[It]()},Mt="[object Arguments]",Ut=Object.prototype,zt=Ut.hasOwnProperty,Pt=Ut.propertyIsEnumerable,Vt=S(function(){return arguments}())?S:function(n){return j(n)&&zt.call(n,"callee")&&!Pt.call(n,"callee")},qt=Array.isArray,Dt="object"==typeof n&&n&&!n.nodeType&&n,Rt=Dt&&"object"==typeof module&&module&&!module.nodeType&&module,Ct=Rt&&Rt.exports===Dt,$t=Ct?vt.Buffer:void 0,Wt=$t?$t.isBuffer:void 0,Nt=Wt||k,Qt=9007199254740991,Gt=/^(?:0|[1-9]\d*)$/,Ht="[object Arguments]",Jt="[object Array]",Kt="[object Boolean]",Xt="[object Date]",Yt="[object Error]",Zt="[object Function]",ne="[object Map]",te="[object Number]",ee="[object Object]",re="[object RegExp]",ue="[object Set]",oe="[object String]",ie="[object WeakMap]",ce="[object ArrayBuffer]",fe="[object DataView]",ae="[object Float32Array]",le="[object Float64Array]",se="[object Int8Array]",pe="[object Int16Array]",he="[object Int32Array]",ye="[object Uint8Array]",ve="[object Uint8ClampedArray]",de="[object Uint16Array]",me="[object Uint32Array]",ge={};ge[ae]=ge[le]=ge[se]=ge[pe]=ge[he]=ge[ye]=ge[ve]=ge[de]=ge[me]=!0,ge[Ht]=ge[Jt]=ge[ce]=ge[Kt]=ge[fe]=ge[Xt]=ge[Yt]=ge[Zt]=ge[ne]=ge[te]=ge[ee]=ge[re]=ge[ue]=ge[oe]=ge[ie]=!1;var be="object"==typeof n&&n&&!n.nodeType&&n,je=be&&"object"==typeof module&&module&&!module.nodeType&&module,Se=je&&je.exports===be,ke=Se&&ht.process,Oe=function(){try{return ke&&ke.binding("util")}catch(n){}}(),we=Oe&&Oe.isTypedArray,xe=we?x(we):w,Le=Object.prototype,Ee=Le.hasOwnProperty,Ae=Object.prototype,Te=A(Object.keys,Object),Be=Object.prototype,Fe=Be.hasOwnProperty,Ie=V(P,1/0),_e=function(n,t,e){var r=d(n)?q:Ie;r(n,a(t),e)},Me=D(R),Ue=l(Me),ze=C(R),Pe=V(ze,1),Ve=l(Pe),qe=function(n){var e=t(arguments,1);return function(){var r=t(arguments);return n.apply(null,e.concat(r))}},De=W(),Re=function(n,e,r){function u(n,t){j.push(function(){f(n,t)})}function o(){if(0===j.length&&0===v)return r(null,y);for(;j.length&&v2&&(u=t(arguments,1)),e){var o={};N(y,function(n,t){o[t]=n}),o[n]=u,d=!0,b=Object.create(null),r(e,o)}else y[n]=u,c(n)});v++;var o=a(e[e.length-1]);e.length>1?o(y,u):o(u)}}function l(){for(var n,t=0;S.length;)n=S.pop(),t++,$(s(n),function(n){0===--k[n]&&S.push(n)});if(t!==h)throw new Error("async.auto cannot execute tasks due to a recursive dependency")}function s(t){var e=[];return N(n,function(n,r){qt(n)&&J(n,t,0)>=0&&e.push(r)}),e}"function"==typeof e&&(r=e,e=null),r=g(r||m);var p=B(n),h=p.length;if(!h)return r(null);e||(e=h);var y={},v=0,d=!1,b=Object.create(null),j=[],S=[],k={};N(n,function(t,e){if(!qt(t))return u(e,[t]),void S.push(e);var r=t.slice(0,t.length-1),o=r.length;return 0===o?(u(e,t),void S.push(e)):(k[e]=o,void $(r,function(c){if(!n[c])throw new Error("async.auto task `"+e+"` has a non-existent dependency `"+c+"` in "+r.join(", "));i(c,function(){o--,0===o&&u(e,t)})}))}),l(),o()},Ce="[object Symbol]",$e=1/0,We=dt?dt.prototype:void 0,Ne=We?We.toString:void 0,Qe="\\ud800-\\udfff",Ge="\\u0300-\\u036f\\ufe20-\\ufe23",He="\\u20d0-\\u20f0",Je="\\ufe0e\\ufe0f",Ke="\\u200d",Xe=RegExp("["+Ke+Qe+Ge+He+Je+"]"),Ye="\\ud800-\\udfff",Ze="\\u0300-\\u036f\\ufe20-\\ufe23",nr="\\u20d0-\\u20f0",tr="\\ufe0e\\ufe0f",er="["+Ye+"]",rr="["+Ze+nr+"]",ur="\\ud83c[\\udffb-\\udfff]",or="(?:"+rr+"|"+ur+")",ir="[^"+Ye+"]",cr="(?:\\ud83c[\\udde6-\\uddff]){2}",fr="[\\ud800-\\udbff][\\udc00-\\udfff]",ar="\\u200d",lr=or+"?",sr="["+tr+"]?",pr="(?:"+ar+"(?:"+[ir,cr,fr].join("|")+")"+sr+lr+")*",hr=sr+lr+pr,yr="(?:"+[ir+rr+"?",rr,cr,fr,er].join("|")+")",vr=RegExp(ur+"(?="+ur+")|"+yr+hr,"g"),dr=/^\s+|\s+$/g,mr=/^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m,gr=/,/,br=/(=.+)?(\s*)$/,jr=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;pn.prototype.removeLink=function(n){return n.prev?n.prev.next=n.next:this.head=n.next,n.next?n.next.prev=n.prev:this.tail=n.prev,n.prev=n.next=null,this.length-=1,n},pn.prototype.empty=function(){for(;this.head;)this.shift();return this},pn.prototype.insertAfter=function(n,t){t.prev=n,t.next=n.next,n.next?n.next.prev=t:this.tail=t,n.next=t,this.length+=1},pn.prototype.insertBefore=function(n,t){t.prev=n.prev,t.next=n,n.prev?n.prev.next=t:this.head=t,n.prev=t,this.length+=1},pn.prototype.unshift=function(n){this.head?this.insertBefore(this.head,n):hn(this,n)},pn.prototype.push=function(n){this.tail?this.insertAfter(this.tail,n):hn(this,n)},pn.prototype.shift=function(){return this.head&&this.removeLink(this.head)},pn.prototype.pop=function(){return this.tail&&this.removeLink(this.tail)},pn.prototype.toArray=function(){for(var n=Array(this.length),t=this.head,e=0;e=u.priority;)u=u.next;for(var o=0,i=n.length;o 32 ) { + * console.log('This file name is too long'); + * callback('File name too long'); + * } else { + * // Do work to process file here + * console.log('File processed'); + * callback(); + * } + * }, function(err) { + * // if any of the file processing produced an error, err would equal that error + * if( err ) { + * // One of the iterations produced an error. + * // All processing will now stop. + * console.log('A file failed to process'); + * } else { + * console.log('All files have been processed successfully'); + * } + * }); + */ +function eachLimit(coll, iteratee, callback) { + (0, _eachOf2.default)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/eachLimit.js b/node_modules/async/eachLimit.js new file mode 100644 index 0000000..fff721b --- /dev/null +++ b/node_modules/async/eachLimit.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = eachLimit; + +var _eachOfLimit = require('./internal/eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _withoutIndex = require('./internal/withoutIndex'); + +var _withoutIndex2 = _interopRequireDefault(_withoutIndex); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachLimit(coll, limit, iteratee, callback) { + (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/eachOf.js b/node_modules/async/eachOf.js new file mode 100644 index 0000000..055b9bd --- /dev/null +++ b/node_modules/async/eachOf.js @@ -0,0 +1,111 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll, iteratee, callback) { + var eachOfImplementation = (0, _isArrayLike2.default)(coll) ? eachOfArrayLike : eachOfGeneric; + eachOfImplementation(coll, (0, _wrapAsync2.default)(iteratee), callback); +}; + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _breakLoop = require('./internal/breakLoop'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// eachOf implementation optimized for array-likes +function eachOfArrayLike(coll, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + var index = 0, + completed = 0, + length = coll.length; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err) { + callback(err); + } else if (++completed === length || value === _breakLoop2.default) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, (0, _onlyOnce2.default)(iteratorCallback)); + } +} + +// a generic version of eachOf which can handle array, object, and iterator cases. +var eachOfGeneric = (0, _doLimit2.default)(_eachOfLimit2.default, Infinity); + +/** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @example + * + * var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; + * var configs = {}; + * + * async.forEachOf(obj, function (value, key, callback) { + * fs.readFile(__dirname + value, "utf8", function (err, data) { + * if (err) return callback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * }, function (err) { + * if (err) console.error(err.message); + * // configs is now a map of JSON data + * doSomethingWith(configs); + * }); + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/eachOfLimit.js b/node_modules/async/eachOfLimit.js new file mode 100644 index 0000000..30a1329 --- /dev/null +++ b/node_modules/async/eachOfLimit.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = eachOfLimit; + +var _eachOfLimit2 = require('./internal/eachOfLimit'); + +var _eachOfLimit3 = _interopRequireDefault(_eachOfLimit2); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachOfLimit(coll, limit, iteratee, callback) { + (0, _eachOfLimit3.default)(limit)(coll, (0, _wrapAsync2.default)(iteratee), callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/eachOfSeries.js b/node_modules/async/eachOfSeries.js new file mode 100644 index 0000000..9dfd711 --- /dev/null +++ b/node_modules/async/eachOfSeries.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time. + * + * @name eachOfSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Invoked with (err). + */ +exports.default = (0, _doLimit2.default)(_eachOfLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/eachSeries.js b/node_modules/async/eachSeries.js new file mode 100644 index 0000000..55c7840 --- /dev/null +++ b/node_modules/async/eachSeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachLimit = require('./eachLimit'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +exports.default = (0, _doLimit2.default)(_eachLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/ensureAsync.js b/node_modules/async/ensureAsync.js new file mode 100644 index 0000000..1f57aec --- /dev/null +++ b/node_modules/async/ensureAsync.js @@ -0,0 +1,73 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = ensureAsync; + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Wrap an async function and ensure it calls its callback on a later tick of + * the event loop. If the function already calls its callback on a next tick, + * no extra deferral is added. This is useful for preventing stack overflows + * (`RangeError: Maximum call stack size exceeded`) and generally keeping + * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) + * contained. ES2017 `async` functions are returned as-is -- they are immune + * to Zalgo's corrupting influences, as they always resolve on a later tick. + * + * @name ensureAsync + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - an async function, one that expects a node-style + * callback as its last argument. + * @returns {AsyncFunction} Returns a wrapped function with the exact same call + * signature as the function passed in. + * @example + * + * function sometimesAsync(arg, callback) { + * if (cache[arg]) { + * return callback(null, cache[arg]); // this would be synchronous!! + * } else { + * doSomeIO(arg, callback); // this IO would be asynchronous + * } + * } + * + * // this has a risk of stack overflows if many results are cached in a row + * async.mapSeries(args, sometimesAsync, done); + * + * // this will defer sometimesAsync's callback if necessary, + * // preventing stack overflows + * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + */ +function ensureAsync(fn) { + if ((0, _wrapAsync.isAsync)(fn)) return fn; + return (0, _initialParams2.default)(function (args, callback) { + var sync = true; + args.push(function () { + var innerArgs = arguments; + if (sync) { + (0, _setImmediate2.default)(function () { + callback.apply(null, innerArgs); + }); + } else { + callback.apply(null, innerArgs); + } + }); + fn.apply(this, args); + sync = false; + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/every.js b/node_modules/async/every.js new file mode 100644 index 0000000..d0565b0 --- /dev/null +++ b/node_modules/async/every.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +var _notId = require('./internal/notId'); + +var _notId2 = _interopRequireDefault(_notId); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @example + * + * async.every(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then every file exists + * }); + */ +exports.default = (0, _doParallel2.default)((0, _createTester2.default)(_notId2.default, _notId2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/everyLimit.js b/node_modules/async/everyLimit.js new file mode 100644 index 0000000..a1a759a --- /dev/null +++ b/node_modules/async/everyLimit.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +var _notId = require('./internal/notId'); + +var _notId2 = _interopRequireDefault(_notId); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +exports.default = (0, _doParallelLimit2.default)((0, _createTester2.default)(_notId2.default, _notId2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/everySeries.js b/node_modules/async/everySeries.js new file mode 100644 index 0000000..23bfebb --- /dev/null +++ b/node_modules/async/everySeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _everyLimit = require('./everyLimit'); + +var _everyLimit2 = _interopRequireDefault(_everyLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +exports.default = (0, _doLimit2.default)(_everyLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/filter.js b/node_modules/async/filter.js new file mode 100644 index 0000000..54772d5 --- /dev/null +++ b/node_modules/async/filter.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter = require('./internal/filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.filter(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of the existing files + * }); + */ +exports.default = (0, _doParallel2.default)(_filter2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/filterLimit.js b/node_modules/async/filterLimit.js new file mode 100644 index 0000000..06216f7 --- /dev/null +++ b/node_modules/async/filterLimit.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter = require('./internal/filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +exports.default = (0, _doParallelLimit2.default)(_filter2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/filterSeries.js b/node_modules/async/filterSeries.js new file mode 100644 index 0000000..e48d966 --- /dev/null +++ b/node_modules/async/filterSeries.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filterLimit = require('./filterLimit'); + +var _filterLimit2 = _interopRequireDefault(_filterLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + */ +exports.default = (0, _doLimit2.default)(_filterLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/forever.js b/node_modules/async/forever.js new file mode 100644 index 0000000..6c7b8a4 --- /dev/null +++ b/node_modules/async/forever.js @@ -0,0 +1,65 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = forever; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _ensureAsync = require('./ensureAsync'); + +var _ensureAsync2 = _interopRequireDefault(_ensureAsync); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls the asynchronous function `fn` with a callback parameter that allows it + * to call itself again, in series, indefinitely. + + * If an error is passed to the callback then `errback` is called with the + * error, and execution stops, otherwise it will never be called. + * + * @name forever + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} fn - an async function to call repeatedly. + * Invoked with (next). + * @param {Function} [errback] - when `fn` passes an error to it's callback, + * this function will be called, and execution stops. Invoked with (err). + * @example + * + * async.forever( + * function(next) { + * // next is suitable for passing to things that need a callback(err [, whatever]); + * // it will result in this function being called again. + * }, + * function(err) { + * // if next is called with a value in its first parameter, it will appear + * // in here as 'err', and execution will stop. + * } + * ); + */ +function forever(fn, errback) { + var done = (0, _onlyOnce2.default)(errback || _noop2.default); + var task = (0, _wrapAsync2.default)((0, _ensureAsync2.default)(fn)); + + function next(err) { + if (err) return done(err); + task(next); + } + next(); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/groupBy.js b/node_modules/async/groupBy.js new file mode 100644 index 0000000..755cba7 --- /dev/null +++ b/node_modules/async/groupBy.js @@ -0,0 +1,54 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns a new object, where each value corresponds to an array of items, from + * `coll`, that returned the corresponding key. That is, the keys of the object + * correspond to the values passed to the `iteratee` callback. + * + * Note: Since this function applies the `iteratee` to each item in parallel, + * there is no guarantee that the `iteratee` functions will complete in order. + * However, the values for each key in the `result` will be in the same order as + * the original `coll`. For Objects, the values will roughly be in the order of + * the original Objects' keys (but this can vary across JavaScript engines). + * + * @name groupBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @example + * + * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) { + * db.findById(userId, function(err, user) { + * if (err) return callback(err); + * return callback(null, user.age); + * }); + * }, function(err, result) { + * // result is object containing the userIds grouped by age + * // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']}; + * }); + */ +exports.default = (0, _doLimit2.default)(_groupByLimit2.default, Infinity); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/groupByLimit.js b/node_modules/async/groupByLimit.js new file mode 100644 index 0000000..fec13f8 --- /dev/null +++ b/node_modules/async/groupByLimit.js @@ -0,0 +1,71 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll, limit, iteratee, callback) { + callback = callback || _noop2.default; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _mapLimit2.default)(coll, limit, function (val, callback) { + _iteratee(val, function (err, key) { + if (err) return callback(err); + return callback(null, { key: key, val: val }); + }); + }, function (err, mapResults) { + var result = {}; + // from MDN, handle object having an `hasOwnProperty` prop + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + var key = mapResults[i].key; + var val = mapResults[i].val; + + if (hasOwnProperty.call(result, key)) { + result[key].push(val); + } else { + result[key] = [val]; + } + } + } + + return callback(err, result); + }); +}; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +; +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. + * + * @name groupByLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/groupBySeries.js b/node_modules/async/groupBySeries.js new file mode 100644 index 0000000..b94805e --- /dev/null +++ b/node_modules/async/groupBySeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +exports.default = (0, _doLimit2.default)(_groupByLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/index.js b/node_modules/async/index.js new file mode 100644 index 0000000..1b1e2aa --- /dev/null +++ b/node_modules/async/index.js @@ -0,0 +1,570 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.wrapSync = exports.selectSeries = exports.selectLimit = exports.select = exports.foldr = exports.foldl = exports.inject = exports.forEachOfLimit = exports.forEachOfSeries = exports.forEachOf = exports.forEachLimit = exports.forEachSeries = exports.forEach = exports.findSeries = exports.findLimit = exports.find = exports.anySeries = exports.anyLimit = exports.any = exports.allSeries = exports.allLimit = exports.all = exports.whilst = exports.waterfall = exports.until = exports.unmemoize = exports.tryEach = exports.transform = exports.timesSeries = exports.timesLimit = exports.times = exports.timeout = exports.sortBy = exports.someSeries = exports.someLimit = exports.some = exports.setImmediate = exports.series = exports.seq = exports.retryable = exports.retry = exports.rejectSeries = exports.rejectLimit = exports.reject = exports.reflectAll = exports.reflect = exports.reduceRight = exports.reduce = exports.race = exports.queue = exports.priorityQueue = exports.parallelLimit = exports.parallel = exports.nextTick = exports.memoize = exports.mapValuesSeries = exports.mapValuesLimit = exports.mapValues = exports.mapSeries = exports.mapLimit = exports.map = exports.log = exports.groupBySeries = exports.groupByLimit = exports.groupBy = exports.forever = exports.filterSeries = exports.filterLimit = exports.filter = exports.everySeries = exports.everyLimit = exports.every = exports.ensureAsync = exports.eachSeries = exports.eachOfSeries = exports.eachOfLimit = exports.eachOf = exports.eachLimit = exports.each = exports.during = exports.doWhilst = exports.doUntil = exports.doDuring = exports.dir = exports.detectSeries = exports.detectLimit = exports.detect = exports.constant = exports.concatSeries = exports.concat = exports.compose = exports.cargo = exports.autoInject = exports.auto = exports.asyncify = exports.apply = exports.applyEachSeries = exports.applyEach = undefined; + +var _applyEach = require('./applyEach'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _applyEachSeries = require('./applyEachSeries'); + +var _applyEachSeries2 = _interopRequireDefault(_applyEachSeries); + +var _apply = require('./apply'); + +var _apply2 = _interopRequireDefault(_apply); + +var _asyncify = require('./asyncify'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +var _auto = require('./auto'); + +var _auto2 = _interopRequireDefault(_auto); + +var _autoInject = require('./autoInject'); + +var _autoInject2 = _interopRequireDefault(_autoInject); + +var _cargo = require('./cargo'); + +var _cargo2 = _interopRequireDefault(_cargo); + +var _compose = require('./compose'); + +var _compose2 = _interopRequireDefault(_compose); + +var _concat = require('./concat'); + +var _concat2 = _interopRequireDefault(_concat); + +var _concatSeries = require('./concatSeries'); + +var _concatSeries2 = _interopRequireDefault(_concatSeries); + +var _constant = require('./constant'); + +var _constant2 = _interopRequireDefault(_constant); + +var _detect = require('./detect'); + +var _detect2 = _interopRequireDefault(_detect); + +var _detectLimit = require('./detectLimit'); + +var _detectLimit2 = _interopRequireDefault(_detectLimit); + +var _detectSeries = require('./detectSeries'); + +var _detectSeries2 = _interopRequireDefault(_detectSeries); + +var _dir = require('./dir'); + +var _dir2 = _interopRequireDefault(_dir); + +var _doDuring = require('./doDuring'); + +var _doDuring2 = _interopRequireDefault(_doDuring); + +var _doUntil = require('./doUntil'); + +var _doUntil2 = _interopRequireDefault(_doUntil); + +var _doWhilst = require('./doWhilst'); + +var _doWhilst2 = _interopRequireDefault(_doWhilst); + +var _during = require('./during'); + +var _during2 = _interopRequireDefault(_during); + +var _each = require('./each'); + +var _each2 = _interopRequireDefault(_each); + +var _eachLimit = require('./eachLimit'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _eachOfSeries = require('./eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _eachSeries = require('./eachSeries'); + +var _eachSeries2 = _interopRequireDefault(_eachSeries); + +var _ensureAsync = require('./ensureAsync'); + +var _ensureAsync2 = _interopRequireDefault(_ensureAsync); + +var _every = require('./every'); + +var _every2 = _interopRequireDefault(_every); + +var _everyLimit = require('./everyLimit'); + +var _everyLimit2 = _interopRequireDefault(_everyLimit); + +var _everySeries = require('./everySeries'); + +var _everySeries2 = _interopRequireDefault(_everySeries); + +var _filter = require('./filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _filterLimit = require('./filterLimit'); + +var _filterLimit2 = _interopRequireDefault(_filterLimit); + +var _filterSeries = require('./filterSeries'); + +var _filterSeries2 = _interopRequireDefault(_filterSeries); + +var _forever = require('./forever'); + +var _forever2 = _interopRequireDefault(_forever); + +var _groupBy = require('./groupBy'); + +var _groupBy2 = _interopRequireDefault(_groupBy); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +var _groupBySeries = require('./groupBySeries'); + +var _groupBySeries2 = _interopRequireDefault(_groupBySeries); + +var _log = require('./log'); + +var _log2 = _interopRequireDefault(_log); + +var _map = require('./map'); + +var _map2 = _interopRequireDefault(_map); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _mapSeries = require('./mapSeries'); + +var _mapSeries2 = _interopRequireDefault(_mapSeries); + +var _mapValues = require('./mapValues'); + +var _mapValues2 = _interopRequireDefault(_mapValues); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _mapValuesSeries = require('./mapValuesSeries'); + +var _mapValuesSeries2 = _interopRequireDefault(_mapValuesSeries); + +var _memoize = require('./memoize'); + +var _memoize2 = _interopRequireDefault(_memoize); + +var _nextTick = require('./nextTick'); + +var _nextTick2 = _interopRequireDefault(_nextTick); + +var _parallel = require('./parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +var _parallelLimit = require('./parallelLimit'); + +var _parallelLimit2 = _interopRequireDefault(_parallelLimit); + +var _priorityQueue = require('./priorityQueue'); + +var _priorityQueue2 = _interopRequireDefault(_priorityQueue); + +var _queue = require('./queue'); + +var _queue2 = _interopRequireDefault(_queue); + +var _race = require('./race'); + +var _race2 = _interopRequireDefault(_race); + +var _reduce = require('./reduce'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _reduceRight = require('./reduceRight'); + +var _reduceRight2 = _interopRequireDefault(_reduceRight); + +var _reflect = require('./reflect'); + +var _reflect2 = _interopRequireDefault(_reflect); + +var _reject = require('./reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _reflectAll = require('./reflectAll'); + +var _reflectAll2 = _interopRequireDefault(_reflectAll); + +var _rejectLimit = require('./rejectLimit'); + +var _rejectLimit2 = _interopRequireDefault(_rejectLimit); + +var _rejectSeries = require('./rejectSeries'); + +var _rejectSeries2 = _interopRequireDefault(_rejectSeries); + +var _retry = require('./retry'); + +var _retry2 = _interopRequireDefault(_retry); + +var _retryable = require('./retryable'); + +var _retryable2 = _interopRequireDefault(_retryable); + +var _seq = require('./seq'); + +var _seq2 = _interopRequireDefault(_seq); + +var _series = require('./series'); + +var _series2 = _interopRequireDefault(_series); + +var _setImmediate = require('./setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _some = require('./some'); + +var _some2 = _interopRequireDefault(_some); + +var _someLimit = require('./someLimit'); + +var _someLimit2 = _interopRequireDefault(_someLimit); + +var _someSeries = require('./someSeries'); + +var _someSeries2 = _interopRequireDefault(_someSeries); + +var _sortBy = require('./sortBy'); + +var _sortBy2 = _interopRequireDefault(_sortBy); + +var _timeout = require('./timeout'); + +var _timeout2 = _interopRequireDefault(_timeout); + +var _times = require('./times'); + +var _times2 = _interopRequireDefault(_times); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _timesSeries = require('./timesSeries'); + +var _timesSeries2 = _interopRequireDefault(_timesSeries); + +var _transform = require('./transform'); + +var _transform2 = _interopRequireDefault(_transform); + +var _tryEach = require('./tryEach'); + +var _tryEach2 = _interopRequireDefault(_tryEach); + +var _unmemoize = require('./unmemoize'); + +var _unmemoize2 = _interopRequireDefault(_unmemoize); + +var _until = require('./until'); + +var _until2 = _interopRequireDefault(_until); + +var _waterfall = require('./waterfall'); + +var _waterfall2 = _interopRequireDefault(_waterfall); + +var _whilst = require('./whilst'); + +var _whilst2 = _interopRequireDefault(_whilst); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + +/** + * 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) and installable via + * `npm install --save async`, it can also be used directly in the browser. + * @module async + * @see AsyncFunction + */ + +/** + * A collection of `async` functions for manipulating collections, such as + * arrays and objects. + * @module Collections + */ + +/** + * A collection of `async` functions for controlling the flow through a script. + * @module ControlFlow + */ + +/** + * A collection of `async` utility functions. + * @module Utils + */ + +exports.default = { + applyEach: _applyEach2.default, + applyEachSeries: _applyEachSeries2.default, + apply: _apply2.default, + asyncify: _asyncify2.default, + auto: _auto2.default, + autoInject: _autoInject2.default, + cargo: _cargo2.default, + compose: _compose2.default, + concat: _concat2.default, + concatSeries: _concatSeries2.default, + constant: _constant2.default, + detect: _detect2.default, + detectLimit: _detectLimit2.default, + detectSeries: _detectSeries2.default, + dir: _dir2.default, + doDuring: _doDuring2.default, + doUntil: _doUntil2.default, + doWhilst: _doWhilst2.default, + during: _during2.default, + each: _each2.default, + eachLimit: _eachLimit2.default, + eachOf: _eachOf2.default, + eachOfLimit: _eachOfLimit2.default, + eachOfSeries: _eachOfSeries2.default, + eachSeries: _eachSeries2.default, + ensureAsync: _ensureAsync2.default, + every: _every2.default, + everyLimit: _everyLimit2.default, + everySeries: _everySeries2.default, + filter: _filter2.default, + filterLimit: _filterLimit2.default, + filterSeries: _filterSeries2.default, + forever: _forever2.default, + groupBy: _groupBy2.default, + groupByLimit: _groupByLimit2.default, + groupBySeries: _groupBySeries2.default, + log: _log2.default, + map: _map2.default, + mapLimit: _mapLimit2.default, + mapSeries: _mapSeries2.default, + mapValues: _mapValues2.default, + mapValuesLimit: _mapValuesLimit2.default, + mapValuesSeries: _mapValuesSeries2.default, + memoize: _memoize2.default, + nextTick: _nextTick2.default, + parallel: _parallel2.default, + parallelLimit: _parallelLimit2.default, + priorityQueue: _priorityQueue2.default, + queue: _queue2.default, + race: _race2.default, + reduce: _reduce2.default, + reduceRight: _reduceRight2.default, + reflect: _reflect2.default, + reflectAll: _reflectAll2.default, + reject: _reject2.default, + rejectLimit: _rejectLimit2.default, + rejectSeries: _rejectSeries2.default, + retry: _retry2.default, + retryable: _retryable2.default, + seq: _seq2.default, + series: _series2.default, + setImmediate: _setImmediate2.default, + some: _some2.default, + someLimit: _someLimit2.default, + someSeries: _someSeries2.default, + sortBy: _sortBy2.default, + timeout: _timeout2.default, + times: _times2.default, + timesLimit: _timesLimit2.default, + timesSeries: _timesSeries2.default, + transform: _transform2.default, + tryEach: _tryEach2.default, + unmemoize: _unmemoize2.default, + until: _until2.default, + waterfall: _waterfall2.default, + whilst: _whilst2.default, + + // aliases + all: _every2.default, + any: _some2.default, + forEach: _each2.default, + forEachSeries: _eachSeries2.default, + forEachLimit: _eachLimit2.default, + forEachOf: _eachOf2.default, + forEachOfSeries: _eachOfSeries2.default, + forEachOfLimit: _eachOfLimit2.default, + inject: _reduce2.default, + foldl: _reduce2.default, + foldr: _reduceRight2.default, + select: _filter2.default, + selectLimit: _filterLimit2.default, + selectSeries: _filterSeries2.default, + wrapSync: _asyncify2.default +}; +exports.applyEach = _applyEach2.default; +exports.applyEachSeries = _applyEachSeries2.default; +exports.apply = _apply2.default; +exports.asyncify = _asyncify2.default; +exports.auto = _auto2.default; +exports.autoInject = _autoInject2.default; +exports.cargo = _cargo2.default; +exports.compose = _compose2.default; +exports.concat = _concat2.default; +exports.concatSeries = _concatSeries2.default; +exports.constant = _constant2.default; +exports.detect = _detect2.default; +exports.detectLimit = _detectLimit2.default; +exports.detectSeries = _detectSeries2.default; +exports.dir = _dir2.default; +exports.doDuring = _doDuring2.default; +exports.doUntil = _doUntil2.default; +exports.doWhilst = _doWhilst2.default; +exports.during = _during2.default; +exports.each = _each2.default; +exports.eachLimit = _eachLimit2.default; +exports.eachOf = _eachOf2.default; +exports.eachOfLimit = _eachOfLimit2.default; +exports.eachOfSeries = _eachOfSeries2.default; +exports.eachSeries = _eachSeries2.default; +exports.ensureAsync = _ensureAsync2.default; +exports.every = _every2.default; +exports.everyLimit = _everyLimit2.default; +exports.everySeries = _everySeries2.default; +exports.filter = _filter2.default; +exports.filterLimit = _filterLimit2.default; +exports.filterSeries = _filterSeries2.default; +exports.forever = _forever2.default; +exports.groupBy = _groupBy2.default; +exports.groupByLimit = _groupByLimit2.default; +exports.groupBySeries = _groupBySeries2.default; +exports.log = _log2.default; +exports.map = _map2.default; +exports.mapLimit = _mapLimit2.default; +exports.mapSeries = _mapSeries2.default; +exports.mapValues = _mapValues2.default; +exports.mapValuesLimit = _mapValuesLimit2.default; +exports.mapValuesSeries = _mapValuesSeries2.default; +exports.memoize = _memoize2.default; +exports.nextTick = _nextTick2.default; +exports.parallel = _parallel2.default; +exports.parallelLimit = _parallelLimit2.default; +exports.priorityQueue = _priorityQueue2.default; +exports.queue = _queue2.default; +exports.race = _race2.default; +exports.reduce = _reduce2.default; +exports.reduceRight = _reduceRight2.default; +exports.reflect = _reflect2.default; +exports.reflectAll = _reflectAll2.default; +exports.reject = _reject2.default; +exports.rejectLimit = _rejectLimit2.default; +exports.rejectSeries = _rejectSeries2.default; +exports.retry = _retry2.default; +exports.retryable = _retryable2.default; +exports.seq = _seq2.default; +exports.series = _series2.default; +exports.setImmediate = _setImmediate2.default; +exports.some = _some2.default; +exports.someLimit = _someLimit2.default; +exports.someSeries = _someSeries2.default; +exports.sortBy = _sortBy2.default; +exports.timeout = _timeout2.default; +exports.times = _times2.default; +exports.timesLimit = _timesLimit2.default; +exports.timesSeries = _timesSeries2.default; +exports.transform = _transform2.default; +exports.tryEach = _tryEach2.default; +exports.unmemoize = _unmemoize2.default; +exports.until = _until2.default; +exports.waterfall = _waterfall2.default; +exports.whilst = _whilst2.default; +exports.all = _every2.default; +exports.allLimit = _everyLimit2.default; +exports.allSeries = _everySeries2.default; +exports.any = _some2.default; +exports.anyLimit = _someLimit2.default; +exports.anySeries = _someSeries2.default; +exports.find = _detect2.default; +exports.findLimit = _detectLimit2.default; +exports.findSeries = _detectSeries2.default; +exports.forEach = _each2.default; +exports.forEachSeries = _eachSeries2.default; +exports.forEachLimit = _eachLimit2.default; +exports.forEachOf = _eachOf2.default; +exports.forEachOfSeries = _eachOfSeries2.default; +exports.forEachOfLimit = _eachOfLimit2.default; +exports.inject = _reduce2.default; +exports.foldl = _reduce2.default; +exports.foldr = _reduceRight2.default; +exports.select = _filter2.default; +exports.selectLimit = _filterLimit2.default; +exports.selectSeries = _filterSeries2.default; +exports.wrapSync = _asyncify2.default; \ No newline at end of file diff --git a/node_modules/async/internal/DoublyLinkedList.js b/node_modules/async/internal/DoublyLinkedList.js new file mode 100644 index 0000000..7e71728 --- /dev/null +++ b/node_modules/async/internal/DoublyLinkedList.js @@ -0,0 +1,88 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = DLL; +// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation +// used for queues. This implementation assumes that the node provided by the user can be modified +// to adjust the next and last properties. We implement only the minimal functionality +// for queue support. +function DLL() { + this.head = this.tail = null; + this.length = 0; +} + +function setInitial(dll, node) { + dll.length = 1; + dll.head = dll.tail = node; +} + +DLL.prototype.removeLink = function (node) { + if (node.prev) node.prev.next = node.next;else this.head = node.next; + if (node.next) node.next.prev = node.prev;else this.tail = node.prev; + + node.prev = node.next = null; + this.length -= 1; + return node; +}; + +DLL.prototype.empty = function () { + while (this.head) this.shift(); + return this; +}; + +DLL.prototype.insertAfter = function (node, newNode) { + newNode.prev = node; + newNode.next = node.next; + if (node.next) node.next.prev = newNode;else this.tail = newNode; + node.next = newNode; + this.length += 1; +}; + +DLL.prototype.insertBefore = function (node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) node.prev.next = newNode;else this.head = newNode; + node.prev = newNode; + this.length += 1; +}; + +DLL.prototype.unshift = function (node) { + if (this.head) this.insertBefore(this.head, node);else setInitial(this, node); +}; + +DLL.prototype.push = function (node) { + if (this.tail) this.insertAfter(this.tail, node);else setInitial(this, node); +}; + +DLL.prototype.shift = function () { + return this.head && this.removeLink(this.head); +}; + +DLL.prototype.pop = function () { + return this.tail && this.removeLink(this.tail); +}; + +DLL.prototype.toArray = function () { + var arr = Array(this.length); + var curr = this.head; + for (var idx = 0; idx < this.length; idx++) { + arr[idx] = curr.data; + curr = curr.next; + } + return arr; +}; + +DLL.prototype.remove = function (testFn) { + var curr = this.head; + while (!!curr) { + var next = curr.next; + if (testFn(curr)) { + this.removeLink(curr); + } + curr = next; + } + return this; +}; +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/applyEach.js b/node_modules/async/internal/applyEach.js new file mode 100644 index 0000000..322e03c --- /dev/null +++ b/node_modules/async/internal/applyEach.js @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = applyEach; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _initialParams = require('./initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function applyEach(eachfn) { + return function (fns /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + var go = (0, _initialParams2.default)(function (args, callback) { + var that = this; + return eachfn(fns, function (fn, cb) { + (0, _wrapAsync2.default)(fn).apply(that, args.concat(cb)); + }, callback); + }); + if (args.length) { + return go.apply(this, args); + } else { + return go; + } + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/breakLoop.js b/node_modules/async/internal/breakLoop.js new file mode 100644 index 0000000..1065058 --- /dev/null +++ b/node_modules/async/internal/breakLoop.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +// A temporary value used to identify if the loop should be broken. +// See #1064, #1293 +exports.default = {}; +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/concat.js b/node_modules/async/internal/concat.js new file mode 100644 index 0000000..f2ffb53 --- /dev/null +++ b/node_modules/async/internal/concat.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = concat; +function concat(eachfn, arr, fn, callback) { + var result = []; + eachfn(arr, function (x, index, cb) { + fn(x, function (err, y) { + result = result.concat(y || []); + cb(err); + }); + }, function (err) { + callback(err, result); + }); +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/consoleFunc.js b/node_modules/async/internal/consoleFunc.js new file mode 100644 index 0000000..603f48e --- /dev/null +++ b/node_modules/async/internal/consoleFunc.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = consoleFunc; + +var _arrayEach = require('lodash/_arrayEach'); + +var _arrayEach2 = _interopRequireDefault(_arrayEach); + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function consoleFunc(name) { + return function (fn /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + args.push(function (err /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + if (typeof console === 'object') { + if (err) { + if (console.error) { + console.error(err); + } + } else if (console[name]) { + (0, _arrayEach2.default)(args, function (x) { + console[name](x); + }); + } + } + }); + (0, _wrapAsync2.default)(fn).apply(null, args); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/createTester.js b/node_modules/async/internal/createTester.js new file mode 100644 index 0000000..ce96e8b --- /dev/null +++ b/node_modules/async/internal/createTester.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _createTester; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _breakLoop = require('./breakLoop'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _createTester(check, getResult) { + return function (eachfn, arr, iteratee, cb) { + cb = cb || _noop2.default; + var testPassed = false; + var testResult; + eachfn(arr, function (value, _, callback) { + iteratee(value, function (err, result) { + if (err) { + callback(err); + } else if (check(result) && !testResult) { + testPassed = true; + testResult = getResult(true, value); + callback(null, _breakLoop2.default); + } else { + callback(); + } + }); + }, function (err) { + if (err) { + cb(err); + } else { + cb(null, testPassed ? testResult : getResult(false)); + } + }); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/doLimit.js b/node_modules/async/internal/doLimit.js new file mode 100644 index 0000000..963c608 --- /dev/null +++ b/node_modules/async/internal/doLimit.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doLimit; +function doLimit(fn, limit) { + return function (iterable, iteratee, callback) { + return fn(iterable, limit, iteratee, callback); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/doParallel.js b/node_modules/async/internal/doParallel.js new file mode 100644 index 0000000..bb40207 --- /dev/null +++ b/node_modules/async/internal/doParallel.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doParallel; + +var _eachOf = require('../eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function doParallel(fn) { + return function (obj, iteratee, callback) { + return fn(_eachOf2.default, obj, (0, _wrapAsync2.default)(iteratee), callback); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/doParallelLimit.js b/node_modules/async/internal/doParallelLimit.js new file mode 100644 index 0000000..a7e963d --- /dev/null +++ b/node_modules/async/internal/doParallelLimit.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doParallelLimit; + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function doParallelLimit(fn) { + return function (obj, limit, iteratee, callback) { + return fn((0, _eachOfLimit2.default)(limit), obj, (0, _wrapAsync2.default)(iteratee), callback); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/doSeries.js b/node_modules/async/internal/doSeries.js new file mode 100644 index 0000000..f3ca5aa --- /dev/null +++ b/node_modules/async/internal/doSeries.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doSeries; + +var _eachOfSeries = require('../eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function doSeries(fn) { + return function (obj, iteratee, callback) { + return fn(_eachOfSeries2.default, obj, (0, _wrapAsync2.default)(iteratee), callback); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/eachOfLimit.js b/node_modules/async/internal/eachOfLimit.js new file mode 100644 index 0000000..e4c74bb --- /dev/null +++ b/node_modules/async/internal/eachOfLimit.js @@ -0,0 +1,71 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _eachOfLimit; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./once'); + +var _once2 = _interopRequireDefault(_once); + +var _iterator = require('./iterator'); + +var _iterator2 = _interopRequireDefault(_iterator); + +var _onlyOnce = require('./onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _breakLoop = require('./breakLoop'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _eachOfLimit(limit) { + return function (obj, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + if (limit <= 0 || !obj) { + return callback(null); + } + var nextElem = (0, _iterator2.default)(obj); + var done = false; + var running = 0; + + function iterateeCallback(err, value) { + running -= 1; + if (err) { + done = true; + callback(err); + } else if (value === _breakLoop2.default || done && running <= 0) { + done = true; + return callback(null); + } else { + replenish(); + } + } + + function replenish() { + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback)); + } + } + + replenish(); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/filter.js b/node_modules/async/internal/filter.js new file mode 100644 index 0000000..74f3986 --- /dev/null +++ b/node_modules/async/internal/filter.js @@ -0,0 +1,75 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _filter; + +var _arrayMap = require('lodash/_arrayMap'); + +var _arrayMap2 = _interopRequireDefault(_arrayMap); + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _baseProperty = require('lodash/_baseProperty'); + +var _baseProperty2 = _interopRequireDefault(_baseProperty); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function filterArray(eachfn, arr, iteratee, callback) { + var truthValues = new Array(arr.length); + eachfn(arr, function (x, index, callback) { + iteratee(x, function (err, v) { + truthValues[index] = !!v; + callback(err); + }); + }, function (err) { + if (err) return callback(err); + var results = []; + for (var i = 0; i < arr.length; i++) { + if (truthValues[i]) results.push(arr[i]); + } + callback(null, results); + }); +} + +function filterGeneric(eachfn, coll, iteratee, callback) { + var results = []; + eachfn(coll, function (x, index, callback) { + iteratee(x, function (err, v) { + if (err) { + callback(err); + } else { + if (v) { + results.push({ index: index, value: x }); + } + callback(); + } + }); + }, function (err) { + if (err) { + callback(err); + } else { + callback(null, (0, _arrayMap2.default)(results.sort(function (a, b) { + return a.index - b.index; + }), (0, _baseProperty2.default)('value'))); + } + }); +} + +function _filter(eachfn, coll, iteratee, callback) { + var filter = (0, _isArrayLike2.default)(coll) ? filterArray : filterGeneric; + filter(eachfn, coll, (0, _wrapAsync2.default)(iteratee), callback || _noop2.default); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/findGetResult.js b/node_modules/async/internal/findGetResult.js new file mode 100644 index 0000000..f8d3fe0 --- /dev/null +++ b/node_modules/async/internal/findGetResult.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _findGetResult; +function _findGetResult(v, x) { + return x; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/getIterator.js b/node_modules/async/internal/getIterator.js new file mode 100644 index 0000000..3eadd24 --- /dev/null +++ b/node_modules/async/internal/getIterator.js @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll) { + return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); +}; + +var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; + +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/initialParams.js b/node_modules/async/internal/initialParams.js new file mode 100644 index 0000000..df02cb1 --- /dev/null +++ b/node_modules/async/internal/initialParams.js @@ -0,0 +1,21 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (fn) { + return function () /*...args, callback*/{ + var args = (0, _slice2.default)(arguments); + var callback = args.pop(); + fn.call(this, args, callback); + }; +}; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/iterator.js b/node_modules/async/internal/iterator.js new file mode 100644 index 0000000..3d32942 --- /dev/null +++ b/node_modules/async/internal/iterator.js @@ -0,0 +1,58 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = iterator; + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _getIterator = require('./getIterator'); + +var _getIterator2 = _interopRequireDefault(_getIterator); + +var _keys = require('lodash/keys'); + +var _keys2 = _interopRequireDefault(_keys); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? { value: coll[i], key: i } : null; + }; +} + +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) return null; + i++; + return { value: item.value, key: i }; + }; +} + +function createObjectIterator(obj) { + var okeys = (0, _keys2.default)(obj); + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + return i < len ? { value: obj[key], key: key } : null; + }; +} + +function iterator(coll) { + if ((0, _isArrayLike2.default)(coll)) { + return createArrayIterator(coll); + } + + var iterator = (0, _getIterator2.default)(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/map.js b/node_modules/async/internal/map.js new file mode 100644 index 0000000..f4f2aa5 --- /dev/null +++ b/node_modules/async/internal/map.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _asyncMap; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _asyncMap(eachfn, arr, iteratee, callback) { + callback = callback || _noop2.default; + arr = arr || []; + var results = []; + var counter = 0; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + + eachfn(arr, function (value, _, callback) { + var index = counter++; + _iteratee(value, function (err, v) { + results[index] = v; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/notId.js b/node_modules/async/internal/notId.js new file mode 100644 index 0000000..0106c92 --- /dev/null +++ b/node_modules/async/internal/notId.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = notId; +function notId(v) { + return !v; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/once.js b/node_modules/async/internal/once.js new file mode 100644 index 0000000..f0c379f --- /dev/null +++ b/node_modules/async/internal/once.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = once; +function once(fn) { + return function () { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/onlyOnce.js b/node_modules/async/internal/onlyOnce.js new file mode 100644 index 0000000..f2e3001 --- /dev/null +++ b/node_modules/async/internal/onlyOnce.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = onlyOnce; +function onlyOnce(fn) { + return function () { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/parallel.js b/node_modules/async/internal/parallel.js new file mode 100644 index 0000000..c97293b --- /dev/null +++ b/node_modules/async/internal/parallel.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _parallel; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _parallel(eachfn, tasks, callback) { + callback = callback || _noop2.default; + var results = (0, _isArrayLike2.default)(tasks) ? [] : {}; + + eachfn(tasks, function (task, key, callback) { + (0, _wrapAsync2.default)(task)(function (err, result) { + if (arguments.length > 2) { + result = (0, _slice2.default)(arguments, 1); + } + results[key] = result; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/queue.js b/node_modules/async/internal/queue.js new file mode 100644 index 0000000..8188368 --- /dev/null +++ b/node_modules/async/internal/queue.js @@ -0,0 +1,193 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = queue; + +var _baseIndexOf = require('lodash/_baseIndexOf'); + +var _baseIndexOf2 = _interopRequireDefault(_baseIndexOf); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _onlyOnce = require('./onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _setImmediate = require('./setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _DoublyLinkedList = require('./DoublyLinkedList'); + +var _DoublyLinkedList2 = _interopRequireDefault(_DoublyLinkedList); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function queue(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } else if (concurrency === 0) { + throw new Error('Concurrency must not be zero'); + } + + var _worker = (0, _wrapAsync2.default)(worker); + var numRunning = 0; + var workersList = []; + + function _insert(data, insertAtFront, callback) { + if (callback != null && typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!(0, _isArray2.default)(data)) { + data = [data]; + } + if (data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + return (0, _setImmediate2.default)(function () { + q.drain(); + }); + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + callback: callback || _noop2.default + }; + + if (insertAtFront) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + } + (0, _setImmediate2.default)(q.process); + } + + function _next(tasks) { + return function (err) { + numRunning -= 1; + + for (var i = 0, l = tasks.length; i < l; i++) { + var task = tasks[i]; + var index = (0, _baseIndexOf2.default)(workersList, task, 0); + if (index >= 0) { + workersList.splice(index); + } + + task.callback.apply(task, arguments); + + if (err != null) { + q.error(err, task.data); + } + } + + if (numRunning <= q.concurrency - q.buffer) { + q.unsaturated(); + } + + if (q.idle()) { + q.drain(); + } + q.process(); + }; + } + + var isProcessing = false; + var q = { + _tasks: new _DoublyLinkedList2.default(), + concurrency: concurrency, + payload: payload, + saturated: _noop2.default, + unsaturated: _noop2.default, + buffer: concurrency / 4, + empty: _noop2.default, + drain: _noop2.default, + error: _noop2.default, + started: false, + paused: false, + push: function (data, callback) { + _insert(data, false, callback); + }, + kill: function () { + q.drain = _noop2.default; + q._tasks.empty(); + }, + unshift: function (data, callback) { + _insert(data, true, callback); + }, + remove: function (testFn) { + q._tasks.remove(testFn); + }, + process: function () { + // Avoid trying to start too many processing operations. This can occur + // when callbacks resolve synchronously (#1267). + if (isProcessing) { + return; + } + isProcessing = true; + while (!q.paused && numRunning < q.concurrency && q._tasks.length) { + var tasks = [], + data = []; + var l = q._tasks.length; + if (q.payload) l = Math.min(l, q.payload); + for (var i = 0; i < l; i++) { + var node = q._tasks.shift(); + tasks.push(node); + data.push(node.data); + } + + numRunning += 1; + workersList.push(tasks[0]); + + if (q._tasks.length === 0) { + q.empty(); + } + + if (numRunning === q.concurrency) { + q.saturated(); + } + + var cb = (0, _onlyOnce2.default)(_next(tasks)); + _worker(data, cb); + } + isProcessing = false; + }, + length: function () { + return q._tasks.length; + }, + running: function () { + return numRunning; + }, + workersList: function () { + return workersList; + }, + idle: function () { + return q._tasks.length + numRunning === 0; + }, + pause: function () { + q.paused = true; + }, + resume: function () { + if (q.paused === false) { + return; + } + q.paused = false; + (0, _setImmediate2.default)(q.process); + } + }; + return q; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/reject.js b/node_modules/async/internal/reject.js new file mode 100644 index 0000000..5dbfcfb --- /dev/null +++ b/node_modules/async/internal/reject.js @@ -0,0 +1,21 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reject; + +var _filter = require('./filter'); + +var _filter2 = _interopRequireDefault(_filter); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function reject(eachfn, arr, iteratee, callback) { + (0, _filter2.default)(eachfn, arr, function (value, cb) { + iteratee(value, function (err, v) { + cb(err, !v); + }); + }, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/internal/setImmediate.js b/node_modules/async/internal/setImmediate.js new file mode 100644 index 0000000..3545f2b --- /dev/null +++ b/node_modules/async/internal/setImmediate.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.hasNextTick = exports.hasSetImmediate = undefined; +exports.fallback = fallback; +exports.wrap = wrap; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +var hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +function fallback(fn) { + setTimeout(fn, 0); +} + +function wrap(defer) { + return function (fn /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + defer(function () { + fn.apply(null, args); + }); + }; +} + +var _defer; + +if (hasSetImmediate) { + _defer = setImmediate; +} else if (hasNextTick) { + _defer = process.nextTick; +} else { + _defer = fallback; +} + +exports.default = wrap(_defer); \ No newline at end of file diff --git a/node_modules/async/internal/slice.js b/node_modules/async/internal/slice.js new file mode 100644 index 0000000..56f10c0 --- /dev/null +++ b/node_modules/async/internal/slice.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = slice; +function slice(arrayLike, start) { + start = start | 0; + var newLen = Math.max(arrayLike.length - start, 0); + var newArr = Array(newLen); + for (var idx = 0; idx < newLen; idx++) { + newArr[idx] = arrayLike[start + idx]; + } + return newArr; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/withoutIndex.js b/node_modules/async/internal/withoutIndex.js new file mode 100644 index 0000000..2bd3579 --- /dev/null +++ b/node_modules/async/internal/withoutIndex.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _withoutIndex; +function _withoutIndex(iteratee) { + return function (value, index, callback) { + return iteratee(value, callback); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/internal/wrapAsync.js b/node_modules/async/internal/wrapAsync.js new file mode 100644 index 0000000..bc6c966 --- /dev/null +++ b/node_modules/async/internal/wrapAsync.js @@ -0,0 +1,25 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isAsync = undefined; + +var _asyncify = require('../asyncify'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var supportsSymbol = typeof Symbol === 'function'; + +function isAsync(fn) { + return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function wrapAsync(asyncFn) { + return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn; +} + +exports.default = wrapAsync; +exports.isAsync = isAsync; \ No newline at end of file diff --git a/node_modules/async/log.js b/node_modules/async/log.js new file mode 100644 index 0000000..c643867 --- /dev/null +++ b/node_modules/async/log.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _consoleFunc = require('./internal/consoleFunc'); + +var _consoleFunc2 = _interopRequireDefault(_consoleFunc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * 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. + * + * @name log + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, 'hello ' + name); + * }, 1000); + * }; + * + * // in the node repl + * node> async.log(hello, 'world'); + * 'hello world' + */ +exports.default = (0, _consoleFunc2.default)('log'); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/map.js b/node_modules/async/map.js new file mode 100644 index 0000000..67c9cda --- /dev/null +++ b/node_modules/async/map.js @@ -0,0 +1,54 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +var _map = require('./internal/map'); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callback + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @example + * + * async.map(['file1','file2','file3'], fs.stat, function(err, results) { + * // results is now an array of stats for each file + * }); + */ +exports.default = (0, _doParallel2.default)(_map2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/mapLimit.js b/node_modules/async/mapLimit.js new file mode 100644 index 0000000..c8b60d8 --- /dev/null +++ b/node_modules/async/mapLimit.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +var _map = require('./internal/map'); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. + * + * @name mapLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +exports.default = (0, _doParallelLimit2.default)(_map2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/mapSeries.js b/node_modules/async/mapSeries.js new file mode 100644 index 0000000..61b42d0 --- /dev/null +++ b/node_modules/async/mapSeries.js @@ -0,0 +1,36 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +exports.default = (0, _doLimit2.default)(_mapLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/mapValues.js b/node_modules/async/mapValues.js new file mode 100644 index 0000000..3d838ca --- /dev/null +++ b/node_modules/async/mapValues.js @@ -0,0 +1,63 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @example + * + * async.mapValues({ + * f1: 'file1', + * f2: 'file2', + * f3: 'file3' + * }, function (file, key, callback) { + * fs.stat(file, callback); + * }, function(err, result) { + * // result is now a map of stats for each file, e.g. + * // { + * // f1: [stats for file1], + * // f2: [stats for file2], + * // f3: [stats for file3] + * // } + * }); + */ + +exports.default = (0, _doLimit2.default)(_mapValuesLimit2.default, Infinity); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/mapValuesLimit.js b/node_modules/async/mapValuesLimit.js new file mode 100644 index 0000000..912a8b5 --- /dev/null +++ b/node_modules/async/mapValuesLimit.js @@ -0,0 +1,61 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = mapValuesLimit; + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a + * time. + * + * @name mapValuesLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +function mapValuesLimit(obj, limit, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + var newObj = {}; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _eachOfLimit2.default)(obj, limit, function (val, key, next) { + _iteratee(val, key, function (err, result) { + if (err) return next(err); + newObj[key] = result; + next(); + }); + }, function (err) { + callback(err, newObj); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/mapValuesSeries.js b/node_modules/async/mapValuesSeries.js new file mode 100644 index 0000000..b378c4a --- /dev/null +++ b/node_modules/async/mapValuesSeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. + * + * @name mapValuesSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +exports.default = (0, _doLimit2.default)(_mapValuesLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/memoize.js b/node_modules/async/memoize.js new file mode 100644 index 0000000..1f2b566 --- /dev/null +++ b/node_modules/async/memoize.js @@ -0,0 +1,101 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = memoize; + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function has(obj, key) { + return key in obj; +} + +/** + * 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. + * + * If no hash function is specified, the first argument is used as a hash key, + * which may work reasonably if it is a string or a data type that converts to a + * distinct string. Note that objects and arrays will not behave reasonably. + * Neither will cases where the other arguments are significant. In such cases, + * specify your own hash function. + * + * The cache of results is exposed as the `memo` property of the function + * returned by `memoize`. + * + * @name memoize + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function to proxy and cache results from. + * @param {Function} 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. + * @returns {AsyncFunction} a memoized version of `fn` + * @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 + * }); + */ +function memoize(fn, hasher) { + var memo = Object.create(null); + var queues = Object.create(null); + hasher = hasher || _identity2.default; + var _fn = (0, _wrapAsync2.default)(fn); + var memoized = (0, _initialParams2.default)(function memoized(args, callback) { + var key = hasher.apply(null, args); + if (has(memo, key)) { + (0, _setImmediate2.default)(function () { + callback.apply(null, memo[key]); + }); + } else if (has(queues, key)) { + queues[key].push(callback); + } else { + queues[key] = [callback]; + _fn.apply(null, args.concat(function () /*args*/{ + var args = (0, _slice2.default)(arguments); + memo[key] = args; + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i].apply(null, args); + } + })); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/nextTick.js b/node_modules/async/nextTick.js new file mode 100644 index 0000000..fa48e32 --- /dev/null +++ b/node_modules/async/nextTick.js @@ -0,0 +1,51 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _setImmediate = require('./internal/setImmediate'); + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `setImmediate`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @alias setImmediate + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +var _defer; + +if (_setImmediate.hasNextTick) { + _defer = process.nextTick; +} else if (_setImmediate.hasSetImmediate) { + _defer = setImmediate; +} else { + _defer = _setImmediate.fallback; +} + +exports.default = (0, _setImmediate.wrap)(_defer); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/package.json b/node_modules/async/package.json new file mode 100644 index 0000000..96ab327 --- /dev/null +++ b/node_modules/async/package.json @@ -0,0 +1,156 @@ +{ + "_args": [ + [ + { + "raw": "async", + "scope": null, + "escapedName": "async", + "name": "async", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "/Users/macbookpro/Documents/Courses/NodeJs" + ] + ], + "_from": "async@latest", + "_id": "async@2.4.1", + "_inCache": true, + "_location": "/async", + "_nodeVersion": "7.9.0", + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/async-2.4.1.tgz_1495425435125_0.257761464221403" + }, + "_npmUser": { + "name": "aearly", + "email": "alexander.early@gmail.com" + }, + "_npmVersion": "4.6.1", + "_phantomChildren": {}, + "_requested": { + "raw": "async", + "scope": null, + "escapedName": "async", + "name": "async", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "#USER" + ], + "_resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", + "_shasum": "62a56b279c98a11d0987096a01cc3eeb8eb7bbd7", + "_shrinkwrap": null, + "_spec": "async", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs", + "author": { + "name": "Caolan McMahon" + }, + "bugs": { + "url": "https://github.com/caolan/async/issues" + }, + "dependencies": { + "lodash": "^4.14.0" + }, + "description": "Higher-order functions and common patterns for asynchronous code", + "devDependencies": { + "babel-cli": "^6.24.0", + "babel-core": "^6.24.0", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-plugin-istanbul": "^2.0.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.3.16", + "babel-preset-es2015": "^6.3.13", + "babel-preset-es2017": "^6.22.0", + "babelify": "^7.2.0", + "benchmark": "^2.1.1", + "bluebird": "^3.4.6", + "chai": "^3.1.0", + "cheerio": "^0.22.0", + "coveralls": "^2.11.2", + "es6-promise": "^2.3.0", + "eslint": "^2.13.1", + "fs-extra": "^0.26.7", + "gh-pages-deploy": "^0.4.2", + "jsdoc": "^3.4.0", + "karma": "^1.3.0", + "karma-browserify": "^5.1.0", + "karma-firefox-launcher": "^1.0.0", + "karma-mocha": "^1.2.0", + "karma-mocha-reporter": "^2.2.0", + "mocha": "^3.1.2", + "native-promise-only": "^0.8.0-a", + "nyc": "^7.0.0", + "recursive-readdir": "^1.3.0", + "rimraf": "^2.5.0", + "rollup": "^0.36.3", + "rollup-plugin-node-resolve": "^2.0.0", + "rollup-plugin-npm": "^2.0.0", + "rsvp": "^3.0.18", + "semver": "^4.3.6", + "uglify-js": "~2.7.3", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0", + "watchify": "^3.7.0", + "yargs": "~3.9.1" + }, + "directories": {}, + "dist": { + "shasum": "62a56b279c98a11d0987096a01cc3eeb8eb7bbd7", + "tarball": "https://registry.npmjs.org/async/-/async-2.4.1.tgz" + }, + "gh-pages-deploy": { + "staticpath": "docs" + }, + "homepage": "https://github.com/caolan/async#readme", + "keywords": [ + "async", + "callback", + "module", + "utility" + ], + "license": "MIT", + "main": "dist/async.js", + "maintainers": [ + { + "name": "caolan", + "email": "caolan.mcmahon@gmail.com" + }, + { + "name": "beaugunderson", + "email": "beau@beaugunderson.com" + }, + { + "name": "aearly", + "email": "alexander.early@gmail.com" + }, + { + "name": "megawac", + "email": "megawac@gmail.com" + } + ], + "name": "async", + "nyc": { + "exclude": [ + "mocha_test" + ] + }, + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/caolan/async.git" + }, + "scripts": { + "coverage": "nyc npm run mocha-node-test -- --grep @nycinvalid --invert", + "coveralls": "npm run coverage && nyc report --reporter=text-lcov | coveralls", + "jsdoc": "jsdoc -c ./support/jsdoc/jsdoc.json && node support/jsdoc/jsdoc-fix-html.js", + "lint": "eslint lib/ mocha_test/ perf/memory.js perf/suites.js perf/benchmark.js support/build/ support/*.js karma.conf.js", + "mocha-browser-test": "karma start", + "mocha-node-test": "mocha mocha_test/ --compilers js:babel-core/register", + "mocha-test": "npm run mocha-node-test && npm run mocha-browser-test", + "test": "npm run lint && npm run mocha-node-test" + }, + "version": "2.4.1" +} diff --git a/node_modules/async/parallel.js b/node_modules/async/parallel.js new file mode 100644 index 0000000..da28a4d --- /dev/null +++ b/node_modules/async/parallel.js @@ -0,0 +1,90 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = parallelLimit; + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _parallel = require('./internal/parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Run the `tasks` collection 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. + * + * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about + * parallel execution of code. If your tasks do not use any timers or perform + * any I/O, they will actually be executed in series. Any synchronous setup + * sections for each task will happen one after the other. JavaScript remains + * single-threaded. + * + * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the + * execution of other tasks when a task fails. + * + * 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 {@link async.parallel}. + * + * @name parallel + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * + * @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} + * }); + */ +function parallelLimit(tasks, callback) { + (0, _parallel2.default)(_eachOf2.default, tasks, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/parallelLimit.js b/node_modules/async/parallelLimit.js new file mode 100644 index 0000000..a026526 --- /dev/null +++ b/node_modules/async/parallelLimit.js @@ -0,0 +1,40 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = parallelLimit; + +var _eachOfLimit = require('./internal/eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _parallel = require('./internal/parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a + * time. + * + * @name parallelLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.parallel]{@link module:ControlFlow.parallel} + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + */ +function parallelLimit(tasks, limit, callback) { + (0, _parallel2.default)((0, _eachOfLimit2.default)(limit), tasks, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/priorityQueue.js b/node_modules/async/priorityQueue.js new file mode 100644 index 0000000..3a5f023 --- /dev/null +++ b/node_modules/async/priorityQueue.js @@ -0,0 +1,98 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (worker, concurrency) { + // Start with a normal queue + var q = (0, _queue2.default)(worker, concurrency); + + // Override push to accept second parameter representing priority + q.push = function (data, priority, callback) { + if (callback == null) callback = _noop2.default; + if (typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!(0, _isArray2.default)(data)) { + data = [data]; + } + if (data.length === 0) { + // call drain immediately if there are no tasks + return (0, _setImmediate2.default)(function () { + q.drain(); + }); + } + + priority = priority || 0; + var nextNode = q._tasks.head; + while (nextNode && priority >= nextNode.priority) { + nextNode = nextNode.next; + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + priority: priority, + callback: callback + }; + + if (nextNode) { + q._tasks.insertBefore(nextNode, item); + } else { + q._tasks.push(item); + } + } + (0, _setImmediate2.default)(q.process); + }; + + // Remove unshift function + delete q.unshift; + + return q; +}; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _setImmediate = require('./setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _queue = require('./queue'); + +var _queue2 = _interopRequireDefault(_queue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and + * completed in ascending priority order. + * + * @name priorityQueue + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. + * Invoked with (task, callback). + * @param {number} concurrency - An `integer` for determining how many `worker` + * functions should be run in parallel. If omitted, the concurrency defaults to + * `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two + * differences between `queue` and `priorityQueue` objects: + * * `push(task, priority, [callback])` - `priority` should be a number. If an + * array of `tasks` is given, all tasks will be assigned the same priority. + * * The `unshift` method was removed. + */ \ No newline at end of file diff --git a/node_modules/async/queue.js b/node_modules/async/queue.js new file mode 100644 index 0000000..0a61736 --- /dev/null +++ b/node_modules/async/queue.js @@ -0,0 +1,129 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (worker, concurrency) { + var _worker = (0, _wrapAsync2.default)(worker); + return (0, _queue2.default)(function (items, cb) { + _worker(items[0], cb); + }, concurrency, 1); +}; + +var _queue = require('./internal/queue'); + +var _queue2 = _interopRequireDefault(_queue); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * A queue of tasks for the worker function to complete. + * @typedef {Object} QueueObject + * @memberOf module:ControlFlow + * @property {Function} length - a function returning the number of items + * waiting to be processed. Invoke with `queue.length()`. + * @property {boolean} started - a boolean indicating whether or not any + * items have been pushed and processed by the queue. + * @property {Function} running - a function returning the number of items + * currently being processed. Invoke with `queue.running()`. + * @property {Function} workersList - a function returning the array of items + * currently being processed. Invoke with `queue.workersList()`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke with `queue.idle()`. + * @property {number} 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. + * @property {Function} push - add a new task to the `queue`. Calls `callback` + * once the `worker` has finished processing the task. Instead of a single task, + * a `tasks` array can be submitted. The respective callback is used for every + * task in the list. Invoke with `queue.push(task, [callback])`, + * @property {Function} unshift - add a new task to the front of the `queue`. + * Invoke with `queue.unshift(task, [callback])`. + * @property {Function} remove - remove items from the queue that match a test + * function. The test function will be passed an object with a `data` property, + * and a `priority` property, if this is a + * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. + * Invoked with `queue.remove(testFn)`, where `testFn` is of the form + * `function ({data, priority}) {}` and returns a Boolean. + * @property {Function} saturated - a callback that is called when the number of + * running workers hits the `concurrency` limit, and further tasks will be + * queued. + * @property {Function} unsaturated - a callback that is called when the number + * of running workers is less than the `concurrency` & `buffer` limits, and + * further tasks will not be queued. + * @property {number} buffer - A minimum threshold buffer in order to say that + * the `queue` is `unsaturated`. + * @property {Function} empty - a callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - a callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} error - a callback that is called when a task errors. + * Has the signature `function(error, task)`. + * @property {boolean} paused - a boolean for determining whether the queue is + * in a paused state. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke with `queue.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke with `queue.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. Invoke with `queue.kill()`. + */ + +/** + * Creates a `queue` object with the specified `concurrency`. Tasks added to the + * `queue` are processed in parallel (up to the `concurrency` limit). If all + * `worker`s are in progress, the task is queued until one becomes available. + * Once a `worker` completes a `task`, that `task`'s callback is called. + * + * @name queue + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. Invoked with (task, callback). + * @param {number} [concurrency=1] - An `integer` for determining how many + * `worker` functions should be run in parallel. If omitted, the concurrency + * defaults to `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the queue. + * @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 item'); + * }); + * + * // add some items to the front of the queue + * q.unshift({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + */ \ No newline at end of file diff --git a/node_modules/async/race.js b/node_modules/async/race.js new file mode 100644 index 0000000..6713c74 --- /dev/null +++ b/node_modules/async/race.js @@ -0,0 +1,70 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = race; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Runs the `tasks` array of functions in parallel, without waiting until the + * previous function has completed. Once any of the `tasks` complete or pass an + * error to its callback, the main `callback` is immediately called. It's + * equivalent to `Promise.race()`. + * + * @name race + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} + * to run. Each function can complete with an optional `result` value. + * @param {Function} callback - A callback to run once any of the functions have + * completed. This function gets an error or result from the first function that + * completed. Invoked with (err, result). + * @returns undefined + * @example + * + * async.race([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // main callback + * function(err, result) { + * // the result will be equal to 'two' as it finishes earlier + * }); + */ +function race(tasks, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + if (!(0, _isArray2.default)(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); + if (!tasks.length) return callback(); + for (var i = 0, l = tasks.length; i < l; i++) { + (0, _wrapAsync2.default)(tasks[i])(callback); + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/reduce.js b/node_modules/async/reduce.js new file mode 100644 index 0000000..3fb8019 --- /dev/null +++ b/node_modules/async/reduce.js @@ -0,0 +1,78 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reduce; + +var _eachOfSeries = require('./eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Reduces `coll` into a single value using an async `iteratee` 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, and 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. + * + * @name reduce + * @static + * @memberOf module:Collections + * @method + * @alias inject + * @alias foldl + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee complete with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @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 + * }); + */ +function reduce(coll, memo, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _eachOfSeries2.default)(coll, function (x, i, callback) { + _iteratee(memo, x, function (err, v) { + memo = v; + callback(err); + }); + }, function (err) { + callback(err, memo); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/reduceRight.js b/node_modules/async/reduceRight.js new file mode 100644 index 0000000..3d17d32 --- /dev/null +++ b/node_modules/async/reduceRight.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reduceRight; + +var _reduce = require('./reduce'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee complete with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + */ +function reduceRight(array, memo, iteratee, callback) { + var reversed = (0, _slice2.default)(array).reverse(); + (0, _reduce2.default)(reversed, memo, iteratee, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/reflect.js b/node_modules/async/reflect.js new file mode 100644 index 0000000..098ba86 --- /dev/null +++ b/node_modules/async/reflect.js @@ -0,0 +1,81 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reflect; + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ +function reflect(fn) { + var _fn = (0, _wrapAsync2.default)(fn); + return (0, _initialParams2.default)(function reflectOn(args, reflectCallback) { + args.push(function callback(error, cbArg) { + if (error) { + reflectCallback(null, { error: error }); + } else { + var value; + if (arguments.length <= 2) { + value = cbArg; + } else { + value = (0, _slice2.default)(arguments, 1); + } + reflectCallback(null, { value: value }); + } + }); + + return _fn.apply(this, args); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/reflectAll.js b/node_modules/async/reflectAll.js new file mode 100644 index 0000000..966e83d --- /dev/null +++ b/node_modules/async/reflectAll.js @@ -0,0 +1,105 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reflectAll; + +var _reflect = require('./reflect'); + +var _reflect2 = _interopRequireDefault(_reflect); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _arrayMap2 = require('lodash/_arrayMap'); + +var _arrayMap3 = _interopRequireDefault(_arrayMap2); + +var _baseForOwn = require('lodash/_baseForOwn'); + +var _baseForOwn2 = _interopRequireDefault(_baseForOwn); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A helper function that wraps an array or an object of functions with `reflect`. + * + * @name reflectAll + * @static + * @memberOf module:Utils + * @method + * @see [async.reflect]{@link module:Utils.reflect} + * @category Util + * @param {Array|Object|Iterable} tasks - The collection of + * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. + * @returns {Array} Returns an array of async functions, each wrapped in + * `async.reflect` + * @example + * + * let tasks = [ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * // do some more stuff but error ... + * callback(new Error('bad stuff happened')); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = Error('bad stuff happened') + * // results[2].value = 'two' + * }); + * + * // an example using an object instead of an array + * let tasks = { + * one: function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * two: function(callback) { + * callback('two'); + * }, + * three: function(callback) { + * setTimeout(function() { + * callback(null, 'three'); + * }, 100); + * } + * }; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results.one.value = 'one' + * // results.two.error = 'two' + * // results.three.value = 'three' + * }); + */ +function reflectAll(tasks) { + var results; + if ((0, _isArray2.default)(tasks)) { + results = (0, _arrayMap3.default)(tasks, _reflect2.default); + } else { + results = {}; + (0, _baseForOwn2.default)(tasks, function (task, key) { + results[key] = _reflect2.default.call(this, task); + }); + } + return results; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/reject.js b/node_modules/async/reject.js new file mode 100644 index 0000000..53802b5 --- /dev/null +++ b/node_modules/async/reject.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reject = require('./internal/reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. + * + * @name reject + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.reject(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of missing files + * createFiles(results); + * }); + */ +exports.default = (0, _doParallel2.default)(_reject2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/rejectLimit.js b/node_modules/async/rejectLimit.js new file mode 100644 index 0000000..74bba7f --- /dev/null +++ b/node_modules/async/rejectLimit.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reject = require('./internal/reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +exports.default = (0, _doParallelLimit2.default)(_reject2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/rejectSeries.js b/node_modules/async/rejectSeries.js new file mode 100644 index 0000000..f905588 --- /dev/null +++ b/node_modules/async/rejectSeries.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _rejectLimit = require('./rejectLimit'); + +var _rejectLimit2 = _interopRequireDefault(_rejectLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +exports.default = (0, _doLimit2.default)(_rejectLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/retry.js b/node_modules/async/retry.js new file mode 100644 index 0000000..9ad7ff1 --- /dev/null +++ b/node_modules/async/retry.js @@ -0,0 +1,156 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = retry; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _constant = require('lodash/constant'); + +var _constant2 = _interopRequireDefault(_constant); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // It can also be embedded within other control flow functions to retry + * // individual methods that are not as reliable, like this: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ +function retry(opts, task, callback) { + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var options = { + times: DEFAULT_TIMES, + intervalFunc: (0, _constant2.default)(DEFAULT_INTERVAL) + }; + + function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? t.interval : (0, _constant2.default)(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } + } + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || _noop2.default; + task = opts; + } else { + parseTimes(options, opts); + callback = callback || _noop2.default; + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = (0, _wrapAsync2.default)(task); + + var attempt = 1; + function retryAttempt() { + _task(function (err) { + if (err && attempt++ < options.times && (typeof options.errorFilter != 'function' || options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt)); + } else { + callback.apply(null, arguments); + } + }); + } + + retryAttempt(); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/retryable.js b/node_modules/async/retryable.js new file mode 100644 index 0000000..002bfb0 --- /dev/null +++ b/node_modules/async/retryable.js @@ -0,0 +1,65 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (opts, task) { + if (!task) { + task = opts; + opts = null; + } + var _task = (0, _wrapAsync2.default)(task); + return (0, _initialParams2.default)(function (args, callback) { + function taskFn(cb) { + _task.apply(null, args.concat(cb)); + } + + if (opts) (0, _retry2.default)(opts, taskFn, callback);else (0, _retry2.default)(taskFn, callback); + }); +}; + +var _retry = require('./retry'); + +var _retry2 = _interopRequireDefault(_retry); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method + * wraps a task and makes it retryable, rather than immediately calling it + * with retries. + * + * @name retryable + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.retry]{@link module:ControlFlow.retry} + * @category Control Flow + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional + * options, exactly the same as from `retry` + * @param {AsyncFunction} task - the asynchronous function to wrap. + * This function will be passed any arguments passed to the returned wrapper. + * Invoked with (...args, callback). + * @returns {AsyncFunction} The wrapped function, which when invoked, will + * retry on an error, based on the parameters specified in `opts`. + * This function will accept the same parameters as `task`. + * @example + * + * async.auto({ + * dep1: async.retryable(3, getFromFlakyService), + * process: ["dep1", async.retryable(3, function (results, cb) { + * maybeProcessData(results.dep1, cb); + * })] + * }, callback); + */ \ No newline at end of file diff --git a/node_modules/async/seq.js b/node_modules/async/seq.js new file mode 100644 index 0000000..ff86ef9 --- /dev/null +++ b/node_modules/async/seq.js @@ -0,0 +1,91 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = seq; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _reduce = require('./reduce'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _arrayMap = require('lodash/_arrayMap'); + +var _arrayMap2 = _interopRequireDefault(_arrayMap); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Version of the compose function that is more natural to read. Each function + * consumes the return value of the previous function. It is the equivalent of + * [compose]{@link module:ControlFlow.compose} with the arguments reversed. + * + * Each function is executed with the `this` binding of the composed function. + * + * @name seq + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.compose]{@link module:ControlFlow.compose} + * @category Control Flow + * @param {...AsyncFunction} functions - the asynchronous functions to compose + * @returns {Function} a function that composes the `functions` in order + * @example + * + * // Requires lodash (or underscore), express3 and dresende's orm2. + * // Part of an app, that fetches cats of the logged user. + * // This example uses `seq` function to avoid overnesting and error + * // handling clutter. + * app.get('/cats', function(request, response) { + * var User = request.models.User; + * async.seq( + * _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) + * function(user, fn) { + * user.getCats(fn); // 'getCats' has signature (callback(err, data)) + * } + * )(req.session.user_id, function (err, cats) { + * if (err) { + * console.error(err); + * response.json({ status: 'error', message: err.message }); + * } else { + * response.json({ status: 'ok', message: 'Cats found', data: cats }); + * } + * }); + * }); + */ +function seq() /*...functions*/{ + var _functions = (0, _arrayMap2.default)(arguments, _wrapAsync2.default); + return function () /*...args*/{ + var args = (0, _slice2.default)(arguments); + var that = this; + + var cb = args[args.length - 1]; + if (typeof cb == 'function') { + args.pop(); + } else { + cb = _noop2.default; + } + + (0, _reduce2.default)(_functions, args, function (newargs, fn, cb) { + fn.apply(that, newargs.concat(function (err /*, ...nextargs*/) { + var nextargs = (0, _slice2.default)(arguments, 1); + cb(err, nextargs); + })); + }, function (err, results) { + cb.apply(that, [err].concat(results)); + }); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/series.js b/node_modules/async/series.js new file mode 100644 index 0000000..e8c2928 --- /dev/null +++ b/node_modules/async/series.js @@ -0,0 +1,85 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = series; + +var _parallel = require('./internal/parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +var _eachOfSeries = require('./eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Run the functions in the `tasks` collection 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 `callback` is + * immediately called with the value of the error. Otherwise, `callback` + * receives an array of results when `tasks` have completed. + * + * 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 {@link async.series}. + * + * **Note** that while many implementations preserve the order of object + * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) + * explicitly states that + * + * > The mechanics and order of enumerating the properties is not specified. + * + * So if you rely on the order in which your series of functions are executed, + * and want this to work on all platforms, consider using an array. + * + * @name series + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing + * [async functions]{@link AsyncFunction} to run in series. + * Each function can complete with any number of optional `result` values. + * @param {Function} [callback] - 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. Invoked + * with (err, result). + * @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'] + * }); + * + * 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} + * }); + */ +function series(tasks, callback) { + (0, _parallel2.default)(_eachOfSeries2.default, tasks, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/setImmediate.js b/node_modules/async/setImmediate.js new file mode 100644 index 0000000..23d48e2 --- /dev/null +++ b/node_modules/async/setImmediate.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `setImmediate`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name setImmediate + * @static + * @memberOf module:Utils + * @method + * @alias nextTick + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +exports.default = _setImmediate2.default; +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/some.js b/node_modules/async/some.js new file mode 100644 index 0000000..a8e70f7 --- /dev/null +++ b/node_modules/async/some.js @@ -0,0 +1,52 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @example + * + * async.some(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then at least one of the files exists + * }); + */ +exports.default = (0, _doParallel2.default)((0, _createTester2.default)(Boolean, _identity2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/someLimit.js b/node_modules/async/someLimit.js new file mode 100644 index 0000000..24ca3f4 --- /dev/null +++ b/node_modules/async/someLimit.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +exports.default = (0, _doParallelLimit2.default)((0, _createTester2.default)(Boolean, _identity2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/someSeries.js b/node_modules/async/someSeries.js new file mode 100644 index 0000000..dc24ed2 --- /dev/null +++ b/node_modules/async/someSeries.js @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _someLimit = require('./someLimit'); + +var _someLimit2 = _interopRequireDefault(_someLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +exports.default = (0, _doLimit2.default)(_someLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/sortBy.js b/node_modules/async/sortBy.js new file mode 100644 index 0000000..ee5e93d --- /dev/null +++ b/node_modules/async/sortBy.js @@ -0,0 +1,91 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = sortBy; + +var _arrayMap = require('lodash/_arrayMap'); + +var _arrayMap2 = _interopRequireDefault(_arrayMap); + +var _baseProperty = require('lodash/_baseProperty'); + +var _baseProperty2 = _interopRequireDefault(_baseProperty); + +var _map = require('./map'); + +var _map2 = _interopRequireDefault(_map); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Sorts a list by the results of running each `coll` value through an async + * `iteratee`. + * + * @name sortBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a value to use as the sort criteria as + * its `result`. + * Invoked with (item, callback). + * @param {Function} callback - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is the items + * from the original `coll` sorted by the values returned by the `iteratee` + * calls. Invoked with (err, results). + * @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 + * }); + * + * // By modifying the callback parameter the + * // sorting order can be influenced: + * + * // ascending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x); + * }, function(err,result) { + * // result callback + * }); + * + * // descending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x*-1); //<- x*-1 instead of x, turns the order around + * }, function(err,result) { + * // result callback + * }); + */ +function sortBy(coll, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _map2.default)(coll, function (x, callback) { + _iteratee(x, function (err, criteria) { + if (err) return callback(err); + callback(null, { value: x, criteria: criteria }); + }); + }, function (err, results) { + if (err) return callback(err); + callback(null, (0, _arrayMap2.default)(results.sort(comparator), (0, _baseProperty2.default)('value'))); + }); + + function comparator(left, right) { + var a = left.criteria, + b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/timeout.js b/node_modules/async/timeout.js new file mode 100644 index 0000000..b5cb505 --- /dev/null +++ b/node_modules/async/timeout.js @@ -0,0 +1,89 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = timeout; + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ +function timeout(asyncFn, milliseconds, info) { + var fn = (0, _wrapAsync2.default)(asyncFn); + + return (0, _initialParams2.default)(function (args, callback) { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push(function () { + if (!timedOut) { + callback.apply(null, arguments); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn.apply(null, args); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/times.js b/node_modules/async/times.js new file mode 100644 index 0000000..b5ca24d --- /dev/null +++ b/node_modules/async/times.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @example + * + * // 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 + * }); + */ +exports.default = (0, _doLimit2.default)(_timesLimit2.default, Infinity); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/timesLimit.js b/node_modules/async/timesLimit.js new file mode 100644 index 0000000..aad8495 --- /dev/null +++ b/node_modules/async/timesLimit.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = timeLimit; + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _baseRange = require('lodash/_baseRange'); + +var _baseRange2 = _interopRequireDefault(_baseRange); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a + * time. + * + * @name timesLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} count - The number of times to run the function. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see [async.map]{@link module:Collections.map}. + */ +function timeLimit(count, limit, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _mapLimit2.default)((0, _baseRange2.default)(0, count, 1), limit, _iteratee, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/timesSeries.js b/node_modules/async/timesSeries.js new file mode 100644 index 0000000..f187a35 --- /dev/null +++ b/node_modules/async/timesSeries.js @@ -0,0 +1,32 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. + * + * @name timesSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + */ +exports.default = (0, _doLimit2.default)(_timesLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/transform.js b/node_modules/async/transform.js new file mode 100644 index 0000000..84ee217 --- /dev/null +++ b/node_modules/async/transform.js @@ -0,0 +1,87 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = transform; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in series, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @example + * + * async.transform([1,2,3], function(acc, item, index, callback) { + * // pointless async: + * process.nextTick(function() { + * acc.push(item * 2) + * callback(null) + * }); + * }, function(err, result) { + * // result is now equal to [2, 4, 6] + * }); + * + * @example + * + * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) { + * setImmediate(function () { + * obj[key] = val * 2; + * callback(); + * }) + * }, function (err, result) { + * // result is equal to {a: 2, b: 4, c: 6} + * }) + */ +function transform(coll, accumulator, iteratee, callback) { + if (arguments.length <= 3) { + callback = iteratee; + iteratee = accumulator; + accumulator = (0, _isArray2.default)(coll) ? [] : {}; + } + callback = (0, _once2.default)(callback || _noop2.default); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + + (0, _eachOf2.default)(coll, function (v, k, cb) { + _iteratee(accumulator, v, k, cb); + }, function (err) { + callback(err, accumulator); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/tryEach.js b/node_modules/async/tryEach.js new file mode 100644 index 0000000..35cd003 --- /dev/null +++ b/node_modules/async/tryEach.js @@ -0,0 +1,81 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = tryEach; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _eachSeries = require('./eachSeries'); + +var _eachSeries2 = _interopRequireDefault(_eachSeries); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * It runs each task in series but stops whenever any of the functions were + * successful. If one of the tasks were successful, the `callback` will be + * passed the result of the successful task. If all tasks fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name tryEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing functions to + * run, each function is passed a `callback(err, result)` it must call on + * completion with an error `err` (which can be `null`) and an optional `result` + * value. + * @param {Function} [callback] - An optional callback which is called when one + * of the tasks has succeeded, or all have failed. It receives the `err` and + * `result` arguments of the last attempt at completing the `task`. Invoked with + * (err, results). + * @example + * async.try([ + * function getDataFromFirstWebsite(callback) { + * // Try getting the data from the first website + * callback(err, data); + * }, + * function getDataFromSecondWebsite(callback) { + * // First website failed, + * // Try getting the data from the backup website + * callback(err, data); + * } + * ], + * // optional callback + * function(err, results) { + * Now do something with the data. + * }); + * + */ +function tryEach(tasks, callback) { + var error = null; + var result; + callback = callback || _noop2.default; + (0, _eachSeries2.default)(tasks, function (task, callback) { + (0, _wrapAsync2.default)(task)(function (err, res /*, ...args*/) { + if (arguments.length > 2) { + result = (0, _slice2.default)(arguments, 1); + } else { + result = res; + } + error = err; + callback(!err); + }); + }, function () { + callback(error, result); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/unmemoize.js b/node_modules/async/unmemoize.js new file mode 100644 index 0000000..08f9f9f --- /dev/null +++ b/node_modules/async/unmemoize.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = unmemoize; +/** + * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, + * unmemoized form. Handy for testing. + * + * @name unmemoize + * @static + * @memberOf module:Utils + * @method + * @see [async.memoize]{@link module:Utils.memoize} + * @category Util + * @param {AsyncFunction} fn - the memoized function + * @returns {AsyncFunction} a function that calls the original unmemoized function + */ +function unmemoize(fn) { + return function () { + return (fn.unmemoized || fn).apply(null, arguments); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/node_modules/async/until.js b/node_modules/async/until.js new file mode 100644 index 0000000..29955ab --- /dev/null +++ b/node_modules/async/until.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = until; + +var _whilst = require('./whilst'); + +var _whilst2 = _interopRequireDefault(_whilst); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function until(test, iteratee, callback) { + (0, _whilst2.default)(function () { + return !test.apply(this, arguments); + }, iteratee, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/async/waterfall.js b/node_modules/async/waterfall.js new file mode 100644 index 0000000..d547d6b --- /dev/null +++ b/node_modules/async/waterfall.js @@ -0,0 +1,113 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (tasks, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + if (!(0, _isArray2.default)(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); + if (!tasks.length) return callback(); + var taskIndex = 0; + + function nextTask(args) { + var task = (0, _wrapAsync2.default)(tasks[taskIndex++]); + args.push((0, _onlyOnce2.default)(next)); + task.apply(null, args); + } + + function next(err /*, ...args*/) { + if (err || taskIndex === tasks.length) { + return callback.apply(null, arguments); + } + nextTask((0, _slice2.default)(arguments, 1)); + } + + nextTask([]); +}; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * Runs the `tasks` array of functions in series, each passing their results to + * the next in the array. However, if any of the `tasks` pass an error to their + * own callback, the next function is not executed, and the main `callback` is + * immediately called with the error. + * + * @name waterfall + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} + * to run. + * Each function should complete with any number of `result` values. + * The `result` values will be passed as arguments, in order, to the next task. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This will be passed the results of the last task's + * callback. Invoked with (err, [results]). + * @returns undefined + * @example + * + * async.waterfall([ + * function(callback) { + * callback(null, 'one', 'two'); + * }, + * function(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * }, + * function(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + * ], function (err, result) { + * // result now equals 'done' + * }); + * + * // Or, with named functions: + * async.waterfall([ + * myFirstFunction, + * mySecondFunction, + * myLastFunction, + * ], function (err, result) { + * // result now equals 'done' + * }); + * function myFirstFunction(callback) { + * callback(null, 'one', 'two'); + * } + * function mySecondFunction(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * } + * function myLastFunction(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + */ \ No newline at end of file diff --git a/node_modules/async/whilst.js b/node_modules/async/whilst.js new file mode 100644 index 0000000..9c4d8f6 --- /dev/null +++ b/node_modules/async/whilst.js @@ -0,0 +1,72 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = whilst; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns undefined + * @example + * + * var count = 0; + * async.whilst( + * function() { return count < 5; }, + * function(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ +function whilst(test, iteratee, callback) { + callback = (0, _onlyOnce2.default)(callback || _noop2.default); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + if (!test()) return callback(null); + var next = function (err /*, ...args*/) { + if (err) return callback(err); + if (test()) return _iteratee(next); + var args = (0, _slice2.default)(arguments, 1); + callback.apply(null, [null].concat(args)); + }; + _iteratee(next); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/node_modules/backo2/.npmignore b/node_modules/backo2/.npmignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/node_modules/backo2/.npmignore @@ -0,0 +1 @@ +node_modules/ diff --git a/node_modules/backo2/History.md b/node_modules/backo2/History.md new file mode 100644 index 0000000..8eb28b8 --- /dev/null +++ b/node_modules/backo2/History.md @@ -0,0 +1,12 @@ + +1.0.1 / 2014-02-17 +================== + + * go away decimal point + * history + +1.0.0 / 2014-02-17 +================== + + * add jitter option + * Initial commit diff --git a/node_modules/backo2/Makefile b/node_modules/backo2/Makefile new file mode 100644 index 0000000..9987df8 --- /dev/null +++ b/node_modules/backo2/Makefile @@ -0,0 +1,8 @@ + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter dot \ + --bail + +.PHONY: test \ No newline at end of file diff --git a/node_modules/backo2/Readme.md b/node_modules/backo2/Readme.md new file mode 100644 index 0000000..0df2a39 --- /dev/null +++ b/node_modules/backo2/Readme.md @@ -0,0 +1,34 @@ +# backo + + Simple exponential backoff because the others seem to have weird abstractions. + +## Installation + +``` +$ npm install backo +``` + +## Options + + - `min` initial timeout in milliseconds [100] + - `max` max timeout [10000] + - `jitter` [0] + - `factor` [2] + +## Example + +```js +var Backoff = require('backo'); +var backoff = new Backoff({ min: 100, max: 20000 }); + +setTimeout(function(){ + something.reconnect(); +}, backoff.duration()); + +// later when something works +backoff.reset() +``` + +# License + + MIT diff --git a/node_modules/backo2/component.json b/node_modules/backo2/component.json new file mode 100644 index 0000000..994845a --- /dev/null +++ b/node_modules/backo2/component.json @@ -0,0 +1,11 @@ +{ + "name": "backo", + "repo": "segmentio/backo", + "dependencies": {}, + "version": "1.0.1", + "description": "simple backoff without the weird abstractions", + "keywords": ["backoff"], + "license": "MIT", + "scripts": ["index.js"], + "main": "index.js" +} diff --git a/node_modules/backo2/index.js b/node_modules/backo2/index.js new file mode 100644 index 0000000..fac4429 --- /dev/null +++ b/node_modules/backo2/index.js @@ -0,0 +1,85 @@ + +/** + * Expose `Backoff`. + */ + +module.exports = Backoff; + +/** + * Initialize backoff timer with `opts`. + * + * - `min` initial timeout in milliseconds [100] + * - `max` max timeout [10000] + * - `jitter` [0] + * - `factor` [2] + * + * @param {Object} opts + * @api public + */ + +function Backoff(opts) { + opts = opts || {}; + this.ms = opts.min || 100; + this.max = opts.max || 10000; + this.factor = opts.factor || 2; + this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; + this.attempts = 0; +} + +/** + * Return the backoff duration. + * + * @return {Number} + * @api public + */ + +Backoff.prototype.duration = function(){ + var ms = this.ms * Math.pow(this.factor, this.attempts++); + if (this.jitter) { + var rand = Math.random(); + var deviation = Math.floor(rand * this.jitter * ms); + ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; + } + return Math.min(ms, this.max) | 0; +}; + +/** + * Reset the number of attempts. + * + * @api public + */ + +Backoff.prototype.reset = function(){ + this.attempts = 0; +}; + +/** + * Set the minimum duration + * + * @api public + */ + +Backoff.prototype.setMin = function(min){ + this.ms = min; +}; + +/** + * Set the maximum duration + * + * @api public + */ + +Backoff.prototype.setMax = function(max){ + this.max = max; +}; + +/** + * Set the jitter + * + * @api public + */ + +Backoff.prototype.setJitter = function(jitter){ + this.jitter = jitter; +}; + diff --git a/node_modules/backo2/package.json b/node_modules/backo2/package.json new file mode 100644 index 0000000..0185c27 --- /dev/null +++ b/node_modules/backo2/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + { + "raw": "backo2@1.0.2", + "scope": null, + "escapedName": "backo2", + "name": "backo2", + "rawSpec": "1.0.2", + "spec": "1.0.2", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/socket.io-client" + ] + ], + "_from": "backo2@1.0.2", + "_id": "backo2@1.0.2", + "_inCache": true, + "_location": "/backo2", + "_npmUser": { + "name": "mokesmokes", + "email": "mokesmokes@gmail.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "backo2@1.0.2", + "scope": null, + "escapedName": "backo2", + "name": "backo2", + "rawSpec": "1.0.2", + "spec": "1.0.2", + "type": "version" + }, + "_requiredBy": [ + "/socket.io-client" + ], + "_resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "_shasum": "31ab1ac8b129363463e35b3ebb69f4dfcfba7947", + "_shrinkwrap": null, + "_spec": "backo2@1.0.2", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/socket.io-client", + "bugs": { + "url": "https://github.com/mokesmokes/backo/issues" + }, + "dependencies": {}, + "description": "simple backoff based on segmentio/backo", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "directories": {}, + "dist": { + "shasum": "31ab1ac8b129363463e35b3ebb69f4dfcfba7947", + "tarball": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" + }, + "gitHead": "3e695bade7756fef2295e8883bf3570a06e5d9ec", + "homepage": "https://github.com/mokesmokes/backo", + "keywords": [ + "backoff" + ], + "license": "MIT", + "maintainers": [ + { + "name": "mokesmokes", + "email": "mokesmokes@gmail.com" + } + ], + "name": "backo2", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/mokesmokes/backo.git" + }, + "scripts": {}, + "version": "1.0.2" +} diff --git a/node_modules/backo2/test/index.js b/node_modules/backo2/test/index.js new file mode 100644 index 0000000..ea1f6de --- /dev/null +++ b/node_modules/backo2/test/index.js @@ -0,0 +1,18 @@ + +var Backoff = require('..'); +var assert = require('assert'); + +describe('.duration()', function(){ + it('should increase the backoff', function(){ + var b = new Backoff; + + assert(100 == b.duration()); + assert(200 == b.duration()); + assert(400 == b.duration()); + assert(800 == b.duration()); + + b.reset(); + assert(100 == b.duration()); + assert(200 == b.duration()); + }) +}) \ No newline at end of file diff --git a/node_modules/balanced-match/.npmignore b/node_modules/balanced-match/.npmignore new file mode 100644 index 0000000..ae5d8c3 --- /dev/null +++ b/node_modules/balanced-match/.npmignore @@ -0,0 +1,5 @@ +test +.gitignore +.travis.yml +Makefile +example.js diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md new file mode 100644 index 0000000..2cdc8e4 --- /dev/null +++ b/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/balanced-match/README.md b/node_modules/balanced-match/README.md new file mode 100644 index 0000000..08e918c --- /dev/null +++ b/node_modules/balanced-match/README.md @@ -0,0 +1,91 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/balanced-match/index.js b/node_modules/balanced-match/index.js new file mode 100644 index 0000000..1685a76 --- /dev/null +++ b/node_modules/balanced-match/index.js @@ -0,0 +1,59 @@ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json new file mode 100644 index 0000000..f3a0fbf --- /dev/null +++ b/node_modules/balanced-match/package.json @@ -0,0 +1,112 @@ +{ + "_args": [ + [ + { + "raw": "balanced-match@^1.0.0", + "scope": null, + "escapedName": "balanced-match", + "name": "balanced-match", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/brace-expansion" + ] + ], + "_from": "balanced-match@>=1.0.0 <2.0.0", + "_id": "balanced-match@1.0.0", + "_inCache": true, + "_location": "/balanced-match", + "_nodeVersion": "7.8.0", + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/balanced-match-1.0.0.tgz_1497251909645_0.8755026108119637" + }, + "_npmUser": { + "name": "juliangruber", + "email": "julian@juliangruber.com" + }, + "_npmVersion": "4.2.0", + "_phantomChildren": {}, + "_requested": { + "raw": "balanced-match@^1.0.0", + "scope": null, + "escapedName": "balanced-match", + "name": "balanced-match", + "rawSpec": "^1.0.0", + "spec": ">=1.0.0 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "_shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767", + "_shrinkwrap": null, + "_spec": "balanced-match@^1.0.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/brace-expansion", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/balanced-match/issues" + }, + "dependencies": {}, + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "directories": {}, + "dist": { + "shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767", + "tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + }, + "gitHead": "d701a549a7653a874eebce7eca25d3577dc868ac", + "homepage": "https://github.com/juliangruber/balanced-match", + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "juliangruber", + "email": "julian@juliangruber.com" + } + ], + "name": "balanced-match", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "scripts": { + "bench": "make bench", + "test": "make test" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.0.0" +} diff --git a/node_modules/base64-arraybuffer/.npmignore b/node_modules/base64-arraybuffer/.npmignore new file mode 100644 index 0000000..332ee5a --- /dev/null +++ b/node_modules/base64-arraybuffer/.npmignore @@ -0,0 +1,3 @@ +/node_modules/ +Gruntfile.js +/test/ diff --git a/node_modules/base64-arraybuffer/.travis.yml b/node_modules/base64-arraybuffer/.travis.yml new file mode 100644 index 0000000..19259a5 --- /dev/null +++ b/node_modules/base64-arraybuffer/.travis.yml @@ -0,0 +1,19 @@ +language: node_js +node_js: +- '0.12' +- iojs-1 +- iojs-2 +- iojs-3 +- '4.1' +before_script: +- npm install +before_install: npm install -g npm@'>=2.13.5' +deploy: + provider: npm + email: niklasvh@gmail.com + api_key: + secure: oHV9ArprTj5WOk7MP1UF7QMJ70huXw+y7xXb5wF4+V2H8Hyfa5TfE0DiOmqrube1WXTeH1FLgq54shp/sJWi47Hkg/GyeoB5NnsPhYEaJkaON9UG5blML+ODiNVsEnq/1kNBQ8e0+0JItMPLGySKyFmuZ3yflulXKS8O88mfINo= + on: + tags: true + branch: master + repo: niklasvh/base64-arraybuffer diff --git a/node_modules/base64-arraybuffer/LICENSE-MIT b/node_modules/base64-arraybuffer/LICENSE-MIT new file mode 100644 index 0000000..ed27b41 --- /dev/null +++ b/node_modules/base64-arraybuffer/LICENSE-MIT @@ -0,0 +1,22 @@ +Copyright (c) 2012 Niklas von Hertzen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION 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/base64-arraybuffer/README.md b/node_modules/base64-arraybuffer/README.md new file mode 100644 index 0000000..50009e4 --- /dev/null +++ b/node_modules/base64-arraybuffer/README.md @@ -0,0 +1,20 @@ +# base64-arraybuffer + +[![Build Status](https://travis-ci.org/niklasvh/base64-arraybuffer.png)](https://travis-ci.org/niklasvh/base64-arraybuffer) +[![NPM Downloads](https://img.shields.io/npm/dm/base64-arraybuffer.svg)](https://www.npmjs.org/package/base64-arraybuffer) +[![NPM Version](https://img.shields.io/npm/v/base64-arraybuffer.svg)](https://www.npmjs.org/package/base64-arraybuffer) + +Encode/decode base64 data into ArrayBuffers + +## Getting Started +Install the module with: `npm install base64-arraybuffer` + +## API +The library encodes and decodes base64 to and from ArrayBuffers + + - __encode(buffer)__ - Encodes `ArrayBuffer` into base64 string + - __decode(str)__ - Decodes base64 string to `ArrayBuffer` + +## License +Copyright (c) 2012 Niklas von Hertzen +Licensed under the MIT license. diff --git a/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js b/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js new file mode 100644 index 0000000..e6b6306 --- /dev/null +++ b/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js @@ -0,0 +1,67 @@ +/* + * base64-arraybuffer + * https://github.com/niklasvh/base64-arraybuffer + * + * Copyright (c) 2012 Niklas von Hertzen + * Licensed under the MIT license. + */ +(function(){ + "use strict"; + + var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + // Use a lookup table to find the index. + var lookup = new Uint8Array(256); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + + exports.encode = function(arraybuffer) { + var bytes = new Uint8Array(arraybuffer), + i, len = bytes.length, base64 = ""; + + for (i = 0; i < len; i+=3) { + base64 += chars[bytes[i] >> 2]; + base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; + base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)]; + base64 += chars[bytes[i + 2] & 63]; + } + + if ((len % 3) === 2) { + base64 = base64.substring(0, base64.length - 1) + "="; + } else if (len % 3 === 1) { + base64 = base64.substring(0, base64.length - 2) + "=="; + } + + return base64; + }; + + exports.decode = function(base64) { + var bufferLength = base64.length * 0.75, + len = base64.length, i, p = 0, + encoded1, encoded2, encoded3, encoded4; + + if (base64[base64.length - 1] === "=") { + bufferLength--; + if (base64[base64.length - 2] === "=") { + bufferLength--; + } + } + + var arraybuffer = new ArrayBuffer(bufferLength), + bytes = new Uint8Array(arraybuffer); + + for (i = 0; i < len; i+=4) { + encoded1 = lookup[base64.charCodeAt(i)]; + encoded2 = lookup[base64.charCodeAt(i+1)]; + encoded3 = lookup[base64.charCodeAt(i+2)]; + encoded4 = lookup[base64.charCodeAt(i+3)]; + + bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); + bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); + } + + return arraybuffer; + }; +})(); diff --git a/node_modules/base64-arraybuffer/package.json b/node_modules/base64-arraybuffer/package.json new file mode 100644 index 0000000..afbc0fc --- /dev/null +++ b/node_modules/base64-arraybuffer/package.json @@ -0,0 +1,97 @@ +{ + "_args": [ + [ + { + "raw": "base64-arraybuffer@0.1.5", + "scope": null, + "escapedName": "base64-arraybuffer", + "name": "base64-arraybuffer", + "rawSpec": "0.1.5", + "spec": "0.1.5", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-parser" + ] + ], + "_from": "base64-arraybuffer@0.1.5", + "_id": "base64-arraybuffer@0.1.5", + "_inCache": true, + "_location": "/base64-arraybuffer", + "_nodeVersion": "2.5.0", + "_npmUser": { + "name": "niklasvh", + "email": "niklasvh@gmail.com" + }, + "_npmVersion": "3.4.0", + "_phantomChildren": {}, + "_requested": { + "raw": "base64-arraybuffer@0.1.5", + "scope": null, + "escapedName": "base64-arraybuffer", + "name": "base64-arraybuffer", + "rawSpec": "0.1.5", + "spec": "0.1.5", + "type": "version" + }, + "_requiredBy": [ + "/engine.io-parser", + "/socket.io-client" + ], + "_resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "_shasum": "73926771923b5a19747ad666aa5cd4bf9c6e9ce8", + "_shrinkwrap": null, + "_spec": "base64-arraybuffer@0.1.5", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-parser", + "author": { + "name": "Niklas von Hertzen", + "email": "niklasvh@gmail.com", + "url": "http://hertzen.com" + }, + "bugs": { + "url": "https://github.com/niklasvh/base64-arraybuffer/issues" + }, + "dependencies": {}, + "description": "Encode/decode base64 data into ArrayBuffers", + "devDependencies": { + "grunt": "^0.4.5", + "grunt-cli": "^0.1.13", + "grunt-contrib-jshint": "^0.11.2", + "grunt-contrib-nodeunit": "^0.4.1", + "grunt-contrib-watch": "^0.6.1" + }, + "directories": {}, + "dist": { + "shasum": "73926771923b5a19747ad666aa5cd4bf9c6e9ce8", + "tarball": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz" + }, + "engines": { + "node": ">= 0.6.0" + }, + "gitHead": "e9457ccb7b140f5ae54a2880c8e9b967ffb03a7d", + "homepage": "https://github.com/niklasvh/base64-arraybuffer", + "keywords": [], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/niklasvh/base64-arraybuffer/blob/master/LICENSE-MIT" + } + ], + "main": "lib/base64-arraybuffer", + "maintainers": [ + { + "name": "niklasvh", + "email": "niklasvh@gmail.com" + } + ], + "name": "base64-arraybuffer", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/niklasvh/base64-arraybuffer.git" + }, + "scripts": { + "test": "grunt nodeunit" + }, + "version": "0.1.5" +} diff --git a/node_modules/base64id/.npmignore b/node_modules/base64id/.npmignore new file mode 100644 index 0000000..39e9864 --- /dev/null +++ b/node_modules/base64id/.npmignore @@ -0,0 +1,3 @@ +support +test +examples diff --git a/node_modules/base64id/LICENSE b/node_modules/base64id/LICENSE new file mode 100644 index 0000000..0d03c83 --- /dev/null +++ b/node_modules/base64id/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2012-2016 Kristian Faeldt + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/base64id/README.md b/node_modules/base64id/README.md new file mode 100644 index 0000000..17689e6 --- /dev/null +++ b/node_modules/base64id/README.md @@ -0,0 +1,18 @@ +base64id +======== + +Node.js module that generates a base64 id. + +Uses crypto.randomBytes when available, falls back to unsafe methods for node.js <= 0.4. + +To increase performance, random bytes are buffered to minimize the number of synchronous calls to crypto.randomBytes. + +## Installation + + $ npm install base64id + +## Usage + + var base64id = require('base64id'); + + var id = base64id.generateId(); diff --git a/node_modules/base64id/lib/base64id.js b/node_modules/base64id/lib/base64id.js new file mode 100644 index 0000000..f688159 --- /dev/null +++ b/node_modules/base64id/lib/base64id.js @@ -0,0 +1,103 @@ +/*! + * base64id v0.1.0 + */ + +/** + * Module dependencies + */ + +var crypto = require('crypto'); + +/** + * Constructor + */ + +var Base64Id = function() { }; + +/** + * Get random bytes + * + * Uses a buffer if available, falls back to crypto.randomBytes + */ + +Base64Id.prototype.getRandomBytes = function(bytes) { + + var BUFFER_SIZE = 4096 + var self = this; + + bytes = bytes || 12; + + if (bytes > BUFFER_SIZE) { + return crypto.randomBytes(bytes); + } + + var bytesInBuffer = parseInt(BUFFER_SIZE/bytes); + var threshold = parseInt(bytesInBuffer*0.85); + + if (!threshold) { + return crypto.randomBytes(bytes); + } + + if (this.bytesBufferIndex == null) { + this.bytesBufferIndex = -1; + } + + if (this.bytesBufferIndex == bytesInBuffer) { + this.bytesBuffer = null; + this.bytesBufferIndex = -1; + } + + // No buffered bytes available or index above threshold + if (this.bytesBufferIndex == -1 || this.bytesBufferIndex > threshold) { + + if (!this.isGeneratingBytes) { + this.isGeneratingBytes = true; + crypto.randomBytes(BUFFER_SIZE, function(err, bytes) { + self.bytesBuffer = bytes; + self.bytesBufferIndex = 0; + self.isGeneratingBytes = false; + }); + } + + // Fall back to sync call when no buffered bytes are available + if (this.bytesBufferIndex == -1) { + return crypto.randomBytes(bytes); + } + } + + var result = this.bytesBuffer.slice(bytes*this.bytesBufferIndex, bytes*(this.bytesBufferIndex+1)); + this.bytesBufferIndex++; + + return result; +} + +/** + * Generates a base64 id + * + * (Original version from socket.io ) + */ + +Base64Id.prototype.generateId = function () { + var rand = new Buffer(15); // multiple of 3 for base64 + if (!rand.writeInt32BE) { + return Math.abs(Math.random() * Math.random() * Date.now() | 0).toString() + + Math.abs(Math.random() * Math.random() * Date.now() | 0).toString(); + } + this.sequenceNumber = (this.sequenceNumber + 1) | 0; + rand.writeInt32BE(this.sequenceNumber, 11); + if (crypto.randomBytes) { + this.getRandomBytes(12).copy(rand); + } else { + // not secure for node 0.4 + [0, 4, 8].forEach(function(i) { + rand.writeInt32BE(Math.random() * Math.pow(2, 32) | 0, i); + }); + } + return rand.toString('base64').replace(/\//g, '_').replace(/\+/g, '-'); +}; + +/** + * Export + */ + +exports = module.exports = new Base64Id(); diff --git a/node_modules/base64id/package.json b/node_modules/base64id/package.json new file mode 100644 index 0000000..984ce1c --- /dev/null +++ b/node_modules/base64id/package.json @@ -0,0 +1,89 @@ +{ + "_args": [ + [ + { + "raw": "base64id@1.0.0", + "scope": null, + "escapedName": "base64id", + "name": "base64id", + "rawSpec": "1.0.0", + "spec": "1.0.0", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io" + ] + ], + "_from": "base64id@1.0.0", + "_id": "base64id@1.0.0", + "_inCache": true, + "_location": "/base64id", + "_nodeVersion": "4.4.7", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/base64id-1.0.0.tgz_1480551701495_0.042360062478110194" + }, + "_npmUser": { + "name": "darrachequesne", + "email": "damien.arrachequesne@gmail.com" + }, + "_npmVersion": "2.15.8", + "_phantomChildren": {}, + "_requested": { + "raw": "base64id@1.0.0", + "scope": null, + "escapedName": "base64id", + "name": "base64id", + "rawSpec": "1.0.0", + "spec": "1.0.0", + "type": "version" + }, + "_requiredBy": [ + "/engine.io" + ], + "_resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "_shasum": "47688cb99bb6804f0e06d3e763b1c32e57d8e6b6", + "_shrinkwrap": null, + "_spec": "base64id@1.0.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io", + "author": { + "name": "Kristian Faeldt", + "email": "faeldt_kristian@cyberagent.co.jp" + }, + "bugs": { + "url": "https://github.com/faeldt/base64id/issues" + }, + "dependencies": {}, + "description": "Generates a base64 id", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "47688cb99bb6804f0e06d3e763b1c32e57d8e6b6", + "tarball": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz" + }, + "engines": { + "node": ">= 0.4.0" + }, + "gitHead": "3c846f0818ff88b683ad39fde2f8e015ce0f9807", + "homepage": "https://github.com/faeldt/base64id#readme", + "license": "MIT", + "main": "./lib/base64id.js", + "maintainers": [ + { + "name": "darrachequesne", + "email": "damien.arrachequesne@gmail.com" + }, + { + "name": "faeldt_kristian", + "email": "kristian.faeldt@gmail.com" + } + ], + "name": "base64id", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/faeldt/base64id.git" + }, + "scripts": {}, + "version": "1.0.0" +} diff --git a/node_modules/better-assert/.npmignore b/node_modules/better-assert/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/node_modules/better-assert/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/node_modules/better-assert/History.md b/node_modules/better-assert/History.md new file mode 100644 index 0000000..cbb579b --- /dev/null +++ b/node_modules/better-assert/History.md @@ -0,0 +1,15 @@ + +1.0.0 / 2013-02-03 +================== + + * Stop using the removed magic __stack global getter + +0.1.0 / 2012-10-04 +================== + + * add throwing of AssertionError for test frameworks etc + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/better-assert/Makefile b/node_modules/better-assert/Makefile new file mode 100644 index 0000000..36a3ed7 --- /dev/null +++ b/node_modules/better-assert/Makefile @@ -0,0 +1,5 @@ + +test: + @echo "populate me" + +.PHONY: test \ No newline at end of file diff --git a/node_modules/better-assert/Readme.md b/node_modules/better-assert/Readme.md new file mode 100644 index 0000000..d8d3a63 --- /dev/null +++ b/node_modules/better-assert/Readme.md @@ -0,0 +1,61 @@ + +# better-assert + + Better c-style assertions using [callsite](https://github.com/visionmedia/callsite) for + self-documenting failure messages. + +## Installation + + $ npm install better-assert + +## Example + + By default assertions are enabled, however the __NO_ASSERT__ environment variable + will deactivate them when truthy. + +```js +var assert = require('better-assert'); + +test(); + +function test() { + var user = { name: 'tobi' }; + assert('tobi' == user.name); + assert('number' == typeof user.age); +} + +AssertionError: 'number' == typeof user.age + at test (/Users/tj/projects/better-assert/example.js:9:3) + at Object. (/Users/tj/projects/better-assert/example.js:4:1) + at Module._compile (module.js:449:26) + at Object.Module._extensions..js (module.js:467:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + at Module.runMain (module.js:492:10) + at process.startup.processNextTick.process._tickCallback (node.js:244:9) +``` + +## 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/better-assert/example.js b/node_modules/better-assert/example.js new file mode 100644 index 0000000..688c29e --- /dev/null +++ b/node_modules/better-assert/example.js @@ -0,0 +1,10 @@ + +var assert = require('./'); + +test(); + +function test() { + var user = { name: 'tobi' }; + assert('tobi' == user.name); + assert('number' == typeof user.age); +} \ No newline at end of file diff --git a/node_modules/better-assert/index.js b/node_modules/better-assert/index.js new file mode 100644 index 0000000..fd1c9b7 --- /dev/null +++ b/node_modules/better-assert/index.js @@ -0,0 +1,38 @@ +/** + * Module dependencies. + */ + +var AssertionError = require('assert').AssertionError + , callsite = require('callsite') + , fs = require('fs') + +/** + * Expose `assert`. + */ + +module.exports = process.env.NO_ASSERT + ? function(){} + : assert; + +/** + * Assert the given `expr`. + */ + +function assert(expr) { + if (expr) return; + + var stack = callsite(); + var call = stack[1]; + var file = call.getFileName(); + var lineno = call.getLineNumber(); + var src = fs.readFileSync(file, 'utf8'); + var line = src.split('\n')[lineno-1]; + var src = line.match(/assert\((.*)\)/)[1]; + + var err = new AssertionError({ + message: src, + stackStartFunction: stack[0].getFunction() + }); + + throw err; +} diff --git a/node_modules/better-assert/package.json b/node_modules/better-assert/package.json new file mode 100644 index 0000000..beee3eb --- /dev/null +++ b/node_modules/better-assert/package.json @@ -0,0 +1,100 @@ +{ + "_args": [ + [ + { + "raw": "better-assert@~1.0.0", + "scope": null, + "escapedName": "better-assert", + "name": "better-assert", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/parsejson" + ] + ], + "_from": "better-assert@>=1.0.0 <1.1.0", + "_id": "better-assert@1.0.2", + "_inCache": true, + "_location": "/better-assert", + "_npmUser": { + "name": "tony_ado", + "email": "coolhzb@163.com" + }, + "_npmVersion": "1.4.9", + "_phantomChildren": {}, + "_requested": { + "raw": "better-assert@~1.0.0", + "scope": null, + "escapedName": "better-assert", + "name": "better-assert", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/parsejson", + "/parseqs", + "/parseuri" + ], + "_resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "_shasum": "40866b9e1b9e0b55b481894311e68faffaebc522", + "_shrinkwrap": null, + "_spec": "better-assert@~1.0.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/parsejson", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "bugs": { + "url": "https://github.com/visionmedia/better-assert/issues" + }, + "contributors": [ + { + "name": "TonyHe", + "email": "coolhzb@163.com" + }, + { + "name": "ForbesLindesay" + } + ], + "dependencies": { + "callsite": "1.0.0" + }, + "description": "Better assertions for node, reporting the expr, filename, lineno etc", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "40866b9e1b9e0b55b481894311e68faffaebc522", + "tarball": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + }, + "engines": { + "node": "*" + }, + "homepage": "https://github.com/visionmedia/better-assert", + "keywords": [ + "assert", + "stack", + "trace", + "debug" + ], + "main": "index", + "maintainers": [ + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "tony_ado", + "email": "coolhzb@163.com" + } + ], + "name": "better-assert", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/visionmedia/better-assert.git" + }, + "version": "1.0.2" +} diff --git a/node_modules/bindings/README.md b/node_modules/bindings/README.md new file mode 100644 index 0000000..585cf51 --- /dev/null +++ b/node_modules/bindings/README.md @@ -0,0 +1,97 @@ +node-bindings +============= +### Helper module for loading your native module's .node file + +This is a helper module for authors of Node.js native addon modules. +It is basically the "swiss army knife" of `require()`ing your native module's +`.node` file. + +Throughout the course of Node's native addon history, addons have ended up being +compiled in a variety of different places, depending on which build tool and which +version of node was used. To make matters worse, now the _gyp_ build tool can +produce either a _Release_ or _Debug_ build, each being built into different +locations. + +This module checks _all_ the possible locations that a native addon would be built +at, and returns the first one that loads successfully. + + +Installation +------------ + +Install with `npm`: + +``` bash +$ npm install bindings +``` + +Or add it to the `"dependencies"` section of your _package.json_ file. + + +Example +------- + +`require()`ing the proper bindings file for the current node version, platform +and architecture is as simple as: + +``` js +var bindings = require('bindings')('binding.node') + +// Use your bindings defined in your C files +bindings.your_c_function() +``` + + +Nice Error Output +----------------- + +When the `.node` file could not be loaded, `node-bindings` throws an Error with +a nice error message telling you exactly what was tried. You can also check the +`err.tries` Array property. + +``` +Error: Could not load the bindings file. Tried: + → /Users/nrajlich/ref/build/binding.node + → /Users/nrajlich/ref/build/Debug/binding.node + → /Users/nrajlich/ref/build/Release/binding.node + → /Users/nrajlich/ref/out/Debug/binding.node + → /Users/nrajlich/ref/Debug/binding.node + → /Users/nrajlich/ref/out/Release/binding.node + → /Users/nrajlich/ref/Release/binding.node + → /Users/nrajlich/ref/build/default/binding.node + → /Users/nrajlich/ref/compiled/0.8.2/darwin/x64/binding.node + at bindings (/Users/nrajlich/ref/node_modules/bindings/bindings.js:84:13) + at Object. (/Users/nrajlich/ref/lib/ref.js:5:47) + at Module._compile (module.js:449:26) + at Object.Module._extensions..js (module.js:467:10) + at Module.load (module.js:356:32) + at Function.Module._load (module.js:312:12) + ... +``` + + +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/bindings/bindings.js b/node_modules/bindings/bindings.js new file mode 100644 index 0000000..93dcf85 --- /dev/null +++ b/node_modules/bindings/bindings.js @@ -0,0 +1,166 @@ + +/** + * Module dependencies. + */ + +var fs = require('fs') + , path = require('path') + , join = path.join + , dirname = path.dirname + , exists = fs.existsSync || path.existsSync + , defaults = { + arrow: process.env.NODE_BINDINGS_ARROW || ' → ' + , compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled' + , platform: process.platform + , arch: process.arch + , version: process.versions.node + , bindings: 'bindings.node' + , try: [ + // node-gyp's linked version in the "build" dir + [ 'module_root', 'build', 'bindings' ] + // node-waf and gyp_addon (a.k.a node-gyp) + , [ 'module_root', 'build', 'Debug', 'bindings' ] + , [ 'module_root', 'build', 'Release', 'bindings' ] + // Debug files, for development (legacy behavior, remove for node v0.9) + , [ 'module_root', 'out', 'Debug', 'bindings' ] + , [ 'module_root', 'Debug', 'bindings' ] + // Release files, but manually compiled (legacy behavior, remove for node v0.9) + , [ 'module_root', 'out', 'Release', 'bindings' ] + , [ 'module_root', 'Release', 'bindings' ] + // Legacy from node-waf, node <= 0.4.x + , [ 'module_root', 'build', 'default', 'bindings' ] + // Production "Release" buildtype binary (meh...) + , [ 'module_root', 'compiled', 'version', 'platform', 'arch', 'bindings' ] + ] + } + +/** + * The main `bindings()` function loads the compiled bindings for a given module. + * It uses V8's Error API to determine the parent filename that this function is + * being invoked from, which is then used to find the root directory. + */ + +function bindings (opts) { + + // Argument surgery + if (typeof opts == 'string') { + opts = { bindings: opts } + } else if (!opts) { + opts = {} + } + opts.__proto__ = defaults + + // Get the module root + if (!opts.module_root) { + opts.module_root = exports.getRoot(exports.getFileName()) + } + + // Ensure the given bindings name ends with .node + if (path.extname(opts.bindings) != '.node') { + opts.bindings += '.node' + } + + var tries = [] + , i = 0 + , l = opts.try.length + , n + , b + , err + + for (; i=1.2.1 <1.3.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/deasync" + ] + ], + "_from": "bindings@>=1.2.1 <1.3.0", + "_id": "bindings@1.2.1", + "_inCache": true, + "_location": "/bindings", + "_npmUser": { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + "_npmVersion": "1.4.14", + "_phantomChildren": {}, + "_requested": { + "raw": "bindings@~1.2.1", + "scope": null, + "escapedName": "bindings", + "name": "bindings", + "rawSpec": "~1.2.1", + "spec": ">=1.2.1 <1.3.0", + "type": "range" + }, + "_requiredBy": [ + "/deasync" + ], + "_resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", + "_shasum": "14ad6113812d2d37d72e67b4cacb4bb726505f11", + "_shrinkwrap": null, + "_spec": "bindings@~1.2.1", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/deasync", + "author": { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://tootallnate.net" + }, + "bugs": { + "url": "https://github.com/TooTallNate/node-bindings/issues" + }, + "dependencies": {}, + "description": "Helper module for loading your native module's .node file", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "14ad6113812d2d37d72e67b4cacb4bb726505f11", + "tarball": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz" + }, + "gitHead": "e404152ee27f8478ccbc7122ee051246e8e5ec02", + "homepage": "https://github.com/TooTallNate/node-bindings", + "keywords": [ + "native", + "addon", + "bindings", + "gyp", + "waf", + "c", + "c++" + ], + "license": "MIT", + "main": "./bindings.js", + "maintainers": [ + { + "name": "TooTallNate", + "email": "nathan@tootallnate.net" + }, + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + } + ], + "name": "bindings", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/node-bindings.git" + }, + "scripts": {}, + "version": "1.2.1" +} diff --git a/node_modules/blob/.npmignore b/node_modules/blob/.npmignore new file mode 100644 index 0000000..548a368 --- /dev/null +++ b/node_modules/blob/.npmignore @@ -0,0 +1,2 @@ +node_modules +blob.js diff --git a/node_modules/blob/.zuul.yml b/node_modules/blob/.zuul.yml new file mode 100644 index 0000000..380c395 --- /dev/null +++ b/node_modules/blob/.zuul.yml @@ -0,0 +1,14 @@ +ui: mocha-bdd +browsers: + - name: chrome + version: 8..latest + - name: firefox + version: 7..latest + - name: safari + version: 6..latest + - name: opera + version: 12.1..latest + - name: ie + version: 10..latest + - name: android + version: latest diff --git a/node_modules/blob/Makefile b/node_modules/blob/Makefile new file mode 100644 index 0000000..7d9601a --- /dev/null +++ b/node_modules/blob/Makefile @@ -0,0 +1,14 @@ +REPORTER = dot + +build: blob.js + +blob.js: + @./node_modules/.bin/browserify --standalone blob index.js > blob.js + +test: + @./node_modules/.bin/zuul -- test/index.js + +clean: + rm blob.js + +.PHONY: test blob.js diff --git a/node_modules/blob/README.md b/node_modules/blob/README.md new file mode 100644 index 0000000..6915955 --- /dev/null +++ b/node_modules/blob/README.md @@ -0,0 +1,14 @@ +Blob +==== + +A module that exports a constructor that uses window.Blob when available, and a BlobBuilder with any vendor prefix in other cases. If neither is available, it exports undefined. + +Usage: + +```javascript +var Blob = require('blob'); +var b = new Blob(['hi', 'constructing', 'a', 'blob']); +``` + +## Licence +MIT diff --git a/node_modules/blob/index.js b/node_modules/blob/index.js new file mode 100644 index 0000000..cad3f84 --- /dev/null +++ b/node_modules/blob/index.js @@ -0,0 +1,96 @@ +/** + * Create a blob builder even when vendor prefixes exist + */ + +var BlobBuilder = global.BlobBuilder + || global.WebKitBlobBuilder + || global.MSBlobBuilder + || global.MozBlobBuilder; + +/** + * Check if Blob constructor is supported + */ + +var blobSupported = (function() { + try { + var a = new Blob(['hi']); + return a.size === 2; + } catch(e) { + return false; + } +})(); + +/** + * Check if Blob constructor supports ArrayBufferViews + * Fails in Safari 6, so we need to map to ArrayBuffers there. + */ + +var blobSupportsArrayBufferView = blobSupported && (function() { + try { + var b = new Blob([new Uint8Array([1,2])]); + return b.size === 2; + } catch(e) { + return false; + } +})(); + +/** + * Check if BlobBuilder is supported + */ + +var blobBuilderSupported = BlobBuilder + && BlobBuilder.prototype.append + && BlobBuilder.prototype.getBlob; + +/** + * Helper function that maps ArrayBufferViews to ArrayBuffers + * Used by BlobBuilder constructor and old browsers that didn't + * support it in the Blob constructor. + */ + +function mapArrayBufferViews(ary) { + for (var i = 0; i < ary.length; i++) { + var chunk = ary[i]; + if (chunk.buffer instanceof ArrayBuffer) { + var buf = chunk.buffer; + + // if this is a subarray, make a copy so we only + // include the subarray region from the underlying buffer + if (chunk.byteLength !== buf.byteLength) { + var copy = new Uint8Array(chunk.byteLength); + copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength)); + buf = copy.buffer; + } + + ary[i] = buf; + } + } +} + +function BlobBuilderConstructor(ary, options) { + options = options || {}; + + var bb = new BlobBuilder(); + mapArrayBufferViews(ary); + + for (var i = 0; i < ary.length; i++) { + bb.append(ary[i]); + } + + return (options.type) ? bb.getBlob(options.type) : bb.getBlob(); +}; + +function BlobConstructor(ary, options) { + mapArrayBufferViews(ary); + return new Blob(ary, options || {}); +}; + +module.exports = (function() { + if (blobSupported) { + return blobSupportsArrayBufferView ? global.Blob : BlobConstructor; + } else if (blobBuilderSupported) { + return BlobBuilderConstructor; + } else { + return undefined; + } +})(); diff --git a/node_modules/blob/package.json b/node_modules/blob/package.json new file mode 100644 index 0000000..2bb24c0 --- /dev/null +++ b/node_modules/blob/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + { + "raw": "blob@0.0.4", + "scope": null, + "escapedName": "blob", + "name": "blob", + "rawSpec": "0.0.4", + "spec": "0.0.4", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-parser" + ] + ], + "_from": "blob@0.0.4", + "_id": "blob@0.0.4", + "_inCache": true, + "_location": "/blob", + "_npmUser": { + "name": "rase-", + "email": "tonykovanen@hotmail.com" + }, + "_npmVersion": "1.4.6", + "_phantomChildren": {}, + "_requested": { + "raw": "blob@0.0.4", + "scope": null, + "escapedName": "blob", + "name": "blob", + "rawSpec": "0.0.4", + "spec": "0.0.4", + "type": "version" + }, + "_requiredBy": [ + "/engine.io-parser" + ], + "_resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "_shasum": "bcf13052ca54463f30f9fc7e95b9a47630a94921", + "_shrinkwrap": null, + "_spec": "blob@0.0.4", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-parser", + "bugs": { + "url": "https://github.com/rase-/blob/issues" + }, + "dependencies": {}, + "description": "Abstracts out Blob and uses BlobBulder in cases where it is supported with any vendor prefix.", + "devDependencies": { + "browserify": "3.30.1", + "expect.js": "0.2.0", + "mocha": "1.17.1", + "zuul": "1.5.4" + }, + "directories": {}, + "dist": { + "shasum": "bcf13052ca54463f30f9fc7e95b9a47630a94921", + "tarball": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz" + }, + "homepage": "https://github.com/rase-/blob", + "maintainers": [ + { + "name": "rase-", + "email": "tonykovanen@hotmail.com" + } + ], + "name": "blob", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/rase-/blob.git" + }, + "scripts": { + "test": "make test" + }, + "version": "0.0.4" +} diff --git a/node_modules/blob/test/index.js b/node_modules/blob/test/index.js new file mode 100644 index 0000000..df9303f --- /dev/null +++ b/node_modules/blob/test/index.js @@ -0,0 +1,94 @@ +var Blob = require('../'); +var expect = require('expect.js'); + +describe('blob', function() { + if (!Blob) { + it('should not have a blob or a blob builder in the global namespace, or blob should not be a constructor function if the module exports false', function() { + try { + var ab = (new Uint8Array(5)).buffer; + global.Blob([ab]); + expect().fail('Blob shouldn\'t be constructable'); + } catch (e) {} + + var BlobBuilder = global.BlobBuilder + || global.WebKitBlobBuilder + || global.MSBlobBuilder + || global.MozBlobBuilder; + expect(BlobBuilder).to.be(undefined); + }); + } else { + it('should encode a proper sized blob when given a string argument', function() { + var b = new Blob(['hi']); + expect(b.size).to.be(2); + }); + + it('should encode a blob with proper size when given two strings as arguments', function() { + var b = new Blob(['hi', 'hello']); + expect(b.size).to.be(7); + }); + + it('should encode arraybuffers with right content', function(done) { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([ary.buffer]); + var fr = new FileReader(); + fr.onload = function() { + var newAry = new Uint8Array(this.result); + for (var i = 0; i < 5; i++) expect(newAry[i]).to.be(i); + done(); + }; + fr.readAsArrayBuffer(b); + }); + + it('should encode typed arrays with right content', function(done) { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([ary]); + var fr = new FileReader(); + fr.onload = function() { + var newAry = new Uint8Array(this.result); + for (var i = 0; i < 5; i++) expect(newAry[i]).to.be(i); + done(); + }; + fr.readAsArrayBuffer(b); + }); + + it('should encode sliced typed arrays with right content', function(done) { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([ary.subarray(2)]); + var fr = new FileReader(); + fr.onload = function() { + var newAry = new Uint8Array(this.result); + for (var i = 0; i < 3; i++) expect(newAry[i]).to.be(i + 2); + done(); + }; + fr.readAsArrayBuffer(b); + }); + + it('should encode with blobs', function(done) { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([new Blob([ary.buffer])]); + var fr = new FileReader(); + fr.onload = function() { + var newAry = new Uint8Array(this.result); + for (var i = 0; i < 5; i++) expect(newAry[i]).to.be(i); + done(); + }; + fr.readAsArrayBuffer(b); + }); + + it('should enode mixed contents to right size', function() { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([ary.buffer, 'hello']); + expect(b.size).to.be(10); + }); + + it('should accept mime type', function() { + var b = new Blob(['hi', 'hello'], { type: 'text/html' }); + expect(b.type).to.be('text/html'); + }); + } +}); diff --git a/node_modules/body-parser/HISTORY.md b/node_modules/body-parser/HISTORY.md new file mode 100644 index 0000000..6bbd94a --- /dev/null +++ b/node_modules/body-parser/HISTORY.md @@ -0,0 +1,522 @@ +1.17.2 / 2017-05-17 +=================== + + * deps: debug@2.6.7 + - Fix `DEBUG_MAX_ARRAY_LENGTH` + - deps: ms@2.0.0 + * deps: type-is@~1.6.15 + - deps: mime-types@~2.1.15 + +1.17.1 / 2017-03-06 +=================== + + * deps: qs@6.4.0 + - Fix regression parsing keys starting with `[` + +1.17.0 / 2017-03-01 +=================== + + * deps: http-errors@~1.6.1 + - Make `message` property enumerable for `HttpError`s + - deps: setprototypeof@1.0.3 + * deps: qs@6.3.1 + - Fix compacting nested arrays + +1.16.1 / 2017-02-10 +=================== + + * deps: debug@2.6.1 + - Fix deprecation messages in WebStorm and other editors + - Undeprecate `DEBUG_FD` set to `1` or `2` + +1.16.0 / 2017-01-17 +=================== + + * deps: debug@2.6.0 + - Allow colors in workers + - Deprecated `DEBUG_FD` environment variable + - Fix error when running under React Native + - Use same color for same namespace + - deps: ms@0.7.2 + * deps: http-errors@~1.5.1 + - deps: inherits@2.0.3 + - deps: setprototypeof@1.0.2 + - deps: statuses@'>= 1.3.1 < 2' + * deps: iconv-lite@0.4.15 + - Added encoding MS-31J + - Added encoding MS-932 + - Added encoding MS-936 + - Added encoding MS-949 + - Added encoding MS-950 + - Fix GBK/GB18030 handling of Euro character + * deps: qs@6.2.1 + - Fix array parsing from skipping empty values + * deps: raw-body@~2.2.0 + - deps: iconv-lite@0.4.15 + * deps: type-is@~1.6.14 + - deps: mime-types@~2.1.13 + +1.15.2 / 2016-06-19 +=================== + + * deps: bytes@2.4.0 + * deps: content-type@~1.0.2 + - perf: enable strict mode + * deps: http-errors@~1.5.0 + - Use `setprototypeof` module to replace `__proto__` setting + - deps: statuses@'>= 1.3.0 < 2' + - perf: enable strict mode + * deps: qs@6.2.0 + * deps: raw-body@~2.1.7 + - deps: bytes@2.4.0 + - perf: remove double-cleanup on happy path + * deps: type-is@~1.6.13 + - deps: mime-types@~2.1.11 + +1.15.1 / 2016-05-05 +=================== + + * deps: bytes@2.3.0 + - Drop partial bytes on all parsed units + - Fix parsing byte string that looks like hex + * deps: raw-body@~2.1.6 + - deps: bytes@2.3.0 + * deps: type-is@~1.6.12 + - deps: mime-types@~2.1.10 + +1.15.0 / 2016-02-10 +=================== + + * deps: http-errors@~1.4.0 + - Add `HttpError` export, for `err instanceof createError.HttpError` + - deps: inherits@2.0.1 + - deps: statuses@'>= 1.2.1 < 2' + * deps: qs@6.1.0 + * deps: type-is@~1.6.11 + - deps: mime-types@~2.1.9 + +1.14.2 / 2015-12-16 +=================== + + * deps: bytes@2.2.0 + * deps: iconv-lite@0.4.13 + * deps: qs@5.2.0 + * deps: raw-body@~2.1.5 + - deps: bytes@2.2.0 + - deps: iconv-lite@0.4.13 + * deps: type-is@~1.6.10 + - deps: mime-types@~2.1.8 + +1.14.1 / 2015-09-27 +=================== + + * Fix issue where invalid charset results in 400 when `verify` used + * deps: iconv-lite@0.4.12 + - Fix CESU-8 decoding in Node.js 4.x + * deps: raw-body@~2.1.4 + - Fix masking critical errors from `iconv-lite` + - deps: iconv-lite@0.4.12 + * deps: type-is@~1.6.9 + - deps: mime-types@~2.1.7 + +1.14.0 / 2015-09-16 +=================== + + * Fix JSON strict parse error to match syntax errors + * Provide static `require` analysis in `urlencoded` parser + * deps: depd@~1.1.0 + - Support web browser loading + * deps: qs@5.1.0 + * deps: raw-body@~2.1.3 + - Fix sync callback when attaching data listener causes sync read + * deps: type-is@~1.6.8 + - Fix type error when given invalid type to match against + - deps: mime-types@~2.1.6 + +1.13.3 / 2015-07-31 +=================== + + * deps: type-is@~1.6.6 + - deps: mime-types@~2.1.4 + +1.13.2 / 2015-07-05 +=================== + + * deps: iconv-lite@0.4.11 + * deps: qs@4.0.0 + - Fix dropping parameters like `hasOwnProperty` + - Fix user-visible incompatibilities from 3.1.0 + - Fix various parsing edge cases + * deps: raw-body@~2.1.2 + - Fix error stack traces to skip `makeError` + - deps: iconv-lite@0.4.11 + * deps: type-is@~1.6.4 + - deps: mime-types@~2.1.2 + - perf: enable strict mode + - perf: remove argument reassignment + +1.13.1 / 2015-06-16 +=================== + + * deps: qs@2.4.2 + - Downgraded from 3.1.0 because of user-visible incompatibilities + +1.13.0 / 2015-06-14 +=================== + + * Add `statusCode` property on `Error`s, in addition to `status` + * Change `type` default to `application/json` for JSON parser + * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser + * Provide static `require` analysis + * Use the `http-errors` module to generate errors + * deps: bytes@2.1.0 + - Slight optimizations + * deps: iconv-lite@0.4.10 + - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails + - Leading BOM is now removed when decoding + * deps: on-finished@~2.3.0 + - Add defined behavior for HTTP `CONNECT` requests + - Add defined behavior for HTTP `Upgrade` requests + - deps: ee-first@1.1.1 + * deps: qs@3.1.0 + - Fix dropping parameters like `hasOwnProperty` + - Fix various parsing edge cases + - Parsed object now has `null` prototype + * deps: raw-body@~2.1.1 + - Use `unpipe` module for unpiping requests + - deps: iconv-lite@0.4.10 + * deps: type-is@~1.6.3 + - deps: mime-types@~2.1.1 + - perf: reduce try block size + - perf: remove bitwise operations + * perf: enable strict mode + * perf: remove argument reassignment + * perf: remove delete call + +1.12.4 / 2015-05-10 +=================== + + * deps: debug@~2.2.0 + * deps: qs@2.4.2 + - Fix allowing parameters like `constructor` + * deps: on-finished@~2.2.1 + * deps: raw-body@~2.0.1 + - Fix a false-positive when unpiping in Node.js 0.8 + - deps: bytes@2.0.1 + * deps: type-is@~1.6.2 + - deps: mime-types@~2.0.11 + +1.12.3 / 2015-04-15 +=================== + + * Slight efficiency improvement when not debugging + * deps: depd@~1.0.1 + * deps: iconv-lite@0.4.8 + - Add encoding alias UNICODE-1-1-UTF-7 + * deps: raw-body@1.3.4 + - Fix hanging callback if request aborts during read + - deps: iconv-lite@0.4.8 + +1.12.2 / 2015-03-16 +=================== + + * deps: qs@2.4.1 + - Fix error when parameter `hasOwnProperty` is present + +1.12.1 / 2015-03-15 +=================== + + * deps: debug@~2.1.3 + - Fix high intensity foreground color for bold + - deps: ms@0.7.0 + * deps: type-is@~1.6.1 + - deps: mime-types@~2.0.10 + +1.12.0 / 2015-02-13 +=================== + + * add `debug` messages + * accept a function for the `type` option + * use `content-type` to parse `Content-Type` headers + * deps: iconv-lite@0.4.7 + - Gracefully support enumerables on `Object.prototype` + * deps: raw-body@1.3.3 + - deps: iconv-lite@0.4.7 + * deps: type-is@~1.6.0 + - fix argument reassignment + - fix false-positives in `hasBody` `Transfer-Encoding` check + - support wildcard for both type and subtype (`*/*`) + - deps: mime-types@~2.0.9 + +1.11.0 / 2015-01-30 +=================== + + * make internal `extended: true` depth limit infinity + * deps: type-is@~1.5.6 + - deps: mime-types@~2.0.8 + +1.10.2 / 2015-01-20 +=================== + + * deps: iconv-lite@0.4.6 + - Fix rare aliases of single-byte encodings + * deps: raw-body@1.3.2 + - deps: iconv-lite@0.4.6 + +1.10.1 / 2015-01-01 +=================== + + * deps: on-finished@~2.2.0 + * deps: type-is@~1.5.5 + - deps: mime-types@~2.0.7 + +1.10.0 / 2014-12-02 +=================== + + * make internal `extended: true` array limit dynamic + +1.9.3 / 2014-11-21 +================== + + * deps: iconv-lite@0.4.5 + - Fix Windows-31J and X-SJIS encoding support + * deps: qs@2.3.3 + - Fix `arrayLimit` behavior + * deps: raw-body@1.3.1 + - deps: iconv-lite@0.4.5 + * deps: type-is@~1.5.3 + - deps: mime-types@~2.0.3 + +1.9.2 / 2014-10-27 +================== + + * deps: qs@2.3.2 + - Fix parsing of mixed objects and values + +1.9.1 / 2014-10-22 +================== + + * deps: on-finished@~2.1.1 + - Fix handling of pipelined requests + * deps: qs@2.3.0 + - Fix parsing of mixed implicit and explicit arrays + * deps: type-is@~1.5.2 + - deps: mime-types@~2.0.2 + +1.9.0 / 2014-09-24 +================== + + * include the charset in "unsupported charset" error message + * include the encoding in "unsupported content encoding" error message + * deps: depd@~1.0.0 + +1.8.4 / 2014-09-23 +================== + + * fix content encoding to be case-insensitive + +1.8.3 / 2014-09-19 +================== + + * deps: qs@2.2.4 + - Fix issue with object keys starting with numbers truncated + +1.8.2 / 2014-09-15 +================== + + * deps: depd@0.4.5 + +1.8.1 / 2014-09-07 +================== + + * deps: media-typer@0.3.0 + * deps: type-is@~1.5.1 + +1.8.0 / 2014-09-05 +================== + + * make empty-body-handling consistent between chunked requests + - empty `json` produces `{}` + - empty `raw` produces `new Buffer(0)` + - empty `text` produces `''` + - empty `urlencoded` produces `{}` + * deps: qs@2.2.3 + - Fix issue where first empty value in array is discarded + * deps: type-is@~1.5.0 + - fix `hasbody` to be true for `content-length: 0` + +1.7.0 / 2014-09-01 +================== + + * add `parameterLimit` option to `urlencoded` parser + * change `urlencoded` extended array limit to 100 + * respond with 413 when over `parameterLimit` in `urlencoded` + +1.6.7 / 2014-08-29 +================== + + * deps: qs@2.2.2 + - Remove unnecessary cloning + +1.6.6 / 2014-08-27 +================== + + * deps: qs@2.2.0 + - Array parsing fix + - Performance improvements + +1.6.5 / 2014-08-16 +================== + + * deps: on-finished@2.1.0 + +1.6.4 / 2014-08-14 +================== + + * deps: qs@1.2.2 + +1.6.3 / 2014-08-10 +================== + + * deps: qs@1.2.1 + +1.6.2 / 2014-08-07 +================== + + * deps: qs@1.2.0 + - Fix parsing array of objects + +1.6.1 / 2014-08-06 +================== + + * deps: qs@1.1.0 + - Accept urlencoded square brackets + - Accept empty values in implicit array notation + +1.6.0 / 2014-08-05 +================== + + * deps: qs@1.0.2 + - Complete rewrite + - Limits array length to 20 + - Limits object depth to 5 + - Limits parameters to 1,000 + +1.5.2 / 2014-07-27 +================== + + * deps: depd@0.4.4 + - Work-around v8 generating empty stack traces + +1.5.1 / 2014-07-26 +================== + + * deps: depd@0.4.3 + - Fix exception when global `Error.stackTraceLimit` is too low + +1.5.0 / 2014-07-20 +================== + + * deps: depd@0.4.2 + - Add `TRACE_DEPRECATION` environment variable + - Remove non-standard grey color from color output + - Support `--no-deprecation` argument + - Support `--trace-deprecation` argument + * deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + * deps: raw-body@1.3.0 + - deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + - Fix `Cannot switch to old mode now` error on Node.js 0.10+ + * deps: type-is@~1.3.2 + +1.4.3 / 2014-06-19 +================== + + * deps: type-is@1.3.1 + - fix global variable leak + +1.4.2 / 2014-06-19 +================== + + * deps: type-is@1.3.0 + - improve type parsing + +1.4.1 / 2014-06-19 +================== + + * fix urlencoded extended deprecation message + +1.4.0 / 2014-06-19 +================== + + * add `text` parser + * add `raw` parser + * check accepted charset in content-type (accepts utf-8) + * check accepted encoding in content-encoding (accepts identity) + * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed + * deprecate `urlencoded()` without provided `extended` option + * lazy-load urlencoded parsers + * parsers split into files for reduced mem usage + * support gzip and deflate bodies + - set `inflate: false` to turn off + * deps: raw-body@1.2.2 + - Support all encodings from `iconv-lite` + +1.3.1 / 2014-06-11 +================== + + * deps: type-is@1.2.1 + - Switch dependency from mime to mime-types@1.0.0 + +1.3.0 / 2014-05-31 +================== + + * add `extended` option to urlencoded parser + +1.2.2 / 2014-05-27 +================== + + * deps: raw-body@1.1.6 + - assert stream encoding on node.js 0.8 + - assert stream encoding on node.js < 0.10.6 + - deps: bytes@1 + +1.2.1 / 2014-05-26 +================== + + * invoke `next(err)` after request fully read + - prevents hung responses and socket hang ups + +1.2.0 / 2014-05-11 +================== + + * add `verify` option + * deps: type-is@1.2.0 + - support suffix matching + +1.1.2 / 2014-05-11 +================== + + * improve json parser speed + +1.1.1 / 2014-05-11 +================== + + * fix repeated limit parsing with every request + +1.1.0 / 2014-05-10 +================== + + * add `type` option + * deps: pin for safety and consistency + +1.0.2 / 2014-04-14 +================== + + * use `type-is` module + +1.0.1 / 2014-03-20 +================== + + * lower default limits to 100kb diff --git a/node_modules/body-parser/LICENSE b/node_modules/body-parser/LICENSE new file mode 100644 index 0000000..386b7b6 --- /dev/null +++ b/node_modules/body-parser/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/body-parser/README.md b/node_modules/body-parser/README.md new file mode 100644 index 0000000..4fe0304 --- /dev/null +++ b/node_modules/body-parser/README.md @@ -0,0 +1,422 @@ +# body-parser + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] +[![Gratipay][gratipay-image]][gratipay-url] + +Node.js body parsing middleware. + +Parse incoming request bodies in a middleware before your handlers, available +under the `req.body` property. + +[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/). + +_This does not handle multipart bodies_, due to their complex and typically +large nature. For multipart bodies, you may be interested in the following +modules: + + * [busboy](https://www.npmjs.org/package/busboy#readme) and + [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme) + * [multiparty](https://www.npmjs.org/package/multiparty#readme) and + [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme) + * [formidable](https://www.npmjs.org/package/formidable#readme) + * [multer](https://www.npmjs.org/package/multer#readme) + +This module provides the following parsers: + + * [JSON body parser](#bodyparserjsonoptions) + * [Raw body parser](#bodyparserrawoptions) + * [Text body parser](#bodyparsertextoptions) + * [URL-encoded form body parser](#bodyparserurlencodedoptions) + +Other body parsers you might be interested in: + +- [body](https://www.npmjs.org/package/body#readme) +- [co-body](https://www.npmjs.org/package/co-body#readme) + +## Installation + +```sh +$ npm install body-parser +``` + +## API + + + +```js +var bodyParser = require('body-parser') +``` + +The `bodyParser` object exposes various factories to create middlewares. All +middlewares will populate the `req.body` property with the parsed body when +the `Content-Type` request header matches the `type` option, or an empty +object (`{}`) if there was no body to parse, the `Content-Type` was not matched, +or an error occurred. + +The various errors returned by this module are described in the +[errors section](#errors). + +### bodyParser.json(options) + +Returns middleware that only parses `json` and only looks at requests where +the `Content-Type` header matches the `type` option. This parser accepts any +Unicode encoding of the body and supports automatic inflation of `gzip` and +`deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). + +#### Options + +The `json` function takes an option `options` object that may contain any of +the following keys: + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### reviver + +The `reviver` option is passed directly to `JSON.parse` as the second +argument. You can find more information on this argument +[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter). + +##### strict + +When set to `true`, will only accept arrays and objects; when `false` will +accept anything `JSON.parse` accepts. Defaults to `true`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a function or a string. If a string, `type` option +is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) +library and this can be an extension name (like `json`), a mime type (like +`application/json`), or a mime type with a wildcard (like `*/*` or `*/json`). +If a function, the `type` option is called as `fn(req)` and the request is +parsed if it returns a truthy value. Defaults to `application/json`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.raw(options) + +Returns middleware that parses all bodies as a `Buffer` and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser supports automatic inflation of `gzip` and `deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This will be a `Buffer` object +of the body. + +#### Options + +The `raw` function takes an option `options` object that may contain any of +the following keys: + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a function or a string. If a string, `type` option +is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) +library and this can be an extension name (like `bin`), a mime type (like +`application/octet-stream`), or a mime type with a wildcard (like `*/*` or +`application/*`). If a function, the `type` option is called as `fn(req)` +and the request is parsed if it returns a truthy value. Defaults to +`application/octet-stream`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.text(options) + +Returns middleware that parses all bodies as a string and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser supports automatic inflation of `gzip` and `deflate` encodings. + +A new `body` string containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This will be a string of the +body. + +#### Options + +The `text` function takes an option `options` object that may contain any of +the following keys: + +##### defaultCharset + +Specify the default character set for the text content if the charset is not +specified in the `Content-Type` header of the request. Defaults to `utf-8`. + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a function or a string. If a string, `type` option +is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) +library and this can be an extension name (like `txt`), a mime type (like +`text/plain`), or a mime type with a wildcard (like `*/*` or `text/*`). +If a function, the `type` option is called as `fn(req)` and the request is +parsed if it returns a truthy value. Defaults to `text/plain`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.urlencoded(options) + +Returns middleware that only parses `urlencoded` bodies and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser accepts only UTF-8 encoding of the body and supports automatic +inflation of `gzip` and `deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This object will contain +key-value pairs, where the value can be a string or array (when `extended` is +`false`), or any type (when `extended` is `true`). + +#### Options + +The `urlencoded` function takes an option `options` object that may contain +any of the following keys: + +##### extended + +The `extended` option allows to choose between parsing the URL-encoded data +with the `querystring` library (when `false`) or the `qs` library (when +`true`). The "extended" syntax allows for rich objects and arrays to be +encoded into the URL-encoded format, allowing for a JSON-like experience +with URL-encoded. For more information, please +[see the qs library](https://www.npmjs.org/package/qs#readme). + +Defaults to `true`, but using the default has been deprecated. Please +research into the difference between `qs` and `querystring` and choose the +appropriate setting. + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### parameterLimit + +The `parameterLimit` option controls the maximum number of parameters that +are allowed in the URL-encoded data. If a request contains more parameters +than this value, a 413 will be returned to the client. Defaults to `1000`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a function or a string. If a string, `type` option +is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) +library and this can be an extension name (like `urlencoded`), a mime type (like +`application/x-www-form-urlencoded`), or a mime type with a wildcard (like +`*/x-www-form-urlencoded`). If a function, the `type` option is called as +`fn(req)` and the request is parsed if it returns a truthy value. Defaults +to `application/x-www-form-urlencoded`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +## Errors + +The middlewares provided by this module create errors depending on the error +condition during parsing. The errors will typically have a `status` property +that contains the suggested HTTP response code and a `body` property containing +the read body, if available. + +The following are the common errors emitted, though any error can come through +for various reasons. + +### content encoding unsupported + +This error will occur when the request had a `Content-Encoding` header that +contained an encoding but the "inflation" option was set to `false`. The +`status` property is set to `415`. + +### request aborted + +This error will occur when the request is aborted by the client before reading +the body has finished. The `received` property will be set to the number of +bytes received before the request was aborted and the `expected` property is +set to the number of expected bytes. The `status` property is set to `400`. + +### request entity too large + +This error will occur when the request body's size is larger than the "limit" +option. The `limit` property will be set to the byte limit and the `length` +property will be set to the request body's length. The `status` property is +set to `413`. + +### request size did not match content length + +This error will occur when the request's length did not match the length from +the `Content-Length` header. This typically occurs when the request is malformed, +typically when the `Content-Length` header was calculated based on characters +instead of bytes. The `status` property is set to `400`. + +### stream encoding should not be set + +This error will occur when something called the `req.setEncoding` method prior +to this middleware. This module operates directly on bytes only and you cannot +call `req.setEncoding` when using this module. The `status` property is set to +`500`. + +### unsupported charset "BOGUS" + +This error will occur when the request had a charset parameter in the +`Content-Type` header, but the `iconv-lite` module does not support it OR the +parser does not support it. The charset is contained in the message as well +as in the `charset` property. The `status` property is set to `415`. + +### unsupported content encoding "bogus" + +This error will occur when the request had a `Content-Encoding` header that +contained an unsupported encoding. The encoding is contained in the message +as well as in the `encoding` property. The `status` property is set to `415`. + +## Examples + +### Express/Connect top-level generic + +This example demonstrates adding a generic JSON and URL-encoded parser as a +top-level middleware, which will parse the bodies of all incoming requests. +This is the simplest setup. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse application/x-www-form-urlencoded +app.use(bodyParser.urlencoded({ extended: false })) + +// parse application/json +app.use(bodyParser.json()) + +app.use(function (req, res) { + res.setHeader('Content-Type', 'text/plain') + res.write('you posted:\n') + res.end(JSON.stringify(req.body, null, 2)) +}) +``` + +### Express route-specific + +This example demonstrates adding body parsers specifically to the routes that +need them. In general, this is the most recommended way to use body-parser with +Express. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// create application/json parser +var jsonParser = bodyParser.json() + +// create application/x-www-form-urlencoded parser +var urlencodedParser = bodyParser.urlencoded({ extended: false }) + +// POST /login gets urlencoded bodies +app.post('/login', urlencodedParser, function (req, res) { + if (!req.body) return res.sendStatus(400) + res.send('welcome, ' + req.body.username) +}) + +// POST /api/users gets JSON bodies +app.post('/api/users', jsonParser, function (req, res) { + if (!req.body) return res.sendStatus(400) + // create user in req.body +}) +``` + +### Change accepted type for parsers + +All the parsers accept a `type` option which allows you to change the +`Content-Type` that the middleware will parse. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse various different custom JSON types as JSON +app.use(bodyParser.json({ type: 'application/*+json' })) + +// parse some custom thing into a Buffer +app.use(bodyParser.raw({ type: 'application/vnd.custom-type' })) + +// parse an HTML body into a string +app.use(bodyParser.text({ type: 'text/html' })) +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/body-parser.svg +[npm-url]: https://npmjs.org/package/body-parser +[travis-image]: https://img.shields.io/travis/expressjs/body-parser/master.svg +[travis-url]: https://travis-ci.org/expressjs/body-parser +[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg +[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master +[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg +[downloads-url]: https://npmjs.org/package/body-parser +[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg +[gratipay-url]: https://www.gratipay.com/dougwilson/ diff --git a/node_modules/body-parser/index.js b/node_modules/body-parser/index.js new file mode 100644 index 0000000..93c3a1f --- /dev/null +++ b/node_modules/body-parser/index.js @@ -0,0 +1,157 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var deprecate = require('depd')('body-parser') + +/** + * Cache of loaded parsers. + * @private + */ + +var parsers = Object.create(null) + +/** + * @typedef Parsers + * @type {function} + * @property {function} json + * @property {function} raw + * @property {function} text + * @property {function} urlencoded + */ + +/** + * Module exports. + * @type {Parsers} + */ + +exports = module.exports = deprecate.function(bodyParser, + 'bodyParser: use individual json/urlencoded middlewares') + +/** + * JSON parser. + * @public + */ + +Object.defineProperty(exports, 'json', { + configurable: true, + enumerable: true, + get: createParserGetter('json') +}) + +/** + * Raw parser. + * @public + */ + +Object.defineProperty(exports, 'raw', { + configurable: true, + enumerable: true, + get: createParserGetter('raw') +}) + +/** + * Text parser. + * @public + */ + +Object.defineProperty(exports, 'text', { + configurable: true, + enumerable: true, + get: createParserGetter('text') +}) + +/** + * URL-encoded parser. + * @public + */ + +Object.defineProperty(exports, 'urlencoded', { + configurable: true, + enumerable: true, + get: createParserGetter('urlencoded') +}) + +/** + * Create a middleware to parse json and urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @deprecated + * @public + */ + +function bodyParser (options) { + var opts = {} + + // exclude type option + if (options) { + for (var prop in options) { + if (prop !== 'type') { + opts[prop] = options[prop] + } + } + } + + var _urlencoded = exports.urlencoded(opts) + var _json = exports.json(opts) + + return function bodyParser (req, res, next) { + _json(req, res, function (err) { + if (err) return next(err) + _urlencoded(req, res, next) + }) + } +} + +/** + * Create a getter for loading a parser. + * @private + */ + +function createParserGetter (name) { + return function get () { + return loadParser(name) + } +} + +/** + * Load a parser module. + * @private + */ + +function loadParser (parserName) { + var parser = parsers[parserName] + + if (parser !== undefined) { + return parser + } + + // this uses a switch for static require analysis + switch (parserName) { + case 'json': + parser = require('./lib/types/json') + break + case 'raw': + parser = require('./lib/types/raw') + break + case 'text': + parser = require('./lib/types/text') + break + case 'urlencoded': + parser = require('./lib/types/urlencoded') + break + } + + // store to prevent invoking require() + return (parsers[parserName] = parser) +} diff --git a/node_modules/body-parser/lib/read.js b/node_modules/body-parser/lib/read.js new file mode 100644 index 0000000..7011cff --- /dev/null +++ b/node_modules/body-parser/lib/read.js @@ -0,0 +1,189 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var createError = require('http-errors') +var getBody = require('raw-body') +var iconv = require('iconv-lite') +var onFinished = require('on-finished') +var zlib = require('zlib') + +/** + * Module exports. + */ + +module.exports = read + +/** + * Read a request into a buffer and parse. + * + * @param {object} req + * @param {object} res + * @param {function} next + * @param {function} parse + * @param {function} debug + * @param {object} options + * @private + */ + +function read (req, res, next, parse, debug, options) { + var length + var opts = options + var stream + + // flag as parsed + req._body = true + + // read options + var encoding = opts.encoding !== null + ? opts.encoding + : null + var verify = opts.verify + + try { + // get the content stream + stream = contentstream(req, debug, opts.inflate) + length = stream.length + stream.length = undefined + } catch (err) { + return next(err) + } + + // set raw-body options + opts.length = length + opts.encoding = verify + ? null + : encoding + + // assert charset is supported + if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { + return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase() + })) + } + + // read body + debug('read body') + getBody(stream, opts, function (err, body) { + if (err) { + // default to 400 + setErrorStatus(err, 400) + + // echo back charset + if (err.type === 'encoding.unsupported') { + err = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase() + }) + } + + // read off entire request + stream.resume() + onFinished(req, function onfinished () { + next(err) + }) + return + } + + // verify + if (verify) { + try { + debug('verify body') + verify(req, res, body, encoding) + } catch (err) { + // default to 403 + setErrorStatus(err, 403) + next(err) + return + } + } + + // parse + var str + try { + debug('parse body') + str = typeof body !== 'string' && encoding !== null + ? iconv.decode(body, encoding) + : body + req.body = parse(str) + } catch (err) { + // istanbul ignore next + err.body = str === undefined + ? body + : str + + // default to 400 + setErrorStatus(err, 400) + + next(err) + return + } + + next() + }) +} + +/** + * Get the content stream of the request. + * + * @param {object} req + * @param {function} debug + * @param {boolean} [inflate=true] + * @return {object} + * @api private + */ + +function contentstream (req, debug, inflate) { + var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase() + var length = req.headers['content-length'] + var stream + + debug('content-encoding "%s"', encoding) + + if (inflate === false && encoding !== 'identity') { + throw createError(415, 'content encoding unsupported') + } + + switch (encoding) { + case 'deflate': + stream = zlib.createInflate() + debug('inflate body') + req.pipe(stream) + break + case 'gzip': + stream = zlib.createGunzip() + debug('gunzip body') + req.pipe(stream) + break + case 'identity': + stream = req + stream.length = length + break + default: + throw createError(415, 'unsupported content encoding "' + encoding + '"', { + encoding: encoding + }) + } + + return stream +} + +/** + * Set a status on an error object, if ones does not exist + * @private + */ + +function setErrorStatus (error, status) { + if (!error.status && !error.statusCode) { + error.status = status + error.statusCode = status + } +} diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js new file mode 100644 index 0000000..469123a --- /dev/null +++ b/node_modules/body-parser/lib/types/json.js @@ -0,0 +1,174 @@ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var createError = require('http-errors') +var debug = require('debug')('body-parser:json') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = json + +/** + * RegExp to match the first non-space in a string. + * + * Allowed whitespace is defined in RFC 7159: + * + * ws = *( + * %x20 / ; Space + * %x09 / ; Horizontal tab + * %x0A / ; Line feed or New line + * %x0D ) ; Carriage return + */ + +var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex + +/** + * Create a middleware to parse JSON bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function json (options) { + var opts = options || {} + + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var inflate = opts.inflate !== false + var reviver = opts.reviver + var strict = opts.strict !== false + var type = opts.type || 'application/json' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + if (body.length === 0) { + // special-case empty json body, as it's a common client-side mistake + // TODO: maybe make this configurable or part of "strict" option + return {} + } + + if (strict) { + var first = firstchar(body) + + if (first !== '{' && first !== '[') { + debug('strict violation') + throw new SyntaxError('Unexpected token ' + first) + } + } + + debug('parse json') + return JSON.parse(body, reviver) + } + + return function jsonParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset per RFC 7159 sec 8.1 + var charset = getCharset(req) || 'utf-8' + if (charset.substr(0, 4) !== 'utf-') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset + })) + return + } + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the first non-whitespace character in a string. + * + * @param {string} str + * @return {function} + * @private + */ + +function firstchar (str) { + return FIRST_CHAR_REGEXP.exec(str)[1] +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return contentType.parse(req).parameters.charset.toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/node_modules/body-parser/lib/types/raw.js b/node_modules/body-parser/lib/types/raw.js new file mode 100644 index 0000000..f5d1b67 --- /dev/null +++ b/node_modules/body-parser/lib/types/raw.js @@ -0,0 +1,101 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var debug = require('debug')('body-parser:raw') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = raw + +/** + * Create a middleware to parse raw bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function raw (options) { + var opts = options || {} + + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/octet-stream' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function rawParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // read + read(req, res, next, parse, debug, { + encoding: null, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/node_modules/body-parser/lib/types/text.js b/node_modules/body-parser/lib/types/text.js new file mode 100644 index 0000000..8bf2637 --- /dev/null +++ b/node_modules/body-parser/lib/types/text.js @@ -0,0 +1,121 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var debug = require('debug')('body-parser:text') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = text + +/** + * Create a middleware to parse text bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function text (options) { + var opts = options || {} + + var defaultCharset = opts.defaultCharset || 'utf-8' + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'text/plain' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function textParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // get charset + var charset = getCharset(req) || defaultCharset + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return contentType.parse(req).parameters.charset.toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/node_modules/body-parser/lib/types/urlencoded.js b/node_modules/body-parser/lib/types/urlencoded.js new file mode 100644 index 0000000..08157ae --- /dev/null +++ b/node_modules/body-parser/lib/types/urlencoded.js @@ -0,0 +1,279 @@ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var createError = require('http-errors') +var debug = require('debug')('body-parser:urlencoded') +var deprecate = require('depd')('body-parser') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = urlencoded + +/** + * Cache of parser modules. + */ + +var parsers = Object.create(null) + +/** + * Create a middleware to parse urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function urlencoded (options) { + var opts = options || {} + + // notice because option default will flip in next major + if (opts.extended === undefined) { + deprecate('undefined extended: provide extended option') + } + + var extended = opts.extended !== false + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/x-www-form-urlencoded' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate query parser + var queryparse = extended + ? extendedparser(opts) + : simpleparser(opts) + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + return body.length + ? queryparse(body) + : {} + } + + return function urlencodedParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset + var charset = getCharset(req) || 'utf-8' + if (charset !== 'utf-8') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset + })) + return + } + + // read + read(req, res, next, parse, debug, { + debug: debug, + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the extended query parser. + * + * @param {object} options + */ + +function extendedparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var parse = parser('qs') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters') + } + + var arrayLimit = Math.max(100, paramCount) + + debug('parse extended urlencoding') + return parse(body, { + allowPrototypes: true, + arrayLimit: arrayLimit, + depth: Infinity, + parameterLimit: parameterLimit + }) + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return contentType.parse(req).parameters.charset.toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Count the number of parameters, stopping once limit reached + * + * @param {string} body + * @param {number} limit + * @api private + */ + +function parameterCount (body, limit) { + var count = 0 + var index = 0 + + while ((index = body.indexOf('&', index)) !== -1) { + count++ + index++ + + if (count === limit) { + return undefined + } + } + + return count +} + +/** + * Get parser for module name dynamically. + * + * @param {string} name + * @return {function} + * @api private + */ + +function parser (name) { + var mod = parsers[name] + + if (mod !== undefined) { + return mod.parse + } + + // this uses a switch for static require analysis + switch (name) { + case 'qs': + mod = require('qs') + break + case 'querystring': + mod = require('querystring') + break + } + + // store to prevent invoking require() + parsers[name] = mod + + return mod.parse +} + +/** + * Get the simple query parser. + * + * @param {object} options + */ + +function simpleparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var parse = parser('querystring') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters') + } + + debug('parse urlencoding') + return parse(body, undefined, undefined, {maxKeys: parameterLimit}) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/node_modules/body-parser/package.json b/node_modules/body-parser/package.json new file mode 100644 index 0000000..2cfc342 --- /dev/null +++ b/node_modules/body-parser/package.json @@ -0,0 +1,127 @@ +{ + "_args": [ + [ + { + "raw": "body-parser", + "scope": null, + "escapedName": "body-parser", + "name": "body-parser", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "/Users/macbookpro/Documents/Courses/NodeJs" + ] + ], + "_from": "body-parser@latest", + "_id": "body-parser@1.17.2", + "_inCache": true, + "_location": "/body-parser", + "_nodeVersion": "6.10.3", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/body-parser-1.17.2.tgz_1495083464528_0.912320519099012" + }, + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "3.10.10", + "_phantomChildren": {}, + "_requested": { + "raw": "body-parser", + "scope": null, + "escapedName": "body-parser", + "name": "body-parser", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "_shasum": "f8892abc8f9e627d42aedafbca66bf5ab99104ee", + "_shrinkwrap": null, + "_spec": "body-parser", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs", + "bugs": { + "url": "https://github.com/expressjs/body-parser/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + } + ], + "dependencies": { + "bytes": "2.4.0", + "content-type": "~1.0.2", + "debug": "2.6.7", + "depd": "~1.1.0", + "http-errors": "~1.6.1", + "iconv-lite": "0.4.15", + "on-finished": "~2.3.0", + "qs": "6.4.0", + "raw-body": "~2.2.0", + "type-is": "~1.6.15" + }, + "description": "Node.js body parsing middleware", + "devDependencies": { + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-plugin-import": "2.2.0", + "eslint-plugin-markdown": "1.0.0-beta.6", + "eslint-plugin-node": "4.2.2", + "eslint-plugin-promise": "3.5.0", + "eslint-plugin-standard": "3.0.1", + "istanbul": "0.4.5", + "methods": "1.1.2", + "mocha": "2.5.3", + "safe-buffer": "5.0.1", + "supertest": "1.1.0" + }, + "directories": {}, + "dist": { + "shasum": "f8892abc8f9e627d42aedafbca66bf5ab99104ee", + "tarball": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz" + }, + "engines": { + "node": ">= 0.8" + }, + "files": [ + "lib/", + "LICENSE", + "HISTORY.md", + "index.js" + ], + "gitHead": "77b74312edb46b2e8d8df0c8436aaba396a721e9", + "homepage": "https://github.com/expressjs/body-parser#readme", + "license": "MIT", + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "body-parser", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/expressjs/body-parser.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/" + }, + "version": "1.17.2" +} diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md new file mode 100644 index 0000000..ed2ec1f --- /dev/null +++ b/node_modules/brace-expansion/README.md @@ -0,0 +1,123 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) +[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/brace-expansion/index.js b/node_modules/brace-expansion/index.js new file mode 100644 index 0000000..0478be8 --- /dev/null +++ b/node_modules/brace-expansion/index.js @@ -0,0 +1,201 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json new file mode 100644 index 0000000..6a07317 --- /dev/null +++ b/node_modules/brace-expansion/package.json @@ -0,0 +1,114 @@ +{ + "_args": [ + [ + { + "raw": "brace-expansion@^1.1.7", + "scope": null, + "escapedName": "brace-expansion", + "name": "brace-expansion", + "rawSpec": "^1.1.7", + "spec": ">=1.1.7 <2.0.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/minimatch" + ] + ], + "_from": "brace-expansion@>=1.1.7 <2.0.0", + "_id": "brace-expansion@1.1.8", + "_inCache": true, + "_location": "/brace-expansion", + "_nodeVersion": "7.8.0", + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/brace-expansion-1.1.8.tgz_1497251980593_0.6575565172825009" + }, + "_npmUser": { + "name": "juliangruber", + "email": "julian@juliangruber.com" + }, + "_npmVersion": "4.2.0", + "_phantomChildren": {}, + "_requested": { + "raw": "brace-expansion@^1.1.7", + "scope": null, + "escapedName": "brace-expansion", + "name": "brace-expansion", + "rawSpec": "^1.1.7", + "spec": ">=1.1.7 <2.0.0", + "type": "range" + }, + "_requiredBy": [ + "/minimatch" + ], + "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "_shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292", + "_shrinkwrap": null, + "_spec": "brace-expansion@^1.1.7", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/minimatch", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/brace-expansion/issues" + }, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "description": "Brace expansion as known from sh/bash", + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "directories": {}, + "dist": { + "shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292", + "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz" + }, + "gitHead": "8f59e68bd5c915a0d624e8e39354e1ccf672edf6", + "homepage": "https://github.com/juliangruber/brace-expansion", + "keywords": [], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "juliangruber", + "email": "julian@juliangruber.com" + }, + { + "name": "isaacs", + "email": "isaacs@npmjs.com" + } + ], + "name": "brace-expansion", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "scripts": { + "bench": "matcha test/perf/bench.js", + "gentest": "bash test/generate.sh", + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.1.8" +} diff --git a/node_modules/bson/HISTORY.md b/node_modules/bson/HISTORY.md new file mode 100644 index 0000000..30f0f5f --- /dev/null +++ b/node_modules/bson/HISTORY.md @@ -0,0 +1,199 @@ +1.0.4 2016-01-11 +---------------- +- #204 remove Buffer.from as it's partially broken in early 4.x.x. series of node releases. + +1.0.3 2016-01-03 +---------------- +- Fixed toString for ObjectId so it will work with inspect. + +1.0.2 2016-01-02 +---------------- +- Minor optimizations for ObjectID to use Buffer.from where available. + +1.0.1 2016-12-06 +---------------- +- Reverse behavior for undefined to be serialized as NULL. MongoDB 3.4 does not allow for undefined comparisons. + +1.0.0 2016-12-06 +---------------- +- Introduced new BSON API and documentation. + +0.5.7 2016-11-18 +----------------- +- NODE-848 BSON Regex flags must be alphabetically ordered. + +0.5.6 2016-10-19 +----------------- +- NODE-833, Detects cyclic dependencies in documents and throws error if one is found. +- Fix(deserializer): corrected the check for (size + index) comparison… (Issue #195, https://github.com/JoelParke). + +0.5.5 2016-09-15 +----------------- +- Added DBPointer up conversion to DBRef + +0.5.4 2016-08-23 +----------------- +- Added promoteValues flag (default to true) allowing user to specify if deserialization should be into wrapper classes only. + +0.5.3 2016-07-11 +----------------- +- Throw error if ObjectId is not a string or a buffer. + +0.5.2 2016-07-11 +----------------- +- All values encoded big-endian style for ObjectId. + +0.5.1 2016-07-11 +----------------- +- Fixed encoding/decoding issue in ObjectId timestamp generation. +- Removed BinaryParser dependency from the serializer/deserializer. + +0.5.0 2016-07-05 +----------------- +- Added Decimal128 type and extended test suite to include entire bson corpus. + +0.4.23 2016-04-08 +----------------- +- Allow for proper detection of ObjectId or objects that look like ObjectId, improving compatibility across third party libraries. +- Remove one package from dependency due to having been pulled from NPM. + +0.4.22 2016-03-04 +----------------- +- Fix "TypeError: data.copy is not a function" in Electron (Issue #170, https://github.com/kangas). +- Fixed issue with undefined type on deserializing. + +0.4.21 2016-01-12 +----------------- +- Minor optimizations to avoid non needed object creation. + +0.4.20 2015-10-15 +----------------- +- Added bower file to repository. +- Fixed browser pid sometimes set greater than 0xFFFF on browsers (Issue #155, https://github.com/rahatarmanahmed) + +0.4.19 2015-10-15 +----------------- +- Remove all support for bson-ext. + +0.4.18 2015-10-15 +----------------- +- ObjectID equality check should return boolean instead of throwing exception for invalid oid string #139 +- add option for deserializing binary into Buffer object #116 + +0.4.17 2015-10-15 +----------------- +- Validate regexp string for null bytes and throw if there is one. + +0.4.16 2015-10-07 +----------------- +- Fixed issue with return statement in Map.js. + +0.4.15 2015-10-06 +----------------- +- Exposed Map correctly via index.js file. + +0.4.14 2015-10-06 +----------------- +- Exposed Map correctly via bson.js file. + +0.4.13 2015-10-06 +----------------- +- Added ES6 Map type serialization as well as a polyfill for ES5. + +0.4.12 2015-09-18 +----------------- +- Made ignore undefined an optional parameter. + +0.4.11 2015-08-06 +----------------- +- Minor fix for invalid key checking. + +0.4.10 2015-08-06 +----------------- +- NODE-38 Added new BSONRegExp type to allow direct serialization to MongoDB type. +- Some performance improvements by in lining code. + +0.4.9 2015-08-06 +---------------- +- Undefined fields are omitted from serialization in objects. + +0.4.8 2015-07-14 +---------------- +- Fixed size validation to ensure we can deserialize from dumped files. + +0.4.7 2015-06-26 +---------------- +- Added ability to instruct deserializer to return raw BSON buffers for named array fields. +- Minor deserialization optimization by moving inlined function out. + +0.4.6 2015-06-17 +---------------- +- Fixed serializeWithBufferAndIndex bug. + +0.4.5 2015-06-17 +---------------- +- Removed any references to the shared buffer to avoid non GC collectible bson instances. + +0.4.4 2015-06-17 +---------------- +- Fixed rethrowing of error when not RangeError. + +0.4.3 2015-06-17 +---------------- +- Start buffer at 64K and double as needed, meaning we keep a low memory profile until needed. + +0.4.2 2015-06-16 +---------------- +- More fixes for corrupt Bson + +0.4.1 2015-06-16 +---------------- +- More fixes for corrupt Bson + +0.4.0 2015-06-16 +---------------- +- New JS serializer serializing into a single buffer then copying out the new buffer. Performance is similar to current C++ parser. +- Removed bson-ext extension dependency for now. + +0.3.2 2015-03-27 +---------------- +- Removed node-gyp from install script in package.json. + +0.3.1 2015-03-27 +---------------- +- Return pure js version on native() call if failed to initialize. + +0.3.0 2015-03-26 +---------------- +- Pulled out all C++ code into bson-ext and made it an optional dependency. + +0.2.21 2015-03-21 +----------------- +- Updated Nan to 1.7.0 to support io.js and node 0.12.0 + +0.2.19 2015-02-16 +----------------- +- Updated Nan to 1.6.2 to support io.js and node 0.12.0 + +0.2.18 2015-01-20 +----------------- +- Updated Nan to 1.5.1 to support io.js + +0.2.16 2014-12-17 +----------------- +- Made pid cycle on 0xffff to avoid weird overflows on creation of ObjectID's + +0.2.12 2014-08-24 +----------------- +- Fixes for fortify review of c++ extension +- toBSON correctly allows returns of non objects + +0.2.3 2013-10-01 +---------------- +- Drying of ObjectId code for generation of id (Issue #54, https://github.com/moredip) +- Fixed issue where corrupt CString's could cause endless loop +- Support for Node 0.11.X > (Issue #49, https://github.com/kkoopa) + +0.1.4 2012-09-25 +---------------- +- Added precompiled c++ native extensions for win32 ia32 and x64 diff --git a/node_modules/bson/LICENSE.md b/node_modules/bson/LICENSE.md new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/node_modules/bson/LICENSE.md @@ -0,0 +1,201 @@ + 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 [yyyy] [name of copyright owner] + + 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/bson/README.md b/node_modules/bson/README.md new file mode 100644 index 0000000..af25c3c --- /dev/null +++ b/node_modules/bson/README.md @@ -0,0 +1,141 @@ +# BSON parser + +If you don't yet know what BSON actually is, read [the spec](http://bsonspec.org). + +The browser version of the BSON parser is compiled using webpack and the current +version is pre-compiled in the browser_build directory. To build a new version perform the following operation. + +``` +npm install +npm run build +``` + +A simple example of how to use BSON in the browser: + +```html + + + +``` + +A simple example of how to use BSON in `node.js`: + +```js +// Get BSON parser class +var BSON = require('bson') +// Get the Long type +var Long = BSON.Long; +// Create a bson parser instance +var bson = new BSON(); + +// Serialize document +var doc = { long: Long.fromNumber(100) } + +// Serialize a document +var data = bson.serialize(doc) +console.log('data:', data) + +// Deserialize the resulting Buffer +var doc_2 = bson.deserialize(data) +console.log('doc_2:', doc_2) +``` + +## Installation + +`npm install bson` + +## API + +### BSON types + +For all BSON types documentation, please refer to the documentation for the mongodb driver. + +https://github.com/mongodb/node-mongodb-native + +### BSON serialization and deserialiation + +**`new BSON()`** - Creates a new BSON seralizer/deserializer you can use to serialize and deserialize BSON. + +#### BSON.serialize + +The BSON serialize method takes a javascript object and an optional options object and returns a Node.js Buffer. + + * BSON.serialize(object, options) + * @param {Object} object the Javascript object to serialize. + * @param {Boolean} [options.checkKeys=false] the serializer will check if keys are valid. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript. functions. + * @param {Boolean} [options.ignoreUndefined=true] + * @return {Buffer} returns a Buffer instance. + +#### BSON.serializeWithBufferAndIndex + +The BSON serializeWithBufferAndIndex method takes an object, a target buffer instance and an optional options object and returns the end serialization index in the final buffer. + + * BSON.serializeWithBufferAndIndex(object, buffer, options) + * @param {Object} object the Javascript object to serialize. + * @param {Buffer} buffer the Buffer you pre-allocated to store the serialized BSON object. + * @param {Boolean} [options.checkKeys=false] the serializer will check if keys are valid. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript functions. + * @param {Boolean} [options.ignoreUndefined=true] ignore undefined fields. + * @param {Number} [options.index=0] the index in the buffer where we wish to start serializing into. + * @return {Number} returns the index pointing to the last written byte in the buffer. + +#### BSON.calculateObjectSize + +The BSON calculateObjectSize method takes a javascript object and an optional options object and returns the size of the BSON object. + + * BSON.calculateObjectSize(object, options) + * @param {Object} object the Javascript object to serialize. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript. functions. + * @param {Boolean} [options.ignoreUndefined=true] + * @return {Buffer} returns a Buffer instance. + +#### BSON.deserialize + +The BSON deserialize method takes a node.js Buffer and an optional options object and returns a deserialized Javascript object. + + * BSON.deserialize(buffer, options) + * @param {Object} [options.evalFunctions=false] evaluate functions in the BSON document scoped to the object deserialized. + * @param {Object} [options.cacheFunctions=false] cache evaluated functions for reuse. + * @param {Object} [options.cacheFunctionsCrc32=false] use a crc32 code for caching, otherwise use the string of the function. + * @param {Object} [options.promoteLongs=true] when deserializing a Long will fit it into a Number if it's smaller than 53 bits + * @param {Object} [options.promoteBuffers=false] when deserializing a Binary will return it as a node.js Buffer instance. + * @param {Object} [options.promoteValues=false] when deserializing will promote BSON values to their Node.js closest equivalent types. + * @param {Object} [options.fieldsAsRaw=null] allow to specify if there what fields we wish to return as unserialized raw buffer. + * @param {Object} [options.bsonRegExp=false] return BSON regular expressions as BSONRegExp instances. + * @return {Number} returns the next index in the buffer after deserialization **x** numbers of documents. + +#### BSON.deserializeStream + +The BSON deserializeStream method takes a node.js Buffer, startIndex and allow more control over deserialization of a Buffer containing concatenated BSON documents. + + * BSON.deserializeStream(buffer, startIndex, numberOfDocuments, documents, docStartIndex, options) + * @param {Buffer} buffer the buffer containing the serialized set of BSON documents. + * @param {Number} startIndex the start index in the data Buffer where the deserialization is to start. + * @param {Number} numberOfDocuments number of documents to deserialize. + * @param {Array} documents an array where to store the deserialized documents. + * @param {Number} docStartIndex the index in the documents array from where to start inserting documents. + * @param {Object} [options.evalFunctions=false] evaluate functions in the BSON document scoped to the object deserialized. + * @param {Object} [options.cacheFunctions=false] cache evaluated functions for reuse. + * @param {Object} [options.cacheFunctionsCrc32=false] use a crc32 code for caching, otherwise use the string of the function. + * @param {Object} [options.promoteLongs=true] when deserializing a Long will fit it into a Number if it's smaller than 53 bits + * @param {Object} [options.promoteBuffers=false] when deserializing a Binary will return it as a node.js Buffer instance. + * @param {Object} [options.promoteValues=false] when deserializing will promote BSON values to their Node.js closest equivalent types. + * @param {Object} [options.fieldsAsRaw=null] allow to specify if there what fields we wish to return as unserialized raw buffer. + * @param {Object} [options.bsonRegExp=false] return BSON regular expressions as BSONRegExp instances. + * @return {Object} returns the deserialized Javascript Object. diff --git a/node_modules/bson/bower.json b/node_modules/bson/bower.json new file mode 100644 index 0000000..b32140e --- /dev/null +++ b/node_modules/bson/bower.json @@ -0,0 +1,25 @@ +{ + "name": "bson", + "description": "A bson parser for node.js and the browser", + "keywords": [ + "mongodb", + "bson", + "parser" + ], + "author": "Christian Amor Kvalheim ", + "main": "./browser_build/bson.js", + "license": "Apache-2.0", + "moduleType": [ + "globals", + "node" + ], + "ignore": [ + "**/.*", + "alternate_parsers", + "benchmarks", + "bower_components", + "node_modules", + "test", + "tools" + ] +} diff --git a/node_modules/bson/browser_build/bson.js b/node_modules/bson/browser_build/bson.js new file mode 100644 index 0000000..6021fca --- /dev/null +++ b/node_modules/bson/browser_build/bson.js @@ -0,0 +1,16734 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else { + var a = factory(); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "/"; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(1); + module.exports = __webpack_require__(298); + + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {"use strict"; + + __webpack_require__(2); + + __webpack_require__(293); + + __webpack_require__(295); + + if (global._babelPolyfill) { + throw new Error("only one instance of babel-polyfill is allowed"); + } + global._babelPolyfill = true; + + var DEFINE_PROPERTY = "defineProperty"; + function define(O, key, value) { + O[key] || Object[DEFINE_PROPERTY](O, key, { + writable: true, + configurable: true, + value: value + }); + } + + define(String.prototype, "padLeft", "".padStart); + define(String.prototype, "padRight", "".padEnd); + + "pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) { + [][key] && define(Array, key, Function.call.bind([][key])); + }); + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(3); + __webpack_require__(52); + __webpack_require__(53); + __webpack_require__(54); + __webpack_require__(55); + __webpack_require__(57); + __webpack_require__(60); + __webpack_require__(61); + __webpack_require__(62); + __webpack_require__(63); + __webpack_require__(64); + __webpack_require__(65); + __webpack_require__(66); + __webpack_require__(67); + __webpack_require__(68); + __webpack_require__(70); + __webpack_require__(72); + __webpack_require__(74); + __webpack_require__(76); + __webpack_require__(79); + __webpack_require__(80); + __webpack_require__(81); + __webpack_require__(85); + __webpack_require__(87); + __webpack_require__(89); + __webpack_require__(92); + __webpack_require__(93); + __webpack_require__(94); + __webpack_require__(95); + __webpack_require__(97); + __webpack_require__(98); + __webpack_require__(99); + __webpack_require__(100); + __webpack_require__(101); + __webpack_require__(102); + __webpack_require__(103); + __webpack_require__(105); + __webpack_require__(106); + __webpack_require__(107); + __webpack_require__(109); + __webpack_require__(110); + __webpack_require__(111); + __webpack_require__(113); + __webpack_require__(114); + __webpack_require__(115); + __webpack_require__(116); + __webpack_require__(117); + __webpack_require__(118); + __webpack_require__(119); + __webpack_require__(120); + __webpack_require__(121); + __webpack_require__(122); + __webpack_require__(123); + __webpack_require__(124); + __webpack_require__(125); + __webpack_require__(126); + __webpack_require__(131); + __webpack_require__(132); + __webpack_require__(136); + __webpack_require__(137); + __webpack_require__(138); + __webpack_require__(139); + __webpack_require__(141); + __webpack_require__(142); + __webpack_require__(143); + __webpack_require__(144); + __webpack_require__(145); + __webpack_require__(146); + __webpack_require__(147); + __webpack_require__(148); + __webpack_require__(149); + __webpack_require__(150); + __webpack_require__(151); + __webpack_require__(152); + __webpack_require__(153); + __webpack_require__(154); + __webpack_require__(155); + __webpack_require__(156); + __webpack_require__(157); + __webpack_require__(159); + __webpack_require__(160); + __webpack_require__(166); + __webpack_require__(167); + __webpack_require__(169); + __webpack_require__(170); + __webpack_require__(171); + __webpack_require__(175); + __webpack_require__(176); + __webpack_require__(177); + __webpack_require__(178); + __webpack_require__(179); + __webpack_require__(181); + __webpack_require__(182); + __webpack_require__(183); + __webpack_require__(184); + __webpack_require__(187); + __webpack_require__(189); + __webpack_require__(190); + __webpack_require__(191); + __webpack_require__(193); + __webpack_require__(195); + __webpack_require__(197); + __webpack_require__(198); + __webpack_require__(199); + __webpack_require__(201); + __webpack_require__(202); + __webpack_require__(203); + __webpack_require__(204); + __webpack_require__(211); + __webpack_require__(214); + __webpack_require__(215); + __webpack_require__(217); + __webpack_require__(218); + __webpack_require__(221); + __webpack_require__(222); + __webpack_require__(224); + __webpack_require__(225); + __webpack_require__(226); + __webpack_require__(227); + __webpack_require__(228); + __webpack_require__(229); + __webpack_require__(230); + __webpack_require__(231); + __webpack_require__(232); + __webpack_require__(233); + __webpack_require__(234); + __webpack_require__(235); + __webpack_require__(236); + __webpack_require__(237); + __webpack_require__(238); + __webpack_require__(239); + __webpack_require__(240); + __webpack_require__(241); + __webpack_require__(242); + __webpack_require__(244); + __webpack_require__(245); + __webpack_require__(246); + __webpack_require__(247); + __webpack_require__(248); + __webpack_require__(249); + __webpack_require__(251); + __webpack_require__(252); + __webpack_require__(253); + __webpack_require__(254); + __webpack_require__(255); + __webpack_require__(256); + __webpack_require__(257); + __webpack_require__(258); + __webpack_require__(260); + __webpack_require__(261); + __webpack_require__(263); + __webpack_require__(264); + __webpack_require__(265); + __webpack_require__(266); + __webpack_require__(269); + __webpack_require__(270); + __webpack_require__(271); + __webpack_require__(272); + __webpack_require__(273); + __webpack_require__(274); + __webpack_require__(275); + __webpack_require__(276); + __webpack_require__(278); + __webpack_require__(279); + __webpack_require__(280); + __webpack_require__(281); + __webpack_require__(282); + __webpack_require__(283); + __webpack_require__(284); + __webpack_require__(285); + __webpack_require__(286); + __webpack_require__(287); + __webpack_require__(288); + __webpack_require__(291); + __webpack_require__(292); + module.exports = __webpack_require__(9); + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // ECMAScript 6 symbols shim + var global = __webpack_require__(4) + , has = __webpack_require__(5) + , DESCRIPTORS = __webpack_require__(6) + , $export = __webpack_require__(8) + , redefine = __webpack_require__(18) + , META = __webpack_require__(22).KEY + , $fails = __webpack_require__(7) + , shared = __webpack_require__(23) + , setToStringTag = __webpack_require__(24) + , uid = __webpack_require__(19) + , wks = __webpack_require__(25) + , wksExt = __webpack_require__(26) + , wksDefine = __webpack_require__(27) + , keyOf = __webpack_require__(29) + , enumKeys = __webpack_require__(42) + , isArray = __webpack_require__(45) + , anObject = __webpack_require__(12) + , toIObject = __webpack_require__(32) + , toPrimitive = __webpack_require__(16) + , createDesc = __webpack_require__(17) + , _create = __webpack_require__(46) + , gOPNExt = __webpack_require__(49) + , $GOPD = __webpack_require__(51) + , $DP = __webpack_require__(11) + , $keys = __webpack_require__(30) + , gOPD = $GOPD.f + , dP = $DP.f + , gOPN = gOPNExt.f + , $Symbol = global.Symbol + , $JSON = global.JSON + , _stringify = $JSON && $JSON.stringify + , PROTOTYPE = 'prototype' + , HIDDEN = wks('_hidden') + , TO_PRIMITIVE = wks('toPrimitive') + , isEnum = {}.propertyIsEnumerable + , SymbolRegistry = shared('symbol-registry') + , AllSymbols = shared('symbols') + , OPSymbols = shared('op-symbols') + , ObjectProto = Object[PROTOTYPE] + , USE_NATIVE = typeof $Symbol == 'function' + , QObject = global.QObject; + // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 + var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + + // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 + var setSymbolDesc = DESCRIPTORS && $fails(function(){ + return _create(dP({}, 'a', { + get: function(){ return dP(this, 'a', {value: 7}).a; } + })).a != 7; + }) ? function(it, key, D){ + var protoDesc = gOPD(ObjectProto, key); + if(protoDesc)delete ObjectProto[key]; + dP(it, key, D); + if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc); + } : dP; + + var wrap = function(tag){ + var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); + sym._k = tag; + return sym; + }; + + var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){ + return typeof it == 'symbol'; + } : function(it){ + return it instanceof $Symbol; + }; + + var $defineProperty = function defineProperty(it, key, D){ + if(it === ObjectProto)$defineProperty(OPSymbols, key, D); + anObject(it); + key = toPrimitive(key, true); + anObject(D); + if(has(AllSymbols, key)){ + if(!D.enumerable){ + if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {})); + it[HIDDEN][key] = true; + } else { + if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false; + D = _create(D, {enumerable: createDesc(0, false)}); + } return setSymbolDesc(it, key, D); + } return dP(it, key, D); + }; + var $defineProperties = function defineProperties(it, P){ + anObject(it); + var keys = enumKeys(P = toIObject(P)) + , i = 0 + , l = keys.length + , key; + while(l > i)$defineProperty(it, key = keys[i++], P[key]); + return it; + }; + var $create = function create(it, P){ + return P === undefined ? _create(it) : $defineProperties(_create(it), P); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(key){ + var E = isEnum.call(this, key = toPrimitive(key, true)); + if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false; + return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){ + it = toIObject(it); + key = toPrimitive(key, true); + if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return; + var D = gOPD(it, key); + if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true; + return D; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(it){ + var names = gOPN(toIObject(it)) + , result = [] + , i = 0 + , key; + while(names.length > i){ + if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key); + } return result; + }; + var $getOwnPropertySymbols = function getOwnPropertySymbols(it){ + var IS_OP = it === ObjectProto + , names = gOPN(IS_OP ? OPSymbols : toIObject(it)) + , result = [] + , i = 0 + , key; + while(names.length > i){ + if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]); + } return result; + }; + + // 19.4.1.1 Symbol([description]) + if(!USE_NATIVE){ + $Symbol = function Symbol(){ + if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!'); + var tag = uid(arguments.length > 0 ? arguments[0] : undefined); + var $set = function(value){ + if(this === ObjectProto)$set.call(OPSymbols, value); + if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false; + setSymbolDesc(this, tag, createDesc(1, value)); + }; + if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set}); + return wrap(tag); + }; + redefine($Symbol[PROTOTYPE], 'toString', function toString(){ + return this._k; + }); + + $GOPD.f = $getOwnPropertyDescriptor; + $DP.f = $defineProperty; + __webpack_require__(50).f = gOPNExt.f = $getOwnPropertyNames; + __webpack_require__(44).f = $propertyIsEnumerable; + __webpack_require__(43).f = $getOwnPropertySymbols; + + if(DESCRIPTORS && !__webpack_require__(28)){ + redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); + } + + wksExt.f = function(name){ + return wrap(wks(name)); + } + } + + $export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol}); + + for(var symbols = ( + // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14 + 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables' + ).split(','), i = 0; symbols.length > i; )wks(symbols[i++]); + + for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]); + + $export($export.S + $export.F * !USE_NATIVE, 'Symbol', { + // 19.4.2.1 Symbol.for(key) + 'for': function(key){ + return has(SymbolRegistry, key += '') + ? SymbolRegistry[key] + : SymbolRegistry[key] = $Symbol(key); + }, + // 19.4.2.5 Symbol.keyFor(sym) + keyFor: function keyFor(key){ + if(isSymbol(key))return keyOf(SymbolRegistry, key); + throw TypeError(key + ' is not a symbol!'); + }, + useSetter: function(){ setter = true; }, + useSimple: function(){ setter = false; } + }); + + $export($export.S + $export.F * !USE_NATIVE, 'Object', { + // 19.1.2.2 Object.create(O [, Properties]) + create: $create, + // 19.1.2.4 Object.defineProperty(O, P, Attributes) + defineProperty: $defineProperty, + // 19.1.2.3 Object.defineProperties(O, Properties) + defineProperties: $defineProperties, + // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) + getOwnPropertyDescriptor: $getOwnPropertyDescriptor, + // 19.1.2.7 Object.getOwnPropertyNames(O) + getOwnPropertyNames: $getOwnPropertyNames, + // 19.1.2.8 Object.getOwnPropertySymbols(O) + getOwnPropertySymbols: $getOwnPropertySymbols + }); + + // 24.3.2 JSON.stringify(value [, replacer [, space]]) + $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){ + var S = $Symbol(); + // MS Edge converts symbol values to JSON as {} + // WebKit converts symbol values to JSON as null + // V8 throws on boxed symbols + return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}'; + })), 'JSON', { + stringify: function stringify(it){ + if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined + var args = [it] + , i = 1 + , replacer, $replacer; + while(arguments.length > i)args.push(arguments[i++]); + replacer = args[1]; + if(typeof replacer == 'function')$replacer = replacer; + if($replacer || !isArray(replacer))replacer = function(key, value){ + if($replacer)value = $replacer.call(this, key, value); + if(!isSymbol(value))return value; + }; + args[1] = replacer; + return _stringify.apply($JSON, args); + } + }); + + // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) + $Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(10)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); + // 19.4.3.5 Symbol.prototype[@@toStringTag] + setToStringTag($Symbol, 'Symbol'); + // 20.2.1.9 Math[@@toStringTag] + setToStringTag(Math, 'Math', true); + // 24.3.3 JSON[@@toStringTag] + setToStringTag(global.JSON, 'JSON', true); + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); + if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef + +/***/ }, +/* 5 */ +/***/ function(module, exports) { + + var hasOwnProperty = {}.hasOwnProperty; + module.exports = function(it, key){ + return hasOwnProperty.call(it, key); + }; + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + // Thank's IE8 for his funny defineProperty + module.exports = !__webpack_require__(7)(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; + }); + +/***/ }, +/* 7 */ +/***/ function(module, exports) { + + module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } + }; + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(4) + , core = __webpack_require__(9) + , hide = __webpack_require__(10) + , redefine = __webpack_require__(18) + , ctx = __webpack_require__(20) + , PROTOTYPE = 'prototype'; + + var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE] + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}) + , key, own, out, exp; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if(target)redefine(target, key, out, type & $export.U); + // export + if(exports[key] != out)hide(exports, key, exp); + if(IS_PROTO && expProto[key] != out)expProto[key] = out; + } + }; + global.core = core; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + $export.U = 64; // safe + $export.R = 128; // real proto method for `library` + module.exports = $export; + +/***/ }, +/* 9 */ +/***/ function(module, exports) { + + var core = module.exports = {version: '2.4.0'}; + if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + var dP = __webpack_require__(11) + , createDesc = __webpack_require__(17); + module.exports = __webpack_require__(6) ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); + } : function(object, key, value){ + object[key] = value; + return object; + }; + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__(12) + , IE8_DOM_DEFINE = __webpack_require__(14) + , toPrimitive = __webpack_require__(16) + , dP = Object.defineProperty; + + exports.f = __webpack_require__(6) ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; + }; + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(13); + module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; + }; + +/***/ }, +/* 13 */ +/***/ function(module, exports) { + + module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = !__webpack_require__(6) && !__webpack_require__(7)(function(){ + return Object.defineProperty(__webpack_require__(15)('div'), 'a', {get: function(){ return 7; }}).a != 7; + }); + +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(13) + , document = __webpack_require__(4).document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); + module.exports = function(it){ + return is ? document.createElement(it) : {}; + }; + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.1.1 ToPrimitive(input [, PreferredType]) + var isObject = __webpack_require__(13); + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); + }; + +/***/ }, +/* 17 */ +/***/ function(module, exports) { + + module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; + }; + +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(4) + , hide = __webpack_require__(10) + , has = __webpack_require__(5) + , SRC = __webpack_require__(19)('src') + , TO_STRING = 'toString' + , $toString = Function[TO_STRING] + , TPL = ('' + $toString).split(TO_STRING); + + __webpack_require__(9).inspectSource = function(it){ + return $toString.call(it); + }; + + (module.exports = function(O, key, val, safe){ + var isFunction = typeof val == 'function'; + if(isFunction)has(val, 'name') || hide(val, 'name', key); + if(O[key] === val)return; + if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); + if(O === global){ + O[key] = val; + } else { + if(!safe){ + delete O[key]; + hide(O, key, val); + } else { + if(O[key])O[key] = val; + else hide(O, key, val); + } + } + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, TO_STRING, function toString(){ + return typeof this == 'function' && this[SRC] || $toString.call(this); + }); + +/***/ }, +/* 19 */ +/***/ function(module, exports) { + + var id = 0 + , px = Math.random(); + module.exports = function(key){ + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); + }; + +/***/ }, +/* 20 */ +/***/ function(module, exports, __webpack_require__) { + + // optional / simple context binding + var aFunction = __webpack_require__(21); + module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; + }; + +/***/ }, +/* 21 */ +/***/ function(module, exports) { + + module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; + }; + +/***/ }, +/* 22 */ +/***/ function(module, exports, __webpack_require__) { + + var META = __webpack_require__(19)('meta') + , isObject = __webpack_require__(13) + , has = __webpack_require__(5) + , setDesc = __webpack_require__(11).f + , id = 0; + var isExtensible = Object.isExtensible || function(){ + return true; + }; + var FREEZE = !__webpack_require__(7)(function(){ + return isExtensible(Object.preventExtensions({})); + }); + var setMeta = function(it){ + setDesc(it, META, {value: { + i: 'O' + ++id, // object ID + w: {} // weak collections IDs + }}); + }; + var fastKey = function(it, create){ + // return primitive with prefix + if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if(!has(it, META)){ + // can't set metadata to uncaught frozen object + if(!isExtensible(it))return 'F'; + // not necessary to add metadata + if(!create)return 'E'; + // add missing metadata + setMeta(it); + // return object ID + } return it[META].i; + }; + var getWeak = function(it, create){ + if(!has(it, META)){ + // can't set metadata to uncaught frozen object + if(!isExtensible(it))return true; + // not necessary to add metadata + if(!create)return false; + // add missing metadata + setMeta(it); + // return hash weak collections IDs + } return it[META].w; + }; + // add metadata on freeze-family methods calling + var onFreeze = function(it){ + if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it); + return it; + }; + var meta = module.exports = { + KEY: META, + NEED: false, + fastKey: fastKey, + getWeak: getWeak, + onFreeze: onFreeze + }; + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(4) + , SHARED = '__core-js_shared__' + , store = global[SHARED] || (global[SHARED] = {}); + module.exports = function(key){ + return store[key] || (store[key] = {}); + }; + +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + + var def = __webpack_require__(11).f + , has = __webpack_require__(5) + , TAG = __webpack_require__(25)('toStringTag'); + + module.exports = function(it, tag, stat){ + if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); + }; + +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { + + var store = __webpack_require__(23)('wks') + , uid = __webpack_require__(19) + , Symbol = __webpack_require__(4).Symbol + , USE_SYMBOL = typeof Symbol == 'function'; + + var $exports = module.exports = function(name){ + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); + }; + + $exports.store = store; + +/***/ }, +/* 26 */ +/***/ function(module, exports, __webpack_require__) { + + exports.f = __webpack_require__(25); + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(4) + , core = __webpack_require__(9) + , LIBRARY = __webpack_require__(28) + , wksExt = __webpack_require__(26) + , defineProperty = __webpack_require__(11).f; + module.exports = function(name){ + var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); + if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)}); + }; + +/***/ }, +/* 28 */ +/***/ function(module, exports) { + + module.exports = false; + +/***/ }, +/* 29 */ +/***/ function(module, exports, __webpack_require__) { + + var getKeys = __webpack_require__(30) + , toIObject = __webpack_require__(32); + module.exports = function(object, el){ + var O = toIObject(object) + , keys = getKeys(O) + , length = keys.length + , index = 0 + , key; + while(length > index)if(O[key = keys[index++]] === el)return key; + }; + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.14 / 15.2.3.14 Object.keys(O) + var $keys = __webpack_require__(31) + , enumBugKeys = __webpack_require__(41); + + module.exports = Object.keys || function keys(O){ + return $keys(O, enumBugKeys); + }; + +/***/ }, +/* 31 */ +/***/ function(module, exports, __webpack_require__) { + + var has = __webpack_require__(5) + , toIObject = __webpack_require__(32) + , arrayIndexOf = __webpack_require__(36)(false) + , IE_PROTO = __webpack_require__(40)('IE_PROTO'); + + module.exports = function(object, names){ + var O = toIObject(object) + , i = 0 + , result = [] + , key; + for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while(names.length > i)if(has(O, key = names[i++])){ + ~arrayIndexOf(result, key) || result.push(key); + } + return result; + }; + +/***/ }, +/* 32 */ +/***/ function(module, exports, __webpack_require__) { + + // to indexed object, toObject with fallback for non-array-like ES3 strings + var IObject = __webpack_require__(33) + , defined = __webpack_require__(35); + module.exports = function(it){ + return IObject(defined(it)); + }; + +/***/ }, +/* 33 */ +/***/ function(module, exports, __webpack_require__) { + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + var cof = __webpack_require__(34); + module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ + return cof(it) == 'String' ? it.split('') : Object(it); + }; + +/***/ }, +/* 34 */ +/***/ function(module, exports) { + + var toString = {}.toString; + + module.exports = function(it){ + return toString.call(it).slice(8, -1); + }; + +/***/ }, +/* 35 */ +/***/ function(module, exports) { + + // 7.2.1 RequireObjectCoercible(argument) + module.exports = function(it){ + if(it == undefined)throw TypeError("Can't call method on " + it); + return it; + }; + +/***/ }, +/* 36 */ +/***/ function(module, exports, __webpack_require__) { + + // false -> Array#indexOf + // true -> Array#includes + var toIObject = __webpack_require__(32) + , toLength = __webpack_require__(37) + , toIndex = __webpack_require__(39); + module.exports = function(IS_INCLUDES){ + return function($this, el, fromIndex){ + var O = toIObject($this) + , length = toLength(O.length) + , index = toIndex(fromIndex, length) + , value; + // Array#includes uses SameValueZero equality algorithm + if(IS_INCLUDES && el != el)while(length > index){ + value = O[index++]; + if(value != value)return true; + // Array#toIndex ignores holes, Array#includes - not + } else for(;length > index; index++)if(IS_INCLUDES || index in O){ + if(O[index] === el)return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; + }; + +/***/ }, +/* 37 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.1.15 ToLength + var toInteger = __webpack_require__(38) + , min = Math.min; + module.exports = function(it){ + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 + }; + +/***/ }, +/* 38 */ +/***/ function(module, exports) { + + // 7.1.4 ToInteger + var ceil = Math.ceil + , floor = Math.floor; + module.exports = function(it){ + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + +/***/ }, +/* 39 */ +/***/ function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(38) + , max = Math.max + , min = Math.min; + module.exports = function(index, length){ + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); + }; + +/***/ }, +/* 40 */ +/***/ function(module, exports, __webpack_require__) { + + var shared = __webpack_require__(23)('keys') + , uid = __webpack_require__(19); + module.exports = function(key){ + return shared[key] || (shared[key] = uid(key)); + }; + +/***/ }, +/* 41 */ +/***/ function(module, exports) { + + // IE 8- don't enum bug keys + module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' + ).split(','); + +/***/ }, +/* 42 */ +/***/ function(module, exports, __webpack_require__) { + + // all enumerable object keys, includes symbols + var getKeys = __webpack_require__(30) + , gOPS = __webpack_require__(43) + , pIE = __webpack_require__(44); + module.exports = function(it){ + var result = getKeys(it) + , getSymbols = gOPS.f; + if(getSymbols){ + var symbols = getSymbols(it) + , isEnum = pIE.f + , i = 0 + , key; + while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key); + } return result; + }; + +/***/ }, +/* 43 */ +/***/ function(module, exports) { + + exports.f = Object.getOwnPropertySymbols; + +/***/ }, +/* 44 */ +/***/ function(module, exports) { + + exports.f = {}.propertyIsEnumerable; + +/***/ }, +/* 45 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.2.2 IsArray(argument) + var cof = __webpack_require__(34); + module.exports = Array.isArray || function isArray(arg){ + return cof(arg) == 'Array'; + }; + +/***/ }, +/* 46 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) + var anObject = __webpack_require__(12) + , dPs = __webpack_require__(47) + , enumBugKeys = __webpack_require__(41) + , IE_PROTO = __webpack_require__(40)('IE_PROTO') + , Empty = function(){ /* empty */ } + , PROTOTYPE = 'prototype'; + + // Create object with fake `null` prototype: use iframe Object with cleared prototype + var createDict = function(){ + // Thrash, waste and sodomy: IE GC bug + var iframe = __webpack_require__(15)('iframe') + , i = enumBugKeys.length + , lt = '<' + , gt = '>' + , iframeDocument; + iframe.style.display = 'none'; + __webpack_require__(48).appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); + }; + + module.exports = Object.create || function create(O, Properties){ + var result; + if(O !== null){ + Empty[PROTOTYPE] = anObject(O); + result = new Empty; + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); + }; + + +/***/ }, +/* 47 */ +/***/ function(module, exports, __webpack_require__) { + + var dP = __webpack_require__(11) + , anObject = __webpack_require__(12) + , getKeys = __webpack_require__(30); + + module.exports = __webpack_require__(6) ? Object.defineProperties : function defineProperties(O, Properties){ + anObject(O); + var keys = getKeys(Properties) + , length = keys.length + , i = 0 + , P; + while(length > i)dP.f(O, P = keys[i++], Properties[P]); + return O; + }; + +/***/ }, +/* 48 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(4).document && document.documentElement; + +/***/ }, +/* 49 */ +/***/ function(module, exports, __webpack_require__) { + + // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window + var toIObject = __webpack_require__(32) + , gOPN = __webpack_require__(50).f + , toString = {}.toString; + + var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + + var getWindowNames = function(it){ + try { + return gOPN(it); + } catch(e){ + return windowNames.slice(); + } + }; + + module.exports.f = function getOwnPropertyNames(it){ + return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); + }; + + +/***/ }, +/* 50 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) + var $keys = __webpack_require__(31) + , hiddenKeys = __webpack_require__(41).concat('length', 'prototype'); + + exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){ + return $keys(O, hiddenKeys); + }; + +/***/ }, +/* 51 */ +/***/ function(module, exports, __webpack_require__) { + + var pIE = __webpack_require__(44) + , createDesc = __webpack_require__(17) + , toIObject = __webpack_require__(32) + , toPrimitive = __webpack_require__(16) + , has = __webpack_require__(5) + , IE8_DOM_DEFINE = __webpack_require__(14) + , gOPD = Object.getOwnPropertyDescriptor; + + exports.f = __webpack_require__(6) ? gOPD : function getOwnPropertyDescriptor(O, P){ + O = toIObject(O); + P = toPrimitive(P, true); + if(IE8_DOM_DEFINE)try { + return gOPD(O, P); + } catch(e){ /* empty */ } + if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]); + }; + +/***/ }, +/* 52 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) + $export($export.S, 'Object', {create: __webpack_require__(46)}); + +/***/ }, +/* 53 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8); + // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) + $export($export.S + $export.F * !__webpack_require__(6), 'Object', {defineProperty: __webpack_require__(11).f}); + +/***/ }, +/* 54 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8); + // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties) + $export($export.S + $export.F * !__webpack_require__(6), 'Object', {defineProperties: __webpack_require__(47)}); + +/***/ }, +/* 55 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) + var toIObject = __webpack_require__(32) + , $getOwnPropertyDescriptor = __webpack_require__(51).f; + + __webpack_require__(56)('getOwnPropertyDescriptor', function(){ + return function getOwnPropertyDescriptor(it, key){ + return $getOwnPropertyDescriptor(toIObject(it), key); + }; + }); + +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { + + // most Object methods by ES6 should accept primitives + var $export = __webpack_require__(8) + , core = __webpack_require__(9) + , fails = __webpack_require__(7); + module.exports = function(KEY, exec){ + var fn = (core.Object || {})[KEY] || Object[KEY] + , exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); + }; + +/***/ }, +/* 57 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.9 Object.getPrototypeOf(O) + var toObject = __webpack_require__(58) + , $getPrototypeOf = __webpack_require__(59); + + __webpack_require__(56)('getPrototypeOf', function(){ + return function getPrototypeOf(it){ + return $getPrototypeOf(toObject(it)); + }; + }); + +/***/ }, +/* 58 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.1.13 ToObject(argument) + var defined = __webpack_require__(35); + module.exports = function(it){ + return Object(defined(it)); + }; + +/***/ }, +/* 59 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) + var has = __webpack_require__(5) + , toObject = __webpack_require__(58) + , IE_PROTO = __webpack_require__(40)('IE_PROTO') + , ObjectProto = Object.prototype; + + module.exports = Object.getPrototypeOf || function(O){ + O = toObject(O); + if(has(O, IE_PROTO))return O[IE_PROTO]; + if(typeof O.constructor == 'function' && O instanceof O.constructor){ + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; + }; + +/***/ }, +/* 60 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.14 Object.keys(O) + var toObject = __webpack_require__(58) + , $keys = __webpack_require__(30); + + __webpack_require__(56)('keys', function(){ + return function keys(it){ + return $keys(toObject(it)); + }; + }); + +/***/ }, +/* 61 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.7 Object.getOwnPropertyNames(O) + __webpack_require__(56)('getOwnPropertyNames', function(){ + return __webpack_require__(49).f; + }); + +/***/ }, +/* 62 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.5 Object.freeze(O) + var isObject = __webpack_require__(13) + , meta = __webpack_require__(22).onFreeze; + + __webpack_require__(56)('freeze', function($freeze){ + return function freeze(it){ + return $freeze && isObject(it) ? $freeze(meta(it)) : it; + }; + }); + +/***/ }, +/* 63 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.17 Object.seal(O) + var isObject = __webpack_require__(13) + , meta = __webpack_require__(22).onFreeze; + + __webpack_require__(56)('seal', function($seal){ + return function seal(it){ + return $seal && isObject(it) ? $seal(meta(it)) : it; + }; + }); + +/***/ }, +/* 64 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.15 Object.preventExtensions(O) + var isObject = __webpack_require__(13) + , meta = __webpack_require__(22).onFreeze; + + __webpack_require__(56)('preventExtensions', function($preventExtensions){ + return function preventExtensions(it){ + return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; + }; + }); + +/***/ }, +/* 65 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.12 Object.isFrozen(O) + var isObject = __webpack_require__(13); + + __webpack_require__(56)('isFrozen', function($isFrozen){ + return function isFrozen(it){ + return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; + }; + }); + +/***/ }, +/* 66 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.13 Object.isSealed(O) + var isObject = __webpack_require__(13); + + __webpack_require__(56)('isSealed', function($isSealed){ + return function isSealed(it){ + return isObject(it) ? $isSealed ? $isSealed(it) : false : true; + }; + }); + +/***/ }, +/* 67 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.2.11 Object.isExtensible(O) + var isObject = __webpack_require__(13); + + __webpack_require__(56)('isExtensible', function($isExtensible){ + return function isExtensible(it){ + return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false; + }; + }); + +/***/ }, +/* 68 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.3.1 Object.assign(target, source) + var $export = __webpack_require__(8); + + $export($export.S + $export.F, 'Object', {assign: __webpack_require__(69)}); + +/***/ }, +/* 69 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 19.1.2.1 Object.assign(target, source, ...) + var getKeys = __webpack_require__(30) + , gOPS = __webpack_require__(43) + , pIE = __webpack_require__(44) + , toObject = __webpack_require__(58) + , IObject = __webpack_require__(33) + , $assign = Object.assign; + + // should work with symbols and should have deterministic property order (V8 bug) + module.exports = !$assign || __webpack_require__(7)(function(){ + var A = {} + , B = {} + , S = Symbol() + , K = 'abcdefghijklmnopqrst'; + A[S] = 7; + K.split('').forEach(function(k){ B[k] = k; }); + return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; + }) ? function assign(target, source){ // eslint-disable-line no-unused-vars + var T = toObject(target) + , aLen = arguments.length + , index = 1 + , getSymbols = gOPS.f + , isEnum = pIE.f; + while(aLen > index){ + var S = IObject(arguments[index++]) + , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S) + , length = keys.length + , j = 0 + , key; + while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key]; + } return T; + } : $assign; + +/***/ }, +/* 70 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.3.10 Object.is(value1, value2) + var $export = __webpack_require__(8); + $export($export.S, 'Object', {is: __webpack_require__(71)}); + +/***/ }, +/* 71 */ +/***/ function(module, exports) { + + // 7.2.9 SameValue(x, y) + module.exports = Object.is || function is(x, y){ + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; + }; + +/***/ }, +/* 72 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.1.3.19 Object.setPrototypeOf(O, proto) + var $export = __webpack_require__(8); + $export($export.S, 'Object', {setPrototypeOf: __webpack_require__(73).set}); + +/***/ }, +/* 73 */ +/***/ function(module, exports, __webpack_require__) { + + // Works with __proto__ only. Old v8 can't work with null proto objects. + /* eslint-disable no-proto */ + var isObject = __webpack_require__(13) + , anObject = __webpack_require__(12); + var check = function(O, proto){ + anObject(O); + if(!isObject(proto) && proto !== null)throw TypeError(proto + ": can't set as prototype!"); + }; + module.exports = { + set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line + function(test, buggy, set){ + try { + set = __webpack_require__(20)(Function.call, __webpack_require__(51).f(Object.prototype, '__proto__').set, 2); + set(test, []); + buggy = !(test instanceof Array); + } catch(e){ buggy = true; } + return function setPrototypeOf(O, proto){ + check(O, proto); + if(buggy)O.__proto__ = proto; + else set(O, proto); + return O; + }; + }({}, false) : undefined), + check: check + }; + +/***/ }, +/* 74 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 19.1.3.6 Object.prototype.toString() + var classof = __webpack_require__(75) + , test = {}; + test[__webpack_require__(25)('toStringTag')] = 'z'; + if(test + '' != '[object z]'){ + __webpack_require__(18)(Object.prototype, 'toString', function toString(){ + return '[object ' + classof(this) + ']'; + }, true); + } + +/***/ }, +/* 75 */ +/***/ function(module, exports, __webpack_require__) { + + // getting tag from 19.1.3.6 Object.prototype.toString() + var cof = __webpack_require__(34) + , TAG = __webpack_require__(25)('toStringTag') + // ES3 wrong here + , ARG = cof(function(){ return arguments; }()) == 'Arguments'; + + // fallback for IE11 Script Access Denied error + var tryGet = function(it, key){ + try { + return it[key]; + } catch(e){ /* empty */ } + }; + + module.exports = function(it){ + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; + }; + +/***/ }, +/* 76 */ +/***/ function(module, exports, __webpack_require__) { + + // 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...) + var $export = __webpack_require__(8); + + $export($export.P, 'Function', {bind: __webpack_require__(77)}); + +/***/ }, +/* 77 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var aFunction = __webpack_require__(21) + , isObject = __webpack_require__(13) + , invoke = __webpack_require__(78) + , arraySlice = [].slice + , factories = {}; + + var construct = function(F, len, args){ + if(!(len in factories)){ + for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']'; + factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')'); + } return factories[len](F, args); + }; + + module.exports = Function.bind || function bind(that /*, args... */){ + var fn = aFunction(this) + , partArgs = arraySlice.call(arguments, 1); + var bound = function(/* args... */){ + var args = partArgs.concat(arraySlice.call(arguments)); + return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that); + }; + if(isObject(fn.prototype))bound.prototype = fn.prototype; + return bound; + }; + +/***/ }, +/* 78 */ +/***/ function(module, exports) { + + // fast apply, http://jsperf.lnkit.com/fast-apply/5 + module.exports = function(fn, args, that){ + var un = that === undefined; + switch(args.length){ + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); + }; + +/***/ }, +/* 79 */ +/***/ function(module, exports, __webpack_require__) { + + var dP = __webpack_require__(11).f + , createDesc = __webpack_require__(17) + , has = __webpack_require__(5) + , FProto = Function.prototype + , nameRE = /^\s*function ([^ (]*)/ + , NAME = 'name'; + + var isExtensible = Object.isExtensible || function(){ + return true; + }; + + // 19.2.4.2 name + NAME in FProto || __webpack_require__(6) && dP(FProto, NAME, { + configurable: true, + get: function(){ + try { + var that = this + , name = ('' + that).match(nameRE)[1]; + has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name)); + return name; + } catch(e){ + return ''; + } + } + }); + +/***/ }, +/* 80 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var isObject = __webpack_require__(13) + , getPrototypeOf = __webpack_require__(59) + , HAS_INSTANCE = __webpack_require__(25)('hasInstance') + , FunctionProto = Function.prototype; + // 19.2.3.6 Function.prototype[@@hasInstance](V) + if(!(HAS_INSTANCE in FunctionProto))__webpack_require__(11).f(FunctionProto, HAS_INSTANCE, {value: function(O){ + if(typeof this != 'function' || !isObject(O))return false; + if(!isObject(this.prototype))return O instanceof this; + // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this: + while(O = getPrototypeOf(O))if(this.prototype === O)return true; + return false; + }}); + +/***/ }, +/* 81 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , $parseInt = __webpack_require__(82); + // 18.2.5 parseInt(string, radix) + $export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt}); + +/***/ }, +/* 82 */ +/***/ function(module, exports, __webpack_require__) { + + var $parseInt = __webpack_require__(4).parseInt + , $trim = __webpack_require__(83).trim + , ws = __webpack_require__(84) + , hex = /^[\-+]?0[xX]/; + + module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){ + var string = $trim(String(str), 3); + return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10)); + } : $parseInt; + +/***/ }, +/* 83 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , defined = __webpack_require__(35) + , fails = __webpack_require__(7) + , spaces = __webpack_require__(84) + , space = '[' + spaces + ']' + , non = '\u200b\u0085' + , ltrim = RegExp('^' + space + space + '*') + , rtrim = RegExp(space + space + '*$'); + + var exporter = function(KEY, exec, ALIAS){ + var exp = {}; + var FORCE = fails(function(){ + return !!spaces[KEY]() || non[KEY]() != non; + }); + var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY]; + if(ALIAS)exp[ALIAS] = fn; + $export($export.P + $export.F * FORCE, 'String', exp); + }; + + // 1 -> String#trimLeft + // 2 -> String#trimRight + // 3 -> String#trim + var trim = exporter.trim = function(string, TYPE){ + string = String(defined(string)); + if(TYPE & 1)string = string.replace(ltrim, ''); + if(TYPE & 2)string = string.replace(rtrim, ''); + return string; + }; + + module.exports = exporter; + +/***/ }, +/* 84 */ +/***/ function(module, exports) { + + module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + +/***/ }, +/* 85 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , $parseFloat = __webpack_require__(86); + // 18.2.4 parseFloat(string) + $export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat}); + +/***/ }, +/* 86 */ +/***/ function(module, exports, __webpack_require__) { + + var $parseFloat = __webpack_require__(4).parseFloat + , $trim = __webpack_require__(83).trim; + + module.exports = 1 / $parseFloat(__webpack_require__(84) + '-0') !== -Infinity ? function parseFloat(str){ + var string = $trim(String(str), 3) + , result = $parseFloat(string); + return result === 0 && string.charAt(0) == '-' ? -0 : result; + } : $parseFloat; + +/***/ }, +/* 87 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var global = __webpack_require__(4) + , has = __webpack_require__(5) + , cof = __webpack_require__(34) + , inheritIfRequired = __webpack_require__(88) + , toPrimitive = __webpack_require__(16) + , fails = __webpack_require__(7) + , gOPN = __webpack_require__(50).f + , gOPD = __webpack_require__(51).f + , dP = __webpack_require__(11).f + , $trim = __webpack_require__(83).trim + , NUMBER = 'Number' + , $Number = global[NUMBER] + , Base = $Number + , proto = $Number.prototype + // Opera ~12 has broken Object#toString + , BROKEN_COF = cof(__webpack_require__(46)(proto)) == NUMBER + , TRIM = 'trim' in String.prototype; + + // 7.1.3 ToNumber(argument) + var toNumber = function(argument){ + var it = toPrimitive(argument, false); + if(typeof it == 'string' && it.length > 2){ + it = TRIM ? it.trim() : $trim(it, 3); + var first = it.charCodeAt(0) + , third, radix, maxCode; + if(first === 43 || first === 45){ + third = it.charCodeAt(2); + if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if(first === 48){ + switch(it.charCodeAt(1)){ + case 66 : case 98 : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i + case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i + default : return +it; + } + for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){ + code = digits.charCodeAt(i); + // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + if(code < 48 || code > maxCode)return NaN; + } return parseInt(digits, radix); + } + } return +it; + }; + + if(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){ + $Number = function Number(value){ + var it = arguments.length < 1 ? 0 : value + , that = this; + return that instanceof $Number + // check on 1..constructor(foo) case + && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER) + ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it); + }; + for(var keys = __webpack_require__(6) ? gOPN(Base) : ( + // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + + // ES6 (in case, if modules with ES6 Number statics required before): + 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' + ).split(','), j = 0, key; keys.length > j; j++){ + if(has(Base, key = keys[j]) && !has($Number, key)){ + dP($Number, key, gOPD(Base, key)); + } + } + $Number.prototype = proto; + proto.constructor = $Number; + __webpack_require__(18)(global, NUMBER, $Number); + } + +/***/ }, +/* 88 */ +/***/ function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(13) + , setPrototypeOf = __webpack_require__(73).set; + module.exports = function(that, target, C){ + var P, S = target.constructor; + if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){ + setPrototypeOf(that, P); + } return that; + }; + +/***/ }, +/* 89 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , toInteger = __webpack_require__(38) + , aNumberValue = __webpack_require__(90) + , repeat = __webpack_require__(91) + , $toFixed = 1..toFixed + , floor = Math.floor + , data = [0, 0, 0, 0, 0, 0] + , ERROR = 'Number.toFixed: incorrect invocation!' + , ZERO = '0'; + + var multiply = function(n, c){ + var i = -1 + , c2 = c; + while(++i < 6){ + c2 += n * data[i]; + data[i] = c2 % 1e7; + c2 = floor(c2 / 1e7); + } + }; + var divide = function(n){ + var i = 6 + , c = 0; + while(--i >= 0){ + c += data[i]; + data[i] = floor(c / n); + c = (c % n) * 1e7; + } + }; + var numToString = function(){ + var i = 6 + , s = ''; + while(--i >= 0){ + if(s !== '' || i === 0 || data[i] !== 0){ + var t = String(data[i]); + s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t; + } + } return s; + }; + var pow = function(x, n, acc){ + return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc); + }; + var log = function(x){ + var n = 0 + , x2 = x; + while(x2 >= 4096){ + n += 12; + x2 /= 4096; + } + while(x2 >= 2){ + n += 1; + x2 /= 2; + } return n; + }; + + $export($export.P + $export.F * (!!$toFixed && ( + 0.00008.toFixed(3) !== '0.000' || + 0.9.toFixed(0) !== '1' || + 1.255.toFixed(2) !== '1.25' || + 1000000000000000128..toFixed(0) !== '1000000000000000128' + ) || !__webpack_require__(7)(function(){ + // V8 ~ Android 4.3- + $toFixed.call({}); + })), 'Number', { + toFixed: function toFixed(fractionDigits){ + var x = aNumberValue(this, ERROR) + , f = toInteger(fractionDigits) + , s = '' + , m = ZERO + , e, z, j, k; + if(f < 0 || f > 20)throw RangeError(ERROR); + if(x != x)return 'NaN'; + if(x <= -1e21 || x >= 1e21)return String(x); + if(x < 0){ + s = '-'; + x = -x; + } + if(x > 1e-21){ + e = log(x * pow(2, 69, 1)) - 69; + z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1); + z *= 0x10000000000000; + e = 52 - e; + if(e > 0){ + multiply(0, z); + j = f; + while(j >= 7){ + multiply(1e7, 0); + j -= 7; + } + multiply(pow(10, j, 1), 0); + j = e - 1; + while(j >= 23){ + divide(1 << 23); + j -= 23; + } + divide(1 << j); + multiply(1, 1); + divide(2); + m = numToString(); + } else { + multiply(0, z); + multiply(1 << -e, 0); + m = numToString() + repeat.call(ZERO, f); + } + } + if(f > 0){ + k = m.length; + m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f)); + } else { + m = s + m; + } return m; + } + }); + +/***/ }, +/* 90 */ +/***/ function(module, exports, __webpack_require__) { + + var cof = __webpack_require__(34); + module.exports = function(it, msg){ + if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg); + return +it; + }; + +/***/ }, +/* 91 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var toInteger = __webpack_require__(38) + , defined = __webpack_require__(35); + + module.exports = function repeat(count){ + var str = String(defined(this)) + , res = '' + , n = toInteger(count); + if(n < 0 || n == Infinity)throw RangeError("Count can't be negative"); + for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str; + return res; + }; + +/***/ }, +/* 92 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $fails = __webpack_require__(7) + , aNumberValue = __webpack_require__(90) + , $toPrecision = 1..toPrecision; + + $export($export.P + $export.F * ($fails(function(){ + // IE7- + return $toPrecision.call(1, undefined) !== '1'; + }) || !$fails(function(){ + // V8 ~ Android 4.3- + $toPrecision.call({}); + })), 'Number', { + toPrecision: function toPrecision(precision){ + var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!'); + return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); + } + }); + +/***/ }, +/* 93 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.1.2.1 Number.EPSILON + var $export = __webpack_require__(8); + + $export($export.S, 'Number', {EPSILON: Math.pow(2, -52)}); + +/***/ }, +/* 94 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.1.2.2 Number.isFinite(number) + var $export = __webpack_require__(8) + , _isFinite = __webpack_require__(4).isFinite; + + $export($export.S, 'Number', { + isFinite: function isFinite(it){ + return typeof it == 'number' && _isFinite(it); + } + }); + +/***/ }, +/* 95 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.1.2.3 Number.isInteger(number) + var $export = __webpack_require__(8); + + $export($export.S, 'Number', {isInteger: __webpack_require__(96)}); + +/***/ }, +/* 96 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.1.2.3 Number.isInteger(number) + var isObject = __webpack_require__(13) + , floor = Math.floor; + module.exports = function isInteger(it){ + return !isObject(it) && isFinite(it) && floor(it) === it; + }; + +/***/ }, +/* 97 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.1.2.4 Number.isNaN(number) + var $export = __webpack_require__(8); + + $export($export.S, 'Number', { + isNaN: function isNaN(number){ + return number != number; + } + }); + +/***/ }, +/* 98 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.1.2.5 Number.isSafeInteger(number) + var $export = __webpack_require__(8) + , isInteger = __webpack_require__(96) + , abs = Math.abs; + + $export($export.S, 'Number', { + isSafeInteger: function isSafeInteger(number){ + return isInteger(number) && abs(number) <= 0x1fffffffffffff; + } + }); + +/***/ }, +/* 99 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.1.2.6 Number.MAX_SAFE_INTEGER + var $export = __webpack_require__(8); + + $export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff}); + +/***/ }, +/* 100 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.1.2.10 Number.MIN_SAFE_INTEGER + var $export = __webpack_require__(8); + + $export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff}); + +/***/ }, +/* 101 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , $parseFloat = __webpack_require__(86); + // 20.1.2.12 Number.parseFloat(string) + $export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat}); + +/***/ }, +/* 102 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , $parseInt = __webpack_require__(82); + // 20.1.2.13 Number.parseInt(string, radix) + $export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt}); + +/***/ }, +/* 103 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.3 Math.acosh(x) + var $export = __webpack_require__(8) + , log1p = __webpack_require__(104) + , sqrt = Math.sqrt + , $acosh = Math.acosh; + + $export($export.S + $export.F * !($acosh + // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 + && Math.floor($acosh(Number.MAX_VALUE)) == 710 + // Tor Browser bug: Math.acosh(Infinity) -> NaN + && $acosh(Infinity) == Infinity + ), 'Math', { + acosh: function acosh(x){ + return (x = +x) < 1 ? NaN : x > 94906265.62425156 + ? Math.log(x) + Math.LN2 + : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1)); + } + }); + +/***/ }, +/* 104 */ +/***/ function(module, exports) { + + // 20.2.2.20 Math.log1p(x) + module.exports = Math.log1p || function log1p(x){ + return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x); + }; + +/***/ }, +/* 105 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.5 Math.asinh(x) + var $export = __webpack_require__(8) + , $asinh = Math.asinh; + + function asinh(x){ + return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1)); + } + + // Tor Browser bug: Math.asinh(0) -> -0 + $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh}); + +/***/ }, +/* 106 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.7 Math.atanh(x) + var $export = __webpack_require__(8) + , $atanh = Math.atanh; + + // Tor Browser bug: Math.atanh(-0) -> 0 + $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', { + atanh: function atanh(x){ + return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2; + } + }); + +/***/ }, +/* 107 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.9 Math.cbrt(x) + var $export = __webpack_require__(8) + , sign = __webpack_require__(108); + + $export($export.S, 'Math', { + cbrt: function cbrt(x){ + return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3); + } + }); + +/***/ }, +/* 108 */ +/***/ function(module, exports) { + + // 20.2.2.28 Math.sign(x) + module.exports = Math.sign || function sign(x){ + return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; + }; + +/***/ }, +/* 109 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.11 Math.clz32(x) + var $export = __webpack_require__(8); + + $export($export.S, 'Math', { + clz32: function clz32(x){ + return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32; + } + }); + +/***/ }, +/* 110 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.12 Math.cosh(x) + var $export = __webpack_require__(8) + , exp = Math.exp; + + $export($export.S, 'Math', { + cosh: function cosh(x){ + return (exp(x = +x) + exp(-x)) / 2; + } + }); + +/***/ }, +/* 111 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.14 Math.expm1(x) + var $export = __webpack_require__(8) + , $expm1 = __webpack_require__(112); + + $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1}); + +/***/ }, +/* 112 */ +/***/ function(module, exports) { + + // 20.2.2.14 Math.expm1(x) + var $expm1 = Math.expm1; + module.exports = (!$expm1 + // Old FF bug + || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 + // Tor Browser bug + || $expm1(-2e-17) != -2e-17 + ) ? function expm1(x){ + return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1; + } : $expm1; + +/***/ }, +/* 113 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.16 Math.fround(x) + var $export = __webpack_require__(8) + , sign = __webpack_require__(108) + , pow = Math.pow + , EPSILON = pow(2, -52) + , EPSILON32 = pow(2, -23) + , MAX32 = pow(2, 127) * (2 - EPSILON32) + , MIN32 = pow(2, -126); + + var roundTiesToEven = function(n){ + return n + 1 / EPSILON - 1 / EPSILON; + }; + + + $export($export.S, 'Math', { + fround: function fround(x){ + var $abs = Math.abs(x) + , $sign = sign(x) + , a, result; + if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32; + a = (1 + EPSILON32 / EPSILON) * $abs; + result = a - (a - $abs); + if(result > MAX32 || result != result)return $sign * Infinity; + return $sign * result; + } + }); + +/***/ }, +/* 114 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.17 Math.hypot([value1[, value2[, … ]]]) + var $export = __webpack_require__(8) + , abs = Math.abs; + + $export($export.S, 'Math', { + hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars + var sum = 0 + , i = 0 + , aLen = arguments.length + , larg = 0 + , arg, div; + while(i < aLen){ + arg = abs(arguments[i++]); + if(larg < arg){ + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if(arg > 0){ + div = arg / larg; + sum += div * div; + } else sum += arg; + } + return larg === Infinity ? Infinity : larg * Math.sqrt(sum); + } + }); + +/***/ }, +/* 115 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.18 Math.imul(x, y) + var $export = __webpack_require__(8) + , $imul = Math.imul; + + // some WebKit versions fails with big numbers, some has wrong arity + $export($export.S + $export.F * __webpack_require__(7)(function(){ + return $imul(0xffffffff, 5) != -5 || $imul.length != 2; + }), 'Math', { + imul: function imul(x, y){ + var UINT16 = 0xffff + , xn = +x + , yn = +y + , xl = UINT16 & xn + , yl = UINT16 & yn; + return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0); + } + }); + +/***/ }, +/* 116 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.21 Math.log10(x) + var $export = __webpack_require__(8); + + $export($export.S, 'Math', { + log10: function log10(x){ + return Math.log(x) / Math.LN10; + } + }); + +/***/ }, +/* 117 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.20 Math.log1p(x) + var $export = __webpack_require__(8); + + $export($export.S, 'Math', {log1p: __webpack_require__(104)}); + +/***/ }, +/* 118 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.22 Math.log2(x) + var $export = __webpack_require__(8); + + $export($export.S, 'Math', { + log2: function log2(x){ + return Math.log(x) / Math.LN2; + } + }); + +/***/ }, +/* 119 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.28 Math.sign(x) + var $export = __webpack_require__(8); + + $export($export.S, 'Math', {sign: __webpack_require__(108)}); + +/***/ }, +/* 120 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.30 Math.sinh(x) + var $export = __webpack_require__(8) + , expm1 = __webpack_require__(112) + , exp = Math.exp; + + // V8 near Chromium 38 has a problem with very small numbers + $export($export.S + $export.F * __webpack_require__(7)(function(){ + return !Math.sinh(-2e-17) != -2e-17; + }), 'Math', { + sinh: function sinh(x){ + return Math.abs(x = +x) < 1 + ? (expm1(x) - expm1(-x)) / 2 + : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2); + } + }); + +/***/ }, +/* 121 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.33 Math.tanh(x) + var $export = __webpack_require__(8) + , expm1 = __webpack_require__(112) + , exp = Math.exp; + + $export($export.S, 'Math', { + tanh: function tanh(x){ + var a = expm1(x = +x) + , b = expm1(-x); + return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x)); + } + }); + +/***/ }, +/* 122 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.2.2.34 Math.trunc(x) + var $export = __webpack_require__(8); + + $export($export.S, 'Math', { + trunc: function trunc(it){ + return (it > 0 ? Math.floor : Math.ceil)(it); + } + }); + +/***/ }, +/* 123 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , toIndex = __webpack_require__(39) + , fromCharCode = String.fromCharCode + , $fromCodePoint = String.fromCodePoint; + + // length should be 1, old FF problem + $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { + // 21.1.2.2 String.fromCodePoint(...codePoints) + fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars + var res = [] + , aLen = arguments.length + , i = 0 + , code; + while(aLen > i){ + code = +arguments[i++]; + if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point'); + res.push(code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) + ); + } return res.join(''); + } + }); + +/***/ }, +/* 124 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , toIObject = __webpack_require__(32) + , toLength = __webpack_require__(37); + + $export($export.S, 'String', { + // 21.1.2.4 String.raw(callSite, ...substitutions) + raw: function raw(callSite){ + var tpl = toIObject(callSite.raw) + , len = toLength(tpl.length) + , aLen = arguments.length + , res = [] + , i = 0; + while(len > i){ + res.push(String(tpl[i++])); + if(i < aLen)res.push(String(arguments[i])); + } return res.join(''); + } + }); + +/***/ }, +/* 125 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 21.1.3.25 String.prototype.trim() + __webpack_require__(83)('trim', function($trim){ + return function trim(){ + return $trim(this, 3); + }; + }); + +/***/ }, +/* 126 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $at = __webpack_require__(127)(true); + + // 21.1.3.27 String.prototype[@@iterator]() + __webpack_require__(128)(String, 'String', function(iterated){ + this._t = String(iterated); // target + this._i = 0; // next index + // 21.1.5.2.1 %StringIteratorPrototype%.next() + }, function(){ + var O = this._t + , index = this._i + , point; + if(index >= O.length)return {value: undefined, done: true}; + point = $at(O, index); + this._i += point.length; + return {value: point, done: false}; + }); + +/***/ }, +/* 127 */ +/***/ function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(38) + , defined = __webpack_require__(35); + // true -> String#at + // false -> String#codePointAt + module.exports = function(TO_STRING){ + return function(that, pos){ + var s = String(defined(that)) + , i = toInteger(pos) + , l = s.length + , a, b; + if(i < 0 || i >= l)return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; + }; + +/***/ }, +/* 128 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var LIBRARY = __webpack_require__(28) + , $export = __webpack_require__(8) + , redefine = __webpack_require__(18) + , hide = __webpack_require__(10) + , has = __webpack_require__(5) + , Iterators = __webpack_require__(129) + , $iterCreate = __webpack_require__(130) + , setToStringTag = __webpack_require__(24) + , getPrototypeOf = __webpack_require__(59) + , ITERATOR = __webpack_require__(25)('iterator') + , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` + , FF_ITERATOR = '@@iterator' + , KEYS = 'keys' + , VALUES = 'values'; + + var returnThis = function(){ return this; }; + + module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ + $iterCreate(Constructor, NAME, next); + var getMethod = function(kind){ + if(!BUGGY && kind in proto)return proto[kind]; + switch(kind){ + case KEYS: return function keys(){ return new Constructor(this, kind); }; + case VALUES: return function values(){ return new Constructor(this, kind); }; + } return function entries(){ return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator' + , DEF_VALUES = DEFAULT == VALUES + , VALUES_BUG = false + , proto = Base.prototype + , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] + , $default = $native || getMethod(DEFAULT) + , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined + , $anyNative = NAME == 'Array' ? proto.entries || $native : $native + , methods, key, IteratorPrototype; + // Fix native + if($anyNative){ + IteratorPrototype = getPrototypeOf($anyNative.call(new Base)); + if(IteratorPrototype !== Object.prototype){ + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if(DEF_VALUES && $native && $native.name !== VALUES){ + VALUES_BUG = true; + $default = function values(){ return $native.call(this); }; + } + // Define iterator + if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if(DEFAULT){ + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if(FORCED)for(key in methods){ + if(!(key in proto))redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; + }; + +/***/ }, +/* 129 */ +/***/ function(module, exports) { + + module.exports = {}; + +/***/ }, +/* 130 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var create = __webpack_require__(46) + , descriptor = __webpack_require__(17) + , setToStringTag = __webpack_require__(24) + , IteratorPrototype = {}; + + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() + __webpack_require__(10)(IteratorPrototype, __webpack_require__(25)('iterator'), function(){ return this; }); + + module.exports = function(Constructor, NAME, next){ + Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)}); + setToStringTag(Constructor, NAME + ' Iterator'); + }; + +/***/ }, +/* 131 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $at = __webpack_require__(127)(false); + $export($export.P, 'String', { + // 21.1.3.3 String.prototype.codePointAt(pos) + codePointAt: function codePointAt(pos){ + return $at(this, pos); + } + }); + +/***/ }, +/* 132 */ +/***/ function(module, exports, __webpack_require__) { + + // 21.1.3.6 String.prototype.endsWith(searchString [, endPosition]) + 'use strict'; + var $export = __webpack_require__(8) + , toLength = __webpack_require__(37) + , context = __webpack_require__(133) + , ENDS_WITH = 'endsWith' + , $endsWith = ''[ENDS_WITH]; + + $export($export.P + $export.F * __webpack_require__(135)(ENDS_WITH), 'String', { + endsWith: function endsWith(searchString /*, endPosition = @length */){ + var that = context(this, searchString, ENDS_WITH) + , endPosition = arguments.length > 1 ? arguments[1] : undefined + , len = toLength(that.length) + , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len) + , search = String(searchString); + return $endsWith + ? $endsWith.call(that, search, end) + : that.slice(end - search.length, end) === search; + } + }); + +/***/ }, +/* 133 */ +/***/ function(module, exports, __webpack_require__) { + + // helper for String#{startsWith, endsWith, includes} + var isRegExp = __webpack_require__(134) + , defined = __webpack_require__(35); + + module.exports = function(that, searchString, NAME){ + if(isRegExp(searchString))throw TypeError('String#' + NAME + " doesn't accept regex!"); + return String(defined(that)); + }; + +/***/ }, +/* 134 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.2.8 IsRegExp(argument) + var isObject = __webpack_require__(13) + , cof = __webpack_require__(34) + , MATCH = __webpack_require__(25)('match'); + module.exports = function(it){ + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); + }; + +/***/ }, +/* 135 */ +/***/ function(module, exports, __webpack_require__) { + + var MATCH = __webpack_require__(25)('match'); + module.exports = function(KEY){ + var re = /./; + try { + '/./'[KEY](re); + } catch(e){ + try { + re[MATCH] = false; + return !'/./'[KEY](re); + } catch(f){ /* empty */ } + } return true; + }; + +/***/ }, +/* 136 */ +/***/ function(module, exports, __webpack_require__) { + + // 21.1.3.7 String.prototype.includes(searchString, position = 0) + 'use strict'; + var $export = __webpack_require__(8) + , context = __webpack_require__(133) + , INCLUDES = 'includes'; + + $export($export.P + $export.F * __webpack_require__(135)(INCLUDES), 'String', { + includes: function includes(searchString /*, position = 0 */){ + return !!~context(this, searchString, INCLUDES) + .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); + } + }); + +/***/ }, +/* 137 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8); + + $export($export.P, 'String', { + // 21.1.3.13 String.prototype.repeat(count) + repeat: __webpack_require__(91) + }); + +/***/ }, +/* 138 */ +/***/ function(module, exports, __webpack_require__) { + + // 21.1.3.18 String.prototype.startsWith(searchString [, position ]) + 'use strict'; + var $export = __webpack_require__(8) + , toLength = __webpack_require__(37) + , context = __webpack_require__(133) + , STARTS_WITH = 'startsWith' + , $startsWith = ''[STARTS_WITH]; + + $export($export.P + $export.F * __webpack_require__(135)(STARTS_WITH), 'String', { + startsWith: function startsWith(searchString /*, position = 0 */){ + var that = context(this, searchString, STARTS_WITH) + , index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)) + , search = String(searchString); + return $startsWith + ? $startsWith.call(that, search, index) + : that.slice(index, index + search.length) === search; + } + }); + +/***/ }, +/* 139 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.2 String.prototype.anchor(name) + __webpack_require__(140)('anchor', function(createHTML){ + return function anchor(name){ + return createHTML(this, 'a', 'name', name); + } + }); + +/***/ }, +/* 140 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , fails = __webpack_require__(7) + , defined = __webpack_require__(35) + , quot = /"/g; + // B.2.3.2.1 CreateHTML(string, tag, attribute, value) + var createHTML = function(string, tag, attribute, value) { + var S = String(defined(string)) + , p1 = '<' + tag; + if(attribute !== '')p1 += ' ' + attribute + '="' + String(value).replace(quot, '"') + '"'; + return p1 + '>' + S + ''; + }; + module.exports = function(NAME, exec){ + var O = {}; + O[NAME] = exec(createHTML); + $export($export.P + $export.F * fails(function(){ + var test = ''[NAME]('"'); + return test !== test.toLowerCase() || test.split('"').length > 3; + }), 'String', O); + }; + +/***/ }, +/* 141 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.3 String.prototype.big() + __webpack_require__(140)('big', function(createHTML){ + return function big(){ + return createHTML(this, 'big', '', ''); + } + }); + +/***/ }, +/* 142 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.4 String.prototype.blink() + __webpack_require__(140)('blink', function(createHTML){ + return function blink(){ + return createHTML(this, 'blink', '', ''); + } + }); + +/***/ }, +/* 143 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.5 String.prototype.bold() + __webpack_require__(140)('bold', function(createHTML){ + return function bold(){ + return createHTML(this, 'b', '', ''); + } + }); + +/***/ }, +/* 144 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.6 String.prototype.fixed() + __webpack_require__(140)('fixed', function(createHTML){ + return function fixed(){ + return createHTML(this, 'tt', '', ''); + } + }); + +/***/ }, +/* 145 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.7 String.prototype.fontcolor(color) + __webpack_require__(140)('fontcolor', function(createHTML){ + return function fontcolor(color){ + return createHTML(this, 'font', 'color', color); + } + }); + +/***/ }, +/* 146 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.8 String.prototype.fontsize(size) + __webpack_require__(140)('fontsize', function(createHTML){ + return function fontsize(size){ + return createHTML(this, 'font', 'size', size); + } + }); + +/***/ }, +/* 147 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.9 String.prototype.italics() + __webpack_require__(140)('italics', function(createHTML){ + return function italics(){ + return createHTML(this, 'i', '', ''); + } + }); + +/***/ }, +/* 148 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.10 String.prototype.link(url) + __webpack_require__(140)('link', function(createHTML){ + return function link(url){ + return createHTML(this, 'a', 'href', url); + } + }); + +/***/ }, +/* 149 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.11 String.prototype.small() + __webpack_require__(140)('small', function(createHTML){ + return function small(){ + return createHTML(this, 'small', '', ''); + } + }); + +/***/ }, +/* 150 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.12 String.prototype.strike() + __webpack_require__(140)('strike', function(createHTML){ + return function strike(){ + return createHTML(this, 'strike', '', ''); + } + }); + +/***/ }, +/* 151 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.13 String.prototype.sub() + __webpack_require__(140)('sub', function(createHTML){ + return function sub(){ + return createHTML(this, 'sub', '', ''); + } + }); + +/***/ }, +/* 152 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // B.2.3.14 String.prototype.sup() + __webpack_require__(140)('sup', function(createHTML){ + return function sup(){ + return createHTML(this, 'sup', '', ''); + } + }); + +/***/ }, +/* 153 */ +/***/ function(module, exports, __webpack_require__) { + + // 20.3.3.1 / 15.9.4.4 Date.now() + var $export = __webpack_require__(8); + + $export($export.S, 'Date', {now: function(){ return new Date().getTime(); }}); + +/***/ }, +/* 154 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , toObject = __webpack_require__(58) + , toPrimitive = __webpack_require__(16); + + $export($export.P + $export.F * __webpack_require__(7)(function(){ + return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1; + }), 'Date', { + toJSON: function toJSON(key){ + var O = toObject(this) + , pv = toPrimitive(O); + return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString(); + } + }); + +/***/ }, +/* 155 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() + var $export = __webpack_require__(8) + , fails = __webpack_require__(7) + , getTime = Date.prototype.getTime; + + var lz = function(num){ + return num > 9 ? num : '0' + num; + }; + + // PhantomJS / old WebKit has a broken implementations + $export($export.P + $export.F * (fails(function(){ + return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z'; + }) || !fails(function(){ + new Date(NaN).toISOString(); + })), 'Date', { + toISOString: function toISOString(){ + if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value'); + var d = this + , y = d.getUTCFullYear() + , m = d.getUTCMilliseconds() + , s = y < 0 ? '-' : y > 9999 ? '+' : ''; + return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) + + '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) + + 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) + + ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z'; + } + }); + +/***/ }, +/* 156 */ +/***/ function(module, exports, __webpack_require__) { + + var DateProto = Date.prototype + , INVALID_DATE = 'Invalid Date' + , TO_STRING = 'toString' + , $toString = DateProto[TO_STRING] + , getTime = DateProto.getTime; + if(new Date(NaN) + '' != INVALID_DATE){ + __webpack_require__(18)(DateProto, TO_STRING, function toString(){ + var value = getTime.call(this); + return value === value ? $toString.call(this) : INVALID_DATE; + }); + } + +/***/ }, +/* 157 */ +/***/ function(module, exports, __webpack_require__) { + + var TO_PRIMITIVE = __webpack_require__(25)('toPrimitive') + , proto = Date.prototype; + + if(!(TO_PRIMITIVE in proto))__webpack_require__(10)(proto, TO_PRIMITIVE, __webpack_require__(158)); + +/***/ }, +/* 158 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var anObject = __webpack_require__(12) + , toPrimitive = __webpack_require__(16) + , NUMBER = 'number'; + + module.exports = function(hint){ + if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint'); + return toPrimitive(anObject(this), hint != NUMBER); + }; + +/***/ }, +/* 159 */ +/***/ function(module, exports, __webpack_require__) { + + // 22.1.2.2 / 15.4.3.2 Array.isArray(arg) + var $export = __webpack_require__(8); + + $export($export.S, 'Array', {isArray: __webpack_require__(45)}); + +/***/ }, +/* 160 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var ctx = __webpack_require__(20) + , $export = __webpack_require__(8) + , toObject = __webpack_require__(58) + , call = __webpack_require__(161) + , isArrayIter = __webpack_require__(162) + , toLength = __webpack_require__(37) + , createProperty = __webpack_require__(163) + , getIterFn = __webpack_require__(164); + + $export($export.S + $export.F * !__webpack_require__(165)(function(iter){ Array.from(iter); }), 'Array', { + // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) + from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){ + var O = toObject(arrayLike) + , C = typeof this == 'function' ? this : Array + , aLen = arguments.length + , mapfn = aLen > 1 ? arguments[1] : undefined + , mapping = mapfn !== undefined + , index = 0 + , iterFn = getIterFn(O) + , length, result, step, iterator; + if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); + // if object isn't iterable or it's array with default iterator - use simple case + if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){ + for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){ + createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); + } + } else { + length = toLength(O.length); + for(result = new C(length); length > index; index++){ + createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); + } + } + result.length = index; + return result; + } + }); + + +/***/ }, +/* 161 */ +/***/ function(module, exports, __webpack_require__) { + + // call something on iterator step with safe closing on error + var anObject = __webpack_require__(12); + module.exports = function(iterator, fn, value, entries){ + try { + return entries ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch(e){ + var ret = iterator['return']; + if(ret !== undefined)anObject(ret.call(iterator)); + throw e; + } + }; + +/***/ }, +/* 162 */ +/***/ function(module, exports, __webpack_require__) { + + // check on default Array iterator + var Iterators = __webpack_require__(129) + , ITERATOR = __webpack_require__(25)('iterator') + , ArrayProto = Array.prototype; + + module.exports = function(it){ + return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); + }; + +/***/ }, +/* 163 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $defineProperty = __webpack_require__(11) + , createDesc = __webpack_require__(17); + + module.exports = function(object, index, value){ + if(index in object)$defineProperty.f(object, index, createDesc(0, value)); + else object[index] = value; + }; + +/***/ }, +/* 164 */ +/***/ function(module, exports, __webpack_require__) { + + var classof = __webpack_require__(75) + , ITERATOR = __webpack_require__(25)('iterator') + , Iterators = __webpack_require__(129); + module.exports = __webpack_require__(9).getIteratorMethod = function(it){ + if(it != undefined)return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; + }; + +/***/ }, +/* 165 */ +/***/ function(module, exports, __webpack_require__) { + + var ITERATOR = __webpack_require__(25)('iterator') + , SAFE_CLOSING = false; + + try { + var riter = [7][ITERATOR](); + riter['return'] = function(){ SAFE_CLOSING = true; }; + Array.from(riter, function(){ throw 2; }); + } catch(e){ /* empty */ } + + module.exports = function(exec, skipClosing){ + if(!skipClosing && !SAFE_CLOSING)return false; + var safe = false; + try { + var arr = [7] + , iter = arr[ITERATOR](); + iter.next = function(){ return {done: safe = true}; }; + arr[ITERATOR] = function(){ return iter; }; + exec(arr); + } catch(e){ /* empty */ } + return safe; + }; + +/***/ }, +/* 166 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , createProperty = __webpack_require__(163); + + // WebKit Array.of isn't generic + $export($export.S + $export.F * __webpack_require__(7)(function(){ + function F(){} + return !(Array.of.call(F) instanceof F); + }), 'Array', { + // 22.1.2.3 Array.of( ...items) + of: function of(/* ...args */){ + var index = 0 + , aLen = arguments.length + , result = new (typeof this == 'function' ? this : Array)(aLen); + while(aLen > index)createProperty(result, index, arguments[index++]); + result.length = aLen; + return result; + } + }); + +/***/ }, +/* 167 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 22.1.3.13 Array.prototype.join(separator) + var $export = __webpack_require__(8) + , toIObject = __webpack_require__(32) + , arrayJoin = [].join; + + // fallback for not array-like strings + $export($export.P + $export.F * (__webpack_require__(33) != Object || !__webpack_require__(168)(arrayJoin)), 'Array', { + join: function join(separator){ + return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator); + } + }); + +/***/ }, +/* 168 */ +/***/ function(module, exports, __webpack_require__) { + + var fails = __webpack_require__(7); + + module.exports = function(method, arg){ + return !!method && fails(function(){ + arg ? method.call(null, function(){}, 1) : method.call(null); + }); + }; + +/***/ }, +/* 169 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , html = __webpack_require__(48) + , cof = __webpack_require__(34) + , toIndex = __webpack_require__(39) + , toLength = __webpack_require__(37) + , arraySlice = [].slice; + + // fallback for not array-like ES3 strings and DOM objects + $export($export.P + $export.F * __webpack_require__(7)(function(){ + if(html)arraySlice.call(html); + }), 'Array', { + slice: function slice(begin, end){ + var len = toLength(this.length) + , klass = cof(this); + end = end === undefined ? len : end; + if(klass == 'Array')return arraySlice.call(this, begin, end); + var start = toIndex(begin, len) + , upTo = toIndex(end, len) + , size = toLength(upTo - start) + , cloned = Array(size) + , i = 0; + for(; i < size; i++)cloned[i] = klass == 'String' + ? this.charAt(start + i) + : this[start + i]; + return cloned; + } + }); + +/***/ }, +/* 170 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , aFunction = __webpack_require__(21) + , toObject = __webpack_require__(58) + , fails = __webpack_require__(7) + , $sort = [].sort + , test = [1, 2, 3]; + + $export($export.P + $export.F * (fails(function(){ + // IE8- + test.sort(undefined); + }) || !fails(function(){ + // V8 bug + test.sort(null); + // Old WebKit + }) || !__webpack_require__(168)($sort)), 'Array', { + // 22.1.3.25 Array.prototype.sort(comparefn) + sort: function sort(comparefn){ + return comparefn === undefined + ? $sort.call(toObject(this)) + : $sort.call(toObject(this), aFunction(comparefn)); + } + }); + +/***/ }, +/* 171 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $forEach = __webpack_require__(172)(0) + , STRICT = __webpack_require__(168)([].forEach, true); + + $export($export.P + $export.F * !STRICT, 'Array', { + // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) + forEach: function forEach(callbackfn /* , thisArg */){ + return $forEach(this, callbackfn, arguments[1]); + } + }); + +/***/ }, +/* 172 */ +/***/ function(module, exports, __webpack_require__) { + + // 0 -> Array#forEach + // 1 -> Array#map + // 2 -> Array#filter + // 3 -> Array#some + // 4 -> Array#every + // 5 -> Array#find + // 6 -> Array#findIndex + var ctx = __webpack_require__(20) + , IObject = __webpack_require__(33) + , toObject = __webpack_require__(58) + , toLength = __webpack_require__(37) + , asc = __webpack_require__(173); + module.exports = function(TYPE, $create){ + var IS_MAP = TYPE == 1 + , IS_FILTER = TYPE == 2 + , IS_SOME = TYPE == 3 + , IS_EVERY = TYPE == 4 + , IS_FIND_INDEX = TYPE == 6 + , NO_HOLES = TYPE == 5 || IS_FIND_INDEX + , create = $create || asc; + return function($this, callbackfn, that){ + var O = toObject($this) + , self = IObject(O) + , f = ctx(callbackfn, that, 3) + , length = toLength(self.length) + , index = 0 + , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined + , val, res; + for(;length > index; index++)if(NO_HOLES || index in self){ + val = self[index]; + res = f(val, index, O); + if(TYPE){ + if(IS_MAP)result[index] = res; // map + else if(res)switch(TYPE){ + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if(IS_EVERY)return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; + }; + +/***/ }, +/* 173 */ +/***/ function(module, exports, __webpack_require__) { + + // 9.4.2.3 ArraySpeciesCreate(originalArray, length) + var speciesConstructor = __webpack_require__(174); + + module.exports = function(original, length){ + return new (speciesConstructor(original))(length); + }; + +/***/ }, +/* 174 */ +/***/ function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(13) + , isArray = __webpack_require__(45) + , SPECIES = __webpack_require__(25)('species'); + + module.exports = function(original){ + var C; + if(isArray(original)){ + C = original.constructor; + // cross-realm fallback + if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined; + if(isObject(C)){ + C = C[SPECIES]; + if(C === null)C = undefined; + } + } return C === undefined ? Array : C; + }; + +/***/ }, +/* 175 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $map = __webpack_require__(172)(1); + + $export($export.P + $export.F * !__webpack_require__(168)([].map, true), 'Array', { + // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) + map: function map(callbackfn /* , thisArg */){ + return $map(this, callbackfn, arguments[1]); + } + }); + +/***/ }, +/* 176 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $filter = __webpack_require__(172)(2); + + $export($export.P + $export.F * !__webpack_require__(168)([].filter, true), 'Array', { + // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) + filter: function filter(callbackfn /* , thisArg */){ + return $filter(this, callbackfn, arguments[1]); + } + }); + +/***/ }, +/* 177 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $some = __webpack_require__(172)(3); + + $export($export.P + $export.F * !__webpack_require__(168)([].some, true), 'Array', { + // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) + some: function some(callbackfn /* , thisArg */){ + return $some(this, callbackfn, arguments[1]); + } + }); + +/***/ }, +/* 178 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $every = __webpack_require__(172)(4); + + $export($export.P + $export.F * !__webpack_require__(168)([].every, true), 'Array', { + // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) + every: function every(callbackfn /* , thisArg */){ + return $every(this, callbackfn, arguments[1]); + } + }); + +/***/ }, +/* 179 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $reduce = __webpack_require__(180); + + $export($export.P + $export.F * !__webpack_require__(168)([].reduce, true), 'Array', { + // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) + reduce: function reduce(callbackfn /* , initialValue */){ + return $reduce(this, callbackfn, arguments.length, arguments[1], false); + } + }); + +/***/ }, +/* 180 */ +/***/ function(module, exports, __webpack_require__) { + + var aFunction = __webpack_require__(21) + , toObject = __webpack_require__(58) + , IObject = __webpack_require__(33) + , toLength = __webpack_require__(37); + + module.exports = function(that, callbackfn, aLen, memo, isRight){ + aFunction(callbackfn); + var O = toObject(that) + , self = IObject(O) + , length = toLength(O.length) + , index = isRight ? length - 1 : 0 + , i = isRight ? -1 : 1; + if(aLen < 2)for(;;){ + if(index in self){ + memo = self[index]; + index += i; + break; + } + index += i; + if(isRight ? index < 0 : length <= index){ + throw TypeError('Reduce of empty array with no initial value'); + } + } + for(;isRight ? index >= 0 : length > index; index += i)if(index in self){ + memo = callbackfn(memo, self[index], index, O); + } + return memo; + }; + +/***/ }, +/* 181 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $reduce = __webpack_require__(180); + + $export($export.P + $export.F * !__webpack_require__(168)([].reduceRight, true), 'Array', { + // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) + reduceRight: function reduceRight(callbackfn /* , initialValue */){ + return $reduce(this, callbackfn, arguments.length, arguments[1], true); + } + }); + +/***/ }, +/* 182 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $indexOf = __webpack_require__(36)(false) + , $native = [].indexOf + , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; + + $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(168)($native)), 'Array', { + // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) + indexOf: function indexOf(searchElement /*, fromIndex = 0 */){ + return NEGATIVE_ZERO + // convert -0 to +0 + ? $native.apply(this, arguments) || 0 + : $indexOf(this, searchElement, arguments[1]); + } + }); + +/***/ }, +/* 183 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , toIObject = __webpack_require__(32) + , toInteger = __webpack_require__(38) + , toLength = __webpack_require__(37) + , $native = [].lastIndexOf + , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0; + + $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(168)($native)), 'Array', { + // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex]) + lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){ + // convert -0 to +0 + if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0; + var O = toIObject(this) + , length = toLength(O.length) + , index = length - 1; + if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1])); + if(index < 0)index = length + index; + for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0; + return -1; + } + }); + +/***/ }, +/* 184 */ +/***/ function(module, exports, __webpack_require__) { + + // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) + var $export = __webpack_require__(8); + + $export($export.P, 'Array', {copyWithin: __webpack_require__(185)}); + + __webpack_require__(186)('copyWithin'); + +/***/ }, +/* 185 */ +/***/ function(module, exports, __webpack_require__) { + + // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) + 'use strict'; + var toObject = __webpack_require__(58) + , toIndex = __webpack_require__(39) + , toLength = __webpack_require__(37); + + module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){ + var O = toObject(this) + , len = toLength(O.length) + , to = toIndex(target, len) + , from = toIndex(start, len) + , end = arguments.length > 2 ? arguments[2] : undefined + , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to) + , inc = 1; + if(from < to && to < from + count){ + inc = -1; + from += count - 1; + to += count - 1; + } + while(count-- > 0){ + if(from in O)O[to] = O[from]; + else delete O[to]; + to += inc; + from += inc; + } return O; + }; + +/***/ }, +/* 186 */ +/***/ function(module, exports, __webpack_require__) { + + // 22.1.3.31 Array.prototype[@@unscopables] + var UNSCOPABLES = __webpack_require__(25)('unscopables') + , ArrayProto = Array.prototype; + if(ArrayProto[UNSCOPABLES] == undefined)__webpack_require__(10)(ArrayProto, UNSCOPABLES, {}); + module.exports = function(key){ + ArrayProto[UNSCOPABLES][key] = true; + }; + +/***/ }, +/* 187 */ +/***/ function(module, exports, __webpack_require__) { + + // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) + var $export = __webpack_require__(8); + + $export($export.P, 'Array', {fill: __webpack_require__(188)}); + + __webpack_require__(186)('fill'); + +/***/ }, +/* 188 */ +/***/ function(module, exports, __webpack_require__) { + + // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) + 'use strict'; + var toObject = __webpack_require__(58) + , toIndex = __webpack_require__(39) + , toLength = __webpack_require__(37); + module.exports = function fill(value /*, start = 0, end = @length */){ + var O = toObject(this) + , length = toLength(O.length) + , aLen = arguments.length + , index = toIndex(aLen > 1 ? arguments[1] : undefined, length) + , end = aLen > 2 ? arguments[2] : undefined + , endPos = end === undefined ? length : toIndex(end, length); + while(endPos > index)O[index++] = value; + return O; + }; + +/***/ }, +/* 189 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) + var $export = __webpack_require__(8) + , $find = __webpack_require__(172)(5) + , KEY = 'find' + , forced = true; + // Shouldn't skip holes + if(KEY in [])Array(1)[KEY](function(){ forced = false; }); + $export($export.P + $export.F * forced, 'Array', { + find: function find(callbackfn/*, that = undefined */){ + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + __webpack_require__(186)(KEY); + +/***/ }, +/* 190 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) + var $export = __webpack_require__(8) + , $find = __webpack_require__(172)(6) + , KEY = 'findIndex' + , forced = true; + // Shouldn't skip holes + if(KEY in [])Array(1)[KEY](function(){ forced = false; }); + $export($export.P + $export.F * forced, 'Array', { + findIndex: function findIndex(callbackfn/*, that = undefined */){ + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + __webpack_require__(186)(KEY); + +/***/ }, +/* 191 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(192)('Array'); + +/***/ }, +/* 192 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var global = __webpack_require__(4) + , dP = __webpack_require__(11) + , DESCRIPTORS = __webpack_require__(6) + , SPECIES = __webpack_require__(25)('species'); + + module.exports = function(KEY){ + var C = global[KEY]; + if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, { + configurable: true, + get: function(){ return this; } + }); + }; + +/***/ }, +/* 193 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var addToUnscopables = __webpack_require__(186) + , step = __webpack_require__(194) + , Iterators = __webpack_require__(129) + , toIObject = __webpack_require__(32); + + // 22.1.3.4 Array.prototype.entries() + // 22.1.3.13 Array.prototype.keys() + // 22.1.3.29 Array.prototype.values() + // 22.1.3.30 Array.prototype[@@iterator]() + module.exports = __webpack_require__(128)(Array, 'Array', function(iterated, kind){ + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind + // 22.1.5.2.1 %ArrayIteratorPrototype%.next() + }, function(){ + var O = this._t + , kind = this._k + , index = this._i++; + if(!O || index >= O.length){ + this._t = undefined; + return step(1); + } + if(kind == 'keys' )return step(0, index); + if(kind == 'values')return step(0, O[index]); + return step(0, [index, O[index]]); + }, 'values'); + + // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) + Iterators.Arguments = Iterators.Array; + + addToUnscopables('keys'); + addToUnscopables('values'); + addToUnscopables('entries'); + +/***/ }, +/* 194 */ +/***/ function(module, exports) { + + module.exports = function(done, value){ + return {value: value, done: !!done}; + }; + +/***/ }, +/* 195 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(4) + , inheritIfRequired = __webpack_require__(88) + , dP = __webpack_require__(11).f + , gOPN = __webpack_require__(50).f + , isRegExp = __webpack_require__(134) + , $flags = __webpack_require__(196) + , $RegExp = global.RegExp + , Base = $RegExp + , proto = $RegExp.prototype + , re1 = /a/g + , re2 = /a/g + // "new" creates a new object, old webkit buggy here + , CORRECT_NEW = new $RegExp(re1) !== re1; + + if(__webpack_require__(6) && (!CORRECT_NEW || __webpack_require__(7)(function(){ + re2[__webpack_require__(25)('match')] = false; + // RegExp constructor can alter flags and IsRegExp works correct with @@match + return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i'; + }))){ + $RegExp = function RegExp(p, f){ + var tiRE = this instanceof $RegExp + , piRE = isRegExp(p) + , fiU = f === undefined; + return !tiRE && piRE && p.constructor === $RegExp && fiU ? p + : inheritIfRequired(CORRECT_NEW + ? new Base(piRE && !fiU ? p.source : p, f) + : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f) + , tiRE ? this : proto, $RegExp); + }; + var proxy = function(key){ + key in $RegExp || dP($RegExp, key, { + configurable: true, + get: function(){ return Base[key]; }, + set: function(it){ Base[key] = it; } + }); + }; + for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]); + proto.constructor = $RegExp; + $RegExp.prototype = proto; + __webpack_require__(18)(global, 'RegExp', $RegExp); + } + + __webpack_require__(192)('RegExp'); + +/***/ }, +/* 196 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 21.2.5.3 get RegExp.prototype.flags + var anObject = __webpack_require__(12); + module.exports = function(){ + var that = anObject(this) + , result = ''; + if(that.global) result += 'g'; + if(that.ignoreCase) result += 'i'; + if(that.multiline) result += 'm'; + if(that.unicode) result += 'u'; + if(that.sticky) result += 'y'; + return result; + }; + +/***/ }, +/* 197 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + __webpack_require__(198); + var anObject = __webpack_require__(12) + , $flags = __webpack_require__(196) + , DESCRIPTORS = __webpack_require__(6) + , TO_STRING = 'toString' + , $toString = /./[TO_STRING]; + + var define = function(fn){ + __webpack_require__(18)(RegExp.prototype, TO_STRING, fn, true); + }; + + // 21.2.5.14 RegExp.prototype.toString() + if(__webpack_require__(7)(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){ + define(function toString(){ + var R = anObject(this); + return '/'.concat(R.source, '/', + 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined); + }); + // FF44- RegExp#toString has a wrong name + } else if($toString.name != TO_STRING){ + define(function toString(){ + return $toString.call(this); + }); + } + +/***/ }, +/* 198 */ +/***/ function(module, exports, __webpack_require__) { + + // 21.2.5.3 get RegExp.prototype.flags() + if(__webpack_require__(6) && /./g.flags != 'g')__webpack_require__(11).f(RegExp.prototype, 'flags', { + configurable: true, + get: __webpack_require__(196) + }); + +/***/ }, +/* 199 */ +/***/ function(module, exports, __webpack_require__) { + + // @@match logic + __webpack_require__(200)('match', 1, function(defined, MATCH, $match){ + // 21.1.3.11 String.prototype.match(regexp) + return [function match(regexp){ + 'use strict'; + var O = defined(this) + , fn = regexp == undefined ? undefined : regexp[MATCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); + }, $match]; + }); + +/***/ }, +/* 200 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var hide = __webpack_require__(10) + , redefine = __webpack_require__(18) + , fails = __webpack_require__(7) + , defined = __webpack_require__(35) + , wks = __webpack_require__(25); + + module.exports = function(KEY, length, exec){ + var SYMBOL = wks(KEY) + , fns = exec(defined, SYMBOL, ''[KEY]) + , strfn = fns[0] + , rxfn = fns[1]; + if(fails(function(){ + var O = {}; + O[SYMBOL] = function(){ return 7; }; + return ''[KEY](O) != 7; + })){ + redefine(String.prototype, KEY, strfn); + hide(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function(string, arg){ return rxfn.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function(string){ return rxfn.call(string, this); } + ); + } + }; + +/***/ }, +/* 201 */ +/***/ function(module, exports, __webpack_require__) { + + // @@replace logic + __webpack_require__(200)('replace', 2, function(defined, REPLACE, $replace){ + // 21.1.3.14 String.prototype.replace(searchValue, replaceValue) + return [function replace(searchValue, replaceValue){ + 'use strict'; + var O = defined(this) + , fn = searchValue == undefined ? undefined : searchValue[REPLACE]; + return fn !== undefined + ? fn.call(searchValue, O, replaceValue) + : $replace.call(String(O), searchValue, replaceValue); + }, $replace]; + }); + +/***/ }, +/* 202 */ +/***/ function(module, exports, __webpack_require__) { + + // @@search logic + __webpack_require__(200)('search', 1, function(defined, SEARCH, $search){ + // 21.1.3.15 String.prototype.search(regexp) + return [function search(regexp){ + 'use strict'; + var O = defined(this) + , fn = regexp == undefined ? undefined : regexp[SEARCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); + }, $search]; + }); + +/***/ }, +/* 203 */ +/***/ function(module, exports, __webpack_require__) { + + // @@split logic + __webpack_require__(200)('split', 2, function(defined, SPLIT, $split){ + 'use strict'; + var isRegExp = __webpack_require__(134) + , _split = $split + , $push = [].push + , $SPLIT = 'split' + , LENGTH = 'length' + , LAST_INDEX = 'lastIndex'; + if( + 'abbc'[$SPLIT](/(b)*/)[1] == 'c' || + 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || + 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || + '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || + '.'[$SPLIT](/()()/)[LENGTH] > 1 || + ''[$SPLIT](/.?/)[LENGTH] + ){ + var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group + // based on es5-shim implementation, need to rework it + $split = function(separator, limit){ + var string = String(this); + if(separator === undefined && limit === 0)return []; + // If `separator` is not a regex, use native split + if(!isRegExp(separator))return _split.call(string, separator, limit); + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.unicode ? 'u' : '') + + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; + var splitLimit = limit === undefined ? 4294967295 : limit >>> 0; + // Make `global` and avoid `lastIndex` issues by working with a copy + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var separator2, match, lastIndex, lastLength, i; + // Doesn't need flags gy, but they don't hurt + if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags); + while(match = separatorCopy.exec(string)){ + // `separatorCopy.lastIndex` is not reliable cross-browser + lastIndex = match.index + match[0][LENGTH]; + if(lastIndex > lastLastIndex){ + output.push(string.slice(lastLastIndex, match.index)); + // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG + if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){ + for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined; + }); + if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1)); + lastLength = match[0][LENGTH]; + lastLastIndex = lastIndex; + if(output[LENGTH] >= splitLimit)break; + } + if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop + } + if(lastLastIndex === string[LENGTH]){ + if(lastLength || !separatorCopy.test(''))output.push(''); + } else output.push(string.slice(lastLastIndex)); + return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output; + }; + // Chakra, V8 + } else if('0'[$SPLIT](undefined, 0)[LENGTH]){ + $split = function(separator, limit){ + return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit); + }; + } + // 21.1.3.17 String.prototype.split(separator, limit) + return [function split(separator, limit){ + var O = defined(this) + , fn = separator == undefined ? undefined : separator[SPLIT]; + return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit); + }, $split]; + }); + +/***/ }, +/* 204 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var LIBRARY = __webpack_require__(28) + , global = __webpack_require__(4) + , ctx = __webpack_require__(20) + , classof = __webpack_require__(75) + , $export = __webpack_require__(8) + , isObject = __webpack_require__(13) + , aFunction = __webpack_require__(21) + , anInstance = __webpack_require__(205) + , forOf = __webpack_require__(206) + , speciesConstructor = __webpack_require__(207) + , task = __webpack_require__(208).set + , microtask = __webpack_require__(209)() + , PROMISE = 'Promise' + , TypeError = global.TypeError + , process = global.process + , $Promise = global[PROMISE] + , process = global.process + , isNode = classof(process) == 'process' + , empty = function(){ /* empty */ } + , Internal, GenericPromiseCapability, Wrapper; + + var USE_NATIVE = !!function(){ + try { + // correct subclassing with @@species support + var promise = $Promise.resolve(1) + , FakePromise = (promise.constructor = {})[__webpack_require__(25)('species')] = function(exec){ exec(empty, empty); }; + // unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise; + } catch(e){ /* empty */ } + }(); + + // helpers + var sameConstructor = function(a, b){ + // with library wrapper special case + return a === b || a === $Promise && b === Wrapper; + }; + var isThenable = function(it){ + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; + }; + var newPromiseCapability = function(C){ + return sameConstructor($Promise, C) + ? new PromiseCapability(C) + : new GenericPromiseCapability(C); + }; + var PromiseCapability = GenericPromiseCapability = function(C){ + var resolve, reject; + this.promise = new C(function($$resolve, $$reject){ + if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); + }; + var perform = function(exec){ + try { + exec(); + } catch(e){ + return {error: e}; + } + }; + var notify = function(promise, isReject){ + if(promise._n)return; + promise._n = true; + var chain = promise._c; + microtask(function(){ + var value = promise._v + , ok = promise._s == 1 + , i = 0; + var run = function(reaction){ + var handler = ok ? reaction.ok : reaction.fail + , resolve = reaction.resolve + , reject = reaction.reject + , domain = reaction.domain + , result, then; + try { + if(handler){ + if(!ok){ + if(promise._h == 2)onHandleUnhandled(promise); + promise._h = 1; + } + if(handler === true)result = value; + else { + if(domain)domain.enter(); + result = handler(value); + if(domain)domain.exit(); + } + if(result === reaction.promise){ + reject(TypeError('Promise-chain cycle')); + } else if(then = isThenable(result)){ + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch(e){ + reject(e); + } + }; + while(chain.length > i)run(chain[i++]); // variable length - can't use forEach + promise._c = []; + promise._n = false; + if(isReject && !promise._h)onUnhandled(promise); + }); + }; + var onUnhandled = function(promise){ + task.call(global, function(){ + var value = promise._v + , abrupt, handler, console; + if(isUnhandled(promise)){ + abrupt = perform(function(){ + if(isNode){ + process.emit('unhandledRejection', value, promise); + } else if(handler = global.onunhandledrejection){ + handler({promise: promise, reason: value}); + } else if((console = global.console) && console.error){ + console.error('Unhandled promise rejection', value); + } + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + promise._h = isNode || isUnhandled(promise) ? 2 : 1; + } promise._a = undefined; + if(abrupt)throw abrupt.error; + }); + }; + var isUnhandled = function(promise){ + if(promise._h == 1)return false; + var chain = promise._a || promise._c + , i = 0 + , reaction; + while(chain.length > i){ + reaction = chain[i++]; + if(reaction.fail || !isUnhandled(reaction.promise))return false; + } return true; + }; + var onHandleUnhandled = function(promise){ + task.call(global, function(){ + var handler; + if(isNode){ + process.emit('rejectionHandled', promise); + } else if(handler = global.onrejectionhandled){ + handler({promise: promise, reason: promise._v}); + } + }); + }; + var $reject = function(value){ + var promise = this; + if(promise._d)return; + promise._d = true; + promise = promise._w || promise; // unwrap + promise._v = value; + promise._s = 2; + if(!promise._a)promise._a = promise._c.slice(); + notify(promise, true); + }; + var $resolve = function(value){ + var promise = this + , then; + if(promise._d)return; + promise._d = true; + promise = promise._w || promise; // unwrap + try { + if(promise === value)throw TypeError("Promise can't be resolved itself"); + if(then = isThenable(value)){ + microtask(function(){ + var wrapper = {_w: promise, _d: false}; // wrap + try { + then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); + } catch(e){ + $reject.call(wrapper, e); + } + }); + } else { + promise._v = value; + promise._s = 1; + notify(promise, false); + } + } catch(e){ + $reject.call({_w: promise, _d: false}, e); // wrap + } + }; + + // constructor polyfill + if(!USE_NATIVE){ + // 25.4.3.1 Promise(executor) + $Promise = function Promise(executor){ + anInstance(this, $Promise, PROMISE, '_h'); + aFunction(executor); + Internal.call(this); + try { + executor(ctx($resolve, this, 1), ctx($reject, this, 1)); + } catch(err){ + $reject.call(this, err); + } + }; + Internal = function Promise(executor){ + this._c = []; // <- awaiting reactions + this._a = undefined; // <- checked in isUnhandled reactions + this._s = 0; // <- state + this._d = false; // <- done + this._v = undefined; // <- value + this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled + this._n = false; // <- notify + }; + Internal.prototype = __webpack_require__(210)($Promise.prototype, { + // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) + then: function then(onFulfilled, onRejected){ + var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = isNode ? process.domain : undefined; + this._c.push(reaction); + if(this._a)this._a.push(reaction); + if(this._s)notify(this, false); + return reaction.promise; + }, + // 25.4.5.1 Promise.prototype.catch(onRejected) + 'catch': function(onRejected){ + return this.then(undefined, onRejected); + } + }); + PromiseCapability = function(){ + var promise = new Internal; + this.promise = promise; + this.resolve = ctx($resolve, promise, 1); + this.reject = ctx($reject, promise, 1); + }; + } + + $export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise}); + __webpack_require__(24)($Promise, PROMISE); + __webpack_require__(192)(PROMISE); + Wrapper = __webpack_require__(9)[PROMISE]; + + // statics + $export($export.S + $export.F * !USE_NATIVE, PROMISE, { + // 25.4.4.5 Promise.reject(r) + reject: function reject(r){ + var capability = newPromiseCapability(this) + , $$reject = capability.reject; + $$reject(r); + return capability.promise; + } + }); + $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { + // 25.4.4.6 Promise.resolve(x) + resolve: function resolve(x){ + // instanceof instead of internal slot check because we should fix it without replacement native Promise core + if(x instanceof $Promise && sameConstructor(x.constructor, this))return x; + var capability = newPromiseCapability(this) + , $$resolve = capability.resolve; + $$resolve(x); + return capability.promise; + } + }); + $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(165)(function(iter){ + $Promise.all(iter)['catch'](empty); + })), PROMISE, { + // 25.4.4.1 Promise.all(iterable) + all: function all(iterable){ + var C = this + , capability = newPromiseCapability(C) + , resolve = capability.resolve + , reject = capability.reject; + var abrupt = perform(function(){ + var values = [] + , index = 0 + , remaining = 1; + forOf(iterable, false, function(promise){ + var $index = index++ + , alreadyCalled = false; + values.push(undefined); + remaining++; + C.resolve(promise).then(function(value){ + if(alreadyCalled)return; + alreadyCalled = true; + values[$index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if(abrupt)reject(abrupt.error); + return capability.promise; + }, + // 25.4.4.4 Promise.race(iterable) + race: function race(iterable){ + var C = this + , capability = newPromiseCapability(C) + , reject = capability.reject; + var abrupt = perform(function(){ + forOf(iterable, false, function(promise){ + C.resolve(promise).then(capability.resolve, reject); + }); + }); + if(abrupt)reject(abrupt.error); + return capability.promise; + } + }); + +/***/ }, +/* 205 */ +/***/ function(module, exports) { + + module.exports = function(it, Constructor, name, forbiddenField){ + if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){ + throw TypeError(name + ': incorrect invocation!'); + } return it; + }; + +/***/ }, +/* 206 */ +/***/ function(module, exports, __webpack_require__) { + + var ctx = __webpack_require__(20) + , call = __webpack_require__(161) + , isArrayIter = __webpack_require__(162) + , anObject = __webpack_require__(12) + , toLength = __webpack_require__(37) + , getIterFn = __webpack_require__(164) + , BREAK = {} + , RETURN = {}; + var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){ + var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable) + , f = ctx(fn, that, entries ? 2 : 1) + , index = 0 + , length, step, iterator, result; + if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!'); + // fast case for arrays with default iterator + if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){ + result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); + if(result === BREAK || result === RETURN)return result; + } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){ + result = call(iterator, f, step.value, entries); + if(result === BREAK || result === RETURN)return result; + } + }; + exports.BREAK = BREAK; + exports.RETURN = RETURN; + +/***/ }, +/* 207 */ +/***/ function(module, exports, __webpack_require__) { + + // 7.3.20 SpeciesConstructor(O, defaultConstructor) + var anObject = __webpack_require__(12) + , aFunction = __webpack_require__(21) + , SPECIES = __webpack_require__(25)('species'); + module.exports = function(O, D){ + var C = anObject(O).constructor, S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); + }; + +/***/ }, +/* 208 */ +/***/ function(module, exports, __webpack_require__) { + + var ctx = __webpack_require__(20) + , invoke = __webpack_require__(78) + , html = __webpack_require__(48) + , cel = __webpack_require__(15) + , global = __webpack_require__(4) + , process = global.process + , setTask = global.setImmediate + , clearTask = global.clearImmediate + , MessageChannel = global.MessageChannel + , counter = 0 + , queue = {} + , ONREADYSTATECHANGE = 'onreadystatechange' + , defer, channel, port; + var run = function(){ + var id = +this; + if(queue.hasOwnProperty(id)){ + var fn = queue[id]; + delete queue[id]; + fn(); + } + }; + var listener = function(event){ + run.call(event.data); + }; + // Node.js 0.9+ & IE10+ has setImmediate, otherwise: + if(!setTask || !clearTask){ + setTask = function setImmediate(fn){ + var args = [], i = 1; + while(arguments.length > i)args.push(arguments[i++]); + queue[++counter] = function(){ + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id){ + delete queue[id]; + }; + // Node.js 0.8- + if(__webpack_require__(34)(process) == 'process'){ + defer = function(id){ + process.nextTick(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if(MessageChannel){ + channel = new MessageChannel; + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ + defer = function(id){ + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if(ONREADYSTATECHANGE in cel('script')){ + defer = function(id){ + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function(id){ + setTimeout(ctx(run, id, 1), 0); + }; + } + } + module.exports = { + set: setTask, + clear: clearTask + }; + +/***/ }, +/* 209 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(4) + , macrotask = __webpack_require__(208).set + , Observer = global.MutationObserver || global.WebKitMutationObserver + , process = global.process + , Promise = global.Promise + , isNode = __webpack_require__(34)(process) == 'process'; + + module.exports = function(){ + var head, last, notify; + + var flush = function(){ + var parent, fn; + if(isNode && (parent = process.domain))parent.exit(); + while(head){ + fn = head.fn; + head = head.next; + try { + fn(); + } catch(e){ + if(head)notify(); + else last = undefined; + throw e; + } + } last = undefined; + if(parent)parent.enter(); + }; + + // Node.js + if(isNode){ + notify = function(){ + process.nextTick(flush); + }; + // browsers with MutationObserver + } else if(Observer){ + var toggle = true + , node = document.createTextNode(''); + new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new + notify = function(){ + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if(Promise && Promise.resolve){ + var promise = Promise.resolve(); + notify = function(){ + promise.then(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function(){ + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } + + return function(fn){ + var task = {fn: fn, next: undefined}; + if(last)last.next = task; + if(!head){ + head = task; + notify(); + } last = task; + }; + }; + +/***/ }, +/* 210 */ +/***/ function(module, exports, __webpack_require__) { + + var redefine = __webpack_require__(18); + module.exports = function(target, src, safe){ + for(var key in src)redefine(target, key, src[key], safe); + return target; + }; + +/***/ }, +/* 211 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var strong = __webpack_require__(212); + + // 23.1 Map Objects + module.exports = __webpack_require__(213)('Map', function(get){ + return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; + }, { + // 23.1.3.6 Map.prototype.get(key) + get: function get(key){ + var entry = strong.getEntry(this, key); + return entry && entry.v; + }, + // 23.1.3.9 Map.prototype.set(key, value) + set: function set(key, value){ + return strong.def(this, key === 0 ? 0 : key, value); + } + }, strong, true); + +/***/ }, +/* 212 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var dP = __webpack_require__(11).f + , create = __webpack_require__(46) + , redefineAll = __webpack_require__(210) + , ctx = __webpack_require__(20) + , anInstance = __webpack_require__(205) + , defined = __webpack_require__(35) + , forOf = __webpack_require__(206) + , $iterDefine = __webpack_require__(128) + , step = __webpack_require__(194) + , setSpecies = __webpack_require__(192) + , DESCRIPTORS = __webpack_require__(6) + , fastKey = __webpack_require__(22).fastKey + , SIZE = DESCRIPTORS ? '_s' : 'size'; + + var getEntry = function(that, key){ + // fast case + var index = fastKey(key), entry; + if(index !== 'F')return that._i[index]; + // frozen object case + for(entry = that._f; entry; entry = entry.n){ + if(entry.k == key)return entry; + } + }; + + module.exports = { + getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ + var C = wrapper(function(that, iterable){ + anInstance(that, C, NAME, '_i'); + that._i = create(null); // index + that._f = undefined; // first entry + that._l = undefined; // last entry + that[SIZE] = 0; // size + if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.1.3.1 Map.prototype.clear() + // 23.2.3.2 Set.prototype.clear() + clear: function clear(){ + for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){ + entry.r = true; + if(entry.p)entry.p = entry.p.n = undefined; + delete data[entry.i]; + } + that._f = that._l = undefined; + that[SIZE] = 0; + }, + // 23.1.3.3 Map.prototype.delete(key) + // 23.2.3.4 Set.prototype.delete(value) + 'delete': function(key){ + var that = this + , entry = getEntry(that, key); + if(entry){ + var next = entry.n + , prev = entry.p; + delete that._i[entry.i]; + entry.r = true; + if(prev)prev.n = next; + if(next)next.p = prev; + if(that._f == entry)that._f = next; + if(that._l == entry)that._l = prev; + that[SIZE]--; + } return !!entry; + }, + // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) + // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) + forEach: function forEach(callbackfn /*, that = undefined */){ + anInstance(this, C, 'forEach'); + var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3) + , entry; + while(entry = entry ? entry.n : this._f){ + f(entry.v, entry.k, this); + // revert to the last existing entry + while(entry && entry.r)entry = entry.p; + } + }, + // 23.1.3.7 Map.prototype.has(key) + // 23.2.3.7 Set.prototype.has(value) + has: function has(key){ + return !!getEntry(this, key); + } + }); + if(DESCRIPTORS)dP(C.prototype, 'size', { + get: function(){ + return defined(this[SIZE]); + } + }); + return C; + }, + def: function(that, key, value){ + var entry = getEntry(that, key) + , prev, index; + // change existing entry + if(entry){ + entry.v = value; + // create new entry + } else { + that._l = entry = { + i: index = fastKey(key, true), // <- index + k: key, // <- key + v: value, // <- value + p: prev = that._l, // <- previous entry + n: undefined, // <- next entry + r: false // <- removed + }; + if(!that._f)that._f = entry; + if(prev)prev.n = entry; + that[SIZE]++; + // add to index + if(index !== 'F')that._i[index] = entry; + } return that; + }, + getEntry: getEntry, + setStrong: function(C, NAME, IS_MAP){ + // add .keys, .values, .entries, [@@iterator] + // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 + $iterDefine(C, NAME, function(iterated, kind){ + this._t = iterated; // target + this._k = kind; // kind + this._l = undefined; // previous + }, function(){ + var that = this + , kind = that._k + , entry = that._l; + // revert to the last existing entry + while(entry && entry.r)entry = entry.p; + // get next entry + if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){ + // or finish the iteration + that._t = undefined; + return step(1); + } + // return step by kind + if(kind == 'keys' )return step(0, entry.k); + if(kind == 'values')return step(0, entry.v); + return step(0, [entry.k, entry.v]); + }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true); + + // add [@@species], 23.1.2.2, 23.2.2.2 + setSpecies(NAME); + } + }; + +/***/ }, +/* 213 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var global = __webpack_require__(4) + , $export = __webpack_require__(8) + , redefine = __webpack_require__(18) + , redefineAll = __webpack_require__(210) + , meta = __webpack_require__(22) + , forOf = __webpack_require__(206) + , anInstance = __webpack_require__(205) + , isObject = __webpack_require__(13) + , fails = __webpack_require__(7) + , $iterDetect = __webpack_require__(165) + , setToStringTag = __webpack_require__(24) + , inheritIfRequired = __webpack_require__(88); + + module.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){ + var Base = global[NAME] + , C = Base + , ADDER = IS_MAP ? 'set' : 'add' + , proto = C && C.prototype + , O = {}; + var fixMethod = function(KEY){ + var fn = proto[KEY]; + redefine(proto, KEY, + KEY == 'delete' ? function(a){ + return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'has' ? function has(a){ + return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'get' ? function get(a){ + return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; } + : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; } + ); + }; + if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){ + new C().entries().next(); + }))){ + // create collection constructor + C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); + redefineAll(C.prototype, methods); + meta.NEED = true; + } else { + var instance = new C + // early implementations not supports chaining + , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); }) + // most early implementations doesn't supports iterables, most modern - not close it correctly + , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new + // for early implementations -0 and +0 not the same + , BUGGY_ZERO = !IS_WEAK && fails(function(){ + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new C() + , index = 5; + while(index--)$instance[ADDER](index, index); + return !$instance.has(-0); + }); + if(!ACCEPT_ITERABLES){ + C = wrapper(function(target, iterable){ + anInstance(target, C, NAME); + var that = inheritIfRequired(new Base, target, C); + if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); + return that; + }); + C.prototype = proto; + proto.constructor = C; + } + if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){ + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER); + // weak collections should not contains .clear method + if(IS_WEAK && proto.clear)delete proto.clear; + } + + setToStringTag(C, NAME); + + O[NAME] = C; + $export($export.G + $export.W + $export.F * (C != Base), O); + + if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP); + + return C; + }; + +/***/ }, +/* 214 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var strong = __webpack_require__(212); + + // 23.2 Set Objects + module.exports = __webpack_require__(213)('Set', function(get){ + return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; + }, { + // 23.2.3.1 Set.prototype.add(value) + add: function add(value){ + return strong.def(this, value = value === 0 ? 0 : value, value); + } + }, strong); + +/***/ }, +/* 215 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var each = __webpack_require__(172)(0) + , redefine = __webpack_require__(18) + , meta = __webpack_require__(22) + , assign = __webpack_require__(69) + , weak = __webpack_require__(216) + , isObject = __webpack_require__(13) + , getWeak = meta.getWeak + , isExtensible = Object.isExtensible + , uncaughtFrozenStore = weak.ufstore + , tmp = {} + , InternalMap; + + var wrapper = function(get){ + return function WeakMap(){ + return get(this, arguments.length > 0 ? arguments[0] : undefined); + }; + }; + + var methods = { + // 23.3.3.3 WeakMap.prototype.get(key) + get: function get(key){ + if(isObject(key)){ + var data = getWeak(key); + if(data === true)return uncaughtFrozenStore(this).get(key); + return data ? data[this._i] : undefined; + } + }, + // 23.3.3.5 WeakMap.prototype.set(key, value) + set: function set(key, value){ + return weak.def(this, key, value); + } + }; + + // 23.3 WeakMap Objects + var $WeakMap = module.exports = __webpack_require__(213)('WeakMap', wrapper, methods, weak, true, true); + + // IE11 WeakMap frozen keys fix + if(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){ + InternalMap = weak.getConstructor(wrapper); + assign(InternalMap.prototype, methods); + meta.NEED = true; + each(['delete', 'has', 'get', 'set'], function(key){ + var proto = $WeakMap.prototype + , method = proto[key]; + redefine(proto, key, function(a, b){ + // store frozen objects on internal weakmap shim + if(isObject(a) && !isExtensible(a)){ + if(!this._f)this._f = new InternalMap; + var result = this._f[key](a, b); + return key == 'set' ? this : result; + // store all the rest on native weakmap + } return method.call(this, a, b); + }); + }); + } + +/***/ }, +/* 216 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var redefineAll = __webpack_require__(210) + , getWeak = __webpack_require__(22).getWeak + , anObject = __webpack_require__(12) + , isObject = __webpack_require__(13) + , anInstance = __webpack_require__(205) + , forOf = __webpack_require__(206) + , createArrayMethod = __webpack_require__(172) + , $has = __webpack_require__(5) + , arrayFind = createArrayMethod(5) + , arrayFindIndex = createArrayMethod(6) + , id = 0; + + // fallback for uncaught frozen keys + var uncaughtFrozenStore = function(that){ + return that._l || (that._l = new UncaughtFrozenStore); + }; + var UncaughtFrozenStore = function(){ + this.a = []; + }; + var findUncaughtFrozen = function(store, key){ + return arrayFind(store.a, function(it){ + return it[0] === key; + }); + }; + UncaughtFrozenStore.prototype = { + get: function(key){ + var entry = findUncaughtFrozen(this, key); + if(entry)return entry[1]; + }, + has: function(key){ + return !!findUncaughtFrozen(this, key); + }, + set: function(key, value){ + var entry = findUncaughtFrozen(this, key); + if(entry)entry[1] = value; + else this.a.push([key, value]); + }, + 'delete': function(key){ + var index = arrayFindIndex(this.a, function(it){ + return it[0] === key; + }); + if(~index)this.a.splice(index, 1); + return !!~index; + } + }; + + module.exports = { + getConstructor: function(wrapper, NAME, IS_MAP, ADDER){ + var C = wrapper(function(that, iterable){ + anInstance(that, C, NAME, '_i'); + that._i = id++; // collection id + that._l = undefined; // leak store for uncaught frozen objects + if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.3.3.2 WeakMap.prototype.delete(key) + // 23.4.3.3 WeakSet.prototype.delete(value) + 'delete': function(key){ + if(!isObject(key))return false; + var data = getWeak(key); + if(data === true)return uncaughtFrozenStore(this)['delete'](key); + return data && $has(data, this._i) && delete data[this._i]; + }, + // 23.3.3.4 WeakMap.prototype.has(key) + // 23.4.3.4 WeakSet.prototype.has(value) + has: function has(key){ + if(!isObject(key))return false; + var data = getWeak(key); + if(data === true)return uncaughtFrozenStore(this).has(key); + return data && $has(data, this._i); + } + }); + return C; + }, + def: function(that, key, value){ + var data = getWeak(anObject(key), true); + if(data === true)uncaughtFrozenStore(that).set(key, value); + else data[that._i] = value; + return that; + }, + ufstore: uncaughtFrozenStore + }; + +/***/ }, +/* 217 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var weak = __webpack_require__(216); + + // 23.4 WeakSet Objects + __webpack_require__(213)('WeakSet', function(get){ + return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); }; + }, { + // 23.4.3.1 WeakSet.prototype.add(value) + add: function add(value){ + return weak.def(this, value, true); + } + }, weak, false, true); + +/***/ }, +/* 218 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , $typed = __webpack_require__(219) + , buffer = __webpack_require__(220) + , anObject = __webpack_require__(12) + , toIndex = __webpack_require__(39) + , toLength = __webpack_require__(37) + , isObject = __webpack_require__(13) + , ArrayBuffer = __webpack_require__(4).ArrayBuffer + , speciesConstructor = __webpack_require__(207) + , $ArrayBuffer = buffer.ArrayBuffer + , $DataView = buffer.DataView + , $isView = $typed.ABV && ArrayBuffer.isView + , $slice = $ArrayBuffer.prototype.slice + , VIEW = $typed.VIEW + , ARRAY_BUFFER = 'ArrayBuffer'; + + $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer}); + + $export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, { + // 24.1.3.1 ArrayBuffer.isView(arg) + isView: function isView(it){ + return $isView && $isView(it) || isObject(it) && VIEW in it; + } + }); + + $export($export.P + $export.U + $export.F * __webpack_require__(7)(function(){ + return !new $ArrayBuffer(2).slice(1, undefined).byteLength; + }), ARRAY_BUFFER, { + // 24.1.4.3 ArrayBuffer.prototype.slice(start, end) + slice: function slice(start, end){ + if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix + var len = anObject(this).byteLength + , first = toIndex(start, len) + , final = toIndex(end === undefined ? len : end, len) + , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first)) + , viewS = new $DataView(this) + , viewT = new $DataView(result) + , index = 0; + while(first < final){ + viewT.setUint8(index++, viewS.getUint8(first++)); + } return result; + } + }); + + __webpack_require__(192)(ARRAY_BUFFER); + +/***/ }, +/* 219 */ +/***/ function(module, exports, __webpack_require__) { + + var global = __webpack_require__(4) + , hide = __webpack_require__(10) + , uid = __webpack_require__(19) + , TYPED = uid('typed_array') + , VIEW = uid('view') + , ABV = !!(global.ArrayBuffer && global.DataView) + , CONSTR = ABV + , i = 0, l = 9, Typed; + + var TypedArrayConstructors = ( + 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array' + ).split(','); + + while(i < l){ + if(Typed = global[TypedArrayConstructors[i++]]){ + hide(Typed.prototype, TYPED, true); + hide(Typed.prototype, VIEW, true); + } else CONSTR = false; + } + + module.exports = { + ABV: ABV, + CONSTR: CONSTR, + TYPED: TYPED, + VIEW: VIEW + }; + +/***/ }, +/* 220 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var global = __webpack_require__(4) + , DESCRIPTORS = __webpack_require__(6) + , LIBRARY = __webpack_require__(28) + , $typed = __webpack_require__(219) + , hide = __webpack_require__(10) + , redefineAll = __webpack_require__(210) + , fails = __webpack_require__(7) + , anInstance = __webpack_require__(205) + , toInteger = __webpack_require__(38) + , toLength = __webpack_require__(37) + , gOPN = __webpack_require__(50).f + , dP = __webpack_require__(11).f + , arrayFill = __webpack_require__(188) + , setToStringTag = __webpack_require__(24) + , ARRAY_BUFFER = 'ArrayBuffer' + , DATA_VIEW = 'DataView' + , PROTOTYPE = 'prototype' + , WRONG_LENGTH = 'Wrong length!' + , WRONG_INDEX = 'Wrong index!' + , $ArrayBuffer = global[ARRAY_BUFFER] + , $DataView = global[DATA_VIEW] + , Math = global.Math + , RangeError = global.RangeError + , Infinity = global.Infinity + , BaseBuffer = $ArrayBuffer + , abs = Math.abs + , pow = Math.pow + , floor = Math.floor + , log = Math.log + , LN2 = Math.LN2 + , BUFFER = 'buffer' + , BYTE_LENGTH = 'byteLength' + , BYTE_OFFSET = 'byteOffset' + , $BUFFER = DESCRIPTORS ? '_b' : BUFFER + , $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH + , $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET; + + // IEEE754 conversions based on https://github.com/feross/ieee754 + var packIEEE754 = function(value, mLen, nBytes){ + var buffer = Array(nBytes) + , eLen = nBytes * 8 - mLen - 1 + , eMax = (1 << eLen) - 1 + , eBias = eMax >> 1 + , rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0 + , i = 0 + , s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0 + , e, m, c; + value = abs(value) + if(value != value || value === Infinity){ + m = value != value ? 1 : 0; + e = eMax; + } else { + e = floor(log(value) / LN2); + if(value * (c = pow(2, -e)) < 1){ + e--; + c *= 2; + } + if(e + eBias >= 1){ + value += rt / c; + } else { + value += rt * pow(2, 1 - eBias); + } + if(value * c >= 2){ + e++; + c /= 2; + } + if(e + eBias >= eMax){ + m = 0; + e = eMax; + } else if(e + eBias >= 1){ + m = (value * c - 1) * pow(2, mLen); + e = e + eBias; + } else { + m = value * pow(2, eBias - 1) * pow(2, mLen); + e = 0; + } + } + for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8); + e = e << mLen | m; + eLen += mLen; + for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8); + buffer[--i] |= s * 128; + return buffer; + }; + var unpackIEEE754 = function(buffer, mLen, nBytes){ + var eLen = nBytes * 8 - mLen - 1 + , eMax = (1 << eLen) - 1 + , eBias = eMax >> 1 + , nBits = eLen - 7 + , i = nBytes - 1 + , s = buffer[i--] + , e = s & 127 + , m; + s >>= 7; + for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8); + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8); + if(e === 0){ + e = 1 - eBias; + } else if(e === eMax){ + return m ? NaN : s ? -Infinity : Infinity; + } else { + m = m + pow(2, mLen); + e = e - eBias; + } return (s ? -1 : 1) * m * pow(2, e - mLen); + }; + + var unpackI32 = function(bytes){ + return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]; + }; + var packI8 = function(it){ + return [it & 0xff]; + }; + var packI16 = function(it){ + return [it & 0xff, it >> 8 & 0xff]; + }; + var packI32 = function(it){ + return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff]; + }; + var packF64 = function(it){ + return packIEEE754(it, 52, 8); + }; + var packF32 = function(it){ + return packIEEE754(it, 23, 4); + }; + + var addGetter = function(C, key, internal){ + dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }}); + }; + + var get = function(view, bytes, index, isLittleEndian){ + var numIndex = +index + , intIndex = toInteger(numIndex); + if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX); + var store = view[$BUFFER]._b + , start = intIndex + view[$OFFSET] + , pack = store.slice(start, start + bytes); + return isLittleEndian ? pack : pack.reverse(); + }; + var set = function(view, bytes, index, conversion, value, isLittleEndian){ + var numIndex = +index + , intIndex = toInteger(numIndex); + if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX); + var store = view[$BUFFER]._b + , start = intIndex + view[$OFFSET] + , pack = conversion(+value); + for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1]; + }; + + var validateArrayBufferArguments = function(that, length){ + anInstance(that, $ArrayBuffer, ARRAY_BUFFER); + var numberLength = +length + , byteLength = toLength(numberLength); + if(numberLength != byteLength)throw RangeError(WRONG_LENGTH); + return byteLength; + }; + + if(!$typed.ABV){ + $ArrayBuffer = function ArrayBuffer(length){ + var byteLength = validateArrayBufferArguments(this, length); + this._b = arrayFill.call(Array(byteLength), 0); + this[$LENGTH] = byteLength; + }; + + $DataView = function DataView(buffer, byteOffset, byteLength){ + anInstance(this, $DataView, DATA_VIEW); + anInstance(buffer, $ArrayBuffer, DATA_VIEW); + var bufferLength = buffer[$LENGTH] + , offset = toInteger(byteOffset); + if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!'); + byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength); + if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH); + this[$BUFFER] = buffer; + this[$OFFSET] = offset; + this[$LENGTH] = byteLength; + }; + + if(DESCRIPTORS){ + addGetter($ArrayBuffer, BYTE_LENGTH, '_l'); + addGetter($DataView, BUFFER, '_b'); + addGetter($DataView, BYTE_LENGTH, '_l'); + addGetter($DataView, BYTE_OFFSET, '_o'); + } + + redefineAll($DataView[PROTOTYPE], { + getInt8: function getInt8(byteOffset){ + return get(this, 1, byteOffset)[0] << 24 >> 24; + }, + getUint8: function getUint8(byteOffset){ + return get(this, 1, byteOffset)[0]; + }, + getInt16: function getInt16(byteOffset /*, littleEndian */){ + var bytes = get(this, 2, byteOffset, arguments[1]); + return (bytes[1] << 8 | bytes[0]) << 16 >> 16; + }, + getUint16: function getUint16(byteOffset /*, littleEndian */){ + var bytes = get(this, 2, byteOffset, arguments[1]); + return bytes[1] << 8 | bytes[0]; + }, + getInt32: function getInt32(byteOffset /*, littleEndian */){ + return unpackI32(get(this, 4, byteOffset, arguments[1])); + }, + getUint32: function getUint32(byteOffset /*, littleEndian */){ + return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0; + }, + getFloat32: function getFloat32(byteOffset /*, littleEndian */){ + return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4); + }, + getFloat64: function getFloat64(byteOffset /*, littleEndian */){ + return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8); + }, + setInt8: function setInt8(byteOffset, value){ + set(this, 1, byteOffset, packI8, value); + }, + setUint8: function setUint8(byteOffset, value){ + set(this, 1, byteOffset, packI8, value); + }, + setInt16: function setInt16(byteOffset, value /*, littleEndian */){ + set(this, 2, byteOffset, packI16, value, arguments[2]); + }, + setUint16: function setUint16(byteOffset, value /*, littleEndian */){ + set(this, 2, byteOffset, packI16, value, arguments[2]); + }, + setInt32: function setInt32(byteOffset, value /*, littleEndian */){ + set(this, 4, byteOffset, packI32, value, arguments[2]); + }, + setUint32: function setUint32(byteOffset, value /*, littleEndian */){ + set(this, 4, byteOffset, packI32, value, arguments[2]); + }, + setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){ + set(this, 4, byteOffset, packF32, value, arguments[2]); + }, + setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){ + set(this, 8, byteOffset, packF64, value, arguments[2]); + } + }); + } else { + if(!fails(function(){ + new $ArrayBuffer; // eslint-disable-line no-new + }) || !fails(function(){ + new $ArrayBuffer(.5); // eslint-disable-line no-new + })){ + $ArrayBuffer = function ArrayBuffer(length){ + return new BaseBuffer(validateArrayBufferArguments(this, length)); + }; + var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE]; + for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){ + if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]); + }; + if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer; + } + // iOS Safari 7.x bug + var view = new $DataView(new $ArrayBuffer(2)) + , $setInt8 = $DataView[PROTOTYPE].setInt8; + view.setInt8(0, 2147483648); + view.setInt8(1, 2147483649); + if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], { + setInt8: function setInt8(byteOffset, value){ + $setInt8.call(this, byteOffset, value << 24 >> 24); + }, + setUint8: function setUint8(byteOffset, value){ + $setInt8.call(this, byteOffset, value << 24 >> 24); + } + }, true); + } + setToStringTag($ArrayBuffer, ARRAY_BUFFER); + setToStringTag($DataView, DATA_VIEW); + hide($DataView[PROTOTYPE], $typed.VIEW, true); + exports[ARRAY_BUFFER] = $ArrayBuffer; + exports[DATA_VIEW] = $DataView; + +/***/ }, +/* 221 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8); + $export($export.G + $export.W + $export.F * !__webpack_require__(219).ABV, { + DataView: __webpack_require__(220).DataView + }); + +/***/ }, +/* 222 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Int8', 1, function(init){ + return function Int8Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }); + +/***/ }, +/* 223 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + if(__webpack_require__(6)){ + var LIBRARY = __webpack_require__(28) + , global = __webpack_require__(4) + , fails = __webpack_require__(7) + , $export = __webpack_require__(8) + , $typed = __webpack_require__(219) + , $buffer = __webpack_require__(220) + , ctx = __webpack_require__(20) + , anInstance = __webpack_require__(205) + , propertyDesc = __webpack_require__(17) + , hide = __webpack_require__(10) + , redefineAll = __webpack_require__(210) + , toInteger = __webpack_require__(38) + , toLength = __webpack_require__(37) + , toIndex = __webpack_require__(39) + , toPrimitive = __webpack_require__(16) + , has = __webpack_require__(5) + , same = __webpack_require__(71) + , classof = __webpack_require__(75) + , isObject = __webpack_require__(13) + , toObject = __webpack_require__(58) + , isArrayIter = __webpack_require__(162) + , create = __webpack_require__(46) + , getPrototypeOf = __webpack_require__(59) + , gOPN = __webpack_require__(50).f + , getIterFn = __webpack_require__(164) + , uid = __webpack_require__(19) + , wks = __webpack_require__(25) + , createArrayMethod = __webpack_require__(172) + , createArrayIncludes = __webpack_require__(36) + , speciesConstructor = __webpack_require__(207) + , ArrayIterators = __webpack_require__(193) + , Iterators = __webpack_require__(129) + , $iterDetect = __webpack_require__(165) + , setSpecies = __webpack_require__(192) + , arrayFill = __webpack_require__(188) + , arrayCopyWithin = __webpack_require__(185) + , $DP = __webpack_require__(11) + , $GOPD = __webpack_require__(51) + , dP = $DP.f + , gOPD = $GOPD.f + , RangeError = global.RangeError + , TypeError = global.TypeError + , Uint8Array = global.Uint8Array + , ARRAY_BUFFER = 'ArrayBuffer' + , SHARED_BUFFER = 'Shared' + ARRAY_BUFFER + , BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT' + , PROTOTYPE = 'prototype' + , ArrayProto = Array[PROTOTYPE] + , $ArrayBuffer = $buffer.ArrayBuffer + , $DataView = $buffer.DataView + , arrayForEach = createArrayMethod(0) + , arrayFilter = createArrayMethod(2) + , arraySome = createArrayMethod(3) + , arrayEvery = createArrayMethod(4) + , arrayFind = createArrayMethod(5) + , arrayFindIndex = createArrayMethod(6) + , arrayIncludes = createArrayIncludes(true) + , arrayIndexOf = createArrayIncludes(false) + , arrayValues = ArrayIterators.values + , arrayKeys = ArrayIterators.keys + , arrayEntries = ArrayIterators.entries + , arrayLastIndexOf = ArrayProto.lastIndexOf + , arrayReduce = ArrayProto.reduce + , arrayReduceRight = ArrayProto.reduceRight + , arrayJoin = ArrayProto.join + , arraySort = ArrayProto.sort + , arraySlice = ArrayProto.slice + , arrayToString = ArrayProto.toString + , arrayToLocaleString = ArrayProto.toLocaleString + , ITERATOR = wks('iterator') + , TAG = wks('toStringTag') + , TYPED_CONSTRUCTOR = uid('typed_constructor') + , DEF_CONSTRUCTOR = uid('def_constructor') + , ALL_CONSTRUCTORS = $typed.CONSTR + , TYPED_ARRAY = $typed.TYPED + , VIEW = $typed.VIEW + , WRONG_LENGTH = 'Wrong length!'; + + var $map = createArrayMethod(1, function(O, length){ + return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length); + }); + + var LITTLE_ENDIAN = fails(function(){ + return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1; + }); + + var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){ + new Uint8Array(1).set({}); + }); + + var strictToLength = function(it, SAME){ + if(it === undefined)throw TypeError(WRONG_LENGTH); + var number = +it + , length = toLength(it); + if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH); + return length; + }; + + var toOffset = function(it, BYTES){ + var offset = toInteger(it); + if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!'); + return offset; + }; + + var validate = function(it){ + if(isObject(it) && TYPED_ARRAY in it)return it; + throw TypeError(it + ' is not a typed array!'); + }; + + var allocate = function(C, length){ + if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){ + throw TypeError('It is not a typed array constructor!'); + } return new C(length); + }; + + var speciesFromList = function(O, list){ + return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list); + }; + + var fromList = function(C, list){ + var index = 0 + , length = list.length + , result = allocate(C, length); + while(length > index)result[index] = list[index++]; + return result; + }; + + var addGetter = function(it, key, internal){ + dP(it, key, {get: function(){ return this._d[internal]; }}); + }; + + var $from = function from(source /*, mapfn, thisArg */){ + var O = toObject(source) + , aLen = arguments.length + , mapfn = aLen > 1 ? arguments[1] : undefined + , mapping = mapfn !== undefined + , iterFn = getIterFn(O) + , i, length, values, result, step, iterator; + if(iterFn != undefined && !isArrayIter(iterFn)){ + for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){ + values.push(step.value); + } O = values; + } + if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2); + for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){ + result[i] = mapping ? mapfn(O[i], i) : O[i]; + } + return result; + }; + + var $of = function of(/*...items*/){ + var index = 0 + , length = arguments.length + , result = allocate(this, length); + while(length > index)result[index] = arguments[index++]; + return result; + }; + + // iOS Safari 6.x fails here + var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); }); + + var $toLocaleString = function toLocaleString(){ + return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments); + }; + + var proto = { + copyWithin: function copyWithin(target, start /*, end */){ + return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined); + }, + every: function every(callbackfn /*, thisArg */){ + return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars + return arrayFill.apply(validate(this), arguments); + }, + filter: function filter(callbackfn /*, thisArg */){ + return speciesFromList(this, arrayFilter(validate(this), callbackfn, + arguments.length > 1 ? arguments[1] : undefined)); + }, + find: function find(predicate /*, thisArg */){ + return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }, + findIndex: function findIndex(predicate /*, thisArg */){ + return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }, + forEach: function forEach(callbackfn /*, thisArg */){ + arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + indexOf: function indexOf(searchElement /*, fromIndex */){ + return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }, + includes: function includes(searchElement /*, fromIndex */){ + return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }, + join: function join(separator){ // eslint-disable-line no-unused-vars + return arrayJoin.apply(validate(this), arguments); + }, + lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars + return arrayLastIndexOf.apply(validate(this), arguments); + }, + map: function map(mapfn /*, thisArg */){ + return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined); + }, + reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars + return arrayReduce.apply(validate(this), arguments); + }, + reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars + return arrayReduceRight.apply(validate(this), arguments); + }, + reverse: function reverse(){ + var that = this + , length = validate(that).length + , middle = Math.floor(length / 2) + , index = 0 + , value; + while(index < middle){ + value = that[index]; + that[index++] = that[--length]; + that[length] = value; + } return that; + }, + some: function some(callbackfn /*, thisArg */){ + return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + sort: function sort(comparefn){ + return arraySort.call(validate(this), comparefn); + }, + subarray: function subarray(begin, end){ + var O = validate(this) + , length = O.length + , $begin = toIndex(begin, length); + return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))( + O.buffer, + O.byteOffset + $begin * O.BYTES_PER_ELEMENT, + toLength((end === undefined ? length : toIndex(end, length)) - $begin) + ); + } + }; + + var $slice = function slice(start, end){ + return speciesFromList(this, arraySlice.call(validate(this), start, end)); + }; + + var $set = function set(arrayLike /*, offset */){ + validate(this); + var offset = toOffset(arguments[1], 1) + , length = this.length + , src = toObject(arrayLike) + , len = toLength(src.length) + , index = 0; + if(len + offset > length)throw RangeError(WRONG_LENGTH); + while(index < len)this[offset + index] = src[index++]; + }; + + var $iterators = { + entries: function entries(){ + return arrayEntries.call(validate(this)); + }, + keys: function keys(){ + return arrayKeys.call(validate(this)); + }, + values: function values(){ + return arrayValues.call(validate(this)); + } + }; + + var isTAIndex = function(target, key){ + return isObject(target) + && target[TYPED_ARRAY] + && typeof key != 'symbol' + && key in target + && String(+key) == String(key); + }; + var $getDesc = function getOwnPropertyDescriptor(target, key){ + return isTAIndex(target, key = toPrimitive(key, true)) + ? propertyDesc(2, target[key]) + : gOPD(target, key); + }; + var $setDesc = function defineProperty(target, key, desc){ + if(isTAIndex(target, key = toPrimitive(key, true)) + && isObject(desc) + && has(desc, 'value') + && !has(desc, 'get') + && !has(desc, 'set') + // TODO: add validation descriptor w/o calling accessors + && !desc.configurable + && (!has(desc, 'writable') || desc.writable) + && (!has(desc, 'enumerable') || desc.enumerable) + ){ + target[key] = desc.value; + return target; + } else return dP(target, key, desc); + }; + + if(!ALL_CONSTRUCTORS){ + $GOPD.f = $getDesc; + $DP.f = $setDesc; + } + + $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', { + getOwnPropertyDescriptor: $getDesc, + defineProperty: $setDesc + }); + + if(fails(function(){ arrayToString.call({}); })){ + arrayToString = arrayToLocaleString = function toString(){ + return arrayJoin.call(this); + } + } + + var $TypedArrayPrototype$ = redefineAll({}, proto); + redefineAll($TypedArrayPrototype$, $iterators); + hide($TypedArrayPrototype$, ITERATOR, $iterators.values); + redefineAll($TypedArrayPrototype$, { + slice: $slice, + set: $set, + constructor: function(){ /* noop */ }, + toString: arrayToString, + toLocaleString: $toLocaleString + }); + addGetter($TypedArrayPrototype$, 'buffer', 'b'); + addGetter($TypedArrayPrototype$, 'byteOffset', 'o'); + addGetter($TypedArrayPrototype$, 'byteLength', 'l'); + addGetter($TypedArrayPrototype$, 'length', 'e'); + dP($TypedArrayPrototype$, TAG, { + get: function(){ return this[TYPED_ARRAY]; } + }); + + module.exports = function(KEY, BYTES, wrapper, CLAMPED){ + CLAMPED = !!CLAMPED; + var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array' + , ISNT_UINT8 = NAME != 'Uint8Array' + , GETTER = 'get' + KEY + , SETTER = 'set' + KEY + , TypedArray = global[NAME] + , Base = TypedArray || {} + , TAC = TypedArray && getPrototypeOf(TypedArray) + , FORCED = !TypedArray || !$typed.ABV + , O = {} + , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE]; + var getter = function(that, index){ + var data = that._d; + return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN); + }; + var setter = function(that, index, value){ + var data = that._d; + if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff; + data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN); + }; + var addElement = function(that, index){ + dP(that, index, { + get: function(){ + return getter(this, index); + }, + set: function(value){ + return setter(this, index, value); + }, + enumerable: true + }); + }; + if(FORCED){ + TypedArray = wrapper(function(that, data, $offset, $length){ + anInstance(that, TypedArray, NAME, '_d'); + var index = 0 + , offset = 0 + , buffer, byteLength, length, klass; + if(!isObject(data)){ + length = strictToLength(data, true) + byteLength = length * BYTES; + buffer = new $ArrayBuffer(byteLength); + } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){ + buffer = data; + offset = toOffset($offset, BYTES); + var $len = data.byteLength; + if($length === undefined){ + if($len % BYTES)throw RangeError(WRONG_LENGTH); + byteLength = $len - offset; + if(byteLength < 0)throw RangeError(WRONG_LENGTH); + } else { + byteLength = toLength($length) * BYTES; + if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH); + } + length = byteLength / BYTES; + } else if(TYPED_ARRAY in data){ + return fromList(TypedArray, data); + } else { + return $from.call(TypedArray, data); + } + hide(that, '_d', { + b: buffer, + o: offset, + l: byteLength, + e: length, + v: new $DataView(buffer) + }); + while(index < length)addElement(that, index++); + }); + TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$); + hide(TypedArrayPrototype, 'constructor', TypedArray); + } else if(!$iterDetect(function(iter){ + // V8 works with iterators, but fails in many other cases + // https://code.google.com/p/v8/issues/detail?id=4552 + new TypedArray(null); // eslint-disable-line no-new + new TypedArray(iter); // eslint-disable-line no-new + }, true)){ + TypedArray = wrapper(function(that, data, $offset, $length){ + anInstance(that, TypedArray, NAME); + var klass; + // `ws` module bug, temporarily remove validation length for Uint8Array + // https://github.com/websockets/ws/pull/645 + if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8)); + if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){ + return $length !== undefined + ? new Base(data, toOffset($offset, BYTES), $length) + : $offset !== undefined + ? new Base(data, toOffset($offset, BYTES)) + : new Base(data); + } + if(TYPED_ARRAY in data)return fromList(TypedArray, data); + return $from.call(TypedArray, data); + }); + arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){ + if(!(key in TypedArray))hide(TypedArray, key, Base[key]); + }); + TypedArray[PROTOTYPE] = TypedArrayPrototype; + if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray; + } + var $nativeIterator = TypedArrayPrototype[ITERATOR] + , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined) + , $iterator = $iterators.values; + hide(TypedArray, TYPED_CONSTRUCTOR, true); + hide(TypedArrayPrototype, TYPED_ARRAY, NAME); + hide(TypedArrayPrototype, VIEW, true); + hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray); + + if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){ + dP(TypedArrayPrototype, TAG, { + get: function(){ return NAME; } + }); + } + + O[NAME] = TypedArray; + + $export($export.G + $export.W + $export.F * (TypedArray != Base), O); + + $export($export.S, NAME, { + BYTES_PER_ELEMENT: BYTES, + from: $from, + of: $of + }); + + if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES); + + $export($export.P, NAME, proto); + + setSpecies(NAME); + + $export($export.P + $export.F * FORCED_SET, NAME, {set: $set}); + + $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators); + + $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString}); + + $export($export.P + $export.F * fails(function(){ + new TypedArray(1).slice(); + }), NAME, {slice: $slice}); + + $export($export.P + $export.F * (fails(function(){ + return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString() + }) || !fails(function(){ + TypedArrayPrototype.toLocaleString.call([1, 2]); + })), NAME, {toLocaleString: $toLocaleString}); + + Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator; + if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator); + }; + } else module.exports = function(){ /* empty */ }; + +/***/ }, +/* 224 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Uint8', 1, function(init){ + return function Uint8Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }); + +/***/ }, +/* 225 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Uint8', 1, function(init){ + return function Uint8ClampedArray(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }, true); + +/***/ }, +/* 226 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Int16', 2, function(init){ + return function Int16Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }); + +/***/ }, +/* 227 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Uint16', 2, function(init){ + return function Uint16Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }); + +/***/ }, +/* 228 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Int32', 4, function(init){ + return function Int32Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }); + +/***/ }, +/* 229 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Uint32', 4, function(init){ + return function Uint32Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }); + +/***/ }, +/* 230 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Float32', 4, function(init){ + return function Float32Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }); + +/***/ }, +/* 231 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(223)('Float64', 8, function(init){ + return function Float64Array(data, byteOffset, length){ + return init(this, data, byteOffset, length); + }; + }); + +/***/ }, +/* 232 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.1 Reflect.apply(target, thisArgument, argumentsList) + var $export = __webpack_require__(8) + , aFunction = __webpack_require__(21) + , anObject = __webpack_require__(12) + , rApply = (__webpack_require__(4).Reflect || {}).apply + , fApply = Function.apply; + // MS Edge argumentsList argument is optional + $export($export.S + $export.F * !__webpack_require__(7)(function(){ + rApply(function(){}); + }), 'Reflect', { + apply: function apply(target, thisArgument, argumentsList){ + var T = aFunction(target) + , L = anObject(argumentsList); + return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L); + } + }); + +/***/ }, +/* 233 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.2 Reflect.construct(target, argumentsList [, newTarget]) + var $export = __webpack_require__(8) + , create = __webpack_require__(46) + , aFunction = __webpack_require__(21) + , anObject = __webpack_require__(12) + , isObject = __webpack_require__(13) + , fails = __webpack_require__(7) + , bind = __webpack_require__(77) + , rConstruct = (__webpack_require__(4).Reflect || {}).construct; + + // MS Edge supports only 2 arguments and argumentsList argument is optional + // FF Nightly sets third argument as `new.target`, but does not create `this` from it + var NEW_TARGET_BUG = fails(function(){ + function F(){} + return !(rConstruct(function(){}, [], F) instanceof F); + }); + var ARGS_BUG = !fails(function(){ + rConstruct(function(){}); + }); + + $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', { + construct: function construct(Target, args /*, newTarget*/){ + aFunction(Target); + anObject(args); + var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]); + if(ARGS_BUG && !NEW_TARGET_BUG)return rConstruct(Target, args, newTarget); + if(Target == newTarget){ + // w/o altered newTarget, optimization for 0-4 arguments + switch(args.length){ + case 0: return new Target; + case 1: return new Target(args[0]); + case 2: return new Target(args[0], args[1]); + case 3: return new Target(args[0], args[1], args[2]); + case 4: return new Target(args[0], args[1], args[2], args[3]); + } + // w/o altered newTarget, lot of arguments case + var $args = [null]; + $args.push.apply($args, args); + return new (bind.apply(Target, $args)); + } + // with altered newTarget, not support built-in constructors + var proto = newTarget.prototype + , instance = create(isObject(proto) ? proto : Object.prototype) + , result = Function.apply.call(Target, instance, args); + return isObject(result) ? result : instance; + } + }); + +/***/ }, +/* 234 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.3 Reflect.defineProperty(target, propertyKey, attributes) + var dP = __webpack_require__(11) + , $export = __webpack_require__(8) + , anObject = __webpack_require__(12) + , toPrimitive = __webpack_require__(16); + + // MS Edge has broken Reflect.defineProperty - throwing instead of returning false + $export($export.S + $export.F * __webpack_require__(7)(function(){ + Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2}); + }), 'Reflect', { + defineProperty: function defineProperty(target, propertyKey, attributes){ + anObject(target); + propertyKey = toPrimitive(propertyKey, true); + anObject(attributes); + try { + dP.f(target, propertyKey, attributes); + return true; + } catch(e){ + return false; + } + } + }); + +/***/ }, +/* 235 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.4 Reflect.deleteProperty(target, propertyKey) + var $export = __webpack_require__(8) + , gOPD = __webpack_require__(51).f + , anObject = __webpack_require__(12); + + $export($export.S, 'Reflect', { + deleteProperty: function deleteProperty(target, propertyKey){ + var desc = gOPD(anObject(target), propertyKey); + return desc && !desc.configurable ? false : delete target[propertyKey]; + } + }); + +/***/ }, +/* 236 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // 26.1.5 Reflect.enumerate(target) + var $export = __webpack_require__(8) + , anObject = __webpack_require__(12); + var Enumerate = function(iterated){ + this._t = anObject(iterated); // target + this._i = 0; // next index + var keys = this._k = [] // keys + , key; + for(key in iterated)keys.push(key); + }; + __webpack_require__(130)(Enumerate, 'Object', function(){ + var that = this + , keys = that._k + , key; + do { + if(that._i >= keys.length)return {value: undefined, done: true}; + } while(!((key = keys[that._i++]) in that._t)); + return {value: key, done: false}; + }); + + $export($export.S, 'Reflect', { + enumerate: function enumerate(target){ + return new Enumerate(target); + } + }); + +/***/ }, +/* 237 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.6 Reflect.get(target, propertyKey [, receiver]) + var gOPD = __webpack_require__(51) + , getPrototypeOf = __webpack_require__(59) + , has = __webpack_require__(5) + , $export = __webpack_require__(8) + , isObject = __webpack_require__(13) + , anObject = __webpack_require__(12); + + function get(target, propertyKey/*, receiver*/){ + var receiver = arguments.length < 3 ? target : arguments[2] + , desc, proto; + if(anObject(target) === receiver)return target[propertyKey]; + if(desc = gOPD.f(target, propertyKey))return has(desc, 'value') + ? desc.value + : desc.get !== undefined + ? desc.get.call(receiver) + : undefined; + if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver); + } + + $export($export.S, 'Reflect', {get: get}); + +/***/ }, +/* 238 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey) + var gOPD = __webpack_require__(51) + , $export = __webpack_require__(8) + , anObject = __webpack_require__(12); + + $export($export.S, 'Reflect', { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){ + return gOPD.f(anObject(target), propertyKey); + } + }); + +/***/ }, +/* 239 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.8 Reflect.getPrototypeOf(target) + var $export = __webpack_require__(8) + , getProto = __webpack_require__(59) + , anObject = __webpack_require__(12); + + $export($export.S, 'Reflect', { + getPrototypeOf: function getPrototypeOf(target){ + return getProto(anObject(target)); + } + }); + +/***/ }, +/* 240 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.9 Reflect.has(target, propertyKey) + var $export = __webpack_require__(8); + + $export($export.S, 'Reflect', { + has: function has(target, propertyKey){ + return propertyKey in target; + } + }); + +/***/ }, +/* 241 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.10 Reflect.isExtensible(target) + var $export = __webpack_require__(8) + , anObject = __webpack_require__(12) + , $isExtensible = Object.isExtensible; + + $export($export.S, 'Reflect', { + isExtensible: function isExtensible(target){ + anObject(target); + return $isExtensible ? $isExtensible(target) : true; + } + }); + +/***/ }, +/* 242 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.11 Reflect.ownKeys(target) + var $export = __webpack_require__(8); + + $export($export.S, 'Reflect', {ownKeys: __webpack_require__(243)}); + +/***/ }, +/* 243 */ +/***/ function(module, exports, __webpack_require__) { + + // all object keys, includes non-enumerable and symbols + var gOPN = __webpack_require__(50) + , gOPS = __webpack_require__(43) + , anObject = __webpack_require__(12) + , Reflect = __webpack_require__(4).Reflect; + module.exports = Reflect && Reflect.ownKeys || function ownKeys(it){ + var keys = gOPN.f(anObject(it)) + , getSymbols = gOPS.f; + return getSymbols ? keys.concat(getSymbols(it)) : keys; + }; + +/***/ }, +/* 244 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.12 Reflect.preventExtensions(target) + var $export = __webpack_require__(8) + , anObject = __webpack_require__(12) + , $preventExtensions = Object.preventExtensions; + + $export($export.S, 'Reflect', { + preventExtensions: function preventExtensions(target){ + anObject(target); + try { + if($preventExtensions)$preventExtensions(target); + return true; + } catch(e){ + return false; + } + } + }); + +/***/ }, +/* 245 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.13 Reflect.set(target, propertyKey, V [, receiver]) + var dP = __webpack_require__(11) + , gOPD = __webpack_require__(51) + , getPrototypeOf = __webpack_require__(59) + , has = __webpack_require__(5) + , $export = __webpack_require__(8) + , createDesc = __webpack_require__(17) + , anObject = __webpack_require__(12) + , isObject = __webpack_require__(13); + + function set(target, propertyKey, V/*, receiver*/){ + var receiver = arguments.length < 4 ? target : arguments[3] + , ownDesc = gOPD.f(anObject(target), propertyKey) + , existingDescriptor, proto; + if(!ownDesc){ + if(isObject(proto = getPrototypeOf(target))){ + return set(proto, propertyKey, V, receiver); + } + ownDesc = createDesc(0); + } + if(has(ownDesc, 'value')){ + if(ownDesc.writable === false || !isObject(receiver))return false; + existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0); + existingDescriptor.value = V; + dP.f(receiver, propertyKey, existingDescriptor); + return true; + } + return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true); + } + + $export($export.S, 'Reflect', {set: set}); + +/***/ }, +/* 246 */ +/***/ function(module, exports, __webpack_require__) { + + // 26.1.14 Reflect.setPrototypeOf(target, proto) + var $export = __webpack_require__(8) + , setProto = __webpack_require__(73); + + if(setProto)$export($export.S, 'Reflect', { + setPrototypeOf: function setPrototypeOf(target, proto){ + setProto.check(target, proto); + try { + setProto.set(target, proto); + return true; + } catch(e){ + return false; + } + } + }); + +/***/ }, +/* 247 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // https://github.com/tc39/Array.prototype.includes + var $export = __webpack_require__(8) + , $includes = __webpack_require__(36)(true); + + $export($export.P, 'Array', { + includes: function includes(el /*, fromIndex = 0 */){ + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + __webpack_require__(186)('includes'); + +/***/ }, +/* 248 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // https://github.com/mathiasbynens/String.prototype.at + var $export = __webpack_require__(8) + , $at = __webpack_require__(127)(true); + + $export($export.P, 'String', { + at: function at(pos){ + return $at(this, pos); + } + }); + +/***/ }, +/* 249 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // https://github.com/tc39/proposal-string-pad-start-end + var $export = __webpack_require__(8) + , $pad = __webpack_require__(250); + + $export($export.P, 'String', { + padStart: function padStart(maxLength /*, fillString = ' ' */){ + return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); + } + }); + +/***/ }, +/* 250 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/tc39/proposal-string-pad-start-end + var toLength = __webpack_require__(37) + , repeat = __webpack_require__(91) + , defined = __webpack_require__(35); + + module.exports = function(that, maxLength, fillString, left){ + var S = String(defined(that)) + , stringLength = S.length + , fillStr = fillString === undefined ? ' ' : String(fillString) + , intMaxLength = toLength(maxLength); + if(intMaxLength <= stringLength || fillStr == '')return S; + var fillLen = intMaxLength - stringLength + , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); + if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen); + return left ? stringFiller + S : S + stringFiller; + }; + + +/***/ }, +/* 251 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // https://github.com/tc39/proposal-string-pad-start-end + var $export = __webpack_require__(8) + , $pad = __webpack_require__(250); + + $export($export.P, 'String', { + padEnd: function padEnd(maxLength /*, fillString = ' ' */){ + return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); + } + }); + +/***/ }, +/* 252 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // https://github.com/sebmarkbage/ecmascript-string-left-right-trim + __webpack_require__(83)('trimLeft', function($trim){ + return function trimLeft(){ + return $trim(this, 1); + }; + }, 'trimStart'); + +/***/ }, +/* 253 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // https://github.com/sebmarkbage/ecmascript-string-left-right-trim + __webpack_require__(83)('trimRight', function($trim){ + return function trimRight(){ + return $trim(this, 2); + }; + }, 'trimEnd'); + +/***/ }, +/* 254 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // https://tc39.github.io/String.prototype.matchAll/ + var $export = __webpack_require__(8) + , defined = __webpack_require__(35) + , toLength = __webpack_require__(37) + , isRegExp = __webpack_require__(134) + , getFlags = __webpack_require__(196) + , RegExpProto = RegExp.prototype; + + var $RegExpStringIterator = function(regexp, string){ + this._r = regexp; + this._s = string; + }; + + __webpack_require__(130)($RegExpStringIterator, 'RegExp String', function next(){ + var match = this._r.exec(this._s); + return {value: match, done: match === null}; + }); + + $export($export.P, 'String', { + matchAll: function matchAll(regexp){ + defined(this); + if(!isRegExp(regexp))throw TypeError(regexp + ' is not a regexp!'); + var S = String(this) + , flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp) + , rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags); + rx.lastIndex = toLength(regexp.lastIndex); + return new $RegExpStringIterator(rx, S); + } + }); + +/***/ }, +/* 255 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(27)('asyncIterator'); + +/***/ }, +/* 256 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(27)('observable'); + +/***/ }, +/* 257 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/tc39/proposal-object-getownpropertydescriptors + var $export = __webpack_require__(8) + , ownKeys = __webpack_require__(243) + , toIObject = __webpack_require__(32) + , gOPD = __webpack_require__(51) + , createProperty = __webpack_require__(163); + + $export($export.S, 'Object', { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){ + var O = toIObject(object) + , getDesc = gOPD.f + , keys = ownKeys(O) + , result = {} + , i = 0 + , key; + while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key)); + return result; + } + }); + +/***/ }, +/* 258 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/tc39/proposal-object-values-entries + var $export = __webpack_require__(8) + , $values = __webpack_require__(259)(false); + + $export($export.S, 'Object', { + values: function values(it){ + return $values(it); + } + }); + +/***/ }, +/* 259 */ +/***/ function(module, exports, __webpack_require__) { + + var getKeys = __webpack_require__(30) + , toIObject = __webpack_require__(32) + , isEnum = __webpack_require__(44).f; + module.exports = function(isEntries){ + return function(it){ + var O = toIObject(it) + , keys = getKeys(O) + , length = keys.length + , i = 0 + , result = [] + , key; + while(length > i)if(isEnum.call(O, key = keys[i++])){ + result.push(isEntries ? [key, O[key]] : O[key]); + } return result; + }; + }; + +/***/ }, +/* 260 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/tc39/proposal-object-values-entries + var $export = __webpack_require__(8) + , $entries = __webpack_require__(259)(true); + + $export($export.S, 'Object', { + entries: function entries(it){ + return $entries(it); + } + }); + +/***/ }, +/* 261 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , toObject = __webpack_require__(58) + , aFunction = __webpack_require__(21) + , $defineProperty = __webpack_require__(11); + + // B.2.2.2 Object.prototype.__defineGetter__(P, getter) + __webpack_require__(6) && $export($export.P + __webpack_require__(262), 'Object', { + __defineGetter__: function __defineGetter__(P, getter){ + $defineProperty.f(toObject(this), P, {get: aFunction(getter), enumerable: true, configurable: true}); + } + }); + +/***/ }, +/* 262 */ +/***/ function(module, exports, __webpack_require__) { + + // Forced replacement prototype accessors methods + module.exports = __webpack_require__(28)|| !__webpack_require__(7)(function(){ + var K = Math.random(); + // In FF throws only define methods + __defineSetter__.call(null, K, function(){ /* empty */}); + delete __webpack_require__(4)[K]; + }); + +/***/ }, +/* 263 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , toObject = __webpack_require__(58) + , aFunction = __webpack_require__(21) + , $defineProperty = __webpack_require__(11); + + // B.2.2.3 Object.prototype.__defineSetter__(P, setter) + __webpack_require__(6) && $export($export.P + __webpack_require__(262), 'Object', { + __defineSetter__: function __defineSetter__(P, setter){ + $defineProperty.f(toObject(this), P, {set: aFunction(setter), enumerable: true, configurable: true}); + } + }); + +/***/ }, +/* 264 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , toObject = __webpack_require__(58) + , toPrimitive = __webpack_require__(16) + , getPrototypeOf = __webpack_require__(59) + , getOwnPropertyDescriptor = __webpack_require__(51).f; + + // B.2.2.4 Object.prototype.__lookupGetter__(P) + __webpack_require__(6) && $export($export.P + __webpack_require__(262), 'Object', { + __lookupGetter__: function __lookupGetter__(P){ + var O = toObject(this) + , K = toPrimitive(P, true) + , D; + do { + if(D = getOwnPropertyDescriptor(O, K))return D.get; + } while(O = getPrototypeOf(O)); + } + }); + +/***/ }, +/* 265 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var $export = __webpack_require__(8) + , toObject = __webpack_require__(58) + , toPrimitive = __webpack_require__(16) + , getPrototypeOf = __webpack_require__(59) + , getOwnPropertyDescriptor = __webpack_require__(51).f; + + // B.2.2.5 Object.prototype.__lookupSetter__(P) + __webpack_require__(6) && $export($export.P + __webpack_require__(262), 'Object', { + __lookupSetter__: function __lookupSetter__(P){ + var O = toObject(this) + , K = toPrimitive(P, true) + , D; + do { + if(D = getOwnPropertyDescriptor(O, K))return D.set; + } while(O = getPrototypeOf(O)); + } + }); + +/***/ }, +/* 266 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/DavidBruant/Map-Set.prototype.toJSON + var $export = __webpack_require__(8); + + $export($export.P + $export.R, 'Map', {toJSON: __webpack_require__(267)('Map')}); + +/***/ }, +/* 267 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/DavidBruant/Map-Set.prototype.toJSON + var classof = __webpack_require__(75) + , from = __webpack_require__(268); + module.exports = function(NAME){ + return function toJSON(){ + if(classof(this) != NAME)throw TypeError(NAME + "#toJSON isn't generic"); + return from(this); + }; + }; + +/***/ }, +/* 268 */ +/***/ function(module, exports, __webpack_require__) { + + var forOf = __webpack_require__(206); + + module.exports = function(iter, ITERATOR){ + var result = []; + forOf(iter, false, result.push, result, ITERATOR); + return result; + }; + + +/***/ }, +/* 269 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/DavidBruant/Map-Set.prototype.toJSON + var $export = __webpack_require__(8); + + $export($export.P + $export.R, 'Set', {toJSON: __webpack_require__(267)('Set')}); + +/***/ }, +/* 270 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/ljharb/proposal-global + var $export = __webpack_require__(8); + + $export($export.S, 'System', {global: __webpack_require__(4)}); + +/***/ }, +/* 271 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/ljharb/proposal-is-error + var $export = __webpack_require__(8) + , cof = __webpack_require__(34); + + $export($export.S, 'Error', { + isError: function isError(it){ + return cof(it) === 'Error'; + } + }); + +/***/ }, +/* 272 */ +/***/ function(module, exports, __webpack_require__) { + + // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 + var $export = __webpack_require__(8); + + $export($export.S, 'Math', { + iaddh: function iaddh(x0, x1, y0, y1){ + var $x0 = x0 >>> 0 + , $x1 = x1 >>> 0 + , $y0 = y0 >>> 0; + return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0; + } + }); + +/***/ }, +/* 273 */ +/***/ function(module, exports, __webpack_require__) { + + // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 + var $export = __webpack_require__(8); + + $export($export.S, 'Math', { + isubh: function isubh(x0, x1, y0, y1){ + var $x0 = x0 >>> 0 + , $x1 = x1 >>> 0 + , $y0 = y0 >>> 0; + return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0; + } + }); + +/***/ }, +/* 274 */ +/***/ function(module, exports, __webpack_require__) { + + // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 + var $export = __webpack_require__(8); + + $export($export.S, 'Math', { + imulh: function imulh(u, v){ + var UINT16 = 0xffff + , $u = +u + , $v = +v + , u0 = $u & UINT16 + , v0 = $v & UINT16 + , u1 = $u >> 16 + , v1 = $v >> 16 + , t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); + return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16); + } + }); + +/***/ }, +/* 275 */ +/***/ function(module, exports, __webpack_require__) { + + // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 + var $export = __webpack_require__(8); + + $export($export.S, 'Math', { + umulh: function umulh(u, v){ + var UINT16 = 0xffff + , $u = +u + , $v = +v + , u0 = $u & UINT16 + , v0 = $v & UINT16 + , u1 = $u >>> 16 + , v1 = $v >>> 16 + , t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); + return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16); + } + }); + +/***/ }, +/* 276 */ +/***/ function(module, exports, __webpack_require__) { + + var metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , toMetaKey = metadata.key + , ordinaryDefineOwnMetadata = metadata.set; + + metadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){ + ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey)); + }}); + +/***/ }, +/* 277 */ +/***/ function(module, exports, __webpack_require__) { + + var Map = __webpack_require__(211) + , $export = __webpack_require__(8) + , shared = __webpack_require__(23)('metadata') + , store = shared.store || (shared.store = new (__webpack_require__(215))); + + var getOrCreateMetadataMap = function(target, targetKey, create){ + var targetMetadata = store.get(target); + if(!targetMetadata){ + if(!create)return undefined; + store.set(target, targetMetadata = new Map); + } + var keyMetadata = targetMetadata.get(targetKey); + if(!keyMetadata){ + if(!create)return undefined; + targetMetadata.set(targetKey, keyMetadata = new Map); + } return keyMetadata; + }; + var ordinaryHasOwnMetadata = function(MetadataKey, O, P){ + var metadataMap = getOrCreateMetadataMap(O, P, false); + return metadataMap === undefined ? false : metadataMap.has(MetadataKey); + }; + var ordinaryGetOwnMetadata = function(MetadataKey, O, P){ + var metadataMap = getOrCreateMetadataMap(O, P, false); + return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); + }; + var ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){ + getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue); + }; + var ordinaryOwnMetadataKeys = function(target, targetKey){ + var metadataMap = getOrCreateMetadataMap(target, targetKey, false) + , keys = []; + if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); }); + return keys; + }; + var toMetaKey = function(it){ + return it === undefined || typeof it == 'symbol' ? it : String(it); + }; + var exp = function(O){ + $export($export.S, 'Reflect', O); + }; + + module.exports = { + store: store, + map: getOrCreateMetadataMap, + has: ordinaryHasOwnMetadata, + get: ordinaryGetOwnMetadata, + set: ordinaryDefineOwnMetadata, + keys: ordinaryOwnMetadataKeys, + key: toMetaKey, + exp: exp + }; + +/***/ }, +/* 278 */ +/***/ function(module, exports, __webpack_require__) { + + var metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , toMetaKey = metadata.key + , getOrCreateMetadataMap = metadata.map + , store = metadata.store; + + metadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){ + var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]) + , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false); + if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false; + if(metadataMap.size)return true; + var targetMetadata = store.get(target); + targetMetadata['delete'](targetKey); + return !!targetMetadata.size || store['delete'](target); + }}); + +/***/ }, +/* 279 */ +/***/ function(module, exports, __webpack_require__) { + + var metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , getPrototypeOf = __webpack_require__(59) + , ordinaryHasOwnMetadata = metadata.has + , ordinaryGetOwnMetadata = metadata.get + , toMetaKey = metadata.key; + + var ordinaryGetMetadata = function(MetadataKey, O, P){ + var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); + if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P); + var parent = getPrototypeOf(O); + return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; + }; + + metadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){ + return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); + }}); + +/***/ }, +/* 280 */ +/***/ function(module, exports, __webpack_require__) { + + var Set = __webpack_require__(214) + , from = __webpack_require__(268) + , metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , getPrototypeOf = __webpack_require__(59) + , ordinaryOwnMetadataKeys = metadata.keys + , toMetaKey = metadata.key; + + var ordinaryMetadataKeys = function(O, P){ + var oKeys = ordinaryOwnMetadataKeys(O, P) + , parent = getPrototypeOf(O); + if(parent === null)return oKeys; + var pKeys = ordinaryMetadataKeys(parent, P); + return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys; + }; + + metadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){ + return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); + }}); + +/***/ }, +/* 281 */ +/***/ function(module, exports, __webpack_require__) { + + var metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , ordinaryGetOwnMetadata = metadata.get + , toMetaKey = metadata.key; + + metadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){ + return ordinaryGetOwnMetadata(metadataKey, anObject(target) + , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); + }}); + +/***/ }, +/* 282 */ +/***/ function(module, exports, __webpack_require__) { + + var metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , ordinaryOwnMetadataKeys = metadata.keys + , toMetaKey = metadata.key; + + metadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){ + return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); + }}); + +/***/ }, +/* 283 */ +/***/ function(module, exports, __webpack_require__) { + + var metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , getPrototypeOf = __webpack_require__(59) + , ordinaryHasOwnMetadata = metadata.has + , toMetaKey = metadata.key; + + var ordinaryHasMetadata = function(MetadataKey, O, P){ + var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); + if(hasOwn)return true; + var parent = getPrototypeOf(O); + return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; + }; + + metadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){ + return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); + }}); + +/***/ }, +/* 284 */ +/***/ function(module, exports, __webpack_require__) { + + var metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , ordinaryHasOwnMetadata = metadata.has + , toMetaKey = metadata.key; + + metadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){ + return ordinaryHasOwnMetadata(metadataKey, anObject(target) + , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); + }}); + +/***/ }, +/* 285 */ +/***/ function(module, exports, __webpack_require__) { + + var metadata = __webpack_require__(277) + , anObject = __webpack_require__(12) + , aFunction = __webpack_require__(21) + , toMetaKey = metadata.key + , ordinaryDefineOwnMetadata = metadata.set; + + metadata.exp({metadata: function metadata(metadataKey, metadataValue){ + return function decorator(target, targetKey){ + ordinaryDefineOwnMetadata( + metadataKey, metadataValue, + (targetKey !== undefined ? anObject : aFunction)(target), + toMetaKey(targetKey) + ); + }; + }}); + +/***/ }, +/* 286 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask + var $export = __webpack_require__(8) + , microtask = __webpack_require__(209)() + , process = __webpack_require__(4).process + , isNode = __webpack_require__(34)(process) == 'process'; + + $export($export.G, { + asap: function asap(fn){ + var domain = isNode && process.domain; + microtask(domain ? domain.bind(fn) : fn); + } + }); + +/***/ }, +/* 287 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + // https://github.com/zenparsing/es-observable + var $export = __webpack_require__(8) + , global = __webpack_require__(4) + , core = __webpack_require__(9) + , microtask = __webpack_require__(209)() + , OBSERVABLE = __webpack_require__(25)('observable') + , aFunction = __webpack_require__(21) + , anObject = __webpack_require__(12) + , anInstance = __webpack_require__(205) + , redefineAll = __webpack_require__(210) + , hide = __webpack_require__(10) + , forOf = __webpack_require__(206) + , RETURN = forOf.RETURN; + + var getMethod = function(fn){ + return fn == null ? undefined : aFunction(fn); + }; + + var cleanupSubscription = function(subscription){ + var cleanup = subscription._c; + if(cleanup){ + subscription._c = undefined; + cleanup(); + } + }; + + var subscriptionClosed = function(subscription){ + return subscription._o === undefined; + }; + + var closeSubscription = function(subscription){ + if(!subscriptionClosed(subscription)){ + subscription._o = undefined; + cleanupSubscription(subscription); + } + }; + + var Subscription = function(observer, subscriber){ + anObject(observer); + this._c = undefined; + this._o = observer; + observer = new SubscriptionObserver(this); + try { + var cleanup = subscriber(observer) + , subscription = cleanup; + if(cleanup != null){ + if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); }; + else aFunction(cleanup); + this._c = cleanup; + } + } catch(e){ + observer.error(e); + return; + } if(subscriptionClosed(this))cleanupSubscription(this); + }; + + Subscription.prototype = redefineAll({}, { + unsubscribe: function unsubscribe(){ closeSubscription(this); } + }); + + var SubscriptionObserver = function(subscription){ + this._s = subscription; + }; + + SubscriptionObserver.prototype = redefineAll({}, { + next: function next(value){ + var subscription = this._s; + if(!subscriptionClosed(subscription)){ + var observer = subscription._o; + try { + var m = getMethod(observer.next); + if(m)return m.call(observer, value); + } catch(e){ + try { + closeSubscription(subscription); + } finally { + throw e; + } + } + } + }, + error: function error(value){ + var subscription = this._s; + if(subscriptionClosed(subscription))throw value; + var observer = subscription._o; + subscription._o = undefined; + try { + var m = getMethod(observer.error); + if(!m)throw value; + value = m.call(observer, value); + } catch(e){ + try { + cleanupSubscription(subscription); + } finally { + throw e; + } + } cleanupSubscription(subscription); + return value; + }, + complete: function complete(value){ + var subscription = this._s; + if(!subscriptionClosed(subscription)){ + var observer = subscription._o; + subscription._o = undefined; + try { + var m = getMethod(observer.complete); + value = m ? m.call(observer, value) : undefined; + } catch(e){ + try { + cleanupSubscription(subscription); + } finally { + throw e; + } + } cleanupSubscription(subscription); + return value; + } + } + }); + + var $Observable = function Observable(subscriber){ + anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber); + }; + + redefineAll($Observable.prototype, { + subscribe: function subscribe(observer){ + return new Subscription(observer, this._f); + }, + forEach: function forEach(fn){ + var that = this; + return new (core.Promise || global.Promise)(function(resolve, reject){ + aFunction(fn); + var subscription = that.subscribe({ + next : function(value){ + try { + return fn(value); + } catch(e){ + reject(e); + subscription.unsubscribe(); + } + }, + error: reject, + complete: resolve + }); + }); + } + }); + + redefineAll($Observable, { + from: function from(x){ + var C = typeof this === 'function' ? this : $Observable; + var method = getMethod(anObject(x)[OBSERVABLE]); + if(method){ + var observable = anObject(method.call(x)); + return observable.constructor === C ? observable : new C(function(observer){ + return observable.subscribe(observer); + }); + } + return new C(function(observer){ + var done = false; + microtask(function(){ + if(!done){ + try { + if(forOf(x, false, function(it){ + observer.next(it); + if(done)return RETURN; + }) === RETURN)return; + } catch(e){ + if(done)throw e; + observer.error(e); + return; + } observer.complete(); + } + }); + return function(){ done = true; }; + }); + }, + of: function of(){ + for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++]; + return new (typeof this === 'function' ? this : $Observable)(function(observer){ + var done = false; + microtask(function(){ + if(!done){ + for(var i = 0; i < items.length; ++i){ + observer.next(items[i]); + if(done)return; + } observer.complete(); + } + }); + return function(){ done = true; }; + }); + } + }); + + hide($Observable.prototype, OBSERVABLE, function(){ return this; }); + + $export($export.G, {Observable: $Observable}); + + __webpack_require__(192)('Observable'); + +/***/ }, +/* 288 */ +/***/ function(module, exports, __webpack_require__) { + + // ie9- setTimeout & setInterval additional parameters fix + var global = __webpack_require__(4) + , $export = __webpack_require__(8) + , invoke = __webpack_require__(78) + , partial = __webpack_require__(289) + , navigator = global.navigator + , MSIE = !!navigator && /MSIE .\./.test(navigator.userAgent); // <- dirty ie9- check + var wrap = function(set){ + return MSIE ? function(fn, time /*, ...args */){ + return set(invoke( + partial, + [].slice.call(arguments, 2), + typeof fn == 'function' ? fn : Function(fn) + ), time); + } : set; + }; + $export($export.G + $export.B + $export.F * MSIE, { + setTimeout: wrap(global.setTimeout), + setInterval: wrap(global.setInterval) + }); + +/***/ }, +/* 289 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + var path = __webpack_require__(290) + , invoke = __webpack_require__(78) + , aFunction = __webpack_require__(21); + module.exports = function(/* ...pargs */){ + var fn = aFunction(this) + , length = arguments.length + , pargs = Array(length) + , i = 0 + , _ = path._ + , holder = false; + while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true; + return function(/* ...args */){ + var that = this + , aLen = arguments.length + , j = 0, k = 0, args; + if(!holder && !aLen)return invoke(fn, pargs, that); + args = pargs.slice(); + if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++]; + while(aLen > k)args.push(arguments[k++]); + return invoke(fn, args, that); + }; + }; + +/***/ }, +/* 290 */ +/***/ function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(4); + +/***/ }, +/* 291 */ +/***/ function(module, exports, __webpack_require__) { + + var $export = __webpack_require__(8) + , $task = __webpack_require__(208); + $export($export.G + $export.B, { + setImmediate: $task.set, + clearImmediate: $task.clear + }); + +/***/ }, +/* 292 */ +/***/ function(module, exports, __webpack_require__) { + + var $iterators = __webpack_require__(193) + , redefine = __webpack_require__(18) + , global = __webpack_require__(4) + , hide = __webpack_require__(10) + , Iterators = __webpack_require__(129) + , wks = __webpack_require__(25) + , ITERATOR = wks('iterator') + , TO_STRING_TAG = wks('toStringTag') + , ArrayValues = Iterators.Array; + + for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){ + var NAME = collections[i] + , Collection = global[NAME] + , proto = Collection && Collection.prototype + , key; + if(proto){ + if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues); + if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME); + Iterators[NAME] = ArrayValues; + for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true); + } + } + +/***/ }, +/* 293 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global, process) {/** + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * https://raw.github.com/facebook/regenerator/master/LICENSE file. An + * additional grant of patent rights can be found in the PATENTS file in + * the same directory. + */ + + !(function(global) { + "use strict"; + + var hasOwn = Object.prototype.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + var inModule = typeof module === "object"; + var runtime = global.regeneratorRuntime; + if (runtime) { + if (inModule) { + // If regeneratorRuntime is defined globally and we're in a module, + // make the exports object identical to regeneratorRuntime. + module.exports = runtime; + } + // Don't bother evaluating the rest of this file if the runtime was + // already defined globally. + return; + } + + // Define the runtime globally (as expected by generated code) as either + // module.exports (if we're in a module) or a new, empty object. + runtime = global.regeneratorRuntime = inModule ? module.exports : {}; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + runtime.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype; + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + runtime.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + runtime.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `value instanceof AwaitArgument` to determine if the yielded value is + // meant to be awaited. Some may consider the name of this method too + // cutesy, but they are curmudgeons. + runtime.awrap = function(arg) { + return new AwaitArgument(arg); + }; + + function AwaitArgument(arg) { + this.arg = arg; + } + + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value instanceof AwaitArgument) { + return Promise.resolve(value.arg).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. If the Promise is rejected, however, the + // result for this iteration will be rejected with the same + // reason. Note that rejections of yielded Promises are not + // thrown back into the generator function, as is the case + // when an awaited Promise is rejected. This difference in + // behavior between yield and await is important, because it + // allows the consumer to decide what to do with the yielded + // rejection (swallow it and continue, manually .throw it back + // into the generator, abandon iteration, whatever). With + // await, by contrast, there is no opportunity to examine the + // rejection reason outside the generator function, so the + // only option is to throw it from the await expression, and + // let the generator function handle the exception. + result.value = unwrapped; + resolve(result); + }, reject); + } + } + + if (typeof process === "object" && process.domain) { + invoke = process.domain.bind(invoke); + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + runtime.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + + return runtime.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + while (true) { + var delegate = context.delegate; + if (delegate) { + if (method === "return" || + (method === "throw" && delegate.iterator[method] === undefined)) { + // A return or throw (when the delegate iterator has no throw + // method) always terminates the yield* loop. + context.delegate = null; + + // If the delegate iterator has a return method, give it a + // chance to clean up. + var returnMethod = delegate.iterator["return"]; + if (returnMethod) { + var record = tryCatch(returnMethod, delegate.iterator, arg); + if (record.type === "throw") { + // If the return method threw an exception, let that + // exception prevail over the original return or throw. + method = "throw"; + arg = record.arg; + continue; + } + } + + if (method === "return") { + // Continue with the outer return, now that the delegate + // iterator has been terminated. + continue; + } + } + + var record = tryCatch( + delegate.iterator[method], + delegate.iterator, + arg + ); + + if (record.type === "throw") { + context.delegate = null; + + // Like returning generator.throw(uncaught), but without the + // overhead of an extra function call. + method = "throw"; + arg = record.arg; + continue; + } + + // Delegate generator ran and handled its own exceptions so + // regardless of what the method was, we continue as if it is + // "next" with an undefined arg. + method = "next"; + arg = undefined; + + var info = record.arg; + if (info.done) { + context[delegate.resultName] = info.value; + context.next = delegate.nextLoc; + } else { + state = GenStateSuspendedYield; + return info; + } + + context.delegate = null; + } + + if (method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = arg; + + } else if (method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw arg; + } + + if (context.dispatchException(arg)) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + method = "next"; + arg = undefined; + } + + } else if (method === "return") { + context.abrupt("return", arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + var info = { + value: record.arg, + done: context.done + }; + + if (record.arg === ContinueSentinel) { + if (context.delegate && method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + arg = undefined; + } + } else { + return info; + } + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(arg) call above. + method = "throw"; + arg = record.arg; + } + } + }; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp[toStringTagSymbol] = "Generator"; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + runtime.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + runtime.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + return !!caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.next = finallyEntry.finallyLoc; + } else { + this.complete(record); + } + + return ContinueSentinel; + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = record.arg; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + return ContinueSentinel; + } + }; + })( + // Among the various tricks for obtaining a reference to the global + // object, this seems to be the most reliable technique that does not + // use indirect eval (which violates Content Security Policy). + typeof global === "object" ? global : + typeof window === "object" ? window : + typeof self === "object" ? self : this + ); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(294))) + +/***/ }, +/* 294 */ +/***/ function(module, exports) { + + // shim for using process in browser + var process = module.exports = {}; + + // cached from whatever global is present so that test runners that stub it + // don't break things. But we need to wrap it in a try catch in case it is + // wrapped in strict mode code which doesn't define any globals. It's inside a + // function because try/catches deoptimize in certain engines. + + var cachedSetTimeout; + var cachedClearTimeout; + + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); + } + (function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } + } ()) + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + + } + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + + } + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } + }; + + // v8 likes predictible objects + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + process.versions = {}; + + function noop() {} + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { return '/' }; + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + process.umask = function() { return 0; }; + + +/***/ }, +/* 295 */ +/***/ function(module, exports, __webpack_require__) { + + __webpack_require__(296); + module.exports = __webpack_require__(9).RegExp.escape; + +/***/ }, +/* 296 */ +/***/ function(module, exports, __webpack_require__) { + + // https://github.com/benjamingr/RexExp.escape + var $export = __webpack_require__(8) + , $re = __webpack_require__(297)(/[\\^$*+?.()|[\]{}]/g, '\\$&'); + + $export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }}); + + +/***/ }, +/* 297 */ +/***/ function(module, exports) { + + module.exports = function(regExp, replace){ + var replacer = replace === Object(replace) ? function(part){ + return replace[part]; + } : replace; + return function(it){ + return String(it).replace(regExp, replacer); + }; + }; + +/***/ }, +/* 298 */ +/***/ function(module, exports, __webpack_require__) { + + var BSON = __webpack_require__(299), + Binary = __webpack_require__(318), + Code = __webpack_require__(313), + DBRef = __webpack_require__(317), + Decimal128 = __webpack_require__(314), + Double = __webpack_require__(307), + Int32 = __webpack_require__(312), + Long = __webpack_require__(306), + Map = __webpack_require__(305), + MaxKey = __webpack_require__(316), + MinKey = __webpack_require__(315), + ObjectId = __webpack_require__(309), + BSONRegExp = __webpack_require__(310), + Symbol = __webpack_require__(311), + Timestamp = __webpack_require__(308); + + // BSON MAX VALUES + BSON.BSON_INT32_MAX = 0x7FFFFFFF; + BSON.BSON_INT32_MIN = -0x80000000; + + BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1; + BSON.BSON_INT64_MIN = -Math.pow(2, 63); + + // JS MAX PRECISE VALUES + BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. + BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + + // Add BSON types to function creation + BSON.Binary = Binary; + BSON.Code = Code; + BSON.DBRef = DBRef; + BSON.Decimal128 = Decimal128; + BSON.Double = Double; + BSON.Int32 = Int32; + BSON.Long = Long; + BSON.Map = Map; + BSON.MaxKey = MaxKey; + BSON.MinKey = MinKey; + BSON.ObjectId = ObjectId; + BSON.ObjectID = ObjectId; + BSON.BSONRegExp = BSONRegExp; + BSON.Symbol = Symbol; + BSON.Timestamp = Timestamp; + + // Return the BSON + module.exports = BSON; + +/***/ }, +/* 299 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(Buffer) {"use strict"; + + var writeIEEE754 = __webpack_require__(304).writeIEEE754, + readIEEE754 = __webpack_require__(304).readIEEE754, + Map = __webpack_require__(305), + Long = __webpack_require__(306), + Double = __webpack_require__(307), + Timestamp = __webpack_require__(308), + ObjectID = __webpack_require__(309), + BSONRegExp = __webpack_require__(310), + Symbol = __webpack_require__(311), + Int32 = __webpack_require__(312), + Code = __webpack_require__(313), + Decimal128 = __webpack_require__(314), + MinKey = __webpack_require__(315), + MaxKey = __webpack_require__(316), + DBRef = __webpack_require__(317), + Binary = __webpack_require__(318); + + // Parts of the parser + var deserialize = __webpack_require__(319), + serializer = __webpack_require__(323), + calculateObjectSize = __webpack_require__(324); + + /** + * @ignore + * @api private + */ + // Max Size + var MAXSIZE = 1024 * 1024 * 17; + // Max Document Buffer size + var buffer = new Buffer(MAXSIZE); + + var BSON = function () {}; + + /** + * Serialize a Javascript object. + * + * @param {Object} object the Javascript object to serialize. + * @param {Boolean} [options.checkKeys] the serializer will check if keys are valid. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript functions **(default:false)**. + * @param {Boolean} [options.ignoreUndefined=true] ignore undefined fields **(default:true)**. + * @return {Buffer} returns the Buffer object containing the serialized object. + * @api public + */ + BSON.prototype.serialize = function serialize(object, options) { + options = options || {}; + // Unpack the options + var checkKeys = typeof options.checkKeys == 'boolean' ? options.checkKeys : false; + var serializeFunctions = typeof options.serializeFunctions == 'boolean' ? options.serializeFunctions : false; + var ignoreUndefined = typeof options.ignoreUndefined == 'boolean' ? options.ignoreUndefined : true; + + // console.log("===================================== serialize") + // console.log("checkKeys = " + checkKeys) + // console.log("serializeFunctions = " + serializeFunctions) + // console.log("ignoreUndefined = " + ignoreUndefined) + + // Attempt to serialize + var serializationIndex = serializer(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, []); + // Create the final buffer + var finishedBuffer = new Buffer(serializationIndex); + // Copy into the finished buffer + buffer.copy(finishedBuffer, 0, 0, finishedBuffer.length); + // Return the buffer + return finishedBuffer; + }; + + /** + * Serialize a Javascript object using a predefined Buffer and index into the buffer, useful when pre-allocating the space for serialization. + * + * @param {Object} object the Javascript object to serialize. + * @param {Buffer} buffer the Buffer you pre-allocated to store the serialized BSON object. + * @param {Boolean} [options.checkKeys] the serializer will check if keys are valid. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript functions **(default:false)**. + * @param {Boolean} [options.ignoreUndefined=true] ignore undefined fields **(default:true)**. + * @param {Number} [options.index] the index in the buffer where we wish to start serializing into. + * @return {Number} returns the index pointing to the last written byte in the buffer. + * @api public + */ + BSON.prototype.serializeWithBufferAndIndex = function (object, finalBuffer, options) { + options = options || {}; + // Unpack the options + var checkKeys = typeof options.checkKeys == 'boolean' ? options.checkKeys : false; + var serializeFunctions = typeof options.serializeFunctions == 'boolean' ? options.serializeFunctions : false; + var ignoreUndefined = typeof options.ignoreUndefined == 'boolean' ? options.ignoreUndefined : true; + var startIndex = typeof options.index == 'number' ? options.index : 0; + + // console.log("===================================== serializeWithBufferAndIndex") + // console.log("checkKeys = " + checkKeys) + // console.log("serializeFunctions = " + serializeFunctions) + // console.log("ignoreUndefined = " + ignoreUndefined) + // console.log("startIndex = " + startIndex) + + // Attempt to serialize + var serializationIndex = serializer(buffer, object, checkKeys, startIndex || 0, 0, serializeFunctions, ignoreUndefined); + buffer.copy(finalBuffer, startIndex, 0, serializationIndex); + + // Return the index + return serializationIndex - 1; + }; + + /** + * Deserialize data as BSON. + * + * Options + * - **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized. + * - **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse. + * - **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function. + * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits + * + * @param {Buffer} buffer the buffer containing the serialized set of BSON documents. + * @param {Object} [options] additional options used for the deserialization. + * @param {Boolean} [isArray] ignore used for recursive parsing. + * @return {Object} returns the deserialized Javascript Object. + * @api public + */ + BSON.prototype.deserialize = function (data, options) { + return deserialize(data, options); + }; + + /** + * Calculate the bson size for a passed in Javascript object. + * + * @param {Object} object the Javascript object to calculate the BSON byte size for. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript functions **(default:false)**. + * @param {Boolean} [options.ignoreUndefined=true] ignore undefined fields **(default:true)**. + * @return {Number} returns the number of bytes the BSON object will take up. + * @api public + */ + BSON.prototype.calculateObjectSize = function (object, options) { + options = options || {}; + + var serializeFunctions = typeof options.serializeFunctions == 'boolean' ? options.serializeFunctions : false; + var ignoreUndefined = typeof options.ignoreUndefined == 'boolean' ? options.ignoreUndefined : true; + + return calculateObjectSize(object, serializeFunctions, ignoreUndefined); + }; + + /** + * Deserialize stream data as BSON documents. + * + * Options + * - **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized. + * - **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse. + * - **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function. + * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits + * + * @param {Buffer} data the buffer containing the serialized set of BSON documents. + * @param {Number} startIndex the start index in the data Buffer where the deserialization is to start. + * @param {Number} numberOfDocuments number of documents to deserialize. + * @param {Array} documents an array where to store the deserialized documents. + * @param {Number} docStartIndex the index in the documents array from where to start inserting documents. + * @param {Object} [options] additional options used for the deserialization. + * @return {Number} returns the next index in the buffer after deserialization **x** numbers of documents. + * @api public + */ + BSON.prototype.deserializeStream = function (data, startIndex, numberOfDocuments, documents, docStartIndex, options) { + // if(numberOfDocuments !== documents.length) throw new Error("Number of expected results back is less than the number of documents"); + options = options != null ? options : {}; + var index = startIndex; + // Loop over all documents + for (var i = 0; i < numberOfDocuments; i++) { + // Find size of the document + var size = data[index] | data[index + 1] << 8 | data[index + 2] << 16 | data[index + 3] << 24; + // Update options with index + options['index'] = index; + // Parse the document at this point + documents[docStartIndex + i] = this.deserialize(data, options); + // Adjust index by the document size + index = index + size; + } + + // Return object containing end index of parsing and list of documents + return index; + }; + + /** + * @ignore + * @api private + */ + // BSON MAX VALUES + BSON.BSON_INT32_MAX = 0x7FFFFFFF; + BSON.BSON_INT32_MIN = -0x80000000; + + BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1; + BSON.BSON_INT64_MIN = -Math.pow(2, 63); + + // JS MAX PRECISE VALUES + BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. + BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + + // Internal long versions + var JS_INT_MAX_LONG = Long.fromNumber(0x20000000000000); // Any integer up to 2^53 can be precisely represented by a double. + var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down to -2^53 can be precisely represented by a double. + + /** + * Number BSON Type + * + * @classconstant BSON_DATA_NUMBER + **/ + BSON.BSON_DATA_NUMBER = 1; + /** + * String BSON Type + * + * @classconstant BSON_DATA_STRING + **/ + BSON.BSON_DATA_STRING = 2; + /** + * Object BSON Type + * + * @classconstant BSON_DATA_OBJECT + **/ + BSON.BSON_DATA_OBJECT = 3; + /** + * Array BSON Type + * + * @classconstant BSON_DATA_ARRAY + **/ + BSON.BSON_DATA_ARRAY = 4; + /** + * Binary BSON Type + * + * @classconstant BSON_DATA_BINARY + **/ + BSON.BSON_DATA_BINARY = 5; + /** + * ObjectID BSON Type + * + * @classconstant BSON_DATA_OID + **/ + BSON.BSON_DATA_OID = 7; + /** + * Boolean BSON Type + * + * @classconstant BSON_DATA_BOOLEAN + **/ + BSON.BSON_DATA_BOOLEAN = 8; + /** + * Date BSON Type + * + * @classconstant BSON_DATA_DATE + **/ + BSON.BSON_DATA_DATE = 9; + /** + * null BSON Type + * + * @classconstant BSON_DATA_NULL + **/ + BSON.BSON_DATA_NULL = 10; + /** + * RegExp BSON Type + * + * @classconstant BSON_DATA_REGEXP + **/ + BSON.BSON_DATA_REGEXP = 11; + /** + * Code BSON Type + * + * @classconstant BSON_DATA_CODE + **/ + BSON.BSON_DATA_CODE = 13; + /** + * Symbol BSON Type + * + * @classconstant BSON_DATA_SYMBOL + **/ + BSON.BSON_DATA_SYMBOL = 14; + /** + * Code with Scope BSON Type + * + * @classconstant BSON_DATA_CODE_W_SCOPE + **/ + BSON.BSON_DATA_CODE_W_SCOPE = 15; + /** + * 32 bit Integer BSON Type + * + * @classconstant BSON_DATA_INT + **/ + BSON.BSON_DATA_INT = 16; + /** + * Timestamp BSON Type + * + * @classconstant BSON_DATA_TIMESTAMP + **/ + BSON.BSON_DATA_TIMESTAMP = 17; + /** + * Long BSON Type + * + * @classconstant BSON_DATA_LONG + **/ + BSON.BSON_DATA_LONG = 18; + /** + * MinKey BSON Type + * + * @classconstant BSON_DATA_MIN_KEY + **/ + BSON.BSON_DATA_MIN_KEY = 0xff; + /** + * MaxKey BSON Type + * + * @classconstant BSON_DATA_MAX_KEY + **/ + BSON.BSON_DATA_MAX_KEY = 0x7f; + + /** + * Binary Default Type + * + * @classconstant BSON_BINARY_SUBTYPE_DEFAULT + **/ + BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0; + /** + * Binary Function Type + * + * @classconstant BSON_BINARY_SUBTYPE_FUNCTION + **/ + BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1; + /** + * Binary Byte Array Type + * + * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY + **/ + BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; + /** + * Binary UUID Type + * + * @classconstant BSON_BINARY_SUBTYPE_UUID + **/ + BSON.BSON_BINARY_SUBTYPE_UUID = 3; + /** + * Binary MD5 Type + * + * @classconstant BSON_BINARY_SUBTYPE_MD5 + **/ + BSON.BSON_BINARY_SUBTYPE_MD5 = 4; + /** + * Binary User Defined Type + * + * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED + **/ + BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; + + // Return BSON + module.exports = BSON; + module.exports.Code = Code; + module.exports.Map = Map; + module.exports.Symbol = Symbol; + module.exports.BSON = BSON; + module.exports.DBRef = DBRef; + module.exports.Binary = Binary; + module.exports.ObjectID = ObjectID; + module.exports.Long = Long; + module.exports.Timestamp = Timestamp; + module.exports.Double = Double; + module.exports.Int32 = Int32; + module.exports.MinKey = MinKey; + module.exports.MaxKey = MaxKey; + module.exports.BSONRegExp = BSONRegExp; + module.exports.Decimal128 = Decimal128; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(300).Buffer)) + +/***/ }, +/* 300 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(Buffer, global) {/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + /* eslint-disable no-proto */ + + 'use strict' + + var base64 = __webpack_require__(301) + var ieee754 = __webpack_require__(302) + var isArray = __webpack_require__(303) + + exports.Buffer = Buffer + exports.SlowBuffer = SlowBuffer + exports.INSPECT_MAX_BYTES = 50 + + /** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ + Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined + ? global.TYPED_ARRAY_SUPPORT + : typedArraySupport() + + /* + * Export kMaxLength after typed array support is determined. + */ + exports.kMaxLength = kMaxLength() + + function typedArraySupport () { + try { + var arr = new Uint8Array(1) + arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } + } + + function kMaxLength () { + return Buffer.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff + } + + function createBuffer (that, length) { + if (kMaxLength() < length) { + throw new RangeError('Invalid typed array length') + } + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length) + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer(length) + } + that.length = length + } + + return that + } + + /** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + + function Buffer (arg, encodingOrOffset, length) { + if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { + return new Buffer(arg, encodingOrOffset, length) + } + + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error( + 'If encoding is specified then the first argument must be a string' + ) + } + return allocUnsafe(this, arg) + } + return from(this, arg, encodingOrOffset, length) + } + + Buffer.poolSize = 8192 // not used by this implementation + + // TODO: Legacy, not needed anymore. Remove in next major version. + Buffer._augment = function (arr) { + arr.__proto__ = Buffer.prototype + return arr + } + + function from (that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } + + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer(that, value, encodingOrOffset, length) + } + + if (typeof value === 'string') { + return fromString(that, value, encodingOrOffset) + } + + return fromObject(that, value) + } + + /** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ + Buffer.from = function (value, encodingOrOffset, length) { + return from(null, value, encodingOrOffset, length) + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype + Buffer.__proto__ = Uint8Array + if (typeof Symbol !== 'undefined' && Symbol.species && + Buffer[Symbol.species] === Buffer) { + // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true + }) + } + } + + function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number') + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative') + } + } + + function alloc (that, size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(that, size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(that, size).fill(fill, encoding) + : createBuffer(that, size).fill(fill) + } + return createBuffer(that, size) + } + + /** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ + Buffer.alloc = function (size, fill, encoding) { + return alloc(null, size, fill, encoding) + } + + function allocUnsafe (that, size) { + assertSize(size) + that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0 + } + } + return that + } + + /** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ + Buffer.allocUnsafe = function (size) { + return allocUnsafe(null, size) + } + /** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ + Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(null, size) + } + + function fromString (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } + + var length = byteLength(string, encoding) | 0 + that = createBuffer(that, length) + + var actual = that.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual) + } + + return that + } + + function fromArrayLike (that, array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + that = createBuffer(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that + } + + function fromArrayBuffer (that, array, byteOffset, length) { + array.byteLength // this throws if `array` is not a valid ArrayBuffer + + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds') + } + + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array) + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset) + } else { + array = new Uint8Array(array, byteOffset, length) + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike(that, array) + } + return that + } + + function fromObject (that, obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + that = createBuffer(that, len) + + if (that.length === 0) { + return that + } + + obj.copy(that, 0, 0, len) + return that + } + + if (obj) { + if ((typeof ArrayBuffer !== 'undefined' && + obj.buffer instanceof ArrayBuffer) || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan(obj.length)) { + return createBuffer(that, 0) + } + return fromArrayLike(that, obj) + } + + if (obj.type === 'Buffer' && isArray(obj.data)) { + return fromArrayLike(that, obj.data) + } + } + + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') + } + + function checked (length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength().toString(16) + ' bytes') + } + return length | 0 + } + + function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) + } + + Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) + } + + Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 + } + + Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } + } + + Buffer.concat = function concat (list, length) { + if (!isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer + } + + function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && + (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + string = '' + string + } + + var len = string.length + if (len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) return utf8ToBytes(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } + } + Buffer.byteLength = byteLength + + function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } + } + + // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect + // Buffer instances. + Buffer.prototype._isBuffer = true + + function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i + } + + Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this + } + + Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this + } + + Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this + } + + Buffer.prototype.toString = function toString () { + var length = this.length | 0 + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) + } + + Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 + } + + Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' + } + + Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (!Buffer.isBuffer(target)) { + throw new TypeError('Argument must be a Buffer') + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 + } + + // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, + // OR the last index of `val` in `buffer` at offset <= `byteOffset`. + // + // Arguments: + // - buffer - a Buffer to search + // - val - a string, Buffer, or number + // - byteOffset - an index into `buffer`; will be clamped to an int32 + // - encoding - an optional encoding, relevant is val is a string + // - dir - true for indexOf, false for lastIndexOf + function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (Buffer.TYPED_ARRAY_SUPPORT && + typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') + } + + function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 + } + + Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 + } + + Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) + } + + Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) + } + + function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) return i + buf[offset + i] = parsed + } + return i + } + + function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) + } + + function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) + } + + function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) + } + + function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) + } + + function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) + } + + Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0 + if (isFinite(length)) { + length = length | 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } + } + + Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } + } + + function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } + } + + function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) + } + + // Based on http://stackoverflow.com/a/22747272/680742, the browser with + // the lowest limit is Chrome, with 0x10000 args. + // We go 1 magnitude less, for safety + var MAX_ARGUMENTS_LENGTH = 0x1000 + + function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res + } + + function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret + } + + function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret + } + + function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += toHex(buf[i]) + } + return out + } + + function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res + } + + Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end) + newBuf.__proto__ = Buffer.prototype + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start] + } + } + + return newBuf + } + + /* + * Need to make sure that buffer isn't trying to write out of bounds. + */ + function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') + } + + Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val + } + + Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val + } + + Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] + } + + Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) + } + + Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] + } + + Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) + } + + Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) + } + + Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val + } + + Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val + } + + Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) + } + + Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val + } + + Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val + } + + Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) + } + + Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) + } + + Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) + } + + Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) + } + + Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) + } + + Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) + } + + function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') + } + + Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength + } + + Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength + } + + Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = (value & 0xff) + return offset + 1 + } + + function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } + } + + Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 + } + + Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 + } + + function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } + } + + Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 + } + + Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 + } + + Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength + } + + Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength + } + + Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 + } + + Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 + } + + Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 + } + + Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 + } + + Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 + } + + function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') + } + + function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 + } + + Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) + } + + Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) + } + + function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 + } + + Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) + } + + Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) + } + + // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) + Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + var i + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start] + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, start + len), + targetStart + ) + } + + return len + } + + // Usage: + // buffer.fill(number[, offset[, end]]) + // buffer.fill(buffer[, offset[, end]]) + // buffer.fill(string[, offset[, end]][, encoding]) + Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if (code < 256) { + val = code + } + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + } else if (typeof val === 'number') { + val = val & 255 + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : utf8ToBytes(new Buffer(val, encoding).toString()) + var len = bytes.length + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this + } + + // HELPER FUNCTIONS + // ================ + + var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g + + function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str + } + + function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') + } + + function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) + } + + function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes + } + + function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray + } + + function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray + } + + function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) + } + + function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i + } + + function isnan (val) { + return val !== val // eslint-disable-line no-self-compare + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(300).Buffer, (function() { return this; }()))) + +/***/ }, +/* 301 */ +/***/ function(module, exports) { + + 'use strict' + + exports.byteLength = byteLength + exports.toByteArray = toByteArray + exports.fromByteArray = fromByteArray + + var lookup = [] + var revLookup = [] + var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i + } + + revLookup['-'.charCodeAt(0)] = 62 + revLookup['_'.charCodeAt(0)] = 63 + + function placeHoldersCount (b64) { + var len = b64.length + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 + } + + function byteLength (b64) { + // base64 is 4/3 + up to two characters of the original data + return b64.length * 3 / 4 - placeHoldersCount(b64) + } + + function toByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + var len = b64.length + placeHolders = placeHoldersCount(b64) + + arr = new Arr(len * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? len - 4 : len + + var L = 0 + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] + arr[L++] = (tmp >> 16) & 0xFF + arr[L++] = (tmp >> 8) & 0xFF + arr[L++] = tmp & 0xFF + } + + if (placeHolders === 2) { + tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[L++] = tmp & 0xFF + } else if (placeHolders === 1) { + tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[L++] = (tmp >> 8) & 0xFF + arr[L++] = tmp & 0xFF + } + + return arr + } + + function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] + } + + function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output.push(tripletToBase64(tmp)) + } + return output.join('') + } + + function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var output = '' + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + output += lookup[tmp >> 2] + output += lookup[(tmp << 4) & 0x3F] + output += '==' + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) + output += lookup[tmp >> 10] + output += lookup[(tmp >> 4) & 0x3F] + output += lookup[(tmp << 2) & 0x3F] + output += '=' + } + + parts.push(output) + + return parts.join('') + } + + +/***/ }, +/* 302 */ +/***/ function(module, exports) { + + exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) + } + + exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 + } + + +/***/ }, +/* 303 */ +/***/ function(module, exports) { + + var toString = {}.toString; + + module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; + }; + + +/***/ }, +/* 304 */ +/***/ function(module, exports) { + + // Copyright (c) 2008, Fair Oaks Labs, Inc. + // 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 Fair Oaks Labs, 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. + // + // + // Modifications to writeIEEE754 to support negative zeroes made by Brian White + + var readIEEE754 = function (buffer, offset, endian, mLen, nBytes) { + var e, + m, + bBE = endian === 'big', + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = bBE ? 0 : nBytes - 1, + d = bBE ? 1 : -1, + s = buffer[offset + i]; + + i += d; + + e = s & (1 << -nBits) - 1; + s >>= -nBits; + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : (s ? -1 : 1) * Infinity; + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); + }; + + var writeIEEE754 = function (buffer, value, offset, endian, mLen, nBytes) { + var e, + m, + c, + bBE = endian === 'big', + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0, + i = bBE ? nBytes - 1 : 0, + d = bBE ? -1 : 1, + s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = e << mLen | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; + }; + + exports.readIEEE754 = readIEEE754; + exports.writeIEEE754 = writeIEEE754; + +/***/ }, +/* 305 */ +/***/ function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {"use strict"; + + // We have an ES6 Map available, return the native instance + + if (typeof global.Map !== 'undefined') { + module.exports = global.Map; + module.exports.Map = global.Map; + } else { + // We will return a polyfill + var Map = function (array) { + this._keys = []; + this._values = {}; + + for (var i = 0; i < array.length; i++) { + if (array[i] == null) continue; // skip null and undefined + var entry = array[i]; + var key = entry[0]; + var value = entry[1]; + // Add the key to the list of keys in order + this._keys.push(key); + // Add the key and value to the values dictionary with a point + // to the location in the ordered keys list + this._values[key] = { v: value, i: this._keys.length - 1 }; + } + }; + + Map.prototype.clear = function () { + this._keys = []; + this._values = {}; + }; + + Map.prototype.delete = function (key) { + var value = this._values[key]; + if (value == null) return false; + // Delete entry + delete this._values[key]; + // Remove the key from the ordered keys list + this._keys.splice(value.i, 1); + return true; + }; + + Map.prototype.entries = function () { + var self = this; + var index = 0; + + return { + next: function () { + var key = self._keys[index++]; + return { + value: key !== undefined ? [key, self._values[key].v] : undefined, + done: key !== undefined ? false : true + }; + } + }; + }; + + Map.prototype.forEach = function (callback, self) { + self = self || this; + + for (var i = 0; i < this._keys.length; i++) { + var key = this._keys[i]; + // Call the forEach callback + callback.call(self, this._values[key].v, key, self); + } + }; + + Map.prototype.get = function (key) { + return this._values[key] ? this._values[key].v : undefined; + }; + + Map.prototype.has = function (key) { + return this._values[key] != null; + }; + + Map.prototype.keys = function (key) { + var self = this; + var index = 0; + + return { + next: function () { + var key = self._keys[index++]; + return { + value: key !== undefined ? key : undefined, + done: key !== undefined ? false : true + }; + } + }; + }; + + Map.prototype.set = function (key, value) { + if (this._values[key]) { + this._values[key].v = value; + return this; + } + + // Add the key to the list of keys in order + this._keys.push(key); + // Add the key and value to the values dictionary with a point + // to the location in the ordered keys list + this._values[key] = { v: value, i: this._keys.length - 1 }; + return this; + }; + + Map.prototype.values = function (key, value) { + var self = this; + var index = 0; + + return { + next: function () { + var key = self._keys[index++]; + return { + value: key !== undefined ? self._values[key].v : undefined, + done: key !== undefined ? false : true + }; + } + }; + }; + + // Last ismaster + Object.defineProperty(Map.prototype, 'size', { + enumerable: true, + get: function () { + return this._keys.length; + } + }); + + module.exports = Map; + module.exports.Map = Map; + } + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 306 */ +/***/ function(module, exports) { + + // 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. + // + // Copyright 2009 Google Inc. All Rights Reserved + + /** + * Defines a Long class for representing a 64-bit two's-complement + * integer value, which faithfully simulates the behavior of a Java "Long". This + * implementation is derived from LongLib in GWT. + * + * Constructs a 64-bit two's-complement integer, given its low and high 32-bit + * values as *signed* integers. See the from* functions below for more + * convenient ways of constructing Longs. + * + * The internal representation of a Long is the two given signed, 32-bit values. + * We use 32-bit pieces because these are the size of integers on which + * Javascript performs bit-operations. For operations like addition and + * multiplication, we split each number into 16-bit pieces, which can easily be + * multiplied within Javascript's floating-point representation without overflow + * or change in sign. + * + * In the algorithms below, we frequently reduce the negative case to the + * positive case by negating the input(s) and then post-processing the result. + * Note that we must ALWAYS check specially whether those values are MIN_VALUE + * (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as + * a positive number, it overflows back into a negative). Not handling this + * case would often result in infinite recursion. + * + * @class + * @param {number} low the low (signed) 32 bits of the Long. + * @param {number} high the high (signed) 32 bits of the Long. + * @return {Long} + */ + function Long(low, high) { + if (!(this instanceof Long)) return new Long(low, high); + + this._bsontype = 'Long'; + /** + * @type {number} + * @ignore + */ + this.low_ = low | 0; // force into 32 signed bits. + + /** + * @type {number} + * @ignore + */ + this.high_ = high | 0; // force into 32 signed bits. + }; + + /** + * Return the int value. + * + * @method + * @return {number} the value, assuming it is a 32-bit integer. + */ + Long.prototype.toInt = function () { + return this.low_; + }; + + /** + * Return the Number value. + * + * @method + * @return {number} the closest floating-point representation to this value. + */ + Long.prototype.toNumber = function () { + return this.high_ * Long.TWO_PWR_32_DBL_ + this.getLowBitsUnsigned(); + }; + + /** + * Return the JSON value. + * + * @method + * @return {string} the JSON representation. + */ + Long.prototype.toJSON = function () { + return this.toString(); + }; + + /** + * Return the String value. + * + * @method + * @param {number} [opt_radix] the radix in which the text should be written. + * @return {string} the textual representation of this value. + */ + Long.prototype.toString = function (opt_radix) { + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (this.isZero()) { + return '0'; + } + + if (this.isNegative()) { + if (this.equals(Long.MIN_VALUE)) { + // We need to change the Long value before it can be negated, so we remove + // the bottom-most digit in this base and then recurse to do the rest. + var radixLong = Long.fromNumber(radix); + var div = this.div(radixLong); + var rem = div.multiply(radixLong).subtract(this); + return div.toString(radix) + rem.toInt().toString(radix); + } else { + return '-' + this.negate().toString(radix); + } + } + + // Do several (6) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = Long.fromNumber(Math.pow(radix, 6)); + + var rem = this; + var result = ''; + while (true) { + var remDiv = rem.div(radixToPower); + var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt(); + var digits = intval.toString(radix); + + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } else { + while (digits.length < 6) { + digits = '0' + digits; + } + result = '' + digits + result; + } + } + }; + + /** + * Return the high 32-bits value. + * + * @method + * @return {number} the high 32-bits as a signed value. + */ + Long.prototype.getHighBits = function () { + return this.high_; + }; + + /** + * Return the low 32-bits value. + * + * @method + * @return {number} the low 32-bits as a signed value. + */ + Long.prototype.getLowBits = function () { + return this.low_; + }; + + /** + * Return the low unsigned 32-bits value. + * + * @method + * @return {number} the low 32-bits as an unsigned value. + */ + Long.prototype.getLowBitsUnsigned = function () { + return this.low_ >= 0 ? this.low_ : Long.TWO_PWR_32_DBL_ + this.low_; + }; + + /** + * Returns the number of bits needed to represent the absolute value of this Long. + * + * @method + * @return {number} Returns the number of bits needed to represent the absolute value of this Long. + */ + Long.prototype.getNumBitsAbs = function () { + if (this.isNegative()) { + if (this.equals(Long.MIN_VALUE)) { + return 64; + } else { + return this.negate().getNumBitsAbs(); + } + } else { + var val = this.high_ != 0 ? this.high_ : this.low_; + for (var bit = 31; bit > 0; bit--) { + if ((val & 1 << bit) != 0) { + break; + } + } + return this.high_ != 0 ? bit + 33 : bit + 1; + } + }; + + /** + * Return whether this value is zero. + * + * @method + * @return {boolean} whether this value is zero. + */ + Long.prototype.isZero = function () { + return this.high_ == 0 && this.low_ == 0; + }; + + /** + * Return whether this value is negative. + * + * @method + * @return {boolean} whether this value is negative. + */ + Long.prototype.isNegative = function () { + return this.high_ < 0; + }; + + /** + * Return whether this value is odd. + * + * @method + * @return {boolean} whether this value is odd. + */ + Long.prototype.isOdd = function () { + return (this.low_ & 1) == 1; + }; + + /** + * Return whether this Long equals the other + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long equals the other + */ + Long.prototype.equals = function (other) { + return this.high_ == other.high_ && this.low_ == other.low_; + }; + + /** + * Return whether this Long does not equal the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long does not equal the other. + */ + Long.prototype.notEquals = function (other) { + return this.high_ != other.high_ || this.low_ != other.low_; + }; + + /** + * Return whether this Long is less than the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long is less than the other. + */ + Long.prototype.lessThan = function (other) { + return this.compare(other) < 0; + }; + + /** + * Return whether this Long is less than or equal to the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long is less than or equal to the other. + */ + Long.prototype.lessThanOrEqual = function (other) { + return this.compare(other) <= 0; + }; + + /** + * Return whether this Long is greater than the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long is greater than the other. + */ + Long.prototype.greaterThan = function (other) { + return this.compare(other) > 0; + }; + + /** + * Return whether this Long is greater than or equal to the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long is greater than or equal to the other. + */ + Long.prototype.greaterThanOrEqual = function (other) { + return this.compare(other) >= 0; + }; + + /** + * Compares this Long with the given one. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} 0 if they are the same, 1 if the this is greater, and -1 if the given one is greater. + */ + Long.prototype.compare = function (other) { + if (this.equals(other)) { + return 0; + } + + var thisNeg = this.isNegative(); + var otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) { + return -1; + } + if (!thisNeg && otherNeg) { + return 1; + } + + // at this point, the signs are the same, so subtraction will not overflow + if (this.subtract(other).isNegative()) { + return -1; + } else { + return 1; + } + }; + + /** + * The negation of this value. + * + * @method + * @return {Long} the negation of this value. + */ + Long.prototype.negate = function () { + if (this.equals(Long.MIN_VALUE)) { + return Long.MIN_VALUE; + } else { + return this.not().add(Long.ONE); + } + }; + + /** + * Returns the sum of this and the given Long. + * + * @method + * @param {Long} other Long to add to this one. + * @return {Long} the sum of this and the given Long. + */ + Long.prototype.add = function (other) { + // Divide each number into 4 chunks of 16 bits, and then sum the chunks. + + var a48 = this.high_ >>> 16; + var a32 = this.high_ & 0xFFFF; + var a16 = this.low_ >>> 16; + var a00 = this.low_ & 0xFFFF; + + var b48 = other.high_ >>> 16; + var b32 = other.high_ & 0xFFFF; + var b16 = other.low_ >>> 16; + var b00 = other.low_ & 0xFFFF; + + var c48 = 0, + c32 = 0, + c16 = 0, + c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 0xFFFF; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c48 += a48 + b48; + c48 &= 0xFFFF; + return Long.fromBits(c16 << 16 | c00, c48 << 16 | c32); + }; + + /** + * Returns the difference of this and the given Long. + * + * @method + * @param {Long} other Long to subtract from this. + * @return {Long} the difference of this and the given Long. + */ + Long.prototype.subtract = function (other) { + return this.add(other.negate()); + }; + + /** + * Returns the product of this and the given Long. + * + * @method + * @param {Long} other Long to multiply with this. + * @return {Long} the product of this and the other. + */ + Long.prototype.multiply = function (other) { + if (this.isZero()) { + return Long.ZERO; + } else if (other.isZero()) { + return Long.ZERO; + } + + if (this.equals(Long.MIN_VALUE)) { + return other.isOdd() ? Long.MIN_VALUE : Long.ZERO; + } else if (other.equals(Long.MIN_VALUE)) { + return this.isOdd() ? Long.MIN_VALUE : Long.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().multiply(other.negate()); + } else { + return this.negate().multiply(other).negate(); + } + } else if (other.isNegative()) { + return this.multiply(other.negate()).negate(); + } + + // If both Longs are small, use float multiplication + if (this.lessThan(Long.TWO_PWR_24_) && other.lessThan(Long.TWO_PWR_24_)) { + return Long.fromNumber(this.toNumber() * other.toNumber()); + } + + // Divide each Long into 4 chunks of 16 bits, and then add up 4x4 products. + // We can skip products that would overflow. + + var a48 = this.high_ >>> 16; + var a32 = this.high_ & 0xFFFF; + var a16 = this.low_ >>> 16; + var a00 = this.low_ & 0xFFFF; + + var b48 = other.high_ >>> 16; + var b32 = other.high_ & 0xFFFF; + var b16 = other.low_ >>> 16; + var b00 = other.low_ & 0xFFFF; + + var c48 = 0, + c32 = 0, + c16 = 0, + c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 0xFFFF; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 0xFFFF; + return Long.fromBits(c16 << 16 | c00, c48 << 16 | c32); + }; + + /** + * Returns this Long divided by the given one. + * + * @method + * @param {Long} other Long by which to divide. + * @return {Long} this Long divided by the given one. + */ + Long.prototype.div = function (other) { + if (other.isZero()) { + throw Error('division by zero'); + } else if (this.isZero()) { + return Long.ZERO; + } + + if (this.equals(Long.MIN_VALUE)) { + if (other.equals(Long.ONE) || other.equals(Long.NEG_ONE)) { + return Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE + } else if (other.equals(Long.MIN_VALUE)) { + return Long.ONE; + } else { + // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|. + var halfThis = this.shiftRight(1); + var approx = halfThis.div(other).shiftLeft(1); + if (approx.equals(Long.ZERO)) { + return other.isNegative() ? Long.ONE : Long.NEG_ONE; + } else { + var rem = this.subtract(other.multiply(approx)); + var result = approx.add(rem.div(other)); + return result; + } + } + } else if (other.equals(Long.MIN_VALUE)) { + return Long.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().div(other.negate()); + } else { + return this.negate().div(other).negate(); + } + } else if (other.isNegative()) { + return this.div(other.negate()).negate(); + } + + // Repeat the following until the remainder is less than other: find a + // floating-point that approximates remainder / other *from below*, add this + // into the result, and subtract it from the remainder. It is critical that + // the approximate value is less than or equal to the real value so that the + // remainder never becomes negative. + var res = Long.ZERO; + var rem = this; + while (rem.greaterThanOrEqual(other)) { + // Approximate the result of division. This may be a little greater or + // smaller than the actual value. + var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber())); + + // We will tweak the approximate result by changing it in the 48-th digit or + // the smallest non-fractional digit, whichever is larger. + var log2 = Math.ceil(Math.log(approx) / Math.LN2); + var delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48); + + // Decrease the approximation until it is smaller than the remainder. Note + // that if it is too large, the product overflows and is negative. + var approxRes = Long.fromNumber(approx); + var approxRem = approxRes.multiply(other); + while (approxRem.isNegative() || approxRem.greaterThan(rem)) { + approx -= delta; + approxRes = Long.fromNumber(approx); + approxRem = approxRes.multiply(other); + } + + // We know the answer can't be zero... and actually, zero would cause + // infinite recursion since we would make no progress. + if (approxRes.isZero()) { + approxRes = Long.ONE; + } + + res = res.add(approxRes); + rem = rem.subtract(approxRem); + } + return res; + }; + + /** + * Returns this Long modulo the given one. + * + * @method + * @param {Long} other Long by which to mod. + * @return {Long} this Long modulo the given one. + */ + Long.prototype.modulo = function (other) { + return this.subtract(this.div(other).multiply(other)); + }; + + /** + * The bitwise-NOT of this value. + * + * @method + * @return {Long} the bitwise-NOT of this value. + */ + Long.prototype.not = function () { + return Long.fromBits(~this.low_, ~this.high_); + }; + + /** + * Returns the bitwise-AND of this Long and the given one. + * + * @method + * @param {Long} other the Long with which to AND. + * @return {Long} the bitwise-AND of this and the other. + */ + Long.prototype.and = function (other) { + return Long.fromBits(this.low_ & other.low_, this.high_ & other.high_); + }; + + /** + * Returns the bitwise-OR of this Long and the given one. + * + * @method + * @param {Long} other the Long with which to OR. + * @return {Long} the bitwise-OR of this and the other. + */ + Long.prototype.or = function (other) { + return Long.fromBits(this.low_ | other.low_, this.high_ | other.high_); + }; + + /** + * Returns the bitwise-XOR of this Long and the given one. + * + * @method + * @param {Long} other the Long with which to XOR. + * @return {Long} the bitwise-XOR of this and the other. + */ + Long.prototype.xor = function (other) { + return Long.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_); + }; + + /** + * Returns this Long with bits shifted to the left by the given amount. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Long} this shifted to the left by the given amount. + */ + Long.prototype.shiftLeft = function (numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var low = this.low_; + if (numBits < 32) { + var high = this.high_; + return Long.fromBits(low << numBits, high << numBits | low >>> 32 - numBits); + } else { + return Long.fromBits(0, low << numBits - 32); + } + } + }; + + /** + * Returns this Long with bits shifted to the right by the given amount. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Long} this shifted to the right by the given amount. + */ + Long.prototype.shiftRight = function (numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var high = this.high_; + if (numBits < 32) { + var low = this.low_; + return Long.fromBits(low >>> numBits | high << 32 - numBits, high >> numBits); + } else { + return Long.fromBits(high >> numBits - 32, high >= 0 ? 0 : -1); + } + } + }; + + /** + * Returns this Long with bits shifted to the right by the given amount, with the new top bits matching the current sign bit. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Long} this shifted to the right by the given amount, with zeros placed into the new leading bits. + */ + Long.prototype.shiftRightUnsigned = function (numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var high = this.high_; + if (numBits < 32) { + var low = this.low_; + return Long.fromBits(low >>> numBits | high << 32 - numBits, high >>> numBits); + } else if (numBits == 32) { + return Long.fromBits(high, 0); + } else { + return Long.fromBits(high >>> numBits - 32, 0); + } + } + }; + + /** + * Returns a Long representing the given (32-bit) integer value. + * + * @method + * @param {number} value the 32-bit integer in question. + * @return {Long} the corresponding Long value. + */ + Long.fromInt = function (value) { + if (-128 <= value && value < 128) { + var cachedObj = Long.INT_CACHE_[value]; + if (cachedObj) { + return cachedObj; + } + } + + var obj = new Long(value | 0, value < 0 ? -1 : 0); + if (-128 <= value && value < 128) { + Long.INT_CACHE_[value] = obj; + } + return obj; + }; + + /** + * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + * + * @method + * @param {number} value the number in question. + * @return {Long} the corresponding Long value. + */ + Long.fromNumber = function (value) { + if (isNaN(value) || !isFinite(value)) { + return Long.ZERO; + } else if (value <= -Long.TWO_PWR_63_DBL_) { + return Long.MIN_VALUE; + } else if (value + 1 >= Long.TWO_PWR_63_DBL_) { + return Long.MAX_VALUE; + } else if (value < 0) { + return Long.fromNumber(-value).negate(); + } else { + return new Long(value % Long.TWO_PWR_32_DBL_ | 0, value / Long.TWO_PWR_32_DBL_ | 0); + } + }; + + /** + * Returns a Long representing the 64-bit integer that comes by concatenating the given high and low bits. Each is assumed to use 32 bits. + * + * @method + * @param {number} lowBits the low 32-bits. + * @param {number} highBits the high 32-bits. + * @return {Long} the corresponding Long value. + */ + Long.fromBits = function (lowBits, highBits) { + return new Long(lowBits, highBits); + }; + + /** + * Returns a Long representation of the given string, written using the given radix. + * + * @method + * @param {string} str the textual representation of the Long. + * @param {number} opt_radix the radix in which the text is written. + * @return {Long} the corresponding Long value. + */ + Long.fromString = function (str, opt_radix) { + if (str.length == 0) { + throw Error('number format error: empty string'); + } + + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (str.charAt(0) == '-') { + return Long.fromString(str.substring(1), radix).negate(); + } else if (str.indexOf('-') >= 0) { + throw Error('number format error: interior "-" character: ' + str); + } + + // Do several (8) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = Long.fromNumber(Math.pow(radix, 8)); + + var result = Long.ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i); + var value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = Long.fromNumber(Math.pow(radix, size)); + result = result.multiply(power).add(Long.fromNumber(value)); + } else { + result = result.multiply(radixToPower); + result = result.add(Long.fromNumber(value)); + } + } + return result; + }; + + // NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the + // from* methods on which they depend. + + + /** + * A cache of the Long representations of small integer values. + * @type {Object} + * @ignore + */ + Long.INT_CACHE_ = {}; + + // NOTE: the compiler should inline these constant values below and then remove + // these variables, so there should be no runtime penalty for these. + + /** + * Number used repeated below in calculations. This must appear before the + * first call to any from* function below. + * @type {number} + * @ignore + */ + Long.TWO_PWR_16_DBL_ = 1 << 16; + + /** + * @type {number} + * @ignore + */ + Long.TWO_PWR_24_DBL_ = 1 << 24; + + /** + * @type {number} + * @ignore + */ + Long.TWO_PWR_32_DBL_ = Long.TWO_PWR_16_DBL_ * Long.TWO_PWR_16_DBL_; + + /** + * @type {number} + * @ignore + */ + Long.TWO_PWR_31_DBL_ = Long.TWO_PWR_32_DBL_ / 2; + + /** + * @type {number} + * @ignore + */ + Long.TWO_PWR_48_DBL_ = Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_16_DBL_; + + /** + * @type {number} + * @ignore + */ + Long.TWO_PWR_64_DBL_ = Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_32_DBL_; + + /** + * @type {number} + * @ignore + */ + Long.TWO_PWR_63_DBL_ = Long.TWO_PWR_64_DBL_ / 2; + + /** @type {Long} */ + Long.ZERO = Long.fromInt(0); + + /** @type {Long} */ + Long.ONE = Long.fromInt(1); + + /** @type {Long} */ + Long.NEG_ONE = Long.fromInt(-1); + + /** @type {Long} */ + Long.MAX_VALUE = Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0); + + /** @type {Long} */ + Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0); + + /** + * @type {Long} + * @ignore + */ + Long.TWO_PWR_24_ = Long.fromInt(1 << 24); + + /** + * Expose. + */ + module.exports = Long; + module.exports.Long = Long; + +/***/ }, +/* 307 */ +/***/ function(module, exports) { + + /** + * A class representation of the BSON Double type. + * + * @class + * @param {number} value the number we want to represent as a double. + * @return {Double} + */ + function Double(value) { + if (!(this instanceof Double)) return new Double(value); + + this._bsontype = 'Double'; + this.value = value; + } + + /** + * Access the number value. + * + * @method + * @return {number} returns the wrapped double number. + */ + Double.prototype.valueOf = function () { + return this.value; + }; + + /** + * @ignore + */ + Double.prototype.toJSON = function () { + return this.value; + }; + + module.exports = Double; + module.exports.Double = Double; + +/***/ }, +/* 308 */ +/***/ function(module, exports) { + + // 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. + // + // Copyright 2009 Google Inc. All Rights Reserved + + /** + * This type is for INTERNAL use in MongoDB only and should not be used in applications. + * The appropriate corresponding type is the JavaScript Date type. + * + * Defines a Timestamp class for representing a 64-bit two's-complement + * integer value, which faithfully simulates the behavior of a Java "Timestamp". This + * implementation is derived from TimestampLib in GWT. + * + * Constructs a 64-bit two's-complement integer, given its low and high 32-bit + * values as *signed* integers. See the from* functions below for more + * convenient ways of constructing Timestamps. + * + * The internal representation of a Timestamp is the two given signed, 32-bit values. + * We use 32-bit pieces because these are the size of integers on which + * Javascript performs bit-operations. For operations like addition and + * multiplication, we split each number into 16-bit pieces, which can easily be + * multiplied within Javascript's floating-point representation without overflow + * or change in sign. + * + * In the algorithms below, we frequently reduce the negative case to the + * positive case by negating the input(s) and then post-processing the result. + * Note that we must ALWAYS check specially whether those values are MIN_VALUE + * (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as + * a positive number, it overflows back into a negative). Not handling this + * case would often result in infinite recursion. + * + * @class + * @param {number} low the low (signed) 32 bits of the Timestamp. + * @param {number} high the high (signed) 32 bits of the Timestamp. + */ + function Timestamp(low, high) { + if (!(this instanceof Timestamp)) return new Timestamp(low, high); + this._bsontype = 'Timestamp'; + /** + * @type {number} + * @ignore + */ + this.low_ = low | 0; // force into 32 signed bits. + + /** + * @type {number} + * @ignore + */ + this.high_ = high | 0; // force into 32 signed bits. + }; + + /** + * Return the int value. + * + * @return {number} the value, assuming it is a 32-bit integer. + */ + Timestamp.prototype.toInt = function () { + return this.low_; + }; + + /** + * Return the Number value. + * + * @method + * @return {number} the closest floating-point representation to this value. + */ + Timestamp.prototype.toNumber = function () { + return this.high_ * Timestamp.TWO_PWR_32_DBL_ + this.getLowBitsUnsigned(); + }; + + /** + * Return the JSON value. + * + * @method + * @return {string} the JSON representation. + */ + Timestamp.prototype.toJSON = function () { + return this.toString(); + }; + + /** + * Return the String value. + * + * @method + * @param {number} [opt_radix] the radix in which the text should be written. + * @return {string} the textual representation of this value. + */ + Timestamp.prototype.toString = function (opt_radix) { + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (this.isZero()) { + return '0'; + } + + if (this.isNegative()) { + if (this.equals(Timestamp.MIN_VALUE)) { + // We need to change the Timestamp value before it can be negated, so we remove + // the bottom-most digit in this base and then recurse to do the rest. + var radixTimestamp = Timestamp.fromNumber(radix); + var div = this.div(radixTimestamp); + var rem = div.multiply(radixTimestamp).subtract(this); + return div.toString(radix) + rem.toInt().toString(radix); + } else { + return '-' + this.negate().toString(radix); + } + } + + // Do several (6) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = Timestamp.fromNumber(Math.pow(radix, 6)); + + var rem = this; + var result = ''; + while (true) { + var remDiv = rem.div(radixToPower); + var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt(); + var digits = intval.toString(radix); + + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } else { + while (digits.length < 6) { + digits = '0' + digits; + } + result = '' + digits + result; + } + } + }; + + /** + * Return the high 32-bits value. + * + * @method + * @return {number} the high 32-bits as a signed value. + */ + Timestamp.prototype.getHighBits = function () { + return this.high_; + }; + + /** + * Return the low 32-bits value. + * + * @method + * @return {number} the low 32-bits as a signed value. + */ + Timestamp.prototype.getLowBits = function () { + return this.low_; + }; + + /** + * Return the low unsigned 32-bits value. + * + * @method + * @return {number} the low 32-bits as an unsigned value. + */ + Timestamp.prototype.getLowBitsUnsigned = function () { + return this.low_ >= 0 ? this.low_ : Timestamp.TWO_PWR_32_DBL_ + this.low_; + }; + + /** + * Returns the number of bits needed to represent the absolute value of this Timestamp. + * + * @method + * @return {number} Returns the number of bits needed to represent the absolute value of this Timestamp. + */ + Timestamp.prototype.getNumBitsAbs = function () { + if (this.isNegative()) { + if (this.equals(Timestamp.MIN_VALUE)) { + return 64; + } else { + return this.negate().getNumBitsAbs(); + } + } else { + var val = this.high_ != 0 ? this.high_ : this.low_; + for (var bit = 31; bit > 0; bit--) { + if ((val & 1 << bit) != 0) { + break; + } + } + return this.high_ != 0 ? bit + 33 : bit + 1; + } + }; + + /** + * Return whether this value is zero. + * + * @method + * @return {boolean} whether this value is zero. + */ + Timestamp.prototype.isZero = function () { + return this.high_ == 0 && this.low_ == 0; + }; + + /** + * Return whether this value is negative. + * + * @method + * @return {boolean} whether this value is negative. + */ + Timestamp.prototype.isNegative = function () { + return this.high_ < 0; + }; + + /** + * Return whether this value is odd. + * + * @method + * @return {boolean} whether this value is odd. + */ + Timestamp.prototype.isOdd = function () { + return (this.low_ & 1) == 1; + }; + + /** + * Return whether this Timestamp equals the other + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp equals the other + */ + Timestamp.prototype.equals = function (other) { + return this.high_ == other.high_ && this.low_ == other.low_; + }; + + /** + * Return whether this Timestamp does not equal the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp does not equal the other. + */ + Timestamp.prototype.notEquals = function (other) { + return this.high_ != other.high_ || this.low_ != other.low_; + }; + + /** + * Return whether this Timestamp is less than the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp is less than the other. + */ + Timestamp.prototype.lessThan = function (other) { + return this.compare(other) < 0; + }; + + /** + * Return whether this Timestamp is less than or equal to the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp is less than or equal to the other. + */ + Timestamp.prototype.lessThanOrEqual = function (other) { + return this.compare(other) <= 0; + }; + + /** + * Return whether this Timestamp is greater than the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp is greater than the other. + */ + Timestamp.prototype.greaterThan = function (other) { + return this.compare(other) > 0; + }; + + /** + * Return whether this Timestamp is greater than or equal to the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp is greater than or equal to the other. + */ + Timestamp.prototype.greaterThanOrEqual = function (other) { + return this.compare(other) >= 0; + }; + + /** + * Compares this Timestamp with the given one. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} 0 if they are the same, 1 if the this is greater, and -1 if the given one is greater. + */ + Timestamp.prototype.compare = function (other) { + if (this.equals(other)) { + return 0; + } + + var thisNeg = this.isNegative(); + var otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) { + return -1; + } + if (!thisNeg && otherNeg) { + return 1; + } + + // at this point, the signs are the same, so subtraction will not overflow + if (this.subtract(other).isNegative()) { + return -1; + } else { + return 1; + } + }; + + /** + * The negation of this value. + * + * @method + * @return {Timestamp} the negation of this value. + */ + Timestamp.prototype.negate = function () { + if (this.equals(Timestamp.MIN_VALUE)) { + return Timestamp.MIN_VALUE; + } else { + return this.not().add(Timestamp.ONE); + } + }; + + /** + * Returns the sum of this and the given Timestamp. + * + * @method + * @param {Timestamp} other Timestamp to add to this one. + * @return {Timestamp} the sum of this and the given Timestamp. + */ + Timestamp.prototype.add = function (other) { + // Divide each number into 4 chunks of 16 bits, and then sum the chunks. + + var a48 = this.high_ >>> 16; + var a32 = this.high_ & 0xFFFF; + var a16 = this.low_ >>> 16; + var a00 = this.low_ & 0xFFFF; + + var b48 = other.high_ >>> 16; + var b32 = other.high_ & 0xFFFF; + var b16 = other.low_ >>> 16; + var b00 = other.low_ & 0xFFFF; + + var c48 = 0, + c32 = 0, + c16 = 0, + c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 0xFFFF; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c48 += a48 + b48; + c48 &= 0xFFFF; + return Timestamp.fromBits(c16 << 16 | c00, c48 << 16 | c32); + }; + + /** + * Returns the difference of this and the given Timestamp. + * + * @method + * @param {Timestamp} other Timestamp to subtract from this. + * @return {Timestamp} the difference of this and the given Timestamp. + */ + Timestamp.prototype.subtract = function (other) { + return this.add(other.negate()); + }; + + /** + * Returns the product of this and the given Timestamp. + * + * @method + * @param {Timestamp} other Timestamp to multiply with this. + * @return {Timestamp} the product of this and the other. + */ + Timestamp.prototype.multiply = function (other) { + if (this.isZero()) { + return Timestamp.ZERO; + } else if (other.isZero()) { + return Timestamp.ZERO; + } + + if (this.equals(Timestamp.MIN_VALUE)) { + return other.isOdd() ? Timestamp.MIN_VALUE : Timestamp.ZERO; + } else if (other.equals(Timestamp.MIN_VALUE)) { + return this.isOdd() ? Timestamp.MIN_VALUE : Timestamp.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().multiply(other.negate()); + } else { + return this.negate().multiply(other).negate(); + } + } else if (other.isNegative()) { + return this.multiply(other.negate()).negate(); + } + + // If both Timestamps are small, use float multiplication + if (this.lessThan(Timestamp.TWO_PWR_24_) && other.lessThan(Timestamp.TWO_PWR_24_)) { + return Timestamp.fromNumber(this.toNumber() * other.toNumber()); + } + + // Divide each Timestamp into 4 chunks of 16 bits, and then add up 4x4 products. + // We can skip products that would overflow. + + var a48 = this.high_ >>> 16; + var a32 = this.high_ & 0xFFFF; + var a16 = this.low_ >>> 16; + var a00 = this.low_ & 0xFFFF; + + var b48 = other.high_ >>> 16; + var b32 = other.high_ & 0xFFFF; + var b16 = other.low_ >>> 16; + var b00 = other.low_ & 0xFFFF; + + var c48 = 0, + c32 = 0, + c16 = 0, + c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 0xFFFF; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 0xFFFF; + return Timestamp.fromBits(c16 << 16 | c00, c48 << 16 | c32); + }; + + /** + * Returns this Timestamp divided by the given one. + * + * @method + * @param {Timestamp} other Timestamp by which to divide. + * @return {Timestamp} this Timestamp divided by the given one. + */ + Timestamp.prototype.div = function (other) { + if (other.isZero()) { + throw Error('division by zero'); + } else if (this.isZero()) { + return Timestamp.ZERO; + } + + if (this.equals(Timestamp.MIN_VALUE)) { + if (other.equals(Timestamp.ONE) || other.equals(Timestamp.NEG_ONE)) { + return Timestamp.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE + } else if (other.equals(Timestamp.MIN_VALUE)) { + return Timestamp.ONE; + } else { + // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|. + var halfThis = this.shiftRight(1); + var approx = halfThis.div(other).shiftLeft(1); + if (approx.equals(Timestamp.ZERO)) { + return other.isNegative() ? Timestamp.ONE : Timestamp.NEG_ONE; + } else { + var rem = this.subtract(other.multiply(approx)); + var result = approx.add(rem.div(other)); + return result; + } + } + } else if (other.equals(Timestamp.MIN_VALUE)) { + return Timestamp.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().div(other.negate()); + } else { + return this.negate().div(other).negate(); + } + } else if (other.isNegative()) { + return this.div(other.negate()).negate(); + } + + // Repeat the following until the remainder is less than other: find a + // floating-point that approximates remainder / other *from below*, add this + // into the result, and subtract it from the remainder. It is critical that + // the approximate value is less than or equal to the real value so that the + // remainder never becomes negative. + var res = Timestamp.ZERO; + var rem = this; + while (rem.greaterThanOrEqual(other)) { + // Approximate the result of division. This may be a little greater or + // smaller than the actual value. + var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber())); + + // We will tweak the approximate result by changing it in the 48-th digit or + // the smallest non-fractional digit, whichever is larger. + var log2 = Math.ceil(Math.log(approx) / Math.LN2); + var delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48); + + // Decrease the approximation until it is smaller than the remainder. Note + // that if it is too large, the product overflows and is negative. + var approxRes = Timestamp.fromNumber(approx); + var approxRem = approxRes.multiply(other); + while (approxRem.isNegative() || approxRem.greaterThan(rem)) { + approx -= delta; + approxRes = Timestamp.fromNumber(approx); + approxRem = approxRes.multiply(other); + } + + // We know the answer can't be zero... and actually, zero would cause + // infinite recursion since we would make no progress. + if (approxRes.isZero()) { + approxRes = Timestamp.ONE; + } + + res = res.add(approxRes); + rem = rem.subtract(approxRem); + } + return res; + }; + + /** + * Returns this Timestamp modulo the given one. + * + * @method + * @param {Timestamp} other Timestamp by which to mod. + * @return {Timestamp} this Timestamp modulo the given one. + */ + Timestamp.prototype.modulo = function (other) { + return this.subtract(this.div(other).multiply(other)); + }; + + /** + * The bitwise-NOT of this value. + * + * @method + * @return {Timestamp} the bitwise-NOT of this value. + */ + Timestamp.prototype.not = function () { + return Timestamp.fromBits(~this.low_, ~this.high_); + }; + + /** + * Returns the bitwise-AND of this Timestamp and the given one. + * + * @method + * @param {Timestamp} other the Timestamp with which to AND. + * @return {Timestamp} the bitwise-AND of this and the other. + */ + Timestamp.prototype.and = function (other) { + return Timestamp.fromBits(this.low_ & other.low_, this.high_ & other.high_); + }; + + /** + * Returns the bitwise-OR of this Timestamp and the given one. + * + * @method + * @param {Timestamp} other the Timestamp with which to OR. + * @return {Timestamp} the bitwise-OR of this and the other. + */ + Timestamp.prototype.or = function (other) { + return Timestamp.fromBits(this.low_ | other.low_, this.high_ | other.high_); + }; + + /** + * Returns the bitwise-XOR of this Timestamp and the given one. + * + * @method + * @param {Timestamp} other the Timestamp with which to XOR. + * @return {Timestamp} the bitwise-XOR of this and the other. + */ + Timestamp.prototype.xor = function (other) { + return Timestamp.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_); + }; + + /** + * Returns this Timestamp with bits shifted to the left by the given amount. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Timestamp} this shifted to the left by the given amount. + */ + Timestamp.prototype.shiftLeft = function (numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var low = this.low_; + if (numBits < 32) { + var high = this.high_; + return Timestamp.fromBits(low << numBits, high << numBits | low >>> 32 - numBits); + } else { + return Timestamp.fromBits(0, low << numBits - 32); + } + } + }; + + /** + * Returns this Timestamp with bits shifted to the right by the given amount. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Timestamp} this shifted to the right by the given amount. + */ + Timestamp.prototype.shiftRight = function (numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var high = this.high_; + if (numBits < 32) { + var low = this.low_; + return Timestamp.fromBits(low >>> numBits | high << 32 - numBits, high >> numBits); + } else { + return Timestamp.fromBits(high >> numBits - 32, high >= 0 ? 0 : -1); + } + } + }; + + /** + * Returns this Timestamp with bits shifted to the right by the given amount, with the new top bits matching the current sign bit. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Timestamp} this shifted to the right by the given amount, with zeros placed into the new leading bits. + */ + Timestamp.prototype.shiftRightUnsigned = function (numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var high = this.high_; + if (numBits < 32) { + var low = this.low_; + return Timestamp.fromBits(low >>> numBits | high << 32 - numBits, high >>> numBits); + } else if (numBits == 32) { + return Timestamp.fromBits(high, 0); + } else { + return Timestamp.fromBits(high >>> numBits - 32, 0); + } + } + }; + + /** + * Returns a Timestamp representing the given (32-bit) integer value. + * + * @method + * @param {number} value the 32-bit integer in question. + * @return {Timestamp} the corresponding Timestamp value. + */ + Timestamp.fromInt = function (value) { + if (-128 <= value && value < 128) { + var cachedObj = Timestamp.INT_CACHE_[value]; + if (cachedObj) { + return cachedObj; + } + } + + var obj = new Timestamp(value | 0, value < 0 ? -1 : 0); + if (-128 <= value && value < 128) { + Timestamp.INT_CACHE_[value] = obj; + } + return obj; + }; + + /** + * Returns a Timestamp representing the given value, provided that it is a finite number. Otherwise, zero is returned. + * + * @method + * @param {number} value the number in question. + * @return {Timestamp} the corresponding Timestamp value. + */ + Timestamp.fromNumber = function (value) { + if (isNaN(value) || !isFinite(value)) { + return Timestamp.ZERO; + } else if (value <= -Timestamp.TWO_PWR_63_DBL_) { + return Timestamp.MIN_VALUE; + } else if (value + 1 >= Timestamp.TWO_PWR_63_DBL_) { + return Timestamp.MAX_VALUE; + } else if (value < 0) { + return Timestamp.fromNumber(-value).negate(); + } else { + return new Timestamp(value % Timestamp.TWO_PWR_32_DBL_ | 0, value / Timestamp.TWO_PWR_32_DBL_ | 0); + } + }; + + /** + * Returns a Timestamp representing the 64-bit integer that comes by concatenating the given high and low bits. Each is assumed to use 32 bits. + * + * @method + * @param {number} lowBits the low 32-bits. + * @param {number} highBits the high 32-bits. + * @return {Timestamp} the corresponding Timestamp value. + */ + Timestamp.fromBits = function (lowBits, highBits) { + return new Timestamp(lowBits, highBits); + }; + + /** + * Returns a Timestamp representation of the given string, written using the given radix. + * + * @method + * @param {string} str the textual representation of the Timestamp. + * @param {number} opt_radix the radix in which the text is written. + * @return {Timestamp} the corresponding Timestamp value. + */ + Timestamp.fromString = function (str, opt_radix) { + if (str.length == 0) { + throw Error('number format error: empty string'); + } + + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (str.charAt(0) == '-') { + return Timestamp.fromString(str.substring(1), radix).negate(); + } else if (str.indexOf('-') >= 0) { + throw Error('number format error: interior "-" character: ' + str); + } + + // Do several (8) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = Timestamp.fromNumber(Math.pow(radix, 8)); + + var result = Timestamp.ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i); + var value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = Timestamp.fromNumber(Math.pow(radix, size)); + result = result.multiply(power).add(Timestamp.fromNumber(value)); + } else { + result = result.multiply(radixToPower); + result = result.add(Timestamp.fromNumber(value)); + } + } + return result; + }; + + // NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the + // from* methods on which they depend. + + + /** + * A cache of the Timestamp representations of small integer values. + * @type {Object} + * @ignore + */ + Timestamp.INT_CACHE_ = {}; + + // NOTE: the compiler should inline these constant values below and then remove + // these variables, so there should be no runtime penalty for these. + + /** + * Number used repeated below in calculations. This must appear before the + * first call to any from* function below. + * @type {number} + * @ignore + */ + Timestamp.TWO_PWR_16_DBL_ = 1 << 16; + + /** + * @type {number} + * @ignore + */ + Timestamp.TWO_PWR_24_DBL_ = 1 << 24; + + /** + * @type {number} + * @ignore + */ + Timestamp.TWO_PWR_32_DBL_ = Timestamp.TWO_PWR_16_DBL_ * Timestamp.TWO_PWR_16_DBL_; + + /** + * @type {number} + * @ignore + */ + Timestamp.TWO_PWR_31_DBL_ = Timestamp.TWO_PWR_32_DBL_ / 2; + + /** + * @type {number} + * @ignore + */ + Timestamp.TWO_PWR_48_DBL_ = Timestamp.TWO_PWR_32_DBL_ * Timestamp.TWO_PWR_16_DBL_; + + /** + * @type {number} + * @ignore + */ + Timestamp.TWO_PWR_64_DBL_ = Timestamp.TWO_PWR_32_DBL_ * Timestamp.TWO_PWR_32_DBL_; + + /** + * @type {number} + * @ignore + */ + Timestamp.TWO_PWR_63_DBL_ = Timestamp.TWO_PWR_64_DBL_ / 2; + + /** @type {Timestamp} */ + Timestamp.ZERO = Timestamp.fromInt(0); + + /** @type {Timestamp} */ + Timestamp.ONE = Timestamp.fromInt(1); + + /** @type {Timestamp} */ + Timestamp.NEG_ONE = Timestamp.fromInt(-1); + + /** @type {Timestamp} */ + Timestamp.MAX_VALUE = Timestamp.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0); + + /** @type {Timestamp} */ + Timestamp.MIN_VALUE = Timestamp.fromBits(0, 0x80000000 | 0); + + /** + * @type {Timestamp} + * @ignore + */ + Timestamp.TWO_PWR_24_ = Timestamp.fromInt(1 << 24); + + /** + * Expose. + */ + module.exports = Timestamp; + module.exports.Timestamp = Timestamp; + +/***/ }, +/* 309 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process, Buffer) {/** + * Machine id. + * + * Create a random 3-byte value (i.e. unique for this + * process). Other drivers use a md5 of the machine id here, but + * that would mean an asyc call to gethostname, so we don't bother. + * @ignore + */ + var MACHINE_ID = parseInt(Math.random() * 0xFFFFFF, 10); + + // Regular expression that checks for hex value + var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$"); + + /** + * Create a new ObjectID instance + * + * @class + * @param {(string|number)} id Can be a 24 byte hex string, 12 byte binary string or a Number. + * @property {number} generationTime The generation time of this ObjectId instance + * @return {ObjectID} instance of ObjectID. + */ + var ObjectID = function ObjectID(id) { + // Duck-typing to support ObjectId from different npm packages + if (id instanceof ObjectID) return id; + if (!(this instanceof ObjectID)) return new ObjectID(id); + + this._bsontype = 'ObjectID'; + + var __id = null; + var valid = ObjectID.isValid(id); + + // Throw an error if it's not a valid setup + if (!valid && id != null) { + throw new Error("Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"); + } else if (valid && typeof id == 'string' && id.length == 24) { + return ObjectID.createFromHexString(id); + } else if (id == null || typeof id == 'number') { + // convert to 12 byte binary string + this.id = this.generate(id); + } else if (id != null && id.length === 12) { + // assume 12 byte string + this.id = id; + } else if (id != null && id.toHexString) { + // Duck-typing to support ObjectId from different npm packages + return id; + } else { + throw new Error("Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"); + } + + if (ObjectID.cacheHexString) this.__id = this.toHexString(); + }; + + // Allow usage of ObjectId as well as ObjectID + var ObjectId = ObjectID; + + // Precomputed hex table enables speedy hex string conversion + var hexTable = []; + for (var i = 0; i < 256; i++) { + hexTable[i] = (i <= 15 ? '0' : '') + i.toString(16); + } + + /** + * Return the ObjectID id as a 24 byte hex string representation + * + * @method + * @return {string} return the 24 byte hex string representation. + */ + ObjectID.prototype.toHexString = function () { + if (ObjectID.cacheHexString && this.__id) return this.__id; + + var hexString = ''; + if (!this.id || !this.id.length) { + throw new Error('invalid ObjectId, ObjectId.id must be either a string or a Buffer, but is [' + JSON.stringify(this.id) + ']'); + } + + if (this.id instanceof _Buffer) { + hexString = convertToHex(this.id); + if (ObjectID.cacheHexString) this.__id = hexString; + return hexString; + } + + for (var i = 0; i < this.id.length; i++) { + hexString += hexTable[this.id.charCodeAt(i)]; + } + + if (ObjectID.cacheHexString) this.__id = hexString; + return hexString; + }; + + /** + * Update the ObjectID index used in generating new ObjectID's on the driver + * + * @method + * @return {number} returns next index value. + * @ignore + */ + ObjectID.prototype.get_inc = function () { + return ObjectID.index = (ObjectID.index + 1) % 0xFFFFFF; + }; + + /** + * Update the ObjectID index used in generating new ObjectID's on the driver + * + * @method + * @return {number} returns next index value. + * @ignore + */ + ObjectID.prototype.getInc = function () { + return this.get_inc(); + }; + + /** + * Generate a 12 byte id buffer used in ObjectID's + * + * @method + * @param {number} [time] optional parameter allowing to pass in a second based timestamp. + * @return {Buffer} return the 12 byte id buffer string. + */ + ObjectID.prototype.generate = function (time) { + if ('number' != typeof time) { + time = ~~(Date.now() / 1000); + } + + // Use pid + var pid = (typeof process === 'undefined' ? Math.floor(Math.random() * 100000) : process.pid) % 0xFFFF; + var inc = this.get_inc(); + // Buffer used + var buffer = new Buffer(12); + // Encode time + buffer[3] = time & 0xff; + buffer[2] = time >> 8 & 0xff; + buffer[1] = time >> 16 & 0xff; + buffer[0] = time >> 24 & 0xff; + // Encode machine + buffer[6] = MACHINE_ID & 0xff; + buffer[5] = MACHINE_ID >> 8 & 0xff; + buffer[4] = MACHINE_ID >> 16 & 0xff; + // Encode pid + buffer[8] = pid & 0xff; + buffer[7] = pid >> 8 & 0xff; + // Encode index + buffer[11] = inc & 0xff; + buffer[10] = inc >> 8 & 0xff; + buffer[9] = inc >> 16 & 0xff; + // Return the buffer + return buffer; + }; + + /** + * Converts the id into a 24 byte hex string for printing + * + * @return {String} return the 24 byte hex string representation. + * @ignore + */ + ObjectID.prototype.toString = function () { + return this.toHexString(); + }; + + /** + * Converts to a string representation of this Id. + * + * @return {String} return the 24 byte hex string representation. + * @ignore + */ + ObjectID.prototype.inspect = ObjectID.prototype.toString; + + /** + * Converts to its JSON representation. + * + * @return {String} return the 24 byte hex string representation. + * @ignore + */ + ObjectID.prototype.toJSON = function () { + return this.toHexString(); + }; + + /** + * Compares the equality of this ObjectID with `otherID`. + * + * @method + * @param {object} otherID ObjectID instance to compare against. + * @return {boolean} the result of comparing two ObjectID's + */ + ObjectID.prototype.equals = function equals(otherId) { + var id; + + if (otherId instanceof ObjectID) { + return this.toString() == otherId.toString(); + } else if (typeof otherId == 'string' && ObjectID.isValid(otherId) && otherId.length == 12 && this.id instanceof _Buffer) { + return otherId === this.id.toString('binary'); + } else if (typeof otherId == 'string' && ObjectID.isValid(otherId) && otherId.length == 24) { + return otherId.toLowerCase() === this.toHexString(); + } else if (typeof otherId == 'string' && ObjectID.isValid(otherId) && otherId.length == 12) { + return otherId === this.id; + } else if (otherId != null && (otherId instanceof ObjectID || otherId.toHexString)) { + return otherId.toHexString() === this.toHexString(); + } else { + return false; + } + }; + + /** + * Returns the generation date (accurate up to the second) that this ID was generated. + * + * @method + * @return {date} the generation date + */ + ObjectID.prototype.getTimestamp = function () { + var timestamp = new Date(); + var time = this.id[3] | this.id[2] << 8 | this.id[1] << 16 | this.id[0] << 24; + timestamp.setTime(Math.floor(time) * 1000); + return timestamp; + }; + + /** + * @ignore + */ + ObjectID.index = ~~(Math.random() * 0xFFFFFF); + + /** + * @ignore + */ + ObjectID.createPk = function createPk() { + return new ObjectID(); + }; + + /** + * Creates an ObjectID from a second based number, with the rest of the ObjectID zeroed out. Used for comparisons or sorting the ObjectID. + * + * @method + * @param {number} time an integer number representing a number of seconds. + * @return {ObjectID} return the created ObjectID + */ + ObjectID.createFromTime = function createFromTime(time) { + var buffer = new Buffer([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + // Encode time into first 4 bytes + buffer[3] = time & 0xff; + buffer[2] = time >> 8 & 0xff; + buffer[1] = time >> 16 & 0xff; + buffer[0] = time >> 24 & 0xff; + // Return the new objectId + return new ObjectID(buffer); + }; + + // Lookup tables + var encodeLookup = '0123456789abcdef'.split(''); + var decodeLookup = []; + var i = 0; + while (i < 10) decodeLookup[0x30 + i] = i++; + while (i < 16) decodeLookup[0x41 - 10 + i] = decodeLookup[0x61 - 10 + i] = i++; + + var _Buffer = Buffer; + var convertToHex = function (bytes) { + return bytes.toString('hex'); + }; + + /** + * Creates an ObjectID from a hex string representation of an ObjectID. + * + * @method + * @param {string} hexString create a ObjectID from a passed in 24 byte hexstring. + * @return {ObjectID} return the created ObjectID + */ + ObjectID.createFromHexString = function createFromHexString(string) { + // Throw an error if it's not a valid setup + if (typeof string === 'undefined' || string != null && string.length != 24) throw new Error("Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"); + + var length = string.length; + + if (length > 12 * 2) { + throw new Error('Id cannot be longer than 12 bytes'); + } + + // Calculate lengths + var sizeof = length >> 1; + var array = new _Buffer(sizeof); + var n = 0; + var i = 0; + + while (i < length) { + array[n++] = decodeLookup[string.charCodeAt(i++)] << 4 | decodeLookup[string.charCodeAt(i++)]; + } + + return new ObjectID(array); + }; + + /** + * Checks if a value is a valid bson ObjectId + * + * @method + * @return {boolean} return true if the value is a valid bson ObjectId, return false otherwise. + */ + ObjectID.isValid = function isValid(id) { + if (id == null) return false; + + if (typeof id == 'number') { + return true; + } + + if (typeof id == 'string') { + return id.length == 12 || id.length == 24 && checkForHexRegExp.test(id); + } + + if (id instanceof ObjectID) { + return true; + } + + if (id instanceof _Buffer) { + return true; + } + + // Duck-Typing detection of ObjectId like objects + if (id.toHexString) { + return id.id.length == 12 || id.id.length == 24 && checkForHexRegExp.test(id.id); + } + + return false; + }; + + /** + * @ignore + */ + Object.defineProperty(ObjectID.prototype, "generationTime", { + enumerable: true, + get: function () { + return this.id[3] | this.id[2] << 8 | this.id[1] << 16 | this.id[0] << 24; + }, + set: function (value) { + // Encode time into first 4 bytes + this.id[3] = value & 0xff; + this.id[2] = value >> 8 & 0xff; + this.id[1] = value >> 16 & 0xff; + this.id[0] = value >> 24 & 0xff; + } + }); + + /** + * Expose. + */ + module.exports = ObjectID; + module.exports.ObjectID = ObjectID; + module.exports.ObjectId = ObjectID; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(294), __webpack_require__(300).Buffer)) + +/***/ }, +/* 310 */ +/***/ function(module, exports) { + + /** + * A class representation of the BSON RegExp type. + * + * @class + * @return {BSONRegExp} A MinKey instance + */ + function BSONRegExp(pattern, options) { + if (!(this instanceof BSONRegExp)) return new BSONRegExp(); + + // Execute + this._bsontype = 'BSONRegExp'; + this.pattern = pattern || ''; + this.options = options || ''; + + // Validate options + for (var i = 0; i < this.options.length; i++) { + if (!(this.options[i] == 'i' || this.options[i] == 'm' || this.options[i] == 'x' || this.options[i] == 'l' || this.options[i] == 's' || this.options[i] == 'u')) { + throw new Error('the regular expression options [' + this.options[i] + "] is not supported"); + } + } + } + + module.exports = BSONRegExp; + module.exports.BSONRegExp = BSONRegExp; + +/***/ }, +/* 311 */ +/***/ function(module, exports) { + + /** + * A class representation of the BSON Symbol type. + * + * @class + * @deprecated + * @param {string} value the string representing the symbol. + * @return {Symbol} + */ + function Symbol(value) { + if (!(this instanceof Symbol)) return new Symbol(value); + this._bsontype = 'Symbol'; + this.value = value; + } + + /** + * Access the wrapped string value. + * + * @method + * @return {String} returns the wrapped string. + */ + Symbol.prototype.valueOf = function () { + return this.value; + }; + + /** + * @ignore + */ + Symbol.prototype.toString = function () { + return this.value; + }; + + /** + * @ignore + */ + Symbol.prototype.inspect = function () { + return this.value; + }; + + /** + * @ignore + */ + Symbol.prototype.toJSON = function () { + return this.value; + }; + + module.exports = Symbol; + module.exports.Symbol = Symbol; + +/***/ }, +/* 312 */ +/***/ function(module, exports) { + + var Int32 = function (value) { + if (!(this instanceof Int32)) return new Int32(value); + + this._bsontype = 'Int32'; + this.value = value; + }; + + /** + * Access the number value. + * + * @method + * @return {number} returns the wrapped int32 number. + */ + Int32.prototype.valueOf = function () { + return this.value; + }; + + /** + * @ignore + */ + Int32.prototype.toJSON = function () { + return this.value; + }; + + module.exports = Int32; + module.exports.Int32 = Int32; + +/***/ }, +/* 313 */ +/***/ function(module, exports) { + + /** + * A class representation of the BSON Code type. + * + * @class + * @param {(string|function)} code a string or function. + * @param {Object} [scope] an optional scope for the function. + * @return {Code} + */ + var Code = function Code(code, scope) { + if (!(this instanceof Code)) return new Code(code, scope); + this._bsontype = 'Code'; + this.code = code; + this.scope = scope; + }; + + /** + * @ignore + */ + Code.prototype.toJSON = function () { + return { scope: this.scope, code: this.code }; + }; + + module.exports = Code; + module.exports.Code = Code; + +/***/ }, +/* 314 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(Buffer) {"use strict"; + + var Long = __webpack_require__(306); + + var PARSE_STRING_REGEXP = /^(\+|\-)?(\d+|(\d*\.\d*))?(E|e)?([\-\+])?(\d+)?$/; + var PARSE_INF_REGEXP = /^(\+|\-)?(Infinity|inf)$/i; + var PARSE_NAN_REGEXP = /^(\+|\-)?NaN$/i; + + var EXPONENT_MAX = 6111; + var EXPONENT_MIN = -6176; + var EXPONENT_BIAS = 6176; + var MAX_DIGITS = 34; + + // Nan value bits as 32 bit values (due to lack of longs) + var NAN_BUFFER = [0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00].reverse(); + // Infinity value bits 32 bit values (due to lack of longs) + var INF_NEGATIVE_BUFFER = [0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00].reverse(); + var INF_POSITIVE_BUFFER = [0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00].reverse(); + + var EXPONENT_REGEX = /^([\-\+])?(\d+)?$/; + + // Detect if the value is a digit + var isDigit = function (value) { + return !isNaN(parseInt(value, 10)); + }; + + // Divide two uint128 values + var divideu128 = function (value) { + var DIVISOR = Long.fromNumber(1000 * 1000 * 1000); + var _rem = Long.fromNumber(0); + var i = 0; + + if (!value.parts[0] && !value.parts[1] && !value.parts[2] && !value.parts[3]) { + return { quotient: value, rem: _rem }; + } + + for (var i = 0; i <= 3; i++) { + // Adjust remainder to match value of next dividend + _rem = _rem.shiftLeft(32); + // Add the divided to _rem + _rem = _rem.add(new Long(value.parts[i], 0)); + value.parts[i] = _rem.div(DIVISOR).low_; + _rem = _rem.modulo(DIVISOR); + } + + return { quotient: value, rem: _rem }; + }; + + // Multiply two Long values and return the 128 bit value + var multiply64x2 = function (left, right) { + if (!left && !right) { + return { high: Long.fromNumber(0), low: Long.fromNumber(0) }; + } + + var leftHigh = left.shiftRightUnsigned(32); + var leftLow = new Long(left.getLowBits(), 0); + var rightHigh = right.shiftRightUnsigned(32); + var rightLow = new Long(right.getLowBits(), 0); + + var productHigh = leftHigh.multiply(rightHigh); + var productMid = leftHigh.multiply(rightLow); + var productMid2 = leftLow.multiply(rightHigh); + var productLow = leftLow.multiply(rightLow); + + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productMid = new Long(productMid.getLowBits(), 0).add(productMid2).add(productLow.shiftRightUnsigned(32)); + + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productLow = productMid.shiftLeft(32).add(new Long(productLow.getLowBits(), 0)); + + // Return the 128 bit result + return { high: productHigh, low: productLow }; + }; + + var lessThan = function (left, right) { + // Make values unsigned + var uhleft = left.high_ >>> 0; + var uhright = right.high_ >>> 0; + + // Compare high bits first + if (uhleft < uhright) { + return true; + } else if (uhleft == uhright) { + var ulleft = left.low_ >>> 0; + var ulright = right.low_ >>> 0; + if (ulleft < ulright) return true; + } + + return false; + }; + + var longtoHex = function (value) { + var buffer = new Buffer(8); + var index = 0; + // Encode the low 64 bits of the decimal + // Encode low bits + buffer[index++] = value.low_ & 0xff; + buffer[index++] = value.low_ >> 8 & 0xff; + buffer[index++] = value.low_ >> 16 & 0xff; + buffer[index++] = value.low_ >> 24 & 0xff; + // Encode high bits + buffer[index++] = value.high_ & 0xff; + buffer[index++] = value.high_ >> 8 & 0xff; + buffer[index++] = value.high_ >> 16 & 0xff; + buffer[index++] = value.high_ >> 24 & 0xff; + return buffer.reverse().toString('hex'); + }; + + var int32toHex = function (value) { + var buffer = new Buffer(4); + var index = 0; + // Encode the low 64 bits of the decimal + // Encode low bits + buffer[index++] = value & 0xff; + buffer[index++] = value >> 8 & 0xff; + buffer[index++] = value >> 16 & 0xff; + buffer[index++] = value >> 24 & 0xff; + return buffer.reverse().toString('hex'); + }; + + var Decimal128 = function (bytes) { + this._bsontype = 'Decimal128'; + this.bytes = bytes; + }; + + Decimal128.fromString = function (string) { + // Parse state tracking + var isNegative = false; + var sawRadix = false; + var foundNonZero = false; + + // Total number of significant digits (no leading or trailing zero) + var significantDigits = 0; + // Total number of significand digits read + var nDigitsRead = 0; + // Total number of digits (no leading zeros) + var nDigits = 0; + // The number of the digits after radix + var radixPosition = 0; + // The index of the first non-zero in *str* + var firstNonZero = 0; + + // Digits Array + var digits = [0]; + // The number of digits in digits + var nDigitsStored = 0; + // Insertion pointer for digits + var digitsInsert = 0; + // The index of the first non-zero digit + var firstDigit = 0; + // The index of the last digit + var lastDigit = 0; + + // Exponent + var exponent = 0; + // loop index over array + var i = 0; + // The high 17 digits of the significand + var significandHigh = [0, 0]; + // The low 17 digits of the significand + var significandLow = [0, 0]; + // The biased exponent + var biasedExponent = 0; + + // Read index + var index = 0; + + // Trim the string + string = string.trim(); + + // Results + var stringMatch = string.match(PARSE_STRING_REGEXP); + var infMatch = string.match(PARSE_INF_REGEXP); + var nanMatch = string.match(PARSE_NAN_REGEXP); + + // Validate the string + if (!stringMatch && !infMatch && !nanMatch || string.length == 0) { + throw new Error("" + string + " not a valid Decimal128 string"); + } + + // Check if we have an illegal exponent format + if (stringMatch && stringMatch[4] && stringMatch[2] === undefined) { + throw new Error("" + string + " not a valid Decimal128 string"); + } + + // Get the negative or positive sign + if (string[index] == '+' || string[index] == '-') { + isNegative = string[index++] == '-'; + } + + // Check if user passed Infinity or NaN + if (!isDigit(string[index]) && string[index] != '.') { + if (string[index] == 'i' || string[index] == 'I') { + return new Decimal128(new Buffer(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER)); + } else if (string[index] == 'N') { + return new Decimal128(new Buffer(NAN_BUFFER)); + } + } + + // Read all the digits + while (isDigit(string[index]) || string[index] == '.') { + if (string[index] == '.') { + if (sawRadix) { + return new Decimal128(new Buffer(NAN_BUFFER)); + } + + sawRadix = true; + index = index + 1; + continue; + } + + if (nDigitsStored < 34) { + if (string[index] != '0' || foundNonZero) { + if (!foundNonZero) { + firstNonZero = nDigitsRead; + } + + foundNonZero = true; + + // Only store 34 digits + digits[digitsInsert++] = parseInt(string[index], 10); + nDigitsStored = nDigitsStored + 1; + } + } + + if (foundNonZero) { + nDigits = nDigits + 1; + } + + if (sawRadix) { + radixPosition = radixPosition + 1; + } + + nDigitsRead = nDigitsRead + 1; + index = index + 1; + } + + if (sawRadix && !nDigitsRead) { + throw new Error("" + string + " not a valid Decimal128 string"); + } + + // Read exponent if exists + if (string[index] == 'e' || string[index] == 'E') { + // Read exponent digits + var match = string.substr(++index).match(EXPONENT_REGEX); + + // No digits read + if (!match || !match[2]) { + return new Decimal128(new Buffer(NAN_BUFFER)); + } + + // Get exponent + exponent = parseInt(match[0], 10); + + // Adjust the index + index = index + match[0].length; + } + + // Return not a number + if (string[index]) { + return new Decimal128(new Buffer(NAN_BUFFER)); + } + + // Done reading input + // Find first non-zero digit in digits + firstDigit = 0; + + if (!nDigitsStored) { + firstDigit = 0; + lastDigit = 0; + digits[0] = 0; + nDigits = 1; + nDigitsStored = 1; + significantDigits = 0; + } else { + lastDigit = nDigitsStored - 1; + significantDigits = nDigits; + + if (exponent != 0 && significantDigits != 1) { + while (string[firstNonZero + significantDigits - 1] == '0') { + significantDigits = significantDigits - 1; + } + } + } + + // Normalization of exponent + // Correct exponent based on radix position, and shift significand as needed + // to represent user input + + // Overflow prevention + if (exponent <= radixPosition && radixPosition - exponent > 1 << 14) { + exponent = EXPONENT_MIN; + } else { + exponent = exponent - radixPosition; + } + + // Attempt to normalize the exponent + while (exponent > EXPONENT_MAX) { + // Shift exponent to significand and decrease + lastDigit = lastDigit + 1; + + if (lastDigit - firstDigit > MAX_DIGITS) { + // Check if we have a zero then just hard clamp, otherwise fail + var digitsString = digits.join(''); + if (digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } else { + return new Decimal128(new Buffer(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER)); + } + } + + exponent = exponent - 1; + } + + while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + // Shift last digit + if (lastDigit == 0) { + exponent = EXPONENT_MIN; + significantDigits = 0; + break; + } + + if (nDigitsStored < nDigits) { + // adjust to match digits not stored + nDigits = nDigits - 1; + } else { + // adjust to round + lastDigit = lastDigit - 1; + } + + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } else { + // Check if we have a zero then just hard clamp, otherwise fail + var digitsString = digits.join(''); + if (digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } else { + return new Decimal128(new Buffer(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER)); + } + } + } + + // Round + // We've normalized the exponent, but might still need to round. + if (lastDigit - firstDigit + 1 < significantDigits && string[significantDigits] != '0') { + var endOfString = nDigitsRead; + + // If we have seen a radix point, 'string' is 1 longer than we have + // documented with ndigits_read, so inc the position of the first nonzero + // digit and the position that digits are read to. + if (sawRadix && exponent == EXPONENT_MIN) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + + var roundDigit = parseInt(string[firstNonZero + lastDigit + 1], 10); + var roundBit = 0; + + if (roundDigit >= 5) { + roundBit = 1; + + if (roundDigit == 5) { + roundBit = digits[lastDigit] % 2 == 1; + + for (var i = firstNonZero + lastDigit + 2; i < endOfString; i++) { + if (parseInt(string[i], 10)) { + roundBit = 1; + break; + } + } + } + } + + if (roundBit) { + var dIdx = lastDigit; + + for (; dIdx >= 0; dIdx--) { + if (++digits[dIdx] > 9) { + digits[dIdx] = 0; + + // overflowed most significant digit + if (dIdx == 0) { + if (exponent < EXPONENT_MAX) { + exponent = exponent + 1; + digits[dIdx] = 1; + } else { + return new Decimal128(new Buffer(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER)); + } + } + } else { + break; + } + } + } + } + + // Encode significand + // The high 17 digits of the significand + significandHigh = Long.fromNumber(0); + // The low 17 digits of the significand + significandLow = Long.fromNumber(0); + + // read a zero + if (significantDigits == 0) { + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + } else if (lastDigit - firstDigit < 17) { + var dIdx = firstDigit; + significandLow = Long.fromNumber(digits[dIdx++]); + significandHigh = new Long(0, 0); + + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } else { + var dIdx = firstDigit; + significandHigh = Long.fromNumber(digits[dIdx++]); + + for (; dIdx <= lastDigit - 17; dIdx++) { + significandHigh = significandHigh.multiply(Long.fromNumber(10)); + significandHigh = significandHigh.add(Long.fromNumber(digits[dIdx])); + } + + significandLow = Long.fromNumber(digits[dIdx++]); + + for (; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + + var significand = multiply64x2(significandHigh, Long.fromString("100000000000000000")); + + significand.low = significand.low.add(significandLow); + + if (lessThan(significand.low, significandLow)) { + significand.high = significand.high.add(Long.fromNumber(1)); + } + + // Biased exponent + var biasedExponent = exponent + EXPONENT_BIAS; + var dec = { low: Long.fromNumber(0), high: Long.fromNumber(0) }; + + // Encode combination, exponent, and significand. + if (significand.high.shiftRightUnsigned(49).and(Long.fromNumber(1)).equals(Long.fromNumber)) { + // Encode '11' into bits 1 to 3 + dec.high = dec.high.or(Long.fromNumber(0x3).shiftLeft(61)); + dec.high = dec.high.or(Long.fromNumber(biasedExponent).and(Long.fromNumber(0x3fff).shiftLeft(47))); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x7fffffffffff))); + } else { + dec.high = dec.high.or(Long.fromNumber(biasedExponent & 0x3fff).shiftLeft(49)); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x1ffffffffffff))); + } + + dec.low = significand.low; + + // Encode sign + if (isNegative) { + dec.high = dec.high.or(Long.fromString('9223372036854775808')); + } + + // Encode into a buffer + var buffer = new Buffer(16); + var index = 0; + + // Encode the low 64 bits of the decimal + // Encode low bits + buffer[index++] = dec.low.low_ & 0xff; + buffer[index++] = dec.low.low_ >> 8 & 0xff; + buffer[index++] = dec.low.low_ >> 16 & 0xff; + buffer[index++] = dec.low.low_ >> 24 & 0xff; + // Encode high bits + buffer[index++] = dec.low.high_ & 0xff; + buffer[index++] = dec.low.high_ >> 8 & 0xff; + buffer[index++] = dec.low.high_ >> 16 & 0xff; + buffer[index++] = dec.low.high_ >> 24 & 0xff; + + // Encode the high 64 bits of the decimal + // Encode low bits + buffer[index++] = dec.high.low_ & 0xff; + buffer[index++] = dec.high.low_ >> 8 & 0xff; + buffer[index++] = dec.high.low_ >> 16 & 0xff; + buffer[index++] = dec.high.low_ >> 24 & 0xff; + // Encode high bits + buffer[index++] = dec.high.high_ & 0xff; + buffer[index++] = dec.high.high_ >> 8 & 0xff; + buffer[index++] = dec.high.high_ >> 16 & 0xff; + buffer[index++] = dec.high.high_ >> 24 & 0xff; + + // Return the new Decimal128 + return new Decimal128(buffer); + }; + + // Extract least significant 5 bits + var COMBINATION_MASK = 0x1f; + // Extract least significant 14 bits + var EXPONENT_MASK = 0x3fff; + // Value of combination field for Inf + var COMBINATION_INFINITY = 30; + // Value of combination field for NaN + var COMBINATION_NAN = 31; + // Value of combination field for NaN + var COMBINATION_SNAN = 32; + // decimal128 exponent bias + var EXPONENT_BIAS = 6176; + + Decimal128.prototype.toString = function () { + // Note: bits in this routine are referred to starting at 0, + // from the sign bit, towards the coefficient. + + // bits 0 - 31 + var high; + // bits 32 - 63 + var midh; + // bits 64 - 95 + var midl; + // bits 96 - 127 + var low; + // bits 1 - 5 + var combination; + // decoded biased exponent (14 bits) + var biased_exponent; + // the number of significand digits + var significand_digits = 0; + // the base-10 digits in the significand + var significand = new Array(36); + for (var i = 0; i < significand.length; i++) significand[i] = 0; + // read pointer into significand + var index = 0; + + // unbiased exponent + var exponent; + // the exponent if scientific notation is used + var scientific_exponent; + + // true if the number is zero + var is_zero = false; + + // the most signifcant significand bits (50-46) + var significand_msb; + // temporary storage for significand decoding + var significand128 = { parts: new Array(4) }; + // indexing variables + var i; + var j, k; + + // Output string + var string = []; + + // Unpack index + var index = 0; + + // Buffer reference + var buffer = this.bytes; + + // Unpack the low 64bits into a long + low = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + midl = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + + // Unpack the high 64bits into a long + midh = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + high = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + + // Unpack index + var index = 0; + + // Create the state of the decimal + var dec = { + low: new Long(low, midl), + high: new Long(midh, high) }; + + if (dec.high.lessThan(Long.ZERO)) { + string.push('-'); + } + + // Decode combination field and exponent + combination = high >> 26 & COMBINATION_MASK; + + if (combination >> 3 == 3) { + // Check for 'special' values + if (combination == COMBINATION_INFINITY) { + return string.join('') + "Infinity"; + } else if (combination == COMBINATION_NAN) { + return "NaN"; + } else { + biased_exponent = high >> 15 & EXPONENT_MASK; + significand_msb = 0x08 + (high >> 14 & 0x01); + } + } else { + significand_msb = high >> 14 & 0x07; + biased_exponent = high >> 17 & EXPONENT_MASK; + } + + exponent = biased_exponent - EXPONENT_BIAS; + + // Create string of significand digits + + // Convert the 114-bit binary number represented by + // (significand_high, significand_low) to at most 34 decimal + // digits through modulo and division. + significand128.parts[0] = (high & 0x3fff) + ((significand_msb & 0xf) << 14); + significand128.parts[1] = midh; + significand128.parts[2] = midl; + significand128.parts[3] = low; + + if (significand128.parts[0] == 0 && significand128.parts[1] == 0 && significand128.parts[2] == 0 && significand128.parts[3] == 0) { + is_zero = true; + } else { + for (var k = 3; k >= 0; k--) { + var least_digits = 0; + // Peform the divide + var result = divideu128(significand128); + significand128 = result.quotient; + least_digits = result.rem.low_; + + // We now have the 9 least significant digits (in base 2). + // Convert and output to string. + if (!least_digits) continue; + + for (var j = 8; j >= 0; j--) { + // significand[k * 9 + j] = Math.round(least_digits % 10); + significand[k * 9 + j] = least_digits % 10; + // least_digits = Math.round(least_digits / 10); + least_digits = Math.floor(least_digits / 10); + } + } + } + + // Output format options: + // Scientific - [-]d.dddE(+/-)dd or [-]dE(+/-)dd + // Regular - ddd.ddd + + if (is_zero) { + significand_digits = 1; + significand[index] = 0; + } else { + significand_digits = 36; + var i = 0; + + while (!significand[index]) { + i++; + significand_digits = significand_digits - 1; + index = index + 1; + } + } + + scientific_exponent = significand_digits - 1 + exponent; + + // The scientific exponent checks are dictated by the string conversion + // specification and are somewhat arbitrary cutoffs. + // + // We must check exponent > 0, because if this is the case, the number + // has trailing zeros. However, we *cannot* output these trailing zeros, + // because doing so would change the precision of the value, and would + // change stored data if the string converted number is round tripped. + + if (scientific_exponent >= 34 || scientific_exponent <= -7 || exponent > 0) { + // Scientific format + string.push(significand[index++]); + significand_digits = significand_digits - 1; + + if (significand_digits) { + string.push('.'); + } + + for (var i = 0; i < significand_digits; i++) { + string.push(significand[index++]); + } + + // Exponent + string.push('E'); + if (scientific_exponent > 0) { + string.push('+' + scientific_exponent); + } else { + string.push(scientific_exponent); + } + } else { + // Regular format with no decimal place + if (exponent >= 0) { + for (var i = 0; i < significand_digits; i++) { + string.push(significand[index++]); + } + } else { + var radix_position = significand_digits + exponent; + + // non-zero digits before radix + if (radix_position > 0) { + for (var i = 0; i < radix_position; i++) { + string.push(significand[index++]); + } + } else { + string.push('0'); + } + + string.push('.'); + // add leading zeros after radix + while (radix_position++ < 0) { + string.push('0'); + } + + for (var i = 0; i < significand_digits - Math.max(radix_position - 1, 0); i++) { + string.push(significand[index++]); + } + } + } + + return string.join(''); + }; + + Decimal128.prototype.toJSON = function () { + return { "$numberDecimal": this.toString() }; + }; + + module.exports = Decimal128; + module.exports.Decimal128 = Decimal128; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(300).Buffer)) + +/***/ }, +/* 315 */ +/***/ function(module, exports) { + + /** + * A class representation of the BSON MinKey type. + * + * @class + * @return {MinKey} A MinKey instance + */ + function MinKey() { + if (!(this instanceof MinKey)) return new MinKey(); + + this._bsontype = 'MinKey'; + } + + module.exports = MinKey; + module.exports.MinKey = MinKey; + +/***/ }, +/* 316 */ +/***/ function(module, exports) { + + /** + * A class representation of the BSON MaxKey type. + * + * @class + * @return {MaxKey} A MaxKey instance + */ + function MaxKey() { + if (!(this instanceof MaxKey)) return new MaxKey(); + + this._bsontype = 'MaxKey'; + } + + module.exports = MaxKey; + module.exports.MaxKey = MaxKey; + +/***/ }, +/* 317 */ +/***/ function(module, exports) { + + /** + * A class representation of the BSON DBRef type. + * + * @class + * @param {string} namespace the collection name. + * @param {ObjectID} oid the reference ObjectID. + * @param {string} [db] optional db name, if omitted the reference is local to the current db. + * @return {DBRef} + */ + function DBRef(namespace, oid, db) { + if (!(this instanceof DBRef)) return new DBRef(namespace, oid, db); + + this._bsontype = 'DBRef'; + this.namespace = namespace; + this.oid = oid; + this.db = db; + }; + + /** + * @ignore + * @api private + */ + DBRef.prototype.toJSON = function () { + return { + '$ref': this.namespace, + '$id': this.oid, + '$db': this.db == null ? '' : this.db + }; + }; + + module.exports = DBRef; + module.exports.DBRef = DBRef; + +/***/ }, +/* 318 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {/** + * Module dependencies. + * @ignore + */ + + // Test if we're in Node via presence of "global" not absence of "window" + // to support hybrid environments like Electron + if (typeof global !== 'undefined') { + var Buffer = __webpack_require__(300).Buffer; // TODO just use global Buffer + } + + /** + * A class representation of the BSON Binary type. + * + * Sub types + * - **BSON.BSON_BINARY_SUBTYPE_DEFAULT**, default BSON type. + * - **BSON.BSON_BINARY_SUBTYPE_FUNCTION**, BSON function type. + * - **BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY**, BSON byte array type. + * - **BSON.BSON_BINARY_SUBTYPE_UUID**, BSON uuid type. + * - **BSON.BSON_BINARY_SUBTYPE_MD5**, BSON md5 type. + * - **BSON.BSON_BINARY_SUBTYPE_USER_DEFINED**, BSON user defined type. + * + * @class + * @param {Buffer} buffer a buffer object containing the binary data. + * @param {Number} [subType] the option binary type. + * @return {Binary} + */ + function Binary(buffer, subType) { + if (!(this instanceof Binary)) return new Binary(buffer, subType); + + this._bsontype = 'Binary'; + + if (buffer instanceof Number) { + this.sub_type = buffer; + this.position = 0; + } else { + this.sub_type = subType == null ? BSON_BINARY_SUBTYPE_DEFAULT : subType; + this.position = 0; + } + + if (buffer != null && !(buffer instanceof Number)) { + // Only accept Buffer, Uint8Array or Arrays + if (typeof buffer == 'string') { + // Different ways of writing the length of the string for the different types + if (typeof Buffer != 'undefined') { + this.buffer = new Buffer(buffer); + } else if (typeof Uint8Array != 'undefined' || Object.prototype.toString.call(buffer) == '[object Array]') { + this.buffer = writeStringToArray(buffer); + } else { + throw new Error("only String, Buffer, Uint8Array or Array accepted"); + } + } else { + this.buffer = buffer; + } + this.position = buffer.length; + } else { + if (typeof Buffer != 'undefined') { + this.buffer = new Buffer(Binary.BUFFER_SIZE); + } else if (typeof Uint8Array != 'undefined') { + this.buffer = new Uint8Array(new ArrayBuffer(Binary.BUFFER_SIZE)); + } else { + this.buffer = new Array(Binary.BUFFER_SIZE); + } + // Set position to start of buffer + this.position = 0; + } + }; + + /** + * Updates this binary with byte_value. + * + * @method + * @param {string} byte_value a single byte we wish to write. + */ + Binary.prototype.put = function put(byte_value) { + // If it's a string and a has more than one character throw an error + if (byte_value['length'] != null && typeof byte_value != 'number' && byte_value.length != 1) throw new Error("only accepts single character String, Uint8Array or Array"); + if (typeof byte_value != 'number' && byte_value < 0 || byte_value > 255) throw new Error("only accepts number in a valid unsigned byte range 0-255"); + + // Decode the byte value once + var decoded_byte = null; + if (typeof byte_value == 'string') { + decoded_byte = byte_value.charCodeAt(0); + } else if (byte_value['length'] != null) { + decoded_byte = byte_value[0]; + } else { + decoded_byte = byte_value; + } + + if (this.buffer.length > this.position) { + this.buffer[this.position++] = decoded_byte; + } else { + if (typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer)) { + // Create additional overflow buffer + var buffer = new Buffer(Binary.BUFFER_SIZE + this.buffer.length); + // Combine the two buffers together + this.buffer.copy(buffer, 0, 0, this.buffer.length); + this.buffer = buffer; + this.buffer[this.position++] = decoded_byte; + } else { + var buffer = null; + // Create a new buffer (typed or normal array) + if (Object.prototype.toString.call(this.buffer) == '[object Uint8Array]') { + buffer = new Uint8Array(new ArrayBuffer(Binary.BUFFER_SIZE + this.buffer.length)); + } else { + buffer = new Array(Binary.BUFFER_SIZE + this.buffer.length); + } + + // We need to copy all the content to the new array + for (var i = 0; i < this.buffer.length; i++) { + buffer[i] = this.buffer[i]; + } + + // Reassign the buffer + this.buffer = buffer; + // Write the byte + this.buffer[this.position++] = decoded_byte; + } + } + }; + + /** + * Writes a buffer or string to the binary. + * + * @method + * @param {(Buffer|string)} string a string or buffer to be written to the Binary BSON object. + * @param {number} offset specify the binary of where to write the content. + * @return {null} + */ + Binary.prototype.write = function write(string, offset) { + offset = typeof offset == 'number' ? offset : this.position; + + // If the buffer is to small let's extend the buffer + if (this.buffer.length < offset + string.length) { + var buffer = null; + // If we are in node.js + if (typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer)) { + buffer = new Buffer(this.buffer.length + string.length); + this.buffer.copy(buffer, 0, 0, this.buffer.length); + } else if (Object.prototype.toString.call(this.buffer) == '[object Uint8Array]') { + // Create a new buffer + buffer = new Uint8Array(new ArrayBuffer(this.buffer.length + string.length)); + // Copy the content + for (var i = 0; i < this.position; i++) { + buffer[i] = this.buffer[i]; + } + } + + // Assign the new buffer + this.buffer = buffer; + } + + if (typeof Buffer != 'undefined' && Buffer.isBuffer(string) && Buffer.isBuffer(this.buffer)) { + string.copy(this.buffer, offset, 0, string.length); + this.position = offset + string.length > this.position ? offset + string.length : this.position; + // offset = string.length + } else if (typeof Buffer != 'undefined' && typeof string == 'string' && Buffer.isBuffer(this.buffer)) { + this.buffer.write(string, offset, 'binary'); + this.position = offset + string.length > this.position ? offset + string.length : this.position; + // offset = string.length; + } else if (Object.prototype.toString.call(string) == '[object Uint8Array]' || Object.prototype.toString.call(string) == '[object Array]' && typeof string != 'string') { + for (var i = 0; i < string.length; i++) { + this.buffer[offset++] = string[i]; + } + + this.position = offset > this.position ? offset : this.position; + } else if (typeof string == 'string') { + for (var i = 0; i < string.length; i++) { + this.buffer[offset++] = string.charCodeAt(i); + } + + this.position = offset > this.position ? offset : this.position; + } + }; + + /** + * Reads **length** bytes starting at **position**. + * + * @method + * @param {number} position read from the given position in the Binary. + * @param {number} length the number of bytes to read. + * @return {Buffer} + */ + Binary.prototype.read = function read(position, length) { + length = length && length > 0 ? length : this.position; + + // Let's return the data based on the type we have + if (this.buffer['slice']) { + return this.buffer.slice(position, position + length); + } else { + // Create a buffer to keep the result + var buffer = typeof Uint8Array != 'undefined' ? new Uint8Array(new ArrayBuffer(length)) : new Array(length); + for (var i = 0; i < length; i++) { + buffer[i] = this.buffer[position++]; + } + } + // Return the buffer + return buffer; + }; + + /** + * Returns the value of this binary as a string. + * + * @method + * @return {string} + */ + Binary.prototype.value = function value(asRaw) { + asRaw = asRaw == null ? false : asRaw; + + // Optimize to serialize for the situation where the data == size of buffer + if (asRaw && typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer) && this.buffer.length == this.position) return this.buffer; + + // If it's a node.js buffer object + if (typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer)) { + return asRaw ? this.buffer.slice(0, this.position) : this.buffer.toString('binary', 0, this.position); + } else { + if (asRaw) { + // we support the slice command use it + if (this.buffer['slice'] != null) { + return this.buffer.slice(0, this.position); + } else { + // Create a new buffer to copy content to + var newBuffer = Object.prototype.toString.call(this.buffer) == '[object Uint8Array]' ? new Uint8Array(new ArrayBuffer(this.position)) : new Array(this.position); + // Copy content + for (var i = 0; i < this.position; i++) { + newBuffer[i] = this.buffer[i]; + } + // Return the buffer + return newBuffer; + } + } else { + return convertArraytoUtf8BinaryString(this.buffer, 0, this.position); + } + } + }; + + /** + * Length. + * + * @method + * @return {number} the length of the binary. + */ + Binary.prototype.length = function length() { + return this.position; + }; + + /** + * @ignore + */ + Binary.prototype.toJSON = function () { + return this.buffer != null ? this.buffer.toString('base64') : ''; + }; + + /** + * @ignore + */ + Binary.prototype.toString = function (format) { + return this.buffer != null ? this.buffer.slice(0, this.position).toString(format) : ''; + }; + + /** + * Binary default subtype + * @ignore + */ + var BSON_BINARY_SUBTYPE_DEFAULT = 0; + + /** + * @ignore + */ + var writeStringToArray = function (data) { + // Create a buffer + var buffer = typeof Uint8Array != 'undefined' ? new Uint8Array(new ArrayBuffer(data.length)) : new Array(data.length); + // Write the content to the buffer + for (var i = 0; i < data.length; i++) { + buffer[i] = data.charCodeAt(i); + } + // Write the string to the buffer + return buffer; + }; + + /** + * Convert Array ot Uint8Array to Binary String + * + * @ignore + */ + var convertArraytoUtf8BinaryString = function (byteArray, startIndex, endIndex) { + var result = ""; + for (var i = startIndex; i < endIndex; i++) { + result = result + String.fromCharCode(byteArray[i]); + } + return result; + }; + + Binary.BUFFER_SIZE = 256; + + /** + * Default BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ + Binary.SUBTYPE_DEFAULT = 0; + /** + * Function BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ + Binary.SUBTYPE_FUNCTION = 1; + /** + * Byte Array BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ + Binary.SUBTYPE_BYTE_ARRAY = 2; + /** + * OLD UUID BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ + Binary.SUBTYPE_UUID_OLD = 3; + /** + * UUID BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ + Binary.SUBTYPE_UUID = 4; + /** + * MD5 BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ + Binary.SUBTYPE_MD5 = 5; + /** + * User BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ + Binary.SUBTYPE_USER_DEFINED = 128; + + /** + * Expose. + */ + module.exports = Binary; + module.exports.Binary = Binary; + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 319 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(Buffer) {"use strict"; + + var readIEEE754 = __webpack_require__(304).readIEEE754, + f = __webpack_require__(320).format, + Long = __webpack_require__(306).Long, + Double = __webpack_require__(307).Double, + Timestamp = __webpack_require__(308).Timestamp, + ObjectID = __webpack_require__(309).ObjectID, + Symbol = __webpack_require__(311).Symbol, + Code = __webpack_require__(313).Code, + MinKey = __webpack_require__(315).MinKey, + MaxKey = __webpack_require__(316).MaxKey, + Decimal128 = __webpack_require__(314), + Int32 = __webpack_require__(312), + DBRef = __webpack_require__(317).DBRef, + BSONRegExp = __webpack_require__(310).BSONRegExp, + Binary = __webpack_require__(318).Binary; + + var deserialize = function (buffer, options, isArray) { + options = options == null ? {} : options; + var index = options && options.index ? options.index : 0; + // Read the document size + var size = buffer[index] | buffer[index + 1] << 8 | buffer[index + 2] << 16 | buffer[index + 3] << 24; + + // Ensure buffer is valid size + if (size < 5 || buffer.length < size || size + index > buffer.length) { + throw new Error("corrupt bson message"); + } + + // Illegal end value + if (buffer[index + size - 1] != 0) { + throw new Error("One object, sized correctly, with a spot for an EOO, but the EOO isn't 0x00"); + } + + // Start deserializtion + return deserializeObject(buffer, index, options, isArray); + }; + + var deserializeObject = function (buffer, index, options, isArray) { + var evalFunctions = options['evalFunctions'] == null ? false : options['evalFunctions']; + var cacheFunctions = options['cacheFunctions'] == null ? false : options['cacheFunctions']; + var cacheFunctionsCrc32 = options['cacheFunctionsCrc32'] == null ? false : options['cacheFunctionsCrc32']; + var fieldsAsRaw = options['fieldsAsRaw'] == null ? null : options['fieldsAsRaw']; + + // Return raw bson buffer instead of parsing it + var raw = options['raw'] == null ? false : options['raw']; + + // Return BSONRegExp objects instead of native regular expressions + var bsonRegExp = typeof options['bsonRegExp'] == 'boolean' ? options['bsonRegExp'] : false; + + // Controls the promotion of values vs wrapper classes + var promoteBuffers = options['promoteBuffers'] == null ? false : options['promoteBuffers']; + var promoteLongs = options['promoteLongs'] == null ? true : options['promoteLongs']; + var promoteValues = options['promoteValues'] == null ? true : options['promoteValues']; + + // Set the start index + var startIndex = index; + + // Validate that we have at least 4 bytes of buffer + if (buffer.length < 5) throw new Error("corrupt bson message < 5 bytes long"); + + // Read the document size + var size = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + + // Ensure buffer is valid size + if (size < 5 || size > buffer.length) throw new Error("corrupt bson message"); + + // Create holding object + var object = isArray ? [] : {}; + // Used for arrays to skip having to perform utf8 decoding + var arrayIndex = 0; + + // While we have more left data left keep parsing + while (true) { + // Read the type + var elementType = buffer[index++]; + // If we get a zero it's the last byte, exit + if (elementType == 0) { + break; + } + + // Get the start search index + var i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new Error("Bad BSON Document: illegal CString"); + var name = isArray ? arrayIndex++ : buffer.toString('utf8', index, i); + + index = i + 1; + + if (elementType == BSON.BSON_DATA_STRING) { + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if (stringSize <= 0 || stringSize > buffer.length - index || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + object[name] = buffer.toString('utf8', index, index + stringSize - 1); + index = index + stringSize; + } else if (elementType == BSON.BSON_DATA_OID) { + var oid = new Buffer(12); + buffer.copy(oid, 0, index, index + 12); + object[name] = new ObjectID(oid); + index = index + 12; + } else if (elementType == BSON.BSON_DATA_INT && promoteValues == false) { + object[name] = new Int32(buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24); + } else if (elementType == BSON.BSON_DATA_INT) { + object[name] = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + } else if (elementType == BSON.BSON_DATA_NUMBER && promoteValues == false) { + object[name] = new Double(buffer.readDoubleLE(index)); + index = index + 8; + } else if (elementType == BSON.BSON_DATA_NUMBER) { + object[name] = buffer.readDoubleLE(index); + index = index + 8; + } else if (elementType == BSON.BSON_DATA_DATE) { + var lowBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var highBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + object[name] = new Date(new Long(lowBits, highBits).toNumber()); + } else if (elementType == BSON.BSON_DATA_BOOLEAN) { + if (buffer[index] != 0 && buffer[index] != 1) throw new Error('illegal boolean type value'); + object[name] = buffer[index++] == 1; + } else if (elementType == BSON.BSON_DATA_OBJECT) { + var _index = index; + var objectSize = buffer[index] | buffer[index + 1] << 8 | buffer[index + 2] << 16 | buffer[index + 3] << 24; + if (objectSize <= 0 || objectSize > buffer.length - index) throw new Error("bad embedded document length in bson"); + + // We have a raw value + if (raw) { + object[name] = buffer.slice(index, index + objectSize); + } else { + object[name] = deserializeObject(buffer, _index, options, false); + } + + index = index + objectSize; + } else if (elementType == BSON.BSON_DATA_ARRAY) { + var _index = index; + var objectSize = buffer[index] | buffer[index + 1] << 8 | buffer[index + 2] << 16 | buffer[index + 3] << 24; + var arrayOptions = options; + + // Stop index + var stopIndex = index + objectSize; + + // All elements of array to be returned as raw bson + if (fieldsAsRaw && fieldsAsRaw[name]) { + arrayOptions = {}; + for (var n in options) arrayOptions[n] = options[n]; + arrayOptions['raw'] = true; + } + + object[name] = deserializeObject(buffer, _index, arrayOptions, true); + index = index + objectSize; + + if (buffer[index - 1] != 0) throw new Error('invalid array terminator byte'); + if (index != stopIndex) throw new Error('corrupted array bson'); + } else if (elementType == BSON.BSON_DATA_UNDEFINED) { + object[name] = undefined; + } else if (elementType == BSON.BSON_DATA_NULL) { + object[name] = null; + } else if (elementType == BSON.BSON_DATA_LONG) { + // Unpack the low and high bits + var lowBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var highBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var long = new Long(lowBits, highBits); + // Promote the long if possible + if (promoteLongs && promoteValues == true) { + object[name] = long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) ? long.toNumber() : long; + } else { + object[name] = long; + } + } else if (elementType == BSON.BSON_DATA_DECIMAL128) { + // Buffer to contain the decimal bytes + var bytes = new Buffer(16); + // Copy the next 16 bytes into the bytes buffer + buffer.copy(bytes, 0, index, index + 16); + // Update index + index = index + 16; + // Assign the new Decimal128 value + var decimal128 = new Decimal128(bytes); + // If we have an alternative mapper use that + object[name] = decimal128.toObject ? decimal128.toObject() : decimal128; + } else if (elementType == BSON.BSON_DATA_BINARY) { + var binarySize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var totalBinarySize = binarySize; + var subType = buffer[index++]; + + // Did we have a negative binary size, throw + if (binarySize < 0) throw new Error('Negative binary type element size found'); + + // Is the length longer than the document + if (binarySize > buffer.length) throw new Error('Binary type size larger than document size'); + + // Decode as raw Buffer object if options specifies it + if (buffer['slice'] != null) { + // If we have subtype 2 skip the 4 bytes for the size + if (subType == Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if (binarySize < 0) throw new Error('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) throw new Error('Binary type with subtype 0x02 contains to long binary size'); + if (binarySize < totalBinarySize - 4) throw new Error('Binary type with subtype 0x02 contains to short binary size'); + } + + if (promoteBuffers && promoteValues) { + object[name] = buffer.slice(index, index + binarySize); + } else { + object[name] = new Binary(buffer.slice(index, index + binarySize), subType); + } + } else { + var _buffer = typeof Uint8Array != 'undefined' ? new Uint8Array(new ArrayBuffer(binarySize)) : new Array(binarySize); + // If we have subtype 2 skip the 4 bytes for the size + if (subType == Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if (binarySize < 0) throw new Error('Negative binary type element size found for subtype 0x02'); + if (binarySize > totalBinarySize - 4) throw new Error('Binary type with subtype 0x02 contains to long binary size'); + if (binarySize < totalBinarySize - 4) throw new Error('Binary type with subtype 0x02 contains to short binary size'); + } + + // Copy the data + for (var i = 0; i < binarySize; i++) { + _buffer[i] = buffer[index + i]; + } + + if (promoteBuffers && promoteValues) { + object[name] = _buffer; + } else { + object[name] = new Binary(_buffer, subType); + } + } + + // Update the index + index = index + binarySize; + } else if (elementType == BSON.BSON_DATA_REGEXP && bsonRegExp == false) { + // Get the start search index + var i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new Error("Bad BSON Document: illegal CString"); + // Return the C string + var source = buffer.toString('utf8', index, i); + // Create the regexp + index = i + 1; + + // Get the start search index + var i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new Error("Bad BSON Document: illegal CString"); + // Return the C string + var regExpOptions = buffer.toString('utf8', index, i); + index = i + 1; + + // For each option add the corresponding one for javascript + var optionsArray = new Array(regExpOptions.length); + + // Parse options + for (var i = 0; i < regExpOptions.length; i++) { + switch (regExpOptions[i]) { + case 'm': + optionsArray[i] = 'm'; + break; + case 's': + optionsArray[i] = 'g'; + break; + case 'i': + optionsArray[i] = 'i'; + break; + } + } + + object[name] = new RegExp(source, optionsArray.join('')); + } else if (elementType == BSON.BSON_DATA_REGEXP && bsonRegExp == true) { + // Get the start search index + var i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new Error("Bad BSON Document: illegal CString"); + // Return the C string + var source = buffer.toString('utf8', index, i); + index = i + 1; + + // Get the start search index + var i = index; + // Locate the end of the c string + while (buffer[i] !== 0x00 && i < buffer.length) { + i++; + } + // If are at the end of the buffer there is a problem with the document + if (i >= buffer.length) throw new Error("Bad BSON Document: illegal CString"); + // Return the C string + var regExpOptions = buffer.toString('utf8', index, i); + index = i + 1; + + // Set the object + object[name] = new BSONRegExp(source, regExpOptions); + } else if (elementType == BSON.BSON_DATA_SYMBOL) { + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if (stringSize <= 0 || stringSize > buffer.length - index || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + object[name] = new Symbol(buffer.toString('utf8', index, index + stringSize - 1)); + index = index + stringSize; + } else if (elementType == BSON.BSON_DATA_TIMESTAMP) { + var lowBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var highBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + object[name] = new Timestamp(lowBits, highBits); + } else if (elementType == BSON.BSON_DATA_MIN_KEY) { + object[name] = new MinKey(); + } else if (elementType == BSON.BSON_DATA_MAX_KEY) { + object[name] = new MaxKey(); + } else if (elementType == BSON.BSON_DATA_CODE) { + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if (stringSize <= 0 || stringSize > buffer.length - index || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + var functionString = buffer.toString('utf8', index, index + stringSize - 1); + + // If we are evaluating the functions + if (evalFunctions) { + var value = null; + // If we have cache enabled let's look for the md5 of the function in the cache + if (cacheFunctions) { + var hash = cacheFunctionsCrc32 ? crc32(functionString) : functionString; + // Got to do this to avoid V8 deoptimizing the call due to finding eval + object[name] = isolateEvalWithHash(functionCache, hash, functionString, object); + } else { + object[name] = isolateEval(functionString); + } + } else { + object[name] = new Code(functionString); + } + + // Update parse index position + index = index + stringSize; + } else if (elementType == BSON.BSON_DATA_CODE_W_SCOPE) { + var totalSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + + // Element cannot be shorter than totalSize + stringSize + documentSize + terminator + if (totalSize < 4 + 4 + 4 + 1) { + throw new Error("code_w_scope total size shorter minimum expected length"); + } + + // Get the code string size + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + // Check if we have a valid string + if (stringSize <= 0 || stringSize > buffer.length - index || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + + // Javascript function + var functionString = buffer.toString('utf8', index, index + stringSize - 1); + // Update parse index position + index = index + stringSize; + // Parse the element + var _index = index; + // Decode the size of the object document + var objectSize = buffer[index] | buffer[index + 1] << 8 | buffer[index + 2] << 16 | buffer[index + 3] << 24; + // Decode the scope object + var scopeObject = deserializeObject(buffer, _index, options, false); + // Adjust the index + index = index + objectSize; + + // Check if field length is to short + if (totalSize < 4 + 4 + objectSize + stringSize) { + throw new Error('code_w_scope total size is to short, truncating scope'); + } + + // Check if totalSize field is to long + if (totalSize > 4 + 4 + objectSize + stringSize) { + throw new Error('code_w_scope total size is to long, clips outer document'); + } + + // If we are evaluating the functions + if (evalFunctions) { + // Contains the value we are going to set + var value = null; + // If we have cache enabled let's look for the md5 of the function in the cache + if (cacheFunctions) { + var hash = cacheFunctionsCrc32 ? crc32(functionString) : functionString; + // Got to do this to avoid V8 deoptimizing the call due to finding eval + object[name] = isolateEvalWithHash(functionCache, hash, functionString, object); + } else { + object[name] = isolateEval(functionString); + } + + object[name].scope = scopeObject; + } else { + object[name] = new Code(functionString, scopeObject); + } + } else if (elementType == BSON.BSON_DATA_DBPOINTER) { + // Get the code string size + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + // Check if we have a valid string + if (stringSize <= 0 || stringSize > buffer.length - index || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + // Namespace + var namespace = buffer.toString('utf8', index, index + stringSize - 1); + // Update parse index position + index = index + stringSize; + + // Read the oid + var oidBuffer = new Buffer(12); + buffer.copy(oidBuffer, 0, index, index + 12); + var oid = new ObjectID(oidBuffer); + + // Update the index + index = index + 12; + + // Split the namespace + var parts = namespace.split('.'); + var db = parts.shift(); + var collection = parts.join('.'); + // Upgrade to DBRef type + object[name] = new DBRef(collection, oid, db); + } else { + throw new Error("Detected unknown BSON type " + elementType.toString(16) + " for fieldname \"" + name + "\", are you using the latest BSON parser"); + } + } + + // Check if the deserialization was against a valid array/object + if (size != index - startIndex) { + if (isArray) throw new Error('corrupt array bson'); + throw new Error('corrupt object bson'); + } + + // Check if we have a db ref object + if (object['$id'] != null) object = new DBRef(object['$ref'], object['$id'], object['$db']); + return object; + }; + + /** + * Ensure eval is isolated. + * + * @ignore + * @api private + */ + var isolateEvalWithHash = function (functionCache, hash, functionString, object) { + // Contains the value we are going to set + var value = null; + + // Check for cache hit, eval if missing and return cached function + if (functionCache[hash] == null) { + eval("value = " + functionString); + functionCache[hash] = value; + } + // Set the object + return functionCache[hash].bind(object); + }; + + /** + * Ensure eval is isolated. + * + * @ignore + * @api private + */ + var isolateEval = function (functionString) { + // Contains the value we are going to set + var value = null; + // Eval the function + eval("value = " + functionString); + return value; + }; + + var BSON = {}; + + /** + * Contains the function cache if we have that enable to allow for avoiding the eval step on each deserialization, comparison is by md5 + * + * @ignore + * @api private + */ + var functionCache = BSON.functionCache = {}; + + /** + * Number BSON Type + * + * @classconstant BSON_DATA_NUMBER + **/ + BSON.BSON_DATA_NUMBER = 1; + /** + * String BSON Type + * + * @classconstant BSON_DATA_STRING + **/ + BSON.BSON_DATA_STRING = 2; + /** + * Object BSON Type + * + * @classconstant BSON_DATA_OBJECT + **/ + BSON.BSON_DATA_OBJECT = 3; + /** + * Array BSON Type + * + * @classconstant BSON_DATA_ARRAY + **/ + BSON.BSON_DATA_ARRAY = 4; + /** + * Binary BSON Type + * + * @classconstant BSON_DATA_BINARY + **/ + BSON.BSON_DATA_BINARY = 5; + /** + * Binary BSON Type + * + * @classconstant BSON_DATA_UNDEFINED + **/ + BSON.BSON_DATA_UNDEFINED = 6; + /** + * ObjectID BSON Type + * + * @classconstant BSON_DATA_OID + **/ + BSON.BSON_DATA_OID = 7; + /** + * Boolean BSON Type + * + * @classconstant BSON_DATA_BOOLEAN + **/ + BSON.BSON_DATA_BOOLEAN = 8; + /** + * Date BSON Type + * + * @classconstant BSON_DATA_DATE + **/ + BSON.BSON_DATA_DATE = 9; + /** + * null BSON Type + * + * @classconstant BSON_DATA_NULL + **/ + BSON.BSON_DATA_NULL = 10; + /** + * RegExp BSON Type + * + * @classconstant BSON_DATA_REGEXP + **/ + BSON.BSON_DATA_REGEXP = 11; + /** + * Code BSON Type + * + * @classconstant BSON_DATA_DBPOINTER + **/ + BSON.BSON_DATA_DBPOINTER = 12; + /** + * Code BSON Type + * + * @classconstant BSON_DATA_CODE + **/ + BSON.BSON_DATA_CODE = 13; + /** + * Symbol BSON Type + * + * @classconstant BSON_DATA_SYMBOL + **/ + BSON.BSON_DATA_SYMBOL = 14; + /** + * Code with Scope BSON Type + * + * @classconstant BSON_DATA_CODE_W_SCOPE + **/ + BSON.BSON_DATA_CODE_W_SCOPE = 15; + /** + * 32 bit Integer BSON Type + * + * @classconstant BSON_DATA_INT + **/ + BSON.BSON_DATA_INT = 16; + /** + * Timestamp BSON Type + * + * @classconstant BSON_DATA_TIMESTAMP + **/ + BSON.BSON_DATA_TIMESTAMP = 17; + /** + * Long BSON Type + * + * @classconstant BSON_DATA_LONG + **/ + BSON.BSON_DATA_LONG = 18; + /** + * Long BSON Type + * + * @classconstant BSON_DATA_DECIMAL128 + **/ + BSON.BSON_DATA_DECIMAL128 = 19; + /** + * MinKey BSON Type + * + * @classconstant BSON_DATA_MIN_KEY + **/ + BSON.BSON_DATA_MIN_KEY = 0xff; + /** + * MaxKey BSON Type + * + * @classconstant BSON_DATA_MAX_KEY + **/ + BSON.BSON_DATA_MAX_KEY = 0x7f; + + /** + * Binary Default Type + * + * @classconstant BSON_BINARY_SUBTYPE_DEFAULT + **/ + BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0; + /** + * Binary Function Type + * + * @classconstant BSON_BINARY_SUBTYPE_FUNCTION + **/ + BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1; + /** + * Binary Byte Array Type + * + * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY + **/ + BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; + /** + * Binary UUID Type + * + * @classconstant BSON_BINARY_SUBTYPE_UUID + **/ + BSON.BSON_BINARY_SUBTYPE_UUID = 3; + /** + * Binary MD5 Type + * + * @classconstant BSON_BINARY_SUBTYPE_MD5 + **/ + BSON.BSON_BINARY_SUBTYPE_MD5 = 4; + /** + * Binary User Defined Type + * + * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED + **/ + BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; + + // BSON MAX VALUES + BSON.BSON_INT32_MAX = 0x7FFFFFFF; + BSON.BSON_INT32_MIN = -0x80000000; + + BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1; + BSON.BSON_INT64_MIN = -Math.pow(2, 63); + + // JS MAX PRECISE VALUES + BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. + BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + + // Internal long versions + var JS_INT_MAX_LONG = Long.fromNumber(0x20000000000000); // Any integer up to 2^53 can be precisely represented by a double. + var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down to -2^53 can be precisely represented by a double. + + module.exports = deserialize; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(300).Buffer)) + +/***/ }, +/* 320 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global, process) {// 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 = __webpack_require__(321); + + 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 = __webpack_require__(322); + + 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); + } + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(294))) + +/***/ }, +/* 321 */ +/***/ function(module, exports) { + + module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; + } + +/***/ }, +/* 322 */ +/***/ function(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 + } + } + + +/***/ }, +/* 323 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(Buffer) {"use strict"; + + var writeIEEE754 = __webpack_require__(304).writeIEEE754, + readIEEE754 = __webpack_require__(304).readIEEE754, + Long = __webpack_require__(306).Long, + Map = __webpack_require__(305), + Double = __webpack_require__(307).Double, + Timestamp = __webpack_require__(308).Timestamp, + ObjectID = __webpack_require__(309).ObjectID, + Symbol = __webpack_require__(311).Symbol, + Code = __webpack_require__(313).Code, + BSONRegExp = __webpack_require__(310).BSONRegExp, + Int32 = __webpack_require__(312).Int32, + MinKey = __webpack_require__(315).MinKey, + MaxKey = __webpack_require__(316).MaxKey, + Decimal128 = __webpack_require__(314), + DBRef = __webpack_require__(317).DBRef, + Binary = __webpack_require__(318).Binary; + + try { + var _Buffer = Uint8Array; + } catch (e) { + var _Buffer = Buffer; + } + + var regexp = /\x00/; + + // To ensure that 0.4 of node works correctly + var isDate = function isDate(d) { + return typeof d === 'object' && Object.prototype.toString.call(d) === '[object Date]'; + }; + + var isRegExp = function isRegExp(d) { + return Object.prototype.toString.call(d) === '[object RegExp]'; + }; + + var serializeString = function (buffer, key, value, index, isArray) { + // Encode String type + buffer[index++] = BSON.BSON_DATA_STRING; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes + 1; + buffer[index - 1] = 0; + // Write the string + var size = buffer.write(value, index + 4, 'utf8'); + // Write the size of the string to buffer + buffer[index + 3] = size + 1 >> 24 & 0xff; + buffer[index + 2] = size + 1 >> 16 & 0xff; + buffer[index + 1] = size + 1 >> 8 & 0xff; + buffer[index] = size + 1 & 0xff; + // Update index + index = index + 4 + size; + // Write zero + buffer[index++] = 0; + return index; + }; + + var serializeNumber = function (buffer, key, value, index, isArray) { + // We have an integer value + if (Math.floor(value) === value && value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { + // If the value fits in 32 bits encode as int, if it fits in a double + // encode it as a double, otherwise long + if (value >= BSON.BSON_INT32_MIN && value <= BSON.BSON_INT32_MAX) { + // Set int type 32 bits or less + buffer[index++] = BSON.BSON_DATA_INT; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the int value + buffer[index++] = value & 0xff; + buffer[index++] = value >> 8 & 0xff; + buffer[index++] = value >> 16 & 0xff; + buffer[index++] = value >> 24 & 0xff; + } else if (value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { + // Encode as double + buffer[index++] = BSON.BSON_DATA_NUMBER; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write float + writeIEEE754(buffer, value, index, 'little', 52, 8); + // Ajust index + index = index + 8; + } else { + // Set long type + buffer[index++] = BSON.BSON_DATA_LONG; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + var longVal = Long.fromNumber(value); + var lowBits = longVal.getLowBits(); + var highBits = longVal.getHighBits(); + // Encode low bits + buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits >> 8 & 0xff; + buffer[index++] = lowBits >> 16 & 0xff; + buffer[index++] = lowBits >> 24 & 0xff; + // Encode high bits + buffer[index++] = highBits & 0xff; + buffer[index++] = highBits >> 8 & 0xff; + buffer[index++] = highBits >> 16 & 0xff; + buffer[index++] = highBits >> 24 & 0xff; + } + } else { + // Encode as double + buffer[index++] = BSON.BSON_DATA_NUMBER; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write float + writeIEEE754(buffer, value, index, 'little', 52, 8); + // Ajust index + index = index + 8; + } + + return index; + }; + + var serializeUndefined = function (buffer, key, value, index, isArray) { + // Set long type + buffer[index++] = BSON.BSON_DATA_UNDEFINED; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; + }; + + var serializeNull = function (buffer, key, value, index, isArray) { + // Set long type + buffer[index++] = BSON.BSON_DATA_NULL; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; + }; + + var serializeBoolean = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_BOOLEAN; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Encode the boolean value + buffer[index++] = value ? 1 : 0; + return index; + }; + + var serializeDate = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_DATE; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Write the date + var dateInMilis = Long.fromNumber(value.getTime()); + var lowBits = dateInMilis.getLowBits(); + var highBits = dateInMilis.getHighBits(); + // Encode low bits + buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits >> 8 & 0xff; + buffer[index++] = lowBits >> 16 & 0xff; + buffer[index++] = lowBits >> 24 & 0xff; + // Encode high bits + buffer[index++] = highBits & 0xff; + buffer[index++] = highBits >> 8 & 0xff; + buffer[index++] = highBits >> 16 & 0xff; + buffer[index++] = highBits >> 24 & 0xff; + return index; + }; + + var serializeRegExp = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_REGEXP; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.source && value.source.match(regexp) != null) { + throw Error("value " + value.source + " must not contain null bytes"); + } + // Adjust the index + index = index + buffer.write(value.source, index, 'utf8'); + // Write zero + buffer[index++] = 0x00; + // Write the parameters + if (value.global) buffer[index++] = 0x73; // s + if (value.ignoreCase) buffer[index++] = 0x69; // i + if (value.multiline) buffer[index++] = 0x6d; // m + // Add ending zero + buffer[index++] = 0x00; + return index; + }; + + var serializeBSONRegExp = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_REGEXP; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Check the pattern for 0 bytes + if (value.pattern.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw Error("pattern " + value.pattern + " must not contain null bytes"); + } + + // Adjust the index + index = index + buffer.write(value.pattern, index, 'utf8'); + // Write zero + buffer[index++] = 0x00; + // Write the options + index = index + buffer.write(value.options.split('').sort().join(''), index, 'utf8'); + // Add ending zero + buffer[index++] = 0x00; + return index; + }; + + var serializeMinMax = function (buffer, key, value, index, isArray) { + // Write the type of either min or max key + if (value === null) { + buffer[index++] = BSON.BSON_DATA_NULL; + } else if (value instanceof MinKey) { + buffer[index++] = BSON.BSON_DATA_MIN_KEY; + } else { + buffer[index++] = BSON.BSON_DATA_MAX_KEY; + } + + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; + }; + + var serializeObjectId = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_OID; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Write the objectId into the shared buffer + if (typeof value.id == 'string') { + buffer.write(value.id, index, 'binary'); + } else if (value.id && value.id.copy) { + value.id.copy(buffer, index, 0, 12); + } else { + throw new Error('object [' + JSON.stringify(value) + "] is not a valid ObjectId"); + } + + // Ajust index + return index + 12; + }; + + var serializeBuffer = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_BINARY; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Get size of the buffer (current write point) + var size = value.length; + // Write the size of the string to buffer + buffer[index++] = size & 0xff; + buffer[index++] = size >> 8 & 0xff; + buffer[index++] = size >> 16 & 0xff; + buffer[index++] = size >> 24 & 0xff; + // Write the default subtype + buffer[index++] = BSON.BSON_BINARY_SUBTYPE_DEFAULT; + // Copy the content form the binary field to the buffer + value.copy(buffer, index, 0, size); + // Adjust the index + index = index + size; + return index; + }; + + var serializeObject = function (buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, isArray, path) { + for (var i = 0; i < path.length; i++) { + if (path[i] === value) throw new Error('cyclic dependency detected'); + } + + // Push value to stack + path.push(value); + // Write the type + buffer[index++] = Array.isArray(value) ? BSON.BSON_DATA_ARRAY : BSON.BSON_DATA_OBJECT; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + var endIndex = serializeInto(buffer, value, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + // Pop stack + path.pop(); + // Write size + var size = endIndex - index; + return endIndex; + }; + + var serializeDecimal128 = function (buffer, key, value, index, isArray) { + buffer[index++] = BSON.BSON_DATA_DECIMAL128; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the data from the value + value.bytes.copy(buffer, index, 0, 16); + return index + 16; + }; + + var serializeLong = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = value._bsontype == 'Long' ? BSON.BSON_DATA_LONG : BSON.BSON_DATA_TIMESTAMP; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the date + var lowBits = value.getLowBits(); + var highBits = value.getHighBits(); + // Encode low bits + buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits >> 8 & 0xff; + buffer[index++] = lowBits >> 16 & 0xff; + buffer[index++] = lowBits >> 24 & 0xff; + // Encode high bits + buffer[index++] = highBits & 0xff; + buffer[index++] = highBits >> 8 & 0xff; + buffer[index++] = highBits >> 16 & 0xff; + buffer[index++] = highBits >> 24 & 0xff; + return index; + }; + + var serializeInt32 = function (buffer, key, value, index, isArray) { + // Set int type 32 bits or less + buffer[index++] = BSON.BSON_DATA_INT; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the int value + buffer[index++] = value & 0xff; + buffer[index++] = value >> 8 & 0xff; + buffer[index++] = value >> 16 & 0xff; + buffer[index++] = value >> 24 & 0xff; + return index; + }; + + var serializeDouble = function (buffer, key, value, index, isArray) { + // Encode as double + buffer[index++] = BSON.BSON_DATA_NUMBER; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write float + writeIEEE754(buffer, value, index, 'little', 52, 8); + // Ajust index + index = index + 8; + return index; + }; + + var serializeFunction = function (buffer, key, value, index, checkKeys, depth, isArray) { + buffer[index++] = BSON.BSON_DATA_CODE; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Function string + var functionString = value.toString(); + // Write the string + var size = buffer.write(functionString, index + 4, 'utf8') + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = size >> 8 & 0xff; + buffer[index + 2] = size >> 16 & 0xff; + buffer[index + 3] = size >> 24 & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0; + return index; + }; + + var serializeCode = function (buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, isArray) { + if (value.scope && typeof value.scope == 'object') { + // Write the type + buffer[index++] = BSON.BSON_DATA_CODE_W_SCOPE; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Starting index + var startIndex = index; + + // Serialize the function + // Get the function string + var functionString = typeof value.code == 'string' ? value.code : value.code.toString(); + // Index adjustment + index = index + 4; + // Write string into buffer + var codeSize = buffer.write(functionString, index + 4, 'utf8') + 1; + // Write the size of the string to buffer + buffer[index] = codeSize & 0xff; + buffer[index + 1] = codeSize >> 8 & 0xff; + buffer[index + 2] = codeSize >> 16 & 0xff; + buffer[index + 3] = codeSize >> 24 & 0xff; + // Write end 0 + buffer[index + 4 + codeSize - 1] = 0; + // Write the + index = index + codeSize + 4; + + // + // Serialize the scope value + var endIndex = serializeInto(buffer, value.scope, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined); + index = endIndex - 1; + + // Writ the total + var totalSize = endIndex - startIndex; + + // Write the total size of the object + buffer[startIndex++] = totalSize & 0xff; + buffer[startIndex++] = totalSize >> 8 & 0xff; + buffer[startIndex++] = totalSize >> 16 & 0xff; + buffer[startIndex++] = totalSize >> 24 & 0xff; + // Write trailing zero + buffer[index++] = 0; + } else { + buffer[index++] = BSON.BSON_DATA_CODE; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Function string + var functionString = value.code.toString(); + // Write the string + var size = buffer.write(functionString, index + 4, 'utf8') + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = size >> 8 & 0xff; + buffer[index + 2] = size >> 16 & 0xff; + buffer[index + 3] = size >> 24 & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0; + } + + return index; + }; + + var serializeBinary = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_BINARY; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Extract the buffer + var data = value.value(true); + // Calculate size + var size = value.position; + // Add the deprecated 02 type 4 bytes of size to total + if (value.sub_type == Binary.SUBTYPE_BYTE_ARRAY) size = size + 4; + // Write the size of the string to buffer + buffer[index++] = size & 0xff; + buffer[index++] = size >> 8 & 0xff; + buffer[index++] = size >> 16 & 0xff; + buffer[index++] = size >> 24 & 0xff; + // Write the subtype to the buffer + buffer[index++] = value.sub_type; + + // If we have binary type 2 the 4 first bytes are the size + if (value.sub_type == Binary.SUBTYPE_BYTE_ARRAY) { + size = size - 4; + buffer[index++] = size & 0xff; + buffer[index++] = size >> 8 & 0xff; + buffer[index++] = size >> 16 & 0xff; + buffer[index++] = size >> 24 & 0xff; + } + + // Write the data to the object + data.copy(buffer, index, 0, value.position); + // Adjust the index + index = index + value.position; + return index; + }; + + var serializeSymbol = function (buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_SYMBOL; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the string + var size = buffer.write(value.value, index + 4, 'utf8') + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = size >> 8 & 0xff; + buffer[index + 2] = size >> 16 & 0xff; + buffer[index + 3] = size >> 24 & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0x00; + return index; + }; + + var serializeDBRef = function (buffer, key, value, index, depth, serializeFunctions, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_OBJECT; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + var startIndex = index; + var endIndex; + + // Serialize object + if (null != value.db) { + endIndex = serializeInto(buffer, { + '$ref': value.namespace, + '$id': value.oid, + '$db': value.db + }, false, index, depth + 1, serializeFunctions); + } else { + endIndex = serializeInto(buffer, { + '$ref': value.namespace, + '$id': value.oid + }, false, index, depth + 1, serializeFunctions); + } + + // Calculate object size + var size = endIndex - startIndex; + // Write the size + buffer[startIndex++] = size & 0xff; + buffer[startIndex++] = size >> 8 & 0xff; + buffer[startIndex++] = size >> 16 & 0xff; + buffer[startIndex++] = size >> 24 & 0xff; + // Set index + return endIndex; + }; + + var serializeInto = function serializeInto(buffer, object, checkKeys, startingIndex, depth, serializeFunctions, ignoreUndefined, path) { + startingIndex = startingIndex || 0; + path = path || []; + + // Push the object to the path + path.push(object); + + // Start place to serialize into + var index = startingIndex + 4; + var self = this; + + // Special case isArray + if (Array.isArray(object)) { + // Get object keys + for (var i = 0; i < object.length; i++) { + var key = "" + i; + var value = object[i]; + + // Is there an override value + if (value && value.toBSON) { + if (typeof value.toBSON != 'function') throw new Error("toBSON is not a function"); + value = value.toBSON(); + } + + var type = typeof value; + if (type == 'string') { + index = serializeString(buffer, key, value, index, true); + } else if (type == 'number') { + index = serializeNumber(buffer, key, value, index, true); + } else if (type == 'boolean') { + index = serializeBoolean(buffer, key, value, index, true); + } else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index, true); + } else if (value === undefined) { + index = serializeNull(buffer, key, value, index, true); + } else if (value === null) { + index = serializeNull(buffer, key, value, index, true); + } else if (value['_bsontype'] == 'ObjectID') { + index = serializeObjectId(buffer, key, value, index, true); + } else if (Buffer.isBuffer(value)) { + index = serializeBuffer(buffer, key, value, index, true); + } else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index, true); + } else if (type == 'object' && value['_bsontype'] == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, true, path); + } else if (type == 'object' && value['_bsontype'] == 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index, true); + } else if (value['_bsontype'] == 'Long' || value['_bsontype'] == 'Timestamp') { + index = serializeLong(buffer, key, value, index, true); + } else if (value['_bsontype'] == 'Double') { + index = serializeDouble(buffer, key, value, index, true); + } else if (typeof value == 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index, checkKeys, depth, serializeFunctions, true); + } else if (value['_bsontype'] == 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, true); + } else if (value['_bsontype'] == 'Binary') { + index = serializeBinary(buffer, key, value, index, true); + } else if (value['_bsontype'] == 'Symbol') { + index = serializeSymbol(buffer, key, value, index, true); + } else if (value['_bsontype'] == 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, true); + } else if (value['_bsontype'] == 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index, true); + } else if (value['_bsontype'] == 'Int32') { + index = serializeInt32(buffer, key, value, index, true); + } else if (value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { + index = serializeMinMax(buffer, key, value, index, true); + } + } + } else if (object instanceof Map) { + var iterator = object.entries(); + var done = false; + + while (!done) { + // Unpack the next entry + var entry = iterator.next(); + done = entry.done; + // Are we done, then skip and terminate + if (done) continue; + + // Get the entry values + var key = entry.value[0]; + var value = entry.value[1]; + + // Check the type of the value + var type = typeof value; + + // Check the key and throw error if it's illegal + if (key != '$db' && key != '$ref' && key != '$id') { + if (key.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw Error("key " + key + " must not contain null bytes"); + } + + if (checkKeys) { + if ('$' == key[0]) { + throw Error("key " + key + " must not start with '$'"); + } else if (!!~key.indexOf('.')) { + throw Error("key " + key + " must not contain '.'"); + } + } + } + + if (type == 'string') { + index = serializeString(buffer, key, value, index); + } else if (type == 'number') { + index = serializeNumber(buffer, key, value, index); + } else if (type == 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } else if (value === undefined && ignoreUndefined == true) {} else if (value === undefined) { + index = serializeUndefined(buffer, key, value, index); + } else if (value === null) { + index = serializeNull(buffer, key, value, index); + } else if (value['_bsontype'] == 'ObjectID') { + index = serializeObjectId(buffer, key, value, index); + } else if (Buffer.isBuffer(value)) { + index = serializeBuffer(buffer, key, value, index); + } else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } else if (type == 'object' && value['_bsontype'] == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, false, path); + } else if (type == 'object' && value['_bsontype'] == 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } else if (value['_bsontype'] == 'Long' || value['_bsontype'] == 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } else if (value['_bsontype'] == 'Double') { + index = serializeDouble(buffer, key, value, index); + } else if (value['_bsontype'] == 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined); + } else if (typeof value == 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index, checkKeys, depth, serializeFunctions); + } else if (value['_bsontype'] == 'Binary') { + index = serializeBinary(buffer, key, value, index); + } else if (value['_bsontype'] == 'Symbol') { + index = serializeSymbol(buffer, key, value, index); + } else if (value['_bsontype'] == 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions); + } else if (value['_bsontype'] == 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } else if (value['_bsontype'] == 'Int32') { + index = serializeInt32(buffer, key, value, index); + } else if (value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + } + } else { + // Did we provide a custom serialization method + if (object.toBSON) { + if (typeof object.toBSON != 'function') throw new Error("toBSON is not a function"); + object = object.toBSON(); + if (object != null && typeof object != 'object') throw new Error("toBSON function did not return an object"); + } + + // Iterate over all the keys + for (var key in object) { + var value = object[key]; + // Is there an override value + if (value && value.toBSON) { + if (typeof value.toBSON != 'function') throw new Error("toBSON is not a function"); + value = value.toBSON(); + } + + // Check the type of the value + var type = typeof value; + + // Check the key and throw error if it's illegal + if (key != '$db' && key != '$ref' && key != '$id') { + if (key.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw Error("key " + key + " must not contain null bytes"); + } + + if (checkKeys) { + if ('$' == key[0]) { + throw Error("key " + key + " must not start with '$'"); + } else if (!!~key.indexOf('.')) { + throw Error("key " + key + " must not contain '.'"); + } + } + } + + if (type == 'string') { + index = serializeString(buffer, key, value, index); + } else if (type == 'number') { + index = serializeNumber(buffer, key, value, index); + } else if (type == 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } else if (value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } else if (value === undefined && ignoreUndefined == true) {} else if (value === undefined) { + index = serializeUndefined(buffer, key, value, index); + } else if (value === null) { + index = serializeNull(buffer, key, value, index); + } else if (value['_bsontype'] == 'ObjectID') { + index = serializeObjectId(buffer, key, value, index); + } else if (Buffer.isBuffer(value)) { + index = serializeBuffer(buffer, key, value, index); + } else if (value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } else if (type == 'object' && value['_bsontype'] == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, false, path); + } else if (type == 'object' && value['_bsontype'] == 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } else if (value['_bsontype'] == 'Long' || value['_bsontype'] == 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } else if (value['_bsontype'] == 'Double') { + index = serializeDouble(buffer, key, value, index); + } else if (value['_bsontype'] == 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined); + } else if (typeof value == 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index, checkKeys, depth, serializeFunctions); + } else if (value['_bsontype'] == 'Binary') { + index = serializeBinary(buffer, key, value, index); + } else if (value['_bsontype'] == 'Symbol') { + index = serializeSymbol(buffer, key, value, index); + } else if (value['_bsontype'] == 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions); + } else if (value['_bsontype'] == 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } else if (value['_bsontype'] == 'Int32') { + index = serializeInt32(buffer, key, value, index); + } else if (value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + } + } + + // Remove the path + path.pop(); + + // Final padding byte for object + buffer[index++] = 0x00; + + // Final size + var size = index - startingIndex; + // Write the size of the object + buffer[startingIndex++] = size & 0xff; + buffer[startingIndex++] = size >> 8 & 0xff; + buffer[startingIndex++] = size >> 16 & 0xff; + buffer[startingIndex++] = size >> 24 & 0xff; + return index; + }; + + var BSON = {}; + + /** + * Contains the function cache if we have that enable to allow for avoiding the eval step on each deserialization, comparison is by md5 + * + * @ignore + * @api private + */ + var functionCache = BSON.functionCache = {}; + + /** + * Number BSON Type + * + * @classconstant BSON_DATA_NUMBER + **/ + BSON.BSON_DATA_NUMBER = 1; + /** + * String BSON Type + * + * @classconstant BSON_DATA_STRING + **/ + BSON.BSON_DATA_STRING = 2; + /** + * Object BSON Type + * + * @classconstant BSON_DATA_OBJECT + **/ + BSON.BSON_DATA_OBJECT = 3; + /** + * Array BSON Type + * + * @classconstant BSON_DATA_ARRAY + **/ + BSON.BSON_DATA_ARRAY = 4; + /** + * Binary BSON Type + * + * @classconstant BSON_DATA_BINARY + **/ + BSON.BSON_DATA_BINARY = 5; + /** + * ObjectID BSON Type, deprecated + * + * @classconstant BSON_DATA_UNDEFINED + **/ + BSON.BSON_DATA_UNDEFINED = 6; + /** + * ObjectID BSON Type + * + * @classconstant BSON_DATA_OID + **/ + BSON.BSON_DATA_OID = 7; + /** + * Boolean BSON Type + * + * @classconstant BSON_DATA_BOOLEAN + **/ + BSON.BSON_DATA_BOOLEAN = 8; + /** + * Date BSON Type + * + * @classconstant BSON_DATA_DATE + **/ + BSON.BSON_DATA_DATE = 9; + /** + * null BSON Type + * + * @classconstant BSON_DATA_NULL + **/ + BSON.BSON_DATA_NULL = 10; + /** + * RegExp BSON Type + * + * @classconstant BSON_DATA_REGEXP + **/ + BSON.BSON_DATA_REGEXP = 11; + /** + * Code BSON Type + * + * @classconstant BSON_DATA_CODE + **/ + BSON.BSON_DATA_CODE = 13; + /** + * Symbol BSON Type + * + * @classconstant BSON_DATA_SYMBOL + **/ + BSON.BSON_DATA_SYMBOL = 14; + /** + * Code with Scope BSON Type + * + * @classconstant BSON_DATA_CODE_W_SCOPE + **/ + BSON.BSON_DATA_CODE_W_SCOPE = 15; + /** + * 32 bit Integer BSON Type + * + * @classconstant BSON_DATA_INT + **/ + BSON.BSON_DATA_INT = 16; + /** + * Timestamp BSON Type + * + * @classconstant BSON_DATA_TIMESTAMP + **/ + BSON.BSON_DATA_TIMESTAMP = 17; + /** + * Long BSON Type + * + * @classconstant BSON_DATA_LONG + **/ + BSON.BSON_DATA_LONG = 18; + /** + * Long BSON Type + * + * @classconstant BSON_DATA_DECIMAL128 + **/ + BSON.BSON_DATA_DECIMAL128 = 19; + /** + * MinKey BSON Type + * + * @classconstant BSON_DATA_MIN_KEY + **/ + BSON.BSON_DATA_MIN_KEY = 0xff; + /** + * MaxKey BSON Type + * + * @classconstant BSON_DATA_MAX_KEY + **/ + BSON.BSON_DATA_MAX_KEY = 0x7f; + /** + * Binary Default Type + * + * @classconstant BSON_BINARY_SUBTYPE_DEFAULT + **/ + BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0; + /** + * Binary Function Type + * + * @classconstant BSON_BINARY_SUBTYPE_FUNCTION + **/ + BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1; + /** + * Binary Byte Array Type + * + * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY + **/ + BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; + /** + * Binary UUID Type + * + * @classconstant BSON_BINARY_SUBTYPE_UUID + **/ + BSON.BSON_BINARY_SUBTYPE_UUID = 3; + /** + * Binary MD5 Type + * + * @classconstant BSON_BINARY_SUBTYPE_MD5 + **/ + BSON.BSON_BINARY_SUBTYPE_MD5 = 4; + /** + * Binary User Defined Type + * + * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED + **/ + BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; + + // BSON MAX VALUES + BSON.BSON_INT32_MAX = 0x7FFFFFFF; + BSON.BSON_INT32_MIN = -0x80000000; + + BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1; + BSON.BSON_INT64_MIN = -Math.pow(2, 63); + + // JS MAX PRECISE VALUES + BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. + BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + + // Internal long versions + var JS_INT_MAX_LONG = Long.fromNumber(0x20000000000000); // Any integer up to 2^53 can be precisely represented by a double. + var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down to -2^53 can be precisely represented by a double. + + module.exports = serializeInto; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(300).Buffer)) + +/***/ }, +/* 324 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(Buffer) {"use strict"; + + var writeIEEE754 = __webpack_require__(304).writeIEEE754, + readIEEE754 = __webpack_require__(304).readIEEE754, + Long = __webpack_require__(306).Long, + Double = __webpack_require__(307).Double, + Timestamp = __webpack_require__(308).Timestamp, + ObjectID = __webpack_require__(309).ObjectID, + Symbol = __webpack_require__(311).Symbol, + BSONRegExp = __webpack_require__(310).BSONRegExp, + Code = __webpack_require__(313).Code, + Decimal128 = __webpack_require__(314), + MinKey = __webpack_require__(315).MinKey, + MaxKey = __webpack_require__(316).MaxKey, + DBRef = __webpack_require__(317).DBRef, + Binary = __webpack_require__(318).Binary; + + // To ensure that 0.4 of node works correctly + var isDate = function isDate(d) { + return typeof d === 'object' && Object.prototype.toString.call(d) === '[object Date]'; + }; + + var calculateObjectSize = function calculateObjectSize(object, serializeFunctions, ignoreUndefined) { + var totalLength = 4 + 1; + + if (Array.isArray(object)) { + for (var i = 0; i < object.length; i++) { + totalLength += calculateElement(i.toString(), object[i], serializeFunctions, true, ignoreUndefined); + } + } else { + // If we have toBSON defined, override the current object + if (object.toBSON) { + object = object.toBSON(); + } + + // Calculate size + for (var key in object) { + totalLength += calculateElement(key, object[key], serializeFunctions, false, ignoreUndefined); + } + } + + return totalLength; + }; + + /** + * @ignore + * @api private + */ + function calculateElement(name, value, serializeFunctions, isArray, ignoreUndefined) { + // If we have toBSON defined, override the current object + if (value && value.toBSON) { + value = value.toBSON(); + } + + switch (typeof value) { + case 'string': + return 1 + Buffer.byteLength(name, 'utf8') + 1 + 4 + Buffer.byteLength(value, 'utf8') + 1; + case 'number': + if (Math.floor(value) === value && value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { + if (value >= BSON.BSON_INT32_MIN && value <= BSON.BSON_INT32_MAX) { + // 32 bit + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (4 + 1); + } else { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (8 + 1); + } + } else { + // 64 bit + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (8 + 1); + } + case 'undefined': + if (isArray || !ignoreUndefined) return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1; + return 0; + case 'boolean': + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (1 + 1); + case 'object': + if (value == null || value instanceof MinKey || value instanceof MaxKey || value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1; + } else if (value instanceof ObjectID || value['_bsontype'] == 'ObjectID') { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (12 + 1); + } else if (value instanceof Date || isDate(value)) { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (8 + 1); + } else if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (1 + 4 + 1) + value.length; + } else if (value instanceof Long || value instanceof Double || value instanceof Timestamp || value['_bsontype'] == 'Long' || value['_bsontype'] == 'Double' || value['_bsontype'] == 'Timestamp') { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (8 + 1); + } else if (value instanceof Decimal128 || value['_bsontype'] == 'Decimal128') { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (16 + 1); + } else if (value instanceof Code || value['_bsontype'] == 'Code') { + // Calculate size depending on the availability of a scope + if (value.scope != null && Object.keys(value.scope).length > 0) { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1 + 4 + 4 + Buffer.byteLength(value.code.toString(), 'utf8') + 1 + calculateObjectSize(value.scope, serializeFunctions, ignoreUndefined); + } else { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1 + 4 + Buffer.byteLength(value.code.toString(), 'utf8') + 1; + } + } else if (value instanceof Binary || value['_bsontype'] == 'Binary') { + // Check what kind of subtype we have + if (value.sub_type == Binary.SUBTYPE_BYTE_ARRAY) { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (value.position + 1 + 4 + 1 + 4); + } else { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + (value.position + 1 + 4 + 1); + } + } else if (value instanceof Symbol || value['_bsontype'] == 'Symbol') { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + Buffer.byteLength(value.value, 'utf8') + 4 + 1 + 1; + } else if (value instanceof DBRef || value['_bsontype'] == 'DBRef') { + // Set up correct object for serialization + var ordered_values = { + '$ref': value.namespace, + '$id': value.oid + }; + + // Add db reference if it exists + if (null != value.db) { + ordered_values['$db'] = value.db; + } + + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1 + calculateObjectSize(ordered_values, serializeFunctions, ignoreUndefined); + } else if (value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]') { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1 + Buffer.byteLength(value.source, 'utf8') + 1 + (value.global ? 1 : 0) + (value.ignoreCase ? 1 : 0) + (value.multiline ? 1 : 0) + 1; + } else if (value instanceof BSONRegExp || value['_bsontype'] == 'BSONRegExp') { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1 + Buffer.byteLength(value.pattern, 'utf8') + 1 + Buffer.byteLength(value.options, 'utf8') + 1; + } else { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + calculateObjectSize(value, serializeFunctions, ignoreUndefined) + 1; + } + case 'function': + // WTF for 0.4.X where typeof /someregexp/ === 'function' + if (value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]' || String.call(value) == '[object RegExp]') { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1 + Buffer.byteLength(value.source, 'utf8') + 1 + (value.global ? 1 : 0) + (value.ignoreCase ? 1 : 0) + (value.multiline ? 1 : 0) + 1; + } else { + if (serializeFunctions && value.scope != null && Object.keys(value.scope).length > 0) { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1 + 4 + 4 + Buffer.byteLength(value.toString(), 'utf8') + 1 + calculateObjectSize(value.scope, serializeFunctions, ignoreUndefined); + } else if (serializeFunctions) { + return (name != null ? Buffer.byteLength(name, 'utf8') + 1 : 0) + 1 + 4 + Buffer.byteLength(value.toString(), 'utf8') + 1; + } + } + } + + return 0; + } + + var BSON = {}; + + // BSON MAX VALUES + BSON.BSON_INT32_MAX = 0x7FFFFFFF; + BSON.BSON_INT32_MIN = -0x80000000; + + // JS MAX PRECISE VALUES + BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. + BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + + module.exports = calculateObjectSize; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(300).Buffer)) + +/***/ } +/******/ ]) +}); +; \ No newline at end of file diff --git a/node_modules/bson/browser_build/package.json b/node_modules/bson/browser_build/package.json new file mode 100644 index 0000000..980db7f --- /dev/null +++ b/node_modules/bson/browser_build/package.json @@ -0,0 +1,8 @@ +{ "name" : "bson" +, "description" : "A bson parser for node.js and the browser" +, "main": "../" +, "directories" : { "lib" : "../lib/bson" } +, "engines" : { "node" : ">=0.6.0" } +, "licenses" : [ { "type" : "Apache License, Version 2.0" + , "url" : "http://www.apache.org/licenses/LICENSE-2.0" } ] +} diff --git a/node_modules/bson/index.js b/node_modules/bson/index.js new file mode 100644 index 0000000..caed12b --- /dev/null +++ b/node_modules/bson/index.js @@ -0,0 +1,46 @@ +var BSON = require('./lib/bson/bson'), + Binary = require('./lib/bson/binary'), + Code = require('./lib/bson/code'), + DBRef = require('./lib/bson/db_ref'), + Decimal128 = require('./lib/bson/decimal128'), + Double = require('./lib/bson/double'), + Int32 = require('./lib/bson/int_32'), + Long = require('./lib/bson/long'), + Map = require('./lib/bson/map'), + MaxKey = require('./lib/bson/max_key'), + MinKey = require('./lib/bson/min_key'), + ObjectId = require('./lib/bson/objectid'), + BSONRegExp = require('./lib/bson/regexp'), + Symbol = require('./lib/bson/symbol'), + Timestamp = require('./lib/bson/timestamp'); + +// BSON MAX VALUES +BSON.BSON_INT32_MAX = 0x7FFFFFFF; +BSON.BSON_INT32_MIN = -0x80000000; + +BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1; +BSON.BSON_INT64_MIN = -Math.pow(2, 63); + +// JS MAX PRECISE VALUES +BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. +BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + +// Add BSON types to function creation +BSON.Binary = Binary; +BSON.Code = Code; +BSON.DBRef = DBRef; +BSON.Decimal128 = Decimal128; +BSON.Double = Double; +BSON.Int32 = Int32; +BSON.Long = Long; +BSON.Map = Map; +BSON.MaxKey = MaxKey; +BSON.MinKey = MinKey; +BSON.ObjectId = ObjectId; +BSON.ObjectID = ObjectId; +BSON.BSONRegExp = BSONRegExp; +BSON.Symbol = Symbol; +BSON.Timestamp = Timestamp; + +// Return the BSON +module.exports = BSON; diff --git a/node_modules/bson/lib/bson/binary.js b/node_modules/bson/lib/bson/binary.js new file mode 100644 index 0000000..793b56f --- /dev/null +++ b/node_modules/bson/lib/bson/binary.js @@ -0,0 +1,347 @@ +/** + * Module dependencies. + * @ignore + */ + +// Test if we're in Node via presence of "global" not absence of "window" +// to support hybrid environments like Electron +if(typeof global !== 'undefined') { + var Buffer = require('buffer').Buffer; // TODO just use global Buffer +} + +/** + * A class representation of the BSON Binary type. + * + * Sub types + * - **BSON.BSON_BINARY_SUBTYPE_DEFAULT**, default BSON type. + * - **BSON.BSON_BINARY_SUBTYPE_FUNCTION**, BSON function type. + * - **BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY**, BSON byte array type. + * - **BSON.BSON_BINARY_SUBTYPE_UUID**, BSON uuid type. + * - **BSON.BSON_BINARY_SUBTYPE_MD5**, BSON md5 type. + * - **BSON.BSON_BINARY_SUBTYPE_USER_DEFINED**, BSON user defined type. + * + * @class + * @param {Buffer} buffer a buffer object containing the binary data. + * @param {Number} [subType] the option binary type. + * @return {Binary} + */ +function Binary(buffer, subType) { + if(!(this instanceof Binary)) return new Binary(buffer, subType); + + this._bsontype = 'Binary'; + + if(buffer instanceof Number) { + this.sub_type = buffer; + this.position = 0; + } else { + this.sub_type = subType == null ? BSON_BINARY_SUBTYPE_DEFAULT : subType; + this.position = 0; + } + + if(buffer != null && !(buffer instanceof Number)) { + // Only accept Buffer, Uint8Array or Arrays + if(typeof buffer == 'string') { + // Different ways of writing the length of the string for the different types + if(typeof Buffer != 'undefined') { + this.buffer = new Buffer(buffer); + } else if(typeof Uint8Array != 'undefined' || (Object.prototype.toString.call(buffer) == '[object Array]')) { + this.buffer = writeStringToArray(buffer); + } else { + throw new Error("only String, Buffer, Uint8Array or Array accepted"); + } + } else { + this.buffer = buffer; + } + this.position = buffer.length; + } else { + if(typeof Buffer != 'undefined') { + this.buffer = new Buffer(Binary.BUFFER_SIZE); + } else if(typeof Uint8Array != 'undefined'){ + this.buffer = new Uint8Array(new ArrayBuffer(Binary.BUFFER_SIZE)); + } else { + this.buffer = new Array(Binary.BUFFER_SIZE); + } + // Set position to start of buffer + this.position = 0; + } +}; + +/** + * Updates this binary with byte_value. + * + * @method + * @param {string} byte_value a single byte we wish to write. + */ +Binary.prototype.put = function put(byte_value) { + // If it's a string and a has more than one character throw an error + if(byte_value['length'] != null && typeof byte_value != 'number' && byte_value.length != 1) throw new Error("only accepts single character String, Uint8Array or Array"); + if(typeof byte_value != 'number' && byte_value < 0 || byte_value > 255) throw new Error("only accepts number in a valid unsigned byte range 0-255"); + + // Decode the byte value once + var decoded_byte = null; + if(typeof byte_value == 'string') { + decoded_byte = byte_value.charCodeAt(0); + } else if(byte_value['length'] != null) { + decoded_byte = byte_value[0]; + } else { + decoded_byte = byte_value; + } + + if(this.buffer.length > this.position) { + this.buffer[this.position++] = decoded_byte; + } else { + if(typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer)) { + // Create additional overflow buffer + var buffer = new Buffer(Binary.BUFFER_SIZE + this.buffer.length); + // Combine the two buffers together + this.buffer.copy(buffer, 0, 0, this.buffer.length); + this.buffer = buffer; + this.buffer[this.position++] = decoded_byte; + } else { + var buffer = null; + // Create a new buffer (typed or normal array) + if(Object.prototype.toString.call(this.buffer) == '[object Uint8Array]') { + buffer = new Uint8Array(new ArrayBuffer(Binary.BUFFER_SIZE + this.buffer.length)); + } else { + buffer = new Array(Binary.BUFFER_SIZE + this.buffer.length); + } + + // We need to copy all the content to the new array + for(var i = 0; i < this.buffer.length; i++) { + buffer[i] = this.buffer[i]; + } + + // Reassign the buffer + this.buffer = buffer; + // Write the byte + this.buffer[this.position++] = decoded_byte; + } + } +}; + +/** + * Writes a buffer or string to the binary. + * + * @method + * @param {(Buffer|string)} string a string or buffer to be written to the Binary BSON object. + * @param {number} offset specify the binary of where to write the content. + * @return {null} + */ +Binary.prototype.write = function write(string, offset) { + offset = typeof offset == 'number' ? offset : this.position; + + // If the buffer is to small let's extend the buffer + if(this.buffer.length < offset + string.length) { + var buffer = null; + // If we are in node.js + if(typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer)) { + buffer = new Buffer(this.buffer.length + string.length); + this.buffer.copy(buffer, 0, 0, this.buffer.length); + } else if(Object.prototype.toString.call(this.buffer) == '[object Uint8Array]') { + // Create a new buffer + buffer = new Uint8Array(new ArrayBuffer(this.buffer.length + string.length)) + // Copy the content + for(var i = 0; i < this.position; i++) { + buffer[i] = this.buffer[i]; + } + } + + // Assign the new buffer + this.buffer = buffer; + } + + if(typeof Buffer != 'undefined' && Buffer.isBuffer(string) && Buffer.isBuffer(this.buffer)) { + string.copy(this.buffer, offset, 0, string.length); + this.position = (offset + string.length) > this.position ? (offset + string.length) : this.position; + // offset = string.length + } else if(typeof Buffer != 'undefined' && typeof string == 'string' && Buffer.isBuffer(this.buffer)) { + this.buffer.write(string, offset, 'binary'); + this.position = (offset + string.length) > this.position ? (offset + string.length) : this.position; + // offset = string.length; + } else if(Object.prototype.toString.call(string) == '[object Uint8Array]' + || Object.prototype.toString.call(string) == '[object Array]' && typeof string != 'string') { + for(var i = 0; i < string.length; i++) { + this.buffer[offset++] = string[i]; + } + + this.position = offset > this.position ? offset : this.position; + } else if(typeof string == 'string') { + for(var i = 0; i < string.length; i++) { + this.buffer[offset++] = string.charCodeAt(i); + } + + this.position = offset > this.position ? offset : this.position; + } +}; + +/** + * Reads **length** bytes starting at **position**. + * + * @method + * @param {number} position read from the given position in the Binary. + * @param {number} length the number of bytes to read. + * @return {Buffer} + */ +Binary.prototype.read = function read(position, length) { + length = length && length > 0 + ? length + : this.position; + + // Let's return the data based on the type we have + if(this.buffer['slice']) { + return this.buffer.slice(position, position + length); + } else { + // Create a buffer to keep the result + var buffer = typeof Uint8Array != 'undefined' ? new Uint8Array(new ArrayBuffer(length)) : new Array(length); + for(var i = 0; i < length; i++) { + buffer[i] = this.buffer[position++]; + } + } + // Return the buffer + return buffer; +}; + +/** + * Returns the value of this binary as a string. + * + * @method + * @return {string} + */ +Binary.prototype.value = function value(asRaw) { + asRaw = asRaw == null ? false : asRaw; + + // Optimize to serialize for the situation where the data == size of buffer + if(asRaw && typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer) && this.buffer.length == this.position) + return this.buffer; + + // If it's a node.js buffer object + if(typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer)) { + return asRaw ? this.buffer.slice(0, this.position) : this.buffer.toString('binary', 0, this.position); + } else { + if(asRaw) { + // we support the slice command use it + if(this.buffer['slice'] != null) { + return this.buffer.slice(0, this.position); + } else { + // Create a new buffer to copy content to + var newBuffer = Object.prototype.toString.call(this.buffer) == '[object Uint8Array]' ? new Uint8Array(new ArrayBuffer(this.position)) : new Array(this.position); + // Copy content + for(var i = 0; i < this.position; i++) { + newBuffer[i] = this.buffer[i]; + } + // Return the buffer + return newBuffer; + } + } else { + return convertArraytoUtf8BinaryString(this.buffer, 0, this.position); + } + } +}; + +/** + * Length. + * + * @method + * @return {number} the length of the binary. + */ +Binary.prototype.length = function length() { + return this.position; +}; + +/** + * @ignore + */ +Binary.prototype.toJSON = function() { + return this.buffer != null ? this.buffer.toString('base64') : ''; +} + +/** + * @ignore + */ +Binary.prototype.toString = function(format) { + return this.buffer != null ? this.buffer.slice(0, this.position).toString(format) : ''; +} + +/** + * Binary default subtype + * @ignore + */ +var BSON_BINARY_SUBTYPE_DEFAULT = 0; + +/** + * @ignore + */ +var writeStringToArray = function(data) { + // Create a buffer + var buffer = typeof Uint8Array != 'undefined' ? new Uint8Array(new ArrayBuffer(data.length)) : new Array(data.length); + // Write the content to the buffer + for(var i = 0; i < data.length; i++) { + buffer[i] = data.charCodeAt(i); + } + // Write the string to the buffer + return buffer; +} + +/** + * Convert Array ot Uint8Array to Binary String + * + * @ignore + */ +var convertArraytoUtf8BinaryString = function(byteArray, startIndex, endIndex) { + var result = ""; + for(var i = startIndex; i < endIndex; i++) { + result = result + String.fromCharCode(byteArray[i]); + } + return result; +}; + +Binary.BUFFER_SIZE = 256; + +/** + * Default BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ +Binary.SUBTYPE_DEFAULT = 0; +/** + * Function BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ +Binary.SUBTYPE_FUNCTION = 1; +/** + * Byte Array BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ +Binary.SUBTYPE_BYTE_ARRAY = 2; +/** + * OLD UUID BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ +Binary.SUBTYPE_UUID_OLD = 3; +/** + * UUID BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ +Binary.SUBTYPE_UUID = 4; +/** + * MD5 BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ +Binary.SUBTYPE_MD5 = 5; +/** + * User BSON type + * + * @classconstant SUBTYPE_DEFAULT + **/ +Binary.SUBTYPE_USER_DEFINED = 128; + +/** + * Expose. + */ +module.exports = Binary; +module.exports.Binary = Binary; diff --git a/node_modules/bson/lib/bson/bson.js b/node_modules/bson/lib/bson/bson.js new file mode 100644 index 0000000..b98887e --- /dev/null +++ b/node_modules/bson/lib/bson/bson.js @@ -0,0 +1,358 @@ +"use strict" + +var writeIEEE754 = require('./float_parser').writeIEEE754, + readIEEE754 = require('./float_parser').readIEEE754, + Map = require('./map'), + Long = require('./long'), + Double = require('./double'), + Timestamp = require('./timestamp'), + ObjectID = require('./objectid'), + BSONRegExp = require('./regexp'), + Symbol = require('./symbol'), + Int32 = require('./int_32'), + Code = require('./code'), + Decimal128 = require('./decimal128'), + MinKey = require('./min_key'), + MaxKey = require('./max_key'), + DBRef = require('./db_ref'), + Binary = require('./binary'); + +// Parts of the parser +var deserialize = require('./parser/deserializer'), + serializer = require('./parser/serializer'), + calculateObjectSize = require('./parser/calculate_size'); + +/** + * @ignore + * @api private + */ +// Max Size +var MAXSIZE = (1024*1024*17); +// Max Document Buffer size +var buffer = new Buffer(MAXSIZE); + +var BSON = function() { +} + +/** + * Serialize a Javascript object. + * + * @param {Object} object the Javascript object to serialize. + * @param {Boolean} [options.checkKeys] the serializer will check if keys are valid. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript functions **(default:false)**. + * @param {Boolean} [options.ignoreUndefined=true] ignore undefined fields **(default:true)**. + * @return {Buffer} returns the Buffer object containing the serialized object. + * @api public + */ +BSON.prototype.serialize = function serialize(object, options) { + options = options || {}; + // Unpack the options + var checkKeys = typeof options.checkKeys == 'boolean' + ? options.checkKeys : false; + var serializeFunctions = typeof options.serializeFunctions == 'boolean' + ? options.serializeFunctions : false; + var ignoreUndefined = typeof options.ignoreUndefined == 'boolean' + ? options.ignoreUndefined : true; + + // Attempt to serialize + var serializationIndex = serializer(buffer, object, checkKeys, 0, 0, serializeFunctions, ignoreUndefined, []); + // Create the final buffer + var finishedBuffer = new Buffer(serializationIndex); + // Copy into the finished buffer + buffer.copy(finishedBuffer, 0, 0, finishedBuffer.length); + // Return the buffer + return finishedBuffer; +} + +/** + * Serialize a Javascript object using a predefined Buffer and index into the buffer, useful when pre-allocating the space for serialization. + * + * @param {Object} object the Javascript object to serialize. + * @param {Buffer} buffer the Buffer you pre-allocated to store the serialized BSON object. + * @param {Boolean} [options.checkKeys] the serializer will check if keys are valid. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript functions **(default:false)**. + * @param {Boolean} [options.ignoreUndefined=true] ignore undefined fields **(default:true)**. + * @param {Number} [options.index] the index in the buffer where we wish to start serializing into. + * @return {Number} returns the index pointing to the last written byte in the buffer. + * @api public + */ +BSON.prototype.serializeWithBufferAndIndex = function(object, finalBuffer, options) { + options = options || {}; + // Unpack the options + var checkKeys = typeof options.checkKeys == 'boolean' + ? options.checkKeys : false; + var serializeFunctions = typeof options.serializeFunctions == 'boolean' + ? options.serializeFunctions : false; + var ignoreUndefined = typeof options.ignoreUndefined == 'boolean' + ? options.ignoreUndefined : true; + var startIndex = typeof options.index == 'number' + ? options.index : 0; + + // Attempt to serialize + var serializationIndex = serializer(buffer, object, checkKeys, startIndex || 0, 0, serializeFunctions, ignoreUndefined); + buffer.copy(finalBuffer, startIndex, 0, serializationIndex); + + // Return the index + return serializationIndex - 1; +} + +/** + * Deserialize data as BSON. + * + * @param {Buffer} buffer the buffer containing the serialized set of BSON documents. + * @param {Object} [options.evalFunctions=false] evaluate functions in the BSON document scoped to the object deserialized. + * @param {Object} [options.cacheFunctions=false] cache evaluated functions for reuse. + * @param {Object} [options.cacheFunctionsCrc32=false] use a crc32 code for caching, otherwise use the string of the function. + * @param {Object} [options.promoteLongs=true] when deserializing a Long will fit it into a Number if it's smaller than 53 bits + * @param {Object} [options.promoteBuffers=false] when deserializing a Binary will return it as a node.js Buffer instance. + * @param {Object} [options.promoteValues=false] when deserializing will promote BSON values to their Node.js closest equivalent types. + * @param {Object} [options.fieldsAsRaw=null] allow to specify if there what fields we wish to return as unserialized raw buffer. + * @param {Object} [options.bsonRegExp=false] return BSON regular expressions as BSONRegExp instances. + * @return {Object} returns the deserialized Javascript Object. + * @api public + */ +BSON.prototype.deserialize = function(buffer, options) { + return deserialize(buffer, options); +} + +/** + * Calculate the bson size for a passed in Javascript object. + * + * @param {Object} object the Javascript object to calculate the BSON byte size for. + * @param {Boolean} [options.serializeFunctions=false] serialize the javascript functions **(default:false)**. + * @param {Boolean} [options.ignoreUndefined=true] ignore undefined fields **(default:true)**. + * @return {Number} returns the number of bytes the BSON object will take up. + * @api public + */ +BSON.prototype.calculateObjectSize = function(object, options) { + options = options || {}; + + var serializeFunctions = typeof options.serializeFunctions == 'boolean' + ? options.serializeFunctions : false; + var ignoreUndefined = typeof options.ignoreUndefined == 'boolean' + ? options.ignoreUndefined : true; + + return calculateObjectSize(object, serializeFunctions, ignoreUndefined); +} + +/** + * Deserialize stream data as BSON documents. + * + * @param {Buffer} data the buffer containing the serialized set of BSON documents. + * @param {Number} startIndex the start index in the data Buffer where the deserialization is to start. + * @param {Number} numberOfDocuments number of documents to deserialize. + * @param {Array} documents an array where to store the deserialized documents. + * @param {Number} docStartIndex the index in the documents array from where to start inserting documents. + * @param {Object} [options] additional options used for the deserialization. + * @param {Object} [options.evalFunctions=false] evaluate functions in the BSON document scoped to the object deserialized. + * @param {Object} [options.cacheFunctions=false] cache evaluated functions for reuse. + * @param {Object} [options.cacheFunctionsCrc32=false] use a crc32 code for caching, otherwise use the string of the function. + * @param {Object} [options.promoteLongs=true] when deserializing a Long will fit it into a Number if it's smaller than 53 bits + * @param {Object} [options.promoteBuffers=false] when deserializing a Binary will return it as a node.js Buffer instance. + * @param {Object} [options.promoteValues=false] when deserializing will promote BSON values to their Node.js closest equivalent types. + * @param {Object} [options.fieldsAsRaw=null] allow to specify if there what fields we wish to return as unserialized raw buffer. + * @param {Object} [options.bsonRegExp=false] return BSON regular expressions as BSONRegExp instances. + * @return {Number} returns the next index in the buffer after deserialization **x** numbers of documents. + * @api public + */ +BSON.prototype.deserializeStream = function(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { + options = options != null ? options : {}; + var index = startIndex; + // Loop over all documents + for(var i = 0; i < numberOfDocuments; i++) { + // Find size of the document + var size = data[index] | data[index + 1] << 8 | data[index + 2] << 16 | data[index + 3] << 24; + // Update options with index + options['index'] = index; + // Parse the document at this point + documents[docStartIndex + i] = this.deserialize(data, options); + // Adjust index by the document size + index = index + size; + } + + // Return object containing end index of parsing and list of documents + return index; +} + +/** + * @ignore + * @api private + */ +// BSON MAX VALUES +BSON.BSON_INT32_MAX = 0x7FFFFFFF; +BSON.BSON_INT32_MIN = -0x80000000; + +BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1; +BSON.BSON_INT64_MIN = -Math.pow(2, 63); + +// JS MAX PRECISE VALUES +BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. +BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + +// Internal long versions +var JS_INT_MAX_LONG = Long.fromNumber(0x20000000000000); // Any integer up to 2^53 can be precisely represented by a double. +var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down to -2^53 can be precisely represented by a double. + +/** + * Number BSON Type + * + * @classconstant BSON_DATA_NUMBER + **/ +BSON.BSON_DATA_NUMBER = 1; +/** + * String BSON Type + * + * @classconstant BSON_DATA_STRING + **/ +BSON.BSON_DATA_STRING = 2; +/** + * Object BSON Type + * + * @classconstant BSON_DATA_OBJECT + **/ +BSON.BSON_DATA_OBJECT = 3; +/** + * Array BSON Type + * + * @classconstant BSON_DATA_ARRAY + **/ +BSON.BSON_DATA_ARRAY = 4; +/** + * Binary BSON Type + * + * @classconstant BSON_DATA_BINARY + **/ +BSON.BSON_DATA_BINARY = 5; +/** + * ObjectID BSON Type + * + * @classconstant BSON_DATA_OID + **/ +BSON.BSON_DATA_OID = 7; +/** + * Boolean BSON Type + * + * @classconstant BSON_DATA_BOOLEAN + **/ +BSON.BSON_DATA_BOOLEAN = 8; +/** + * Date BSON Type + * + * @classconstant BSON_DATA_DATE + **/ +BSON.BSON_DATA_DATE = 9; +/** + * null BSON Type + * + * @classconstant BSON_DATA_NULL + **/ +BSON.BSON_DATA_NULL = 10; +/** + * RegExp BSON Type + * + * @classconstant BSON_DATA_REGEXP + **/ +BSON.BSON_DATA_REGEXP = 11; +/** + * Code BSON Type + * + * @classconstant BSON_DATA_CODE + **/ +BSON.BSON_DATA_CODE = 13; +/** + * Symbol BSON Type + * + * @classconstant BSON_DATA_SYMBOL + **/ +BSON.BSON_DATA_SYMBOL = 14; +/** + * Code with Scope BSON Type + * + * @classconstant BSON_DATA_CODE_W_SCOPE + **/ +BSON.BSON_DATA_CODE_W_SCOPE = 15; +/** + * 32 bit Integer BSON Type + * + * @classconstant BSON_DATA_INT + **/ +BSON.BSON_DATA_INT = 16; +/** + * Timestamp BSON Type + * + * @classconstant BSON_DATA_TIMESTAMP + **/ +BSON.BSON_DATA_TIMESTAMP = 17; +/** + * Long BSON Type + * + * @classconstant BSON_DATA_LONG + **/ +BSON.BSON_DATA_LONG = 18; +/** + * MinKey BSON Type + * + * @classconstant BSON_DATA_MIN_KEY + **/ +BSON.BSON_DATA_MIN_KEY = 0xff; +/** + * MaxKey BSON Type + * + * @classconstant BSON_DATA_MAX_KEY + **/ +BSON.BSON_DATA_MAX_KEY = 0x7f; + +/** + * Binary Default Type + * + * @classconstant BSON_BINARY_SUBTYPE_DEFAULT + **/ +BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0; +/** + * Binary Function Type + * + * @classconstant BSON_BINARY_SUBTYPE_FUNCTION + **/ +BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1; +/** + * Binary Byte Array Type + * + * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY + **/ +BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; +/** + * Binary UUID Type + * + * @classconstant BSON_BINARY_SUBTYPE_UUID + **/ +BSON.BSON_BINARY_SUBTYPE_UUID = 3; +/** + * Binary MD5 Type + * + * @classconstant BSON_BINARY_SUBTYPE_MD5 + **/ +BSON.BSON_BINARY_SUBTYPE_MD5 = 4; +/** + * Binary User Defined Type + * + * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED + **/ +BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; + +// Return BSON +module.exports = BSON; +module.exports.Code = Code; +module.exports.Map = Map; +module.exports.Symbol = Symbol; +module.exports.BSON = BSON; +module.exports.DBRef = DBRef; +module.exports.Binary = Binary; +module.exports.ObjectID = ObjectID; +module.exports.Long = Long; +module.exports.Timestamp = Timestamp; +module.exports.Double = Double; +module.exports.Int32 = Int32; +module.exports.MinKey = MinKey; +module.exports.MaxKey = MaxKey; +module.exports.BSONRegExp = BSONRegExp; +module.exports.Decimal128 = Decimal128; diff --git a/node_modules/bson/lib/bson/code.js b/node_modules/bson/lib/bson/code.js new file mode 100644 index 0000000..bc80ce5 --- /dev/null +++ b/node_modules/bson/lib/bson/code.js @@ -0,0 +1,24 @@ +/** + * A class representation of the BSON Code type. + * + * @class + * @param {(string|function)} code a string or function. + * @param {Object} [scope] an optional scope for the function. + * @return {Code} + */ +var Code = function Code(code, scope) { + if(!(this instanceof Code)) return new Code(code, scope); + this._bsontype = 'Code'; + this.code = code; + this.scope = scope; +}; + +/** + * @ignore + */ +Code.prototype.toJSON = function() { + return {scope:this.scope, code:this.code}; +} + +module.exports = Code; +module.exports.Code = Code; diff --git a/node_modules/bson/lib/bson/db_ref.js b/node_modules/bson/lib/bson/db_ref.js new file mode 100644 index 0000000..06789a6 --- /dev/null +++ b/node_modules/bson/lib/bson/db_ref.js @@ -0,0 +1,32 @@ +/** + * A class representation of the BSON DBRef type. + * + * @class + * @param {string} namespace the collection name. + * @param {ObjectID} oid the reference ObjectID. + * @param {string} [db] optional db name, if omitted the reference is local to the current db. + * @return {DBRef} + */ +function DBRef(namespace, oid, db) { + if(!(this instanceof DBRef)) return new DBRef(namespace, oid, db); + + this._bsontype = 'DBRef'; + this.namespace = namespace; + this.oid = oid; + this.db = db; +}; + +/** + * @ignore + * @api private + */ +DBRef.prototype.toJSON = function() { + return { + '$ref':this.namespace, + '$id':this.oid, + '$db':this.db == null ? '' : this.db + }; +} + +module.exports = DBRef; +module.exports.DBRef = DBRef; \ No newline at end of file diff --git a/node_modules/bson/lib/bson/decimal128.js b/node_modules/bson/lib/bson/decimal128.js new file mode 100644 index 0000000..23ae082 --- /dev/null +++ b/node_modules/bson/lib/bson/decimal128.js @@ -0,0 +1,728 @@ +"use strict" + +var Long = require('./long'); + +var PARSE_STRING_REGEXP = /^(\+|\-)?(\d+|(\d*\.\d*))?(E|e)?([\-\+])?(\d+)?$/; +var PARSE_INF_REGEXP = /^(\+|\-)?(Infinity|inf)$/i; +var PARSE_NAN_REGEXP = /^(\+|\-)?NaN$/i; + +var EXPONENT_MAX = 6111; +var EXPONENT_MIN = -6176; +var EXPONENT_BIAS = 6176; +var MAX_DIGITS = 34; + +// Nan value bits as 32 bit values (due to lack of longs) +var NAN_BUFFER = [0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00].reverse(); +// Infinity value bits 32 bit values (due to lack of longs) +var INF_NEGATIVE_BUFFER = [0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00].reverse(); +var INF_POSITIVE_BUFFER = [0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00].reverse(); + +var EXPONENT_REGEX = /^([\-\+])?(\d+)?$/; + + +// Detect if the value is a digit +var isDigit = function(value) { + return !isNaN(parseInt(value, 10)); +} + +// Divide two uint128 values +var divideu128 = function(value) { + var DIVISOR = Long.fromNumber(1000 * 1000 * 1000); + var _rem = Long.fromNumber(0); + var i = 0; + + if(!value.parts[0] && !value.parts[1] && + !value.parts[2] && !value.parts[3]) { + return { quotient: value, rem: _rem }; + } + + for(var i = 0; i <= 3; i++) { + // Adjust remainder to match value of next dividend + _rem = _rem.shiftLeft(32); + // Add the divided to _rem + _rem = _rem.add(new Long(value.parts[i], 0)); + value.parts[i] = _rem.div(DIVISOR).low_; + _rem = _rem.modulo(DIVISOR); + } + + return { quotient: value, rem: _rem }; +} + +// Multiply two Long values and return the 128 bit value +var multiply64x2 = function(left, right) { + if(!left && !right) { + return {high: Long.fromNumber(0), low: Long.fromNumber(0)}; + } + + var leftHigh = left.shiftRightUnsigned(32); + var leftLow = new Long(left.getLowBits(), 0); + var rightHigh = right.shiftRightUnsigned(32); + var rightLow = new Long(right.getLowBits(), 0); + + var productHigh = leftHigh.multiply(rightHigh); + var productMid = leftHigh.multiply(rightLow); + var productMid2 = leftLow.multiply(rightHigh); + var productLow = leftLow.multiply(rightLow); + + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productMid = new Long(productMid.getLowBits(), 0) + .add(productMid2) + .add(productLow.shiftRightUnsigned(32)); + + productHigh = productHigh.add(productMid.shiftRightUnsigned(32)); + productLow = productMid.shiftLeft(32).add(new Long(productLow.getLowBits(), 0)); + + // Return the 128 bit result + return {high: productHigh, low: productLow}; +} + +var lessThan = function(left, right) { + // Make values unsigned + var uhleft = left.high_ >>> 0; + var uhright = right.high_ >>> 0; + + // Compare high bits first + if(uhleft < uhright) { + return true + } else if(uhleft == uhright) { + var ulleft = left.low_ >>> 0; + var ulright = right.low_ >>> 0; + if(ulleft < ulright) return true; + } + + return false; +} + +var longtoHex = function(value) { + var buffer = new Buffer(8); + var index = 0; + // Encode the low 64 bits of the decimal + // Encode low bits + buffer[index++] = value.low_ & 0xff; + buffer[index++] = (value.low_ >> 8) & 0xff; + buffer[index++] = (value.low_ >> 16) & 0xff; + buffer[index++] = (value.low_ >> 24) & 0xff; + // Encode high bits + buffer[index++] = value.high_ & 0xff; + buffer[index++] = (value.high_ >> 8) & 0xff; + buffer[index++] = (value.high_ >> 16) & 0xff; + buffer[index++] = (value.high_ >> 24) & 0xff; + return buffer.reverse().toString('hex'); +} + +var int32toHex = function(value) { + var buffer = new Buffer(4); + var index = 0; + // Encode the low 64 bits of the decimal + // Encode low bits + buffer[index++] = value & 0xff; + buffer[index++] = (value >> 8) & 0xff; + buffer[index++] = (value >> 16) & 0xff; + buffer[index++] = (value >> 24) & 0xff; + return buffer.reverse().toString('hex'); +} + +var Decimal128 = function(bytes) { + this._bsontype = 'Decimal128'; + this.bytes = bytes; +} + +Decimal128.fromString = function(string) { + // Parse state tracking + var isNegative = false; + var sawRadix = false; + var foundNonZero = false; + + // Total number of significant digits (no leading or trailing zero) + var significantDigits = 0; + // Total number of significand digits read + var nDigitsRead = 0; + // Total number of digits (no leading zeros) + var nDigits = 0; + // The number of the digits after radix + var radixPosition = 0; + // The index of the first non-zero in *str* + var firstNonZero = 0; + + // Digits Array + var digits = [0]; + // The number of digits in digits + var nDigitsStored = 0; + // Insertion pointer for digits + var digitsInsert = 0; + // The index of the first non-zero digit + var firstDigit = 0; + // The index of the last digit + var lastDigit = 0; + + // Exponent + var exponent = 0; + // loop index over array + var i = 0; + // The high 17 digits of the significand + var significandHigh = [0, 0]; + // The low 17 digits of the significand + var significandLow = [0, 0]; + // The biased exponent + var biasedExponent = 0; + + // Read index + var index = 0; + + // Trim the string + string = string.trim(); + + // Results + var stringMatch = string.match(PARSE_STRING_REGEXP); + var infMatch = string.match(PARSE_INF_REGEXP); + var nanMatch = string.match(PARSE_NAN_REGEXP); + + // Validate the string + if(!stringMatch + && ! infMatch + && ! nanMatch || string.length == 0) { + throw new Error("" + string + " not a valid Decimal128 string"); + } + + // Check if we have an illegal exponent format + if(stringMatch && stringMatch[4] && stringMatch[2] === undefined) { + throw new Error("" + string + " not a valid Decimal128 string"); + } + + // Get the negative or positive sign + if(string[index] == '+' || string[index] == '-') { + isNegative = string[index++] == '-'; + } + + // Check if user passed Infinity or NaN + if(!isDigit(string[index]) && string[index] != '.') { + if(string[index] == 'i' || string[index] == 'I') { + return new Decimal128(new Buffer(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER)); + } else if(string[index] == 'N') { + return new Decimal128(new Buffer(NAN_BUFFER)); + } + } + + // Read all the digits + while(isDigit(string[index]) || string[index] == '.') { + if(string[index] == '.') { + if(sawRadix) { + return new Decimal128(new Buffer(NAN_BUFFER)); + } + + sawRadix = true; + index = index + 1; + continue; + } + + if(nDigitsStored < 34) { + if(string[index] != '0' || foundNonZero) { + if(!foundNonZero) { + firstNonZero = nDigitsRead; + } + + foundNonZero = true; + + // Only store 34 digits + digits[digitsInsert++] = parseInt(string[index], 10); + nDigitsStored = nDigitsStored + 1; + } + } + + if(foundNonZero) { + nDigits = nDigits + 1; + } + + if(sawRadix) { + radixPosition = radixPosition + 1; + } + + nDigitsRead = nDigitsRead + 1; + index = index + 1; + } + + if(sawRadix && !nDigitsRead) { + throw new Error("" + string + " not a valid Decimal128 string"); + } + + // Read exponent if exists + if(string[index] == 'e' || string[index] == 'E') { + // Read exponent digits + var match = string.substr(++index).match(EXPONENT_REGEX); + + // No digits read + if(!match || !match[2]) { + return new Decimal128(new Buffer(NAN_BUFFER)); + } + + // Get exponent + exponent = parseInt(match[0], 10); + + // Adjust the index + index = index + match[0].length; + } + + // Return not a number + if(string[index]) { + return new Decimal128(new Buffer(NAN_BUFFER)); + } + + // Done reading input + // Find first non-zero digit in digits + firstDigit = 0; + + if(!nDigitsStored) { + firstDigit = 0; + lastDigit = 0; + digits[0] = 0; + nDigits = 1; + nDigitsStored = 1; + significantDigits = 0; + } else { + lastDigit = nDigitsStored - 1; + significantDigits = nDigits; + + if(exponent != 0 && significantDigits != 1) { + while(string[firstNonZero + significantDigits - 1] == '0') { + significantDigits = significantDigits - 1; + } + } + } + + // Normalization of exponent + // Correct exponent based on radix position, and shift significand as needed + // to represent user input + + // Overflow prevention + if(exponent <= radixPosition && radixPosition - exponent > (1 << 14)) { + exponent = EXPONENT_MIN; + } else { + exponent = exponent - radixPosition; + } + + // Attempt to normalize the exponent + while(exponent > EXPONENT_MAX) { + // Shift exponent to significand and decrease + lastDigit = lastDigit + 1; + + if(lastDigit - firstDigit > MAX_DIGITS) { + // Check if we have a zero then just hard clamp, otherwise fail + var digitsString = digits.join(''); + if(digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } else { + return new Decimal128(new Buffer(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER)); + } + } + + exponent = exponent - 1; + } + + while(exponent < EXPONENT_MIN || nDigitsStored < nDigits) { + // Shift last digit + if(lastDigit == 0) { + exponent = EXPONENT_MIN; + significantDigits = 0; + break; + } + + if(nDigitsStored < nDigits) { + // adjust to match digits not stored + nDigits = nDigits - 1; + } else { + // adjust to round + lastDigit = lastDigit - 1; + } + + if(exponent < EXPONENT_MAX) { + exponent = exponent + 1; + } else { + // Check if we have a zero then just hard clamp, otherwise fail + var digitsString = digits.join(''); + if(digitsString.match(/^0+$/)) { + exponent = EXPONENT_MAX; + break; + } else { + return new Decimal128(new Buffer(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER)) + } + } + } + + + // Round + // We've normalized the exponent, but might still need to round. + if((lastDigit - firstDigit + 1 < significantDigits) && string[significantDigits] != '0') { + var endOfString = nDigitsRead; + + // If we have seen a radix point, 'string' is 1 longer than we have + // documented with ndigits_read, so inc the position of the first nonzero + // digit and the position that digits are read to. + if(sawRadix && exponent == EXPONENT_MIN) { + firstNonZero = firstNonZero + 1; + endOfString = endOfString + 1; + } + + var roundDigit = parseInt(string[firstNonZero + lastDigit + 1], 10); + var roundBit = 0; + + if(roundDigit >= 5) { + roundBit = 1; + + if(roundDigit == 5) { + roundBit = digits[lastDigit] % 2 == 1; + + for(var i = firstNonZero + lastDigit + 2; i < endOfString; i++) { + if(parseInt(string[i], 10)) { + roundBit = 1; + break; + } + } + } + } + + if(roundBit) { + var dIdx = lastDigit; + + for(; dIdx >= 0; dIdx--) { + if(++digits[dIdx] > 9) { + digits[dIdx] = 0; + + // overflowed most significant digit + if(dIdx == 0) { + if(exponent < EXPONENT_MAX) { + exponent = exponent + 1; + digits[dIdx] = 1; + } else { + return new Decimal128(new Buffer(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER)) + } + } + } else { + break; + } + } + } + } + + // Encode significand + // The high 17 digits of the significand + significandHigh = Long.fromNumber(0); + // The low 17 digits of the significand + significandLow = Long.fromNumber(0); + + // read a zero + if(significantDigits == 0) { + significandHigh = Long.fromNumber(0); + significandLow = Long.fromNumber(0); + } else if(lastDigit - firstDigit < 17) { + var dIdx = firstDigit; + significandLow = Long.fromNumber(digits[dIdx++]); + significandHigh = new Long(0, 0); + + for(; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } else { + var dIdx = firstDigit; + significandHigh = Long.fromNumber(digits[dIdx++]); + + for(; dIdx <= lastDigit - 17; dIdx++) { + significandHigh = significandHigh.multiply(Long.fromNumber(10)); + significandHigh = significandHigh.add(Long.fromNumber(digits[dIdx])); + } + + significandLow = Long.fromNumber(digits[dIdx++]); + + for(; dIdx <= lastDigit; dIdx++) { + significandLow = significandLow.multiply(Long.fromNumber(10)); + significandLow = significandLow.add(Long.fromNumber(digits[dIdx])); + } + } + + var significand = multiply64x2(significandHigh, Long.fromString("100000000000000000")); + + significand.low = significand.low.add(significandLow); + + if(lessThan(significand.low, significandLow)) { + significand.high = significand.high.add(Long.fromNumber(1)); + } + + // Biased exponent + var biasedExponent = (exponent + EXPONENT_BIAS); + var dec = { low: Long.fromNumber(0), high: Long.fromNumber(0) }; + + // Encode combination, exponent, and significand. + if(significand.high.shiftRightUnsigned(49).and(Long.fromNumber(1)).equals(Long.fromNumber)) { + // Encode '11' into bits 1 to 3 + dec.high = dec.high.or(Long.fromNumber(0x3).shiftLeft(61)); + dec.high = dec.high.or(Long.fromNumber(biasedExponent).and(Long.fromNumber(0x3fff).shiftLeft(47))); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x7fffffffffff))); + } else { + dec.high = dec.high.or(Long.fromNumber(biasedExponent & 0x3fff).shiftLeft(49)); + dec.high = dec.high.or(significand.high.and(Long.fromNumber(0x1ffffffffffff))); + } + + dec.low = significand.low; + + // Encode sign + if(isNegative) { + dec.high = dec.high.or(Long.fromString('9223372036854775808')); + } + + // Encode into a buffer + var buffer = new Buffer(16); + var index = 0; + + // Encode the low 64 bits of the decimal + // Encode low bits + buffer[index++] = dec.low.low_ & 0xff; + buffer[index++] = (dec.low.low_ >> 8) & 0xff; + buffer[index++] = (dec.low.low_ >> 16) & 0xff; + buffer[index++] = (dec.low.low_ >> 24) & 0xff; + // Encode high bits + buffer[index++] = dec.low.high_ & 0xff; + buffer[index++] = (dec.low.high_ >> 8) & 0xff; + buffer[index++] = (dec.low.high_ >> 16) & 0xff; + buffer[index++] = (dec.low.high_ >> 24) & 0xff; + + // Encode the high 64 bits of the decimal + // Encode low bits + buffer[index++] = dec.high.low_ & 0xff; + buffer[index++] = (dec.high.low_ >> 8) & 0xff; + buffer[index++] = (dec.high.low_ >> 16) & 0xff; + buffer[index++] = (dec.high.low_ >> 24) & 0xff; + // Encode high bits + buffer[index++] = dec.high.high_ & 0xff; + buffer[index++] = (dec.high.high_ >> 8) & 0xff; + buffer[index++] = (dec.high.high_ >> 16) & 0xff; + buffer[index++] = (dec.high.high_ >> 24) & 0xff; + + // Return the new Decimal128 + return new Decimal128(buffer); +} + +// Extract least significant 5 bits +var COMBINATION_MASK = 0x1f; +// Extract least significant 14 bits +var EXPONENT_MASK = 0x3fff; +// Value of combination field for Inf +var COMBINATION_INFINITY = 30; +// Value of combination field for NaN +var COMBINATION_NAN = 31; +// Value of combination field for NaN +var COMBINATION_SNAN = 32; +// decimal128 exponent bias +var EXPONENT_BIAS = 6176; + +Decimal128.prototype.toString = function() { + // Note: bits in this routine are referred to starting at 0, + // from the sign bit, towards the coefficient. + + // bits 0 - 31 + var high; + // bits 32 - 63 + var midh; + // bits 64 - 95 + var midl; + // bits 96 - 127 + var low; + // bits 1 - 5 + var combination; + // decoded biased exponent (14 bits) + var biased_exponent; + // the number of significand digits + var significand_digits = 0; + // the base-10 digits in the significand + var significand = new Array(36); + for(var i = 0; i < significand.length; i++) significand[i] = 0; + // read pointer into significand + var index = 0; + + // unbiased exponent + var exponent; + // the exponent if scientific notation is used + var scientific_exponent; + + // true if the number is zero + var is_zero = false; + + // the most signifcant significand bits (50-46) + var significand_msb; + // temporary storage for significand decoding + var significand128 = {parts: new Array(4)}; + // indexing variables + var i; + var j, k; + + // Output string + var string = []; + + // Unpack index + var index = 0; + + // Buffer reference + var buffer = this.bytes; + + // Unpack the low 64bits into a long + low = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + midl = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + + // Unpack the high 64bits into a long + midh = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + high = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + + // Unpack index + var index = 0; + + // Create the state of the decimal + var dec = { + low: new Long(low, midl), + high: new Long(midh, high) }; + + if(dec.high.lessThan(Long.ZERO)) { + string.push('-'); + } + + // Decode combination field and exponent + combination = (high >> 26) & COMBINATION_MASK; + + if((combination >> 3) == 3) { + // Check for 'special' values + if(combination == COMBINATION_INFINITY) { + return string.join('') + "Infinity"; + } else if(combination == COMBINATION_NAN) { + return "NaN"; + } else { + biased_exponent = (high >> 15) & EXPONENT_MASK; + significand_msb = 0x08 + ((high >> 14) & 0x01); + } + } else { + significand_msb = (high >> 14) & 0x07; + biased_exponent = (high >> 17) & EXPONENT_MASK; + } + + exponent = biased_exponent - EXPONENT_BIAS; + + // Create string of significand digits + + // Convert the 114-bit binary number represented by + // (significand_high, significand_low) to at most 34 decimal + // digits through modulo and division. + significand128.parts[0] = (high & 0x3fff) + ((significand_msb & 0xf) << 14); + significand128.parts[1] = midh; + significand128.parts[2] = midl; + significand128.parts[3] = low; + + if(significand128.parts[0] == 0 && significand128.parts[1] == 0 + && significand128.parts[2] == 0 && significand128.parts[3] == 0) { + is_zero = true; + } else { + for(var k = 3; k >= 0; k--) { + var least_digits = 0; + // Peform the divide + var result = divideu128(significand128); + significand128 = result.quotient; + least_digits = result.rem.low_; + + // We now have the 9 least significant digits (in base 2). + // Convert and output to string. + if(!least_digits) continue; + + for(var j = 8; j >= 0; j--) { + // significand[k * 9 + j] = Math.round(least_digits % 10); + significand[k * 9 + j] = least_digits % 10; + // least_digits = Math.round(least_digits / 10); + least_digits = Math.floor(least_digits / 10); + } + } + } + + // Output format options: + // Scientific - [-]d.dddE(+/-)dd or [-]dE(+/-)dd + // Regular - ddd.ddd + + if(is_zero) { + significand_digits = 1; + significand[index] = 0; + } else { + significand_digits = 36; + var i = 0; + + while(!significand[index]) { + i++; + significand_digits = significand_digits - 1; + index = index + 1; + } + } + + scientific_exponent = significand_digits - 1 + exponent; + + // The scientific exponent checks are dictated by the string conversion + // specification and are somewhat arbitrary cutoffs. + // + // We must check exponent > 0, because if this is the case, the number + // has trailing zeros. However, we *cannot* output these trailing zeros, + // because doing so would change the precision of the value, and would + // change stored data if the string converted number is round tripped. + + if(scientific_exponent >= 34 || scientific_exponent <= -7 || + exponent > 0) { + // Scientific format + string.push(significand[index++]); + significand_digits = significand_digits - 1; + + if(significand_digits) { + string.push('.'); + } + + for(var i = 0; i < significand_digits; i++) { + string.push(significand[index++]); + } + + // Exponent + string.push('E'); + if(scientific_exponent > 0) { + string.push('+' + scientific_exponent); + } else { + string.push(scientific_exponent); + } + } else { + // Regular format with no decimal place + if(exponent >= 0) { + for(var i = 0; i < significand_digits; i++) { + string.push(significand[index++]); + } + } else { + var radix_position = significand_digits + exponent; + + // non-zero digits before radix + if(radix_position > 0) { + for(var i = 0; i < radix_position; i++) { + string.push(significand[index++]); + } + } else { + string.push('0'); + } + + string.push('.'); + // add leading zeros after radix + while(radix_position++ < 0) { + string.push('0'); + } + + for(var i = 0; i < significand_digits - Math.max(radix_position - 1, 0); i++) { + string.push(significand[index++]); + } + } + } + + return string.join(''); +} + +Decimal128.prototype.toJSON = function() { + return { "$numberDecimal": this.toString() }; +} + +module.exports = Decimal128; +module.exports.Decimal128 = Decimal128; diff --git a/node_modules/bson/lib/bson/double.js b/node_modules/bson/lib/bson/double.js new file mode 100644 index 0000000..82c5bd6 --- /dev/null +++ b/node_modules/bson/lib/bson/double.js @@ -0,0 +1,33 @@ +/** + * A class representation of the BSON Double type. + * + * @class + * @param {number} value the number we want to represent as a double. + * @return {Double} + */ +function Double(value) { + if(!(this instanceof Double)) return new Double(value); + + this._bsontype = 'Double'; + this.value = value; +} + +/** + * Access the number value. + * + * @method + * @return {number} returns the wrapped double number. + */ +Double.prototype.valueOf = function() { + return this.value; +}; + +/** + * @ignore + */ +Double.prototype.toJSON = function() { + return this.value; +} + +module.exports = Double; +module.exports.Double = Double; diff --git a/node_modules/bson/lib/bson/float_parser.js b/node_modules/bson/lib/bson/float_parser.js new file mode 100644 index 0000000..6fca392 --- /dev/null +++ b/node_modules/bson/lib/bson/float_parser.js @@ -0,0 +1,121 @@ +// Copyright (c) 2008, Fair Oaks Labs, Inc. +// 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 Fair Oaks Labs, 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. +// +// +// Modifications to writeIEEE754 to support negative zeroes made by Brian White + +var readIEEE754 = function(buffer, offset, endian, mLen, nBytes) { + var e, m, + bBE = (endian === 'big'), + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = bBE ? 0 : (nBytes - 1), + d = bBE ? 1 : -1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +var writeIEEE754 = function(buffer, value, offset, endian, mLen, nBytes) { + var e, m, c, + bBE = (endian === 'big'), + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = bBE ? (nBytes-1) : 0, + d = bBE ? -1 : 1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e+eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +exports.readIEEE754 = readIEEE754; +exports.writeIEEE754 = writeIEEE754; \ No newline at end of file diff --git a/node_modules/bson/lib/bson/int_32.js b/node_modules/bson/lib/bson/int_32.js new file mode 100644 index 0000000..6c729f6 --- /dev/null +++ b/node_modules/bson/lib/bson/int_32.js @@ -0,0 +1,26 @@ +var Int32 = function(value) { + if(!(this instanceof Int32)) return new Int32(value); + + this._bsontype = 'Int32'; + this.value = value; +} + +/** + * Access the number value. + * + * @method + * @return {number} returns the wrapped int32 number. + */ +Int32.prototype.valueOf = function() { + return this.value; +}; + +/** + * @ignore + */ +Int32.prototype.toJSON = function() { + return this.value; +} + +module.exports = Int32; +module.exports.Int32 = Int32; diff --git a/node_modules/bson/lib/bson/long.js b/node_modules/bson/lib/bson/long.js new file mode 100644 index 0000000..6f18885 --- /dev/null +++ b/node_modules/bson/lib/bson/long.js @@ -0,0 +1,856 @@ +// 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. +// +// Copyright 2009 Google Inc. All Rights Reserved + +/** + * Defines a Long class for representing a 64-bit two's-complement + * integer value, which faithfully simulates the behavior of a Java "Long". This + * implementation is derived from LongLib in GWT. + * + * Constructs a 64-bit two's-complement integer, given its low and high 32-bit + * values as *signed* integers. See the from* functions below for more + * convenient ways of constructing Longs. + * + * The internal representation of a Long is the two given signed, 32-bit values. + * We use 32-bit pieces because these are the size of integers on which + * Javascript performs bit-operations. For operations like addition and + * multiplication, we split each number into 16-bit pieces, which can easily be + * multiplied within Javascript's floating-point representation without overflow + * or change in sign. + * + * In the algorithms below, we frequently reduce the negative case to the + * positive case by negating the input(s) and then post-processing the result. + * Note that we must ALWAYS check specially whether those values are MIN_VALUE + * (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as + * a positive number, it overflows back into a negative). Not handling this + * case would often result in infinite recursion. + * + * @class + * @param {number} low the low (signed) 32 bits of the Long. + * @param {number} high the high (signed) 32 bits of the Long. + * @return {Long} + */ +function Long(low, high) { + if(!(this instanceof Long)) return new Long(low, high); + + this._bsontype = 'Long'; + /** + * @type {number} + * @ignore + */ + this.low_ = low | 0; // force into 32 signed bits. + + /** + * @type {number} + * @ignore + */ + this.high_ = high | 0; // force into 32 signed bits. +}; + +/** + * Return the int value. + * + * @method + * @return {number} the value, assuming it is a 32-bit integer. + */ +Long.prototype.toInt = function() { + return this.low_; +}; + +/** + * Return the Number value. + * + * @method + * @return {number} the closest floating-point representation to this value. + */ +Long.prototype.toNumber = function() { + return this.high_ * Long.TWO_PWR_32_DBL_ + + this.getLowBitsUnsigned(); +}; + +/** + * Return the JSON value. + * + * @method + * @return {string} the JSON representation. + */ +Long.prototype.toJSON = function() { + return this.toString(); +} + +/** + * Return the String value. + * + * @method + * @param {number} [opt_radix] the radix in which the text should be written. + * @return {string} the textual representation of this value. + */ +Long.prototype.toString = function(opt_radix) { + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (this.isZero()) { + return '0'; + } + + if (this.isNegative()) { + if (this.equals(Long.MIN_VALUE)) { + // We need to change the Long value before it can be negated, so we remove + // the bottom-most digit in this base and then recurse to do the rest. + var radixLong = Long.fromNumber(radix); + var div = this.div(radixLong); + var rem = div.multiply(radixLong).subtract(this); + return div.toString(radix) + rem.toInt().toString(radix); + } else { + return '-' + this.negate().toString(radix); + } + } + + // Do several (6) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = Long.fromNumber(Math.pow(radix, 6)); + + var rem = this; + var result = ''; + while (true) { + var remDiv = rem.div(radixToPower); + var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt(); + var digits = intval.toString(radix); + + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } else { + while (digits.length < 6) { + digits = '0' + digits; + } + result = '' + digits + result; + } + } +}; + +/** + * Return the high 32-bits value. + * + * @method + * @return {number} the high 32-bits as a signed value. + */ +Long.prototype.getHighBits = function() { + return this.high_; +}; + +/** + * Return the low 32-bits value. + * + * @method + * @return {number} the low 32-bits as a signed value. + */ +Long.prototype.getLowBits = function() { + return this.low_; +}; + +/** + * Return the low unsigned 32-bits value. + * + * @method + * @return {number} the low 32-bits as an unsigned value. + */ +Long.prototype.getLowBitsUnsigned = function() { + return (this.low_ >= 0) ? + this.low_ : Long.TWO_PWR_32_DBL_ + this.low_; +}; + +/** + * Returns the number of bits needed to represent the absolute value of this Long. + * + * @method + * @return {number} Returns the number of bits needed to represent the absolute value of this Long. + */ +Long.prototype.getNumBitsAbs = function() { + if (this.isNegative()) { + if (this.equals(Long.MIN_VALUE)) { + return 64; + } else { + return this.negate().getNumBitsAbs(); + } + } else { + var val = this.high_ != 0 ? this.high_ : this.low_; + for (var bit = 31; bit > 0; bit--) { + if ((val & (1 << bit)) != 0) { + break; + } + } + return this.high_ != 0 ? bit + 33 : bit + 1; + } +}; + +/** + * Return whether this value is zero. + * + * @method + * @return {boolean} whether this value is zero. + */ +Long.prototype.isZero = function() { + return this.high_ == 0 && this.low_ == 0; +}; + +/** + * Return whether this value is negative. + * + * @method + * @return {boolean} whether this value is negative. + */ +Long.prototype.isNegative = function() { + return this.high_ < 0; +}; + +/** + * Return whether this value is odd. + * + * @method + * @return {boolean} whether this value is odd. + */ +Long.prototype.isOdd = function() { + return (this.low_ & 1) == 1; +}; + +/** + * Return whether this Long equals the other + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long equals the other + */ +Long.prototype.equals = function(other) { + return (this.high_ == other.high_) && (this.low_ == other.low_); +}; + +/** + * Return whether this Long does not equal the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long does not equal the other. + */ +Long.prototype.notEquals = function(other) { + return (this.high_ != other.high_) || (this.low_ != other.low_); +}; + +/** + * Return whether this Long is less than the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long is less than the other. + */ +Long.prototype.lessThan = function(other) { + return this.compare(other) < 0; +}; + +/** + * Return whether this Long is less than or equal to the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long is less than or equal to the other. + */ +Long.prototype.lessThanOrEqual = function(other) { + return this.compare(other) <= 0; +}; + +/** + * Return whether this Long is greater than the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long is greater than the other. + */ +Long.prototype.greaterThan = function(other) { + return this.compare(other) > 0; +}; + +/** + * Return whether this Long is greater than or equal to the other. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} whether this Long is greater than or equal to the other. + */ +Long.prototype.greaterThanOrEqual = function(other) { + return this.compare(other) >= 0; +}; + +/** + * Compares this Long with the given one. + * + * @method + * @param {Long} other Long to compare against. + * @return {boolean} 0 if they are the same, 1 if the this is greater, and -1 if the given one is greater. + */ +Long.prototype.compare = function(other) { + if (this.equals(other)) { + return 0; + } + + var thisNeg = this.isNegative(); + var otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) { + return -1; + } + if (!thisNeg && otherNeg) { + return 1; + } + + // at this point, the signs are the same, so subtraction will not overflow + if (this.subtract(other).isNegative()) { + return -1; + } else { + return 1; + } +}; + +/** + * The negation of this value. + * + * @method + * @return {Long} the negation of this value. + */ +Long.prototype.negate = function() { + if (this.equals(Long.MIN_VALUE)) { + return Long.MIN_VALUE; + } else { + return this.not().add(Long.ONE); + } +}; + +/** + * Returns the sum of this and the given Long. + * + * @method + * @param {Long} other Long to add to this one. + * @return {Long} the sum of this and the given Long. + */ +Long.prototype.add = function(other) { + // Divide each number into 4 chunks of 16 bits, and then sum the chunks. + + var a48 = this.high_ >>> 16; + var a32 = this.high_ & 0xFFFF; + var a16 = this.low_ >>> 16; + var a00 = this.low_ & 0xFFFF; + + var b48 = other.high_ >>> 16; + var b32 = other.high_ & 0xFFFF; + var b16 = other.low_ >>> 16; + var b00 = other.low_ & 0xFFFF; + + var c48 = 0, c32 = 0, c16 = 0, c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 0xFFFF; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c48 += a48 + b48; + c48 &= 0xFFFF; + return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32); +}; + +/** + * Returns the difference of this and the given Long. + * + * @method + * @param {Long} other Long to subtract from this. + * @return {Long} the difference of this and the given Long. + */ +Long.prototype.subtract = function(other) { + return this.add(other.negate()); +}; + +/** + * Returns the product of this and the given Long. + * + * @method + * @param {Long} other Long to multiply with this. + * @return {Long} the product of this and the other. + */ +Long.prototype.multiply = function(other) { + if (this.isZero()) { + return Long.ZERO; + } else if (other.isZero()) { + return Long.ZERO; + } + + if (this.equals(Long.MIN_VALUE)) { + return other.isOdd() ? Long.MIN_VALUE : Long.ZERO; + } else if (other.equals(Long.MIN_VALUE)) { + return this.isOdd() ? Long.MIN_VALUE : Long.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().multiply(other.negate()); + } else { + return this.negate().multiply(other).negate(); + } + } else if (other.isNegative()) { + return this.multiply(other.negate()).negate(); + } + + // If both Longs are small, use float multiplication + if (this.lessThan(Long.TWO_PWR_24_) && + other.lessThan(Long.TWO_PWR_24_)) { + return Long.fromNumber(this.toNumber() * other.toNumber()); + } + + // Divide each Long into 4 chunks of 16 bits, and then add up 4x4 products. + // We can skip products that would overflow. + + var a48 = this.high_ >>> 16; + var a32 = this.high_ & 0xFFFF; + var a16 = this.low_ >>> 16; + var a00 = this.low_ & 0xFFFF; + + var b48 = other.high_ >>> 16; + var b32 = other.high_ & 0xFFFF; + var b16 = other.low_ >>> 16; + var b00 = other.low_ & 0xFFFF; + + var c48 = 0, c32 = 0, c16 = 0, c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 0xFFFF; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 0xFFFF; + return Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32); +}; + +/** + * Returns this Long divided by the given one. + * + * @method + * @param {Long} other Long by which to divide. + * @return {Long} this Long divided by the given one. + */ +Long.prototype.div = function(other) { + if (other.isZero()) { + throw Error('division by zero'); + } else if (this.isZero()) { + return Long.ZERO; + } + + if (this.equals(Long.MIN_VALUE)) { + if (other.equals(Long.ONE) || + other.equals(Long.NEG_ONE)) { + return Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE + } else if (other.equals(Long.MIN_VALUE)) { + return Long.ONE; + } else { + // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|. + var halfThis = this.shiftRight(1); + var approx = halfThis.div(other).shiftLeft(1); + if (approx.equals(Long.ZERO)) { + return other.isNegative() ? Long.ONE : Long.NEG_ONE; + } else { + var rem = this.subtract(other.multiply(approx)); + var result = approx.add(rem.div(other)); + return result; + } + } + } else if (other.equals(Long.MIN_VALUE)) { + return Long.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().div(other.negate()); + } else { + return this.negate().div(other).negate(); + } + } else if (other.isNegative()) { + return this.div(other.negate()).negate(); + } + + // Repeat the following until the remainder is less than other: find a + // floating-point that approximates remainder / other *from below*, add this + // into the result, and subtract it from the remainder. It is critical that + // the approximate value is less than or equal to the real value so that the + // remainder never becomes negative. + var res = Long.ZERO; + var rem = this; + while (rem.greaterThanOrEqual(other)) { + // Approximate the result of division. This may be a little greater or + // smaller than the actual value. + var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber())); + + // We will tweak the approximate result by changing it in the 48-th digit or + // the smallest non-fractional digit, whichever is larger. + var log2 = Math.ceil(Math.log(approx) / Math.LN2); + var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48); + + // Decrease the approximation until it is smaller than the remainder. Note + // that if it is too large, the product overflows and is negative. + var approxRes = Long.fromNumber(approx); + var approxRem = approxRes.multiply(other); + while (approxRem.isNegative() || approxRem.greaterThan(rem)) { + approx -= delta; + approxRes = Long.fromNumber(approx); + approxRem = approxRes.multiply(other); + } + + // We know the answer can't be zero... and actually, zero would cause + // infinite recursion since we would make no progress. + if (approxRes.isZero()) { + approxRes = Long.ONE; + } + + res = res.add(approxRes); + rem = rem.subtract(approxRem); + } + return res; +}; + +/** + * Returns this Long modulo the given one. + * + * @method + * @param {Long} other Long by which to mod. + * @return {Long} this Long modulo the given one. + */ +Long.prototype.modulo = function(other) { + return this.subtract(this.div(other).multiply(other)); +}; + +/** + * The bitwise-NOT of this value. + * + * @method + * @return {Long} the bitwise-NOT of this value. + */ +Long.prototype.not = function() { + return Long.fromBits(~this.low_, ~this.high_); +}; + +/** + * Returns the bitwise-AND of this Long and the given one. + * + * @method + * @param {Long} other the Long with which to AND. + * @return {Long} the bitwise-AND of this and the other. + */ +Long.prototype.and = function(other) { + return Long.fromBits(this.low_ & other.low_, this.high_ & other.high_); +}; + +/** + * Returns the bitwise-OR of this Long and the given one. + * + * @method + * @param {Long} other the Long with which to OR. + * @return {Long} the bitwise-OR of this and the other. + */ +Long.prototype.or = function(other) { + return Long.fromBits(this.low_ | other.low_, this.high_ | other.high_); +}; + +/** + * Returns the bitwise-XOR of this Long and the given one. + * + * @method + * @param {Long} other the Long with which to XOR. + * @return {Long} the bitwise-XOR of this and the other. + */ +Long.prototype.xor = function(other) { + return Long.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_); +}; + +/** + * Returns this Long with bits shifted to the left by the given amount. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Long} this shifted to the left by the given amount. + */ +Long.prototype.shiftLeft = function(numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var low = this.low_; + if (numBits < 32) { + var high = this.high_; + return Long.fromBits( + low << numBits, + (high << numBits) | (low >>> (32 - numBits))); + } else { + return Long.fromBits(0, low << (numBits - 32)); + } + } +}; + +/** + * Returns this Long with bits shifted to the right by the given amount. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Long} this shifted to the right by the given amount. + */ +Long.prototype.shiftRight = function(numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var high = this.high_; + if (numBits < 32) { + var low = this.low_; + return Long.fromBits( + (low >>> numBits) | (high << (32 - numBits)), + high >> numBits); + } else { + return Long.fromBits( + high >> (numBits - 32), + high >= 0 ? 0 : -1); + } + } +}; + +/** + * Returns this Long with bits shifted to the right by the given amount, with the new top bits matching the current sign bit. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Long} this shifted to the right by the given amount, with zeros placed into the new leading bits. + */ +Long.prototype.shiftRightUnsigned = function(numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var high = this.high_; + if (numBits < 32) { + var low = this.low_; + return Long.fromBits( + (low >>> numBits) | (high << (32 - numBits)), + high >>> numBits); + } else if (numBits == 32) { + return Long.fromBits(high, 0); + } else { + return Long.fromBits(high >>> (numBits - 32), 0); + } + } +}; + +/** + * Returns a Long representing the given (32-bit) integer value. + * + * @method + * @param {number} value the 32-bit integer in question. + * @return {Long} the corresponding Long value. + */ +Long.fromInt = function(value) { + if (-128 <= value && value < 128) { + var cachedObj = Long.INT_CACHE_[value]; + if (cachedObj) { + return cachedObj; + } + } + + var obj = new Long(value | 0, value < 0 ? -1 : 0); + if (-128 <= value && value < 128) { + Long.INT_CACHE_[value] = obj; + } + return obj; +}; + +/** + * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + * + * @method + * @param {number} value the number in question. + * @return {Long} the corresponding Long value. + */ +Long.fromNumber = function(value) { + if (isNaN(value) || !isFinite(value)) { + return Long.ZERO; + } else if (value <= -Long.TWO_PWR_63_DBL_) { + return Long.MIN_VALUE; + } else if (value + 1 >= Long.TWO_PWR_63_DBL_) { + return Long.MAX_VALUE; + } else if (value < 0) { + return Long.fromNumber(-value).negate(); + } else { + return new Long( + (value % Long.TWO_PWR_32_DBL_) | 0, + (value / Long.TWO_PWR_32_DBL_) | 0); + } +}; + +/** + * Returns a Long representing the 64-bit integer that comes by concatenating the given high and low bits. Each is assumed to use 32 bits. + * + * @method + * @param {number} lowBits the low 32-bits. + * @param {number} highBits the high 32-bits. + * @return {Long} the corresponding Long value. + */ +Long.fromBits = function(lowBits, highBits) { + return new Long(lowBits, highBits); +}; + +/** + * Returns a Long representation of the given string, written using the given radix. + * + * @method + * @param {string} str the textual representation of the Long. + * @param {number} opt_radix the radix in which the text is written. + * @return {Long} the corresponding Long value. + */ +Long.fromString = function(str, opt_radix) { + if (str.length == 0) { + throw Error('number format error: empty string'); + } + + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (str.charAt(0) == '-') { + return Long.fromString(str.substring(1), radix).negate(); + } else if (str.indexOf('-') >= 0) { + throw Error('number format error: interior "-" character: ' + str); + } + + // Do several (8) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = Long.fromNumber(Math.pow(radix, 8)); + + var result = Long.ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i); + var value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = Long.fromNumber(Math.pow(radix, size)); + result = result.multiply(power).add(Long.fromNumber(value)); + } else { + result = result.multiply(radixToPower); + result = result.add(Long.fromNumber(value)); + } + } + return result; +}; + +// NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the +// from* methods on which they depend. + + +/** + * A cache of the Long representations of small integer values. + * @type {Object} + * @ignore + */ +Long.INT_CACHE_ = {}; + +// NOTE: the compiler should inline these constant values below and then remove +// these variables, so there should be no runtime penalty for these. + +/** + * Number used repeated below in calculations. This must appear before the + * first call to any from* function below. + * @type {number} + * @ignore + */ +Long.TWO_PWR_16_DBL_ = 1 << 16; + +/** + * @type {number} + * @ignore + */ +Long.TWO_PWR_24_DBL_ = 1 << 24; + +/** + * @type {number} + * @ignore + */ +Long.TWO_PWR_32_DBL_ = Long.TWO_PWR_16_DBL_ * Long.TWO_PWR_16_DBL_; + +/** + * @type {number} + * @ignore + */ +Long.TWO_PWR_31_DBL_ = Long.TWO_PWR_32_DBL_ / 2; + +/** + * @type {number} + * @ignore + */ +Long.TWO_PWR_48_DBL_ = Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_16_DBL_; + +/** + * @type {number} + * @ignore + */ +Long.TWO_PWR_64_DBL_ = Long.TWO_PWR_32_DBL_ * Long.TWO_PWR_32_DBL_; + +/** + * @type {number} + * @ignore + */ +Long.TWO_PWR_63_DBL_ = Long.TWO_PWR_64_DBL_ / 2; + +/** @type {Long} */ +Long.ZERO = Long.fromInt(0); + +/** @type {Long} */ +Long.ONE = Long.fromInt(1); + +/** @type {Long} */ +Long.NEG_ONE = Long.fromInt(-1); + +/** @type {Long} */ +Long.MAX_VALUE = + Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0); + +/** @type {Long} */ +Long.MIN_VALUE = Long.fromBits(0, 0x80000000 | 0); + +/** + * @type {Long} + * @ignore + */ +Long.TWO_PWR_24_ = Long.fromInt(1 << 24); + +/** + * Expose. + */ +module.exports = Long; +module.exports.Long = Long; \ No newline at end of file diff --git a/node_modules/bson/lib/bson/map.js b/node_modules/bson/lib/bson/map.js new file mode 100644 index 0000000..f53c8c1 --- /dev/null +++ b/node_modules/bson/lib/bson/map.js @@ -0,0 +1,126 @@ +"use strict" + +// We have an ES6 Map available, return the native instance +if(typeof global.Map !== 'undefined') { + module.exports = global.Map; + module.exports.Map = global.Map; +} else { + // We will return a polyfill + var Map = function(array) { + this._keys = []; + this._values = {}; + + for(var i = 0; i < array.length; i++) { + if(array[i] == null) continue; // skip null and undefined + var entry = array[i]; + var key = entry[0]; + var value = entry[1]; + // Add the key to the list of keys in order + this._keys.push(key); + // Add the key and value to the values dictionary with a point + // to the location in the ordered keys list + this._values[key] = {v: value, i: this._keys.length - 1}; + } + } + + Map.prototype.clear = function() { + this._keys = []; + this._values = {}; + } + + Map.prototype.delete = function(key) { + var value = this._values[key]; + if(value == null) return false; + // Delete entry + delete this._values[key]; + // Remove the key from the ordered keys list + this._keys.splice(value.i, 1); + return true; + } + + Map.prototype.entries = function() { + var self = this; + var index = 0; + + return { + next: function() { + var key = self._keys[index++]; + return { + value: key !== undefined ? [key, self._values[key].v] : undefined, + done: key !== undefined ? false : true + } + } + }; + } + + Map.prototype.forEach = function(callback, self) { + self = self || this; + + for(var i = 0; i < this._keys.length; i++) { + var key = this._keys[i]; + // Call the forEach callback + callback.call(self, this._values[key].v, key, self); + } + } + + Map.prototype.get = function(key) { + return this._values[key] ? this._values[key].v : undefined; + } + + Map.prototype.has = function(key) { + return this._values[key] != null; + } + + Map.prototype.keys = function(key) { + var self = this; + var index = 0; + + return { + next: function() { + var key = self._keys[index++]; + return { + value: key !== undefined ? key : undefined, + done: key !== undefined ? false : true + } + } + }; + } + + Map.prototype.set = function(key, value) { + if(this._values[key]) { + this._values[key].v = value; + return this; + } + + // Add the key to the list of keys in order + this._keys.push(key); + // Add the key and value to the values dictionary with a point + // to the location in the ordered keys list + this._values[key] = {v: value, i: this._keys.length - 1}; + return this; + } + + Map.prototype.values = function(key, value) { + var self = this; + var index = 0; + + return { + next: function() { + var key = self._keys[index++]; + return { + value: key !== undefined ? self._values[key].v : undefined, + done: key !== undefined ? false : true + } + } + }; + } + + // Last ismaster + Object.defineProperty(Map.prototype, 'size', { + enumerable:true, + get: function() { return this._keys.length; } + }); + + module.exports = Map; + module.exports.Map = Map; +} \ No newline at end of file diff --git a/node_modules/bson/lib/bson/max_key.js b/node_modules/bson/lib/bson/max_key.js new file mode 100644 index 0000000..03ee9cd --- /dev/null +++ b/node_modules/bson/lib/bson/max_key.js @@ -0,0 +1,14 @@ +/** + * A class representation of the BSON MaxKey type. + * + * @class + * @return {MaxKey} A MaxKey instance + */ +function MaxKey() { + if(!(this instanceof MaxKey)) return new MaxKey(); + + this._bsontype = 'MaxKey'; +} + +module.exports = MaxKey; +module.exports.MaxKey = MaxKey; \ No newline at end of file diff --git a/node_modules/bson/lib/bson/min_key.js b/node_modules/bson/lib/bson/min_key.js new file mode 100644 index 0000000..5e120fb --- /dev/null +++ b/node_modules/bson/lib/bson/min_key.js @@ -0,0 +1,14 @@ +/** + * A class representation of the BSON MinKey type. + * + * @class + * @return {MinKey} A MinKey instance + */ +function MinKey() { + if(!(this instanceof MinKey)) return new MinKey(); + + this._bsontype = 'MinKey'; +} + +module.exports = MinKey; +module.exports.MinKey = MinKey; \ No newline at end of file diff --git a/node_modules/bson/lib/bson/objectid.js b/node_modules/bson/lib/bson/objectid.js new file mode 100644 index 0000000..4a52ab6 --- /dev/null +++ b/node_modules/bson/lib/bson/objectid.js @@ -0,0 +1,362 @@ +/** + * Machine id. + * + * Create a random 3-byte value (i.e. unique for this + * process). Other drivers use a md5 of the machine id here, but + * that would mean an asyc call to gethostname, so we don't bother. + * @ignore + */ +var MACHINE_ID = parseInt(Math.random() * 0xFFFFFF, 10); + +// Regular expression that checks for hex value +var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$"); +var hasBufferType = false; + +// Check if buffer exists +try { + if(Buffer && Buffer.from) hasBufferType = true; +} catch(err) {}; + +/** +* Create a new ObjectID instance +* +* @class +* @param {(string|number)} id Can be a 24 byte hex string, 12 byte binary string or a Number. +* @property {number} generationTime The generation time of this ObjectId instance +* @return {ObjectID} instance of ObjectID. +*/ +var ObjectID = function ObjectID(id) { + // Duck-typing to support ObjectId from different npm packages + if(id instanceof ObjectID) return id; + if(!(this instanceof ObjectID)) return new ObjectID(id); + + this._bsontype = 'ObjectID'; + + // The most common usecase (blank id, new objectId instance) + if(id == null || typeof id == 'number') { + // Generate a new id + this.id = this.generate(id); + // If we are caching the hex string + if(ObjectID.cacheHexString) this.__id = this.toString('hex'); + // Return the object + return; + } + + // Check if the passed in id is valid + var valid = ObjectID.isValid(id); + + // Throw an error if it's not a valid setup + if(!valid && id != null){ + throw new Error("Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"); + } else if(valid && typeof id == 'string' && id.length == 24 && hasBufferType) { + return new ObjectID(new Buffer(id, 'hex')); + } else if(valid && typeof id == 'string' && id.length == 24) { + return ObjectID.createFromHexString(id); + } else if(id != null && id.length === 12) { + // assume 12 byte string + this.id = id; + } else if(id != null && id.toHexString) { + // Duck-typing to support ObjectId from different npm packages + return id; + } else { + throw new Error("Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"); + } + + if(ObjectID.cacheHexString) this.__id = this.toString('hex'); +}; + +// Allow usage of ObjectId as well as ObjectID +var ObjectId = ObjectID; + +// Precomputed hex table enables speedy hex string conversion +var hexTable = []; +for (var i = 0; i < 256; i++) { + hexTable[i] = (i <= 15 ? '0' : '') + i.toString(16); +} + +/** +* Return the ObjectID id as a 24 byte hex string representation +* +* @method +* @return {string} return the 24 byte hex string representation. +*/ +ObjectID.prototype.toHexString = function() { + if(ObjectID.cacheHexString && this.__id) return this.__id; + + var hexString = ''; + if(!this.id || !this.id.length) { + throw new Error('invalid ObjectId, ObjectId.id must be either a string or a Buffer, but is [' + JSON.stringify(this.id) + ']'); + } + + if(this.id instanceof _Buffer) { + hexString = convertToHex(this.id); + if(ObjectID.cacheHexString) this.__id = hexString; + return hexString; + } + + for (var i = 0; i < this.id.length; i++) { + hexString += hexTable[this.id.charCodeAt(i)]; + } + + if(ObjectID.cacheHexString) this.__id = hexString; + return hexString; +}; + +/** +* Update the ObjectID index used in generating new ObjectID's on the driver +* +* @method +* @return {number} returns next index value. +* @ignore +*/ +ObjectID.prototype.get_inc = function() { + return ObjectID.index = (ObjectID.index + 1) % 0xFFFFFF; +}; + +/** +* Update the ObjectID index used in generating new ObjectID's on the driver +* +* @method +* @return {number} returns next index value. +* @ignore +*/ +ObjectID.prototype.getInc = function() { + return this.get_inc(); +}; + +/** +* Generate a 12 byte id buffer used in ObjectID's +* +* @method +* @param {number} [time] optional parameter allowing to pass in a second based timestamp. +* @return {Buffer} return the 12 byte id buffer string. +*/ +ObjectID.prototype.generate = function(time) { + if ('number' != typeof time) { + time = ~~(Date.now()/1000); + } + + // Use pid + var pid = (typeof process === 'undefined' ? Math.floor(Math.random() * 100000) : process.pid) % 0xFFFF; + var inc = this.get_inc(); + // Buffer used + var buffer = new Buffer(12); + // Encode time + buffer[3] = time & 0xff; + buffer[2] = (time >> 8) & 0xff; + buffer[1] = (time >> 16) & 0xff; + buffer[0] = (time >> 24) & 0xff; + // Encode machine + buffer[6] = MACHINE_ID & 0xff; + buffer[5] = (MACHINE_ID >> 8) & 0xff; + buffer[4] = (MACHINE_ID >> 16) & 0xff; + // Encode pid + buffer[8] = pid & 0xff; + buffer[7] = (pid >> 8) & 0xff; + // Encode index + buffer[11] = inc & 0xff; + buffer[10] = (inc >> 8) & 0xff; + buffer[9] = (inc >> 16) & 0xff; + // Return the buffer + return buffer; +}; + +/** +* Converts the id into a 24 byte hex string for printing +* +* @param {String} format The Buffer toString format parameter. +* @return {String} return the 24 byte hex string representation. +* @ignore +*/ +ObjectID.prototype.toString = function(format) { + // Is the id a buffer then use the buffer toString method to return the format + if(this.id && this.id.copy) { + return this.id.toString(typeof format === 'string' ? format : 'hex'); + } + + // if(this.buffer ) + return this.toHexString(); +}; + +/** +* Converts to a string representation of this Id. +* +* @return {String} return the 24 byte hex string representation. +* @ignore +*/ +ObjectID.prototype.inspect = ObjectID.prototype.toString; + +/** +* Converts to its JSON representation. +* +* @return {String} return the 24 byte hex string representation. +* @ignore +*/ +ObjectID.prototype.toJSON = function() { + return this.toHexString(); +}; + +/** +* Compares the equality of this ObjectID with `otherID`. +* +* @method +* @param {object} otherID ObjectID instance to compare against. +* @return {boolean} the result of comparing two ObjectID's +*/ +ObjectID.prototype.equals = function equals (otherId) { + var id; + + if(otherId instanceof ObjectID) { + return this.toString() == otherId.toString(); + } else if(typeof otherId == 'string' && ObjectID.isValid(otherId) && otherId.length == 12 && this.id instanceof _Buffer) { + return otherId === this.id.toString('binary'); + } else if(typeof otherId == 'string' && ObjectID.isValid(otherId) && otherId.length == 24) { + return otherId.toLowerCase() === this.toHexString(); + } else if(typeof otherId == 'string' && ObjectID.isValid(otherId) && otherId.length == 12) { + return otherId === this.id; + } else if(otherId != null && (otherId instanceof ObjectID || otherId.toHexString)) { + return otherId.toHexString() === this.toHexString(); + } else { + return false; + } +} + +/** +* Returns the generation date (accurate up to the second) that this ID was generated. +* +* @method +* @return {date} the generation date +*/ +ObjectID.prototype.getTimestamp = function() { + var timestamp = new Date(); + var time = this.id[3] | this.id[2] << 8 | this.id[1] << 16 | this.id[0] << 24; + timestamp.setTime(Math.floor(time) * 1000); + return timestamp; +} + +/** +* @ignore +*/ +ObjectID.index = ~~(Math.random() * 0xFFFFFF); + +/** +* @ignore +*/ +ObjectID.createPk = function createPk () { + return new ObjectID(); +}; + +/** +* Creates an ObjectID from a second based number, with the rest of the ObjectID zeroed out. Used for comparisons or sorting the ObjectID. +* +* @method +* @param {number} time an integer number representing a number of seconds. +* @return {ObjectID} return the created ObjectID +*/ +ObjectID.createFromTime = function createFromTime (time) { + var buffer = new Buffer([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + // Encode time into first 4 bytes + buffer[3] = time & 0xff; + buffer[2] = (time >> 8) & 0xff; + buffer[1] = (time >> 16) & 0xff; + buffer[0] = (time >> 24) & 0xff; + // Return the new objectId + return new ObjectID(buffer); +}; + +// Lookup tables +var encodeLookup = '0123456789abcdef'.split('') +var decodeLookup = [] +var i = 0 +while (i < 10) decodeLookup[0x30 + i] = i++ +while (i < 16) decodeLookup[0x41 - 10 + i] = decodeLookup[0x61 - 10 + i] = i++ + +var _Buffer = Buffer; +var convertToHex = function(bytes) { + return bytes.toString('hex'); +} + +/** +* Creates an ObjectID from a hex string representation of an ObjectID. +* +* @method +* @param {string} hexString create a ObjectID from a passed in 24 byte hexstring. +* @return {ObjectID} return the created ObjectID +*/ +ObjectID.createFromHexString = function createFromHexString (string) { + // Throw an error if it's not a valid setup + if(typeof string === 'undefined' || string != null && string.length != 24) { + throw new Error("Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"); + } + + // Use Buffer.from method if available + if(hasBufferType) return new ObjectID(new Buffer(string, 'hex')); + + // Calculate lengths + var array = new _Buffer(12); + var n = 0; + var i = 0; + + while (i < 24) { + array[n++] = decodeLookup[string.charCodeAt(i++)] << 4 | decodeLookup[string.charCodeAt(i++)] + } + + return new ObjectID(array); +}; + +/** +* Checks if a value is a valid bson ObjectId +* +* @method +* @return {boolean} return true if the value is a valid bson ObjectId, return false otherwise. +*/ +ObjectID.isValid = function isValid(id) { + if(id == null) return false; + + if(typeof id == 'number') { + return true; + } + + if(typeof id == 'string') { + return id.length == 12 || (id.length == 24 && checkForHexRegExp.test(id)); + } + + if(id instanceof ObjectID) { + return true; + } + + if(id instanceof _Buffer) { + return true; + } + + // Duck-Typing detection of ObjectId like objects + if(id.toHexString) { + return id.id.length == 12 || (id.id.length == 24 && checkForHexRegExp.test(id.id)); + } + + return false; +}; + +/** +* @ignore +*/ +Object.defineProperty(ObjectID.prototype, "generationTime", { + enumerable: true + , get: function () { + return this.id[3] | this.id[2] << 8 | this.id[1] << 16 | this.id[0] << 24; + } + , set: function (value) { + // Encode time into first 4 bytes + this.id[3] = value & 0xff; + this.id[2] = (value >> 8) & 0xff; + this.id[1] = (value >> 16) & 0xff; + this.id[0] = (value >> 24) & 0xff; + } +}); + +/** + * Expose. + */ +module.exports = ObjectID; +module.exports.ObjectID = ObjectID; +module.exports.ObjectId = ObjectID; diff --git a/node_modules/bson/lib/bson/parser/calculate_size.js b/node_modules/bson/lib/bson/parser/calculate_size.js new file mode 100644 index 0000000..53d338f --- /dev/null +++ b/node_modules/bson/lib/bson/parser/calculate_size.js @@ -0,0 +1,152 @@ +"use strict" + +var writeIEEE754 = require('../float_parser').writeIEEE754 + , readIEEE754 = require('../float_parser').readIEEE754 + , Long = require('../long').Long + , Double = require('../double').Double + , Timestamp = require('../timestamp').Timestamp + , ObjectID = require('../objectid').ObjectID + , Symbol = require('../symbol').Symbol + , BSONRegExp = require('../regexp').BSONRegExp + , Code = require('../code').Code + , Decimal128 = require('../decimal128') + , MinKey = require('../min_key').MinKey + , MaxKey = require('../max_key').MaxKey + , DBRef = require('../db_ref').DBRef + , Binary = require('../binary').Binary; + +// To ensure that 0.4 of node works correctly +var isDate = function isDate(d) { + return typeof d === 'object' && Object.prototype.toString.call(d) === '[object Date]'; +} + +var calculateObjectSize = function calculateObjectSize(object, serializeFunctions, ignoreUndefined) { + var totalLength = (4 + 1); + + if(Array.isArray(object)) { + for(var i = 0; i < object.length; i++) { + totalLength += calculateElement(i.toString(), object[i], serializeFunctions, true, ignoreUndefined) + } + } else { + // If we have toBSON defined, override the current object + if(object.toBSON) { + object = object.toBSON(); + } + + // Calculate size + for(var key in object) { + totalLength += calculateElement(key, object[key], serializeFunctions, false, ignoreUndefined) + } + } + + return totalLength; +} + +/** + * @ignore + * @api private + */ +function calculateElement(name, value, serializeFunctions, isArray, ignoreUndefined) { + // If we have toBSON defined, override the current object + if(value && value.toBSON){ + value = value.toBSON(); + } + + switch(typeof value) { + case 'string': + return 1 + Buffer.byteLength(name, 'utf8') + 1 + 4 + Buffer.byteLength(value, 'utf8') + 1; + case 'number': + if(Math.floor(value) === value && value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { + if(value >= BSON.BSON_INT32_MIN && value <= BSON.BSON_INT32_MAX) { // 32 bit + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (4 + 1); + } else { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (8 + 1); + } + } else { // 64 bit + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (8 + 1); + } + case 'undefined': + if(isArray || !ignoreUndefined) return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (1); + return 0; + case 'boolean': + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (1 + 1); + case 'object': + if(value == null || value instanceof MinKey || value instanceof MaxKey || value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (1); + } else if(value instanceof ObjectID || value['_bsontype'] == 'ObjectID') { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (12 + 1); + } else if(value instanceof Date || isDate(value)) { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (8 + 1); + } else if(typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (1 + 4 + 1) + value.length; + } else if(value instanceof Long || value instanceof Double || value instanceof Timestamp + || value['_bsontype'] == 'Long' || value['_bsontype'] == 'Double' || value['_bsontype'] == 'Timestamp') { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (8 + 1); + } else if(value instanceof Decimal128 || value['_bsontype'] == 'Decimal128') { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (16 + 1); + } else if(value instanceof Code || value['_bsontype'] == 'Code') { + // Calculate size depending on the availability of a scope + if(value.scope != null && Object.keys(value.scope).length > 0) { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + 1 + 4 + 4 + Buffer.byteLength(value.code.toString(), 'utf8') + 1 + calculateObjectSize(value.scope, serializeFunctions, ignoreUndefined); + } else { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + 1 + 4 + Buffer.byteLength(value.code.toString(), 'utf8') + 1; + } + } else if(value instanceof Binary || value['_bsontype'] == 'Binary') { + // Check what kind of subtype we have + if(value.sub_type == Binary.SUBTYPE_BYTE_ARRAY) { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (value.position + 1 + 4 + 1 + 4); + } else { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + (value.position + 1 + 4 + 1); + } + } else if(value instanceof Symbol || value['_bsontype'] == 'Symbol') { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + Buffer.byteLength(value.value, 'utf8') + 4 + 1 + 1; + } else if(value instanceof DBRef || value['_bsontype'] == 'DBRef') { + // Set up correct object for serialization + var ordered_values = { + '$ref': value.namespace + , '$id' : value.oid + }; + + // Add db reference if it exists + if(null != value.db) { + ordered_values['$db'] = value.db; + } + + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + 1 + calculateObjectSize(ordered_values, serializeFunctions, ignoreUndefined); + } else if(value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]') { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + 1 + Buffer.byteLength(value.source, 'utf8') + 1 + + (value.global ? 1 : 0) + (value.ignoreCase ? 1 : 0) + (value.multiline ? 1 : 0) + 1 + } else if(value instanceof BSONRegExp || value['_bsontype'] == 'BSONRegExp') { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + 1 + Buffer.byteLength(value.pattern, 'utf8') + 1 + + Buffer.byteLength(value.options, 'utf8') + 1 + } else { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + calculateObjectSize(value, serializeFunctions, ignoreUndefined) + 1; + } + case 'function': + // WTF for 0.4.X where typeof /someregexp/ === 'function' + if(value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]' || String.call(value) == '[object RegExp]') { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + 1 + Buffer.byteLength(value.source, 'utf8') + 1 + + (value.global ? 1 : 0) + (value.ignoreCase ? 1 : 0) + (value.multiline ? 1 : 0) + 1 + } else { + if(serializeFunctions && value.scope != null && Object.keys(value.scope).length > 0) { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + 1 + 4 + 4 + Buffer.byteLength(value.toString(), 'utf8') + 1 + calculateObjectSize(value.scope, serializeFunctions, ignoreUndefined); + } else if(serializeFunctions) { + return (name != null ? (Buffer.byteLength(name, 'utf8') + 1) : 0) + 1 + 4 + Buffer.byteLength(value.toString(), 'utf8') + 1; + } + } + } + + return 0; +} + +var BSON = {}; + +// BSON MAX VALUES +BSON.BSON_INT32_MAX = 0x7FFFFFFF; +BSON.BSON_INT32_MIN = -0x80000000; + +// JS MAX PRECISE VALUES +BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. +BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + +module.exports = calculateObjectSize; diff --git a/node_modules/bson/lib/bson/parser/deserializer.js b/node_modules/bson/lib/bson/parser/deserializer.js new file mode 100644 index 0000000..35818a3 --- /dev/null +++ b/node_modules/bson/lib/bson/parser/deserializer.js @@ -0,0 +1,653 @@ +"use strict" + +var readIEEE754 = require('../float_parser').readIEEE754, + f = require('util').format, + Long = require('../long').Long, + Double = require('../double').Double, + Timestamp = require('../timestamp').Timestamp, + ObjectID = require('../objectid').ObjectID, + Symbol = require('../symbol').Symbol, + Code = require('../code').Code, + MinKey = require('../min_key').MinKey, + MaxKey = require('../max_key').MaxKey, + Decimal128 = require('../decimal128'), + Int32 = require('../int_32'), + DBRef = require('../db_ref').DBRef, + BSONRegExp = require('../regexp').BSONRegExp, + Binary = require('../binary').Binary; + +var deserialize = function(buffer, options, isArray) { + options = options == null ? {} : options; + var index = options && options.index ? options.index : 0; + // Read the document size + var size = buffer[index] | buffer[index+1] << 8 | buffer[index+2] << 16 | buffer[index+3] << 24; + + // Ensure buffer is valid size + if(size < 5 || buffer.length < size || (size + index) > buffer.length) { + throw new Error("corrupt bson message"); + } + + // Illegal end value + if(buffer[index + size - 1] != 0) { + throw new Error("One object, sized correctly, with a spot for an EOO, but the EOO isn't 0x00"); + } + + // Start deserializtion + return deserializeObject(buffer, index, options, isArray); +} + +var deserializeObject = function(buffer, index, options, isArray) { + var evalFunctions = options['evalFunctions'] == null ? false : options['evalFunctions']; + var cacheFunctions = options['cacheFunctions'] == null ? false : options['cacheFunctions']; + var cacheFunctionsCrc32 = options['cacheFunctionsCrc32'] == null ? false : options['cacheFunctionsCrc32']; + var fieldsAsRaw = options['fieldsAsRaw'] == null ? null : options['fieldsAsRaw']; + + // Return raw bson buffer instead of parsing it + var raw = options['raw'] == null ? false : options['raw']; + + // Return BSONRegExp objects instead of native regular expressions + var bsonRegExp = typeof options['bsonRegExp'] == 'boolean' ? options['bsonRegExp'] : false; + + // Controls the promotion of values vs wrapper classes + var promoteBuffers = options['promoteBuffers'] == null ? false : options['promoteBuffers']; + var promoteLongs = options['promoteLongs'] == null ? true : options['promoteLongs']; + var promoteValues = options['promoteValues'] == null ? true : options['promoteValues']; + + // Set the start index + var startIndex = index; + + // Validate that we have at least 4 bytes of buffer + if(buffer.length < 5) throw new Error("corrupt bson message < 5 bytes long"); + + // Read the document size + var size = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + + // Ensure buffer is valid size + if(size < 5 || size > buffer.length) throw new Error("corrupt bson message"); + + // Create holding object + var object = isArray ? [] : {}; + // Used for arrays to skip having to perform utf8 decoding + var arrayIndex = 0; + + // While we have more left data left keep parsing + while(true) { + // Read the type + var elementType = buffer[index++]; + // If we get a zero it's the last byte, exit + if(elementType == 0) { + break; + } + + // Get the start search index + var i = index; + // Locate the end of the c string + while(buffer[i] !== 0x00 && i < buffer.length) { + i++ + } + + // If are at the end of the buffer there is a problem with the document + if(i >= buffer.length) throw new Error("Bad BSON Document: illegal CString") + var name = isArray ? arrayIndex++ : buffer.toString('utf8', index, i); + + index = i + 1; + + if(elementType == BSON.BSON_DATA_STRING) { + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if(stringSize <= 0 || stringSize > (buffer.length - index) || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + object[name] = buffer.toString('utf8', index, index + stringSize - 1); + index = index + stringSize; + } else if(elementType == BSON.BSON_DATA_OID) { + var oid = new Buffer(12); + buffer.copy(oid, 0, index, index + 12); + object[name] = new ObjectID(oid); + index = index + 12; + } else if(elementType == BSON.BSON_DATA_INT && promoteValues == false) { + object[name] = new Int32(buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24); + } else if(elementType == BSON.BSON_DATA_INT) { + object[name] = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + } else if(elementType == BSON.BSON_DATA_NUMBER && promoteValues == false) { + object[name] = new Double(buffer.readDoubleLE(index)); + index = index + 8; + } else if(elementType == BSON.BSON_DATA_NUMBER) { + object[name] = buffer.readDoubleLE(index); + index = index + 8; + } else if(elementType == BSON.BSON_DATA_DATE) { + var lowBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var highBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + object[name] = new Date(new Long(lowBits, highBits).toNumber()); + } else if(elementType == BSON.BSON_DATA_BOOLEAN) { + if(buffer[index] != 0 && buffer[index] != 1) throw new Error('illegal boolean type value'); + object[name] = buffer[index++] == 1; + } else if(elementType == BSON.BSON_DATA_OBJECT) { + var _index = index; + var objectSize = buffer[index] | buffer[index + 1] << 8 | buffer[index + 2] << 16 | buffer[index + 3] << 24; + if(objectSize <= 0 || objectSize > (buffer.length - index)) throw new Error("bad embedded document length in bson"); + + // We have a raw value + if(raw) { + object[name] = buffer.slice(index, index + objectSize); + } else { + object[name] = deserializeObject(buffer, _index, options, false); + } + + index = index + objectSize; + } else if(elementType == BSON.BSON_DATA_ARRAY) { + var _index = index; + var objectSize = buffer[index] | buffer[index + 1] << 8 | buffer[index + 2] << 16 | buffer[index + 3] << 24; + var arrayOptions = options; + + // Stop index + var stopIndex = index + objectSize; + + // All elements of array to be returned as raw bson + if(fieldsAsRaw && fieldsAsRaw[name]) { + arrayOptions = {}; + for(var n in options) arrayOptions[n] = options[n]; + arrayOptions['raw'] = true; + } + + object[name] = deserializeObject(buffer, _index, arrayOptions, true); + index = index + objectSize; + + if(buffer[index - 1] != 0) throw new Error('invalid array terminator byte'); + if(index != stopIndex) throw new Error('corrupted array bson'); + } else if(elementType == BSON.BSON_DATA_UNDEFINED) { + object[name] = undefined; + } else if(elementType == BSON.BSON_DATA_NULL) { + object[name] = null; + } else if(elementType == BSON.BSON_DATA_LONG) { + // Unpack the low and high bits + var lowBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var highBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var long = new Long(lowBits, highBits); + // Promote the long if possible + if(promoteLongs && promoteValues == true) { + object[name] = long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) ? long.toNumber() : long; + } else { + object[name] = long; + } + } else if(elementType == BSON.BSON_DATA_DECIMAL128) { + // Buffer to contain the decimal bytes + var bytes = new Buffer(16); + // Copy the next 16 bytes into the bytes buffer + buffer.copy(bytes, 0, index, index + 16); + // Update index + index = index + 16; + // Assign the new Decimal128 value + var decimal128 = new Decimal128(bytes); + // If we have an alternative mapper use that + object[name] = decimal128.toObject ? decimal128.toObject() : decimal128; + } else if(elementType == BSON.BSON_DATA_BINARY) { + var binarySize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var totalBinarySize = binarySize; + var subType = buffer[index++]; + + // Did we have a negative binary size, throw + if(binarySize < 0) throw new Error('Negative binary type element size found'); + + // Is the length longer than the document + if(binarySize > buffer.length) throw new Error('Binary type size larger than document size'); + + // Decode as raw Buffer object if options specifies it + if(buffer['slice'] != null) { + // If we have subtype 2 skip the 4 bytes for the size + if(subType == Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if(binarySize < 0) throw new Error('Negative binary type element size found for subtype 0x02'); + if(binarySize > (totalBinarySize - 4)) throw new Error('Binary type with subtype 0x02 contains to long binary size'); + if(binarySize < (totalBinarySize - 4)) throw new Error('Binary type with subtype 0x02 contains to short binary size'); + } + + if(promoteBuffers && promoteValues) { + object[name] = buffer.slice(index, index + binarySize); + } else { + object[name] = new Binary(buffer.slice(index, index + binarySize), subType); + } + } else { + var _buffer = typeof Uint8Array != 'undefined' ? new Uint8Array(new ArrayBuffer(binarySize)) : new Array(binarySize); + // If we have subtype 2 skip the 4 bytes for the size + if(subType == Binary.SUBTYPE_BYTE_ARRAY) { + binarySize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if(binarySize < 0) throw new Error('Negative binary type element size found for subtype 0x02'); + if(binarySize > (totalBinarySize - 4)) throw new Error('Binary type with subtype 0x02 contains to long binary size'); + if(binarySize < (totalBinarySize - 4)) throw new Error('Binary type with subtype 0x02 contains to short binary size'); + } + + // Copy the data + for(var i = 0; i < binarySize; i++) { + _buffer[i] = buffer[index + i]; + } + + if(promoteBuffers && promoteValues) { + object[name] = _buffer; + } else { + object[name] = new Binary(_buffer, subType); + } + } + + // Update the index + index = index + binarySize; + } else if(elementType == BSON.BSON_DATA_REGEXP && bsonRegExp == false) { + // Get the start search index + var i = index; + // Locate the end of the c string + while(buffer[i] !== 0x00 && i < buffer.length) { + i++ + } + // If are at the end of the buffer there is a problem with the document + if(i >= buffer.length) throw new Error("Bad BSON Document: illegal CString") + // Return the C string + var source = buffer.toString('utf8', index, i); + // Create the regexp + index = i + 1; + + // Get the start search index + var i = index; + // Locate the end of the c string + while(buffer[i] !== 0x00 && i < buffer.length) { + i++ + } + // If are at the end of the buffer there is a problem with the document + if(i >= buffer.length) throw new Error("Bad BSON Document: illegal CString") + // Return the C string + var regExpOptions = buffer.toString('utf8', index, i); + index = i + 1; + + // For each option add the corresponding one for javascript + var optionsArray = new Array(regExpOptions.length); + + // Parse options + for(var i = 0; i < regExpOptions.length; i++) { + switch(regExpOptions[i]) { + case 'm': + optionsArray[i] = 'm'; + break; + case 's': + optionsArray[i] = 'g'; + break; + case 'i': + optionsArray[i] = 'i'; + break; + } + } + + object[name] = new RegExp(source, optionsArray.join('')); + } else if(elementType == BSON.BSON_DATA_REGEXP && bsonRegExp == true) { + // Get the start search index + var i = index; + // Locate the end of the c string + while(buffer[i] !== 0x00 && i < buffer.length) { + i++ + } + // If are at the end of the buffer there is a problem with the document + if(i >= buffer.length) throw new Error("Bad BSON Document: illegal CString") + // Return the C string + var source = buffer.toString('utf8', index, i); + index = i + 1; + + // Get the start search index + var i = index; + // Locate the end of the c string + while(buffer[i] !== 0x00 && i < buffer.length) { + i++ + } + // If are at the end of the buffer there is a problem with the document + if(i >= buffer.length) throw new Error("Bad BSON Document: illegal CString") + // Return the C string + var regExpOptions = buffer.toString('utf8', index, i); + index = i + 1; + + // Set the object + object[name] = new BSONRegExp(source, regExpOptions); + } else if(elementType == BSON.BSON_DATA_SYMBOL) { + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if(stringSize <= 0 || stringSize > (buffer.length - index) || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + object[name] = new Symbol(buffer.toString('utf8', index, index + stringSize - 1)); + index = index + stringSize; + } else if(elementType == BSON.BSON_DATA_TIMESTAMP) { + var lowBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + var highBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + object[name] = new Timestamp(lowBits, highBits); + } else if(elementType == BSON.BSON_DATA_MIN_KEY) { + object[name] = new MinKey(); + } else if(elementType == BSON.BSON_DATA_MAX_KEY) { + object[name] = new MaxKey(); + } else if(elementType == BSON.BSON_DATA_CODE) { + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + if(stringSize <= 0 || stringSize > (buffer.length - index) || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + var functionString = buffer.toString('utf8', index, index + stringSize - 1); + + // If we are evaluating the functions + if(evalFunctions) { + var value = null; + // If we have cache enabled let's look for the md5 of the function in the cache + if(cacheFunctions) { + var hash = cacheFunctionsCrc32 ? crc32(functionString) : functionString; + // Got to do this to avoid V8 deoptimizing the call due to finding eval + object[name] = isolateEvalWithHash(functionCache, hash, functionString, object); + } else { + object[name] = isolateEval(functionString); + } + } else { + object[name] = new Code(functionString); + } + + // Update parse index position + index = index + stringSize; + } else if(elementType == BSON.BSON_DATA_CODE_W_SCOPE) { + var totalSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + + // Element cannot be shorter than totalSize + stringSize + documentSize + terminator + if(totalSize < (4 + 4 + 4 + 1)) { + throw new Error("code_w_scope total size shorter minimum expected length"); + } + + // Get the code string size + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + // Check if we have a valid string + if(stringSize <= 0 || stringSize > (buffer.length - index) || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + + // Javascript function + var functionString = buffer.toString('utf8', index, index + stringSize - 1); + // Update parse index position + index = index + stringSize; + // Parse the element + var _index = index; + // Decode the size of the object document + var objectSize = buffer[index] | buffer[index + 1] << 8 | buffer[index + 2] << 16 | buffer[index + 3] << 24; + // Decode the scope object + var scopeObject = deserializeObject(buffer, _index, options, false); + // Adjust the index + index = index + objectSize; + + // Check if field length is to short + if(totalSize < (4 + 4 + objectSize + stringSize)) { + throw new Error('code_w_scope total size is to short, truncating scope'); + } + + // Check if totalSize field is to long + if(totalSize > (4 + 4 + objectSize + stringSize)) { + throw new Error('code_w_scope total size is to long, clips outer document'); + } + + // If we are evaluating the functions + if(evalFunctions) { + // Contains the value we are going to set + var value = null; + // If we have cache enabled let's look for the md5 of the function in the cache + if(cacheFunctions) { + var hash = cacheFunctionsCrc32 ? crc32(functionString) : functionString; + // Got to do this to avoid V8 deoptimizing the call due to finding eval + object[name] = isolateEvalWithHash(functionCache, hash, functionString, object); + } else { + object[name] = isolateEval(functionString); + } + + object[name].scope = scopeObject; + } else { + object[name] = new Code(functionString, scopeObject); + } + } else if(elementType == BSON.BSON_DATA_DBPOINTER) { + // Get the code string size + var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; + // Check if we have a valid string + if(stringSize <= 0 || stringSize > (buffer.length - index) || buffer[index + stringSize - 1] != 0) throw new Error("bad string length in bson"); + // Namespace + var namespace = buffer.toString('utf8', index, index + stringSize - 1); + // Update parse index position + index = index + stringSize; + + // Read the oid + var oidBuffer = new Buffer(12); + buffer.copy(oidBuffer, 0, index, index + 12); + var oid = new ObjectID(oidBuffer); + + // Update the index + index = index + 12; + + // Split the namespace + var parts = namespace.split('.'); + var db = parts.shift(); + var collection = parts.join('.'); + // Upgrade to DBRef type + object[name] = new DBRef(collection, oid, db); + } else { + throw new Error("Detected unknown BSON type " + elementType.toString(16) + " for fieldname \"" + name + "\", are you using the latest BSON parser"); + } + } + + // Check if the deserialization was against a valid array/object + if(size != (index - startIndex)) { + if(isArray) throw new Error('corrupt array bson'); + throw new Error('corrupt object bson'); + } + + // Check if we have a db ref object + if(object['$id'] != null) object = new DBRef(object['$ref'], object['$id'], object['$db']); + return object; +} + +/** + * Ensure eval is isolated. + * + * @ignore + * @api private + */ +var isolateEvalWithHash = function(functionCache, hash, functionString, object) { + // Contains the value we are going to set + var value = null; + + // Check for cache hit, eval if missing and return cached function + if(functionCache[hash] == null) { + eval("value = " + functionString); + functionCache[hash] = value; + } + // Set the object + return functionCache[hash].bind(object); +} + +/** + * Ensure eval is isolated. + * + * @ignore + * @api private + */ +var isolateEval = function(functionString) { + // Contains the value we are going to set + var value = null; + // Eval the function + eval("value = " + functionString); + return value; +} + +var BSON = {}; + +/** + * Contains the function cache if we have that enable to allow for avoiding the eval step on each deserialization, comparison is by md5 + * + * @ignore + * @api private + */ +var functionCache = BSON.functionCache = {}; + +/** + * Number BSON Type + * + * @classconstant BSON_DATA_NUMBER + **/ +BSON.BSON_DATA_NUMBER = 1; +/** + * String BSON Type + * + * @classconstant BSON_DATA_STRING + **/ +BSON.BSON_DATA_STRING = 2; +/** + * Object BSON Type + * + * @classconstant BSON_DATA_OBJECT + **/ +BSON.BSON_DATA_OBJECT = 3; +/** + * Array BSON Type + * + * @classconstant BSON_DATA_ARRAY + **/ +BSON.BSON_DATA_ARRAY = 4; +/** + * Binary BSON Type + * + * @classconstant BSON_DATA_BINARY + **/ +BSON.BSON_DATA_BINARY = 5; +/** + * Binary BSON Type + * + * @classconstant BSON_DATA_UNDEFINED + **/ +BSON.BSON_DATA_UNDEFINED = 6; +/** + * ObjectID BSON Type + * + * @classconstant BSON_DATA_OID + **/ +BSON.BSON_DATA_OID = 7; +/** + * Boolean BSON Type + * + * @classconstant BSON_DATA_BOOLEAN + **/ +BSON.BSON_DATA_BOOLEAN = 8; +/** + * Date BSON Type + * + * @classconstant BSON_DATA_DATE + **/ +BSON.BSON_DATA_DATE = 9; +/** + * null BSON Type + * + * @classconstant BSON_DATA_NULL + **/ +BSON.BSON_DATA_NULL = 10; +/** + * RegExp BSON Type + * + * @classconstant BSON_DATA_REGEXP + **/ +BSON.BSON_DATA_REGEXP = 11; +/** + * Code BSON Type + * + * @classconstant BSON_DATA_DBPOINTER + **/ +BSON.BSON_DATA_DBPOINTER = 12; +/** + * Code BSON Type + * + * @classconstant BSON_DATA_CODE + **/ +BSON.BSON_DATA_CODE = 13; +/** + * Symbol BSON Type + * + * @classconstant BSON_DATA_SYMBOL + **/ +BSON.BSON_DATA_SYMBOL = 14; +/** + * Code with Scope BSON Type + * + * @classconstant BSON_DATA_CODE_W_SCOPE + **/ +BSON.BSON_DATA_CODE_W_SCOPE = 15; +/** + * 32 bit Integer BSON Type + * + * @classconstant BSON_DATA_INT + **/ +BSON.BSON_DATA_INT = 16; +/** + * Timestamp BSON Type + * + * @classconstant BSON_DATA_TIMESTAMP + **/ +BSON.BSON_DATA_TIMESTAMP = 17; +/** + * Long BSON Type + * + * @classconstant BSON_DATA_LONG + **/ +BSON.BSON_DATA_LONG = 18; +/** + * Long BSON Type + * + * @classconstant BSON_DATA_DECIMAL128 + **/ +BSON.BSON_DATA_DECIMAL128 = 19; +/** + * MinKey BSON Type + * + * @classconstant BSON_DATA_MIN_KEY + **/ +BSON.BSON_DATA_MIN_KEY = 0xff; +/** + * MaxKey BSON Type + * + * @classconstant BSON_DATA_MAX_KEY + **/ +BSON.BSON_DATA_MAX_KEY = 0x7f; + +/** + * Binary Default Type + * + * @classconstant BSON_BINARY_SUBTYPE_DEFAULT + **/ +BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0; +/** + * Binary Function Type + * + * @classconstant BSON_BINARY_SUBTYPE_FUNCTION + **/ +BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1; +/** + * Binary Byte Array Type + * + * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY + **/ +BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; +/** + * Binary UUID Type + * + * @classconstant BSON_BINARY_SUBTYPE_UUID + **/ +BSON.BSON_BINARY_SUBTYPE_UUID = 3; +/** + * Binary MD5 Type + * + * @classconstant BSON_BINARY_SUBTYPE_MD5 + **/ +BSON.BSON_BINARY_SUBTYPE_MD5 = 4; +/** + * Binary User Defined Type + * + * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED + **/ +BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; + +// BSON MAX VALUES +BSON.BSON_INT32_MAX = 0x7FFFFFFF; +BSON.BSON_INT32_MIN = -0x80000000; + +BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1; +BSON.BSON_INT64_MIN = -Math.pow(2, 63); + +// JS MAX PRECISE VALUES +BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. +BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + +// Internal long versions +var JS_INT_MAX_LONG = Long.fromNumber(0x20000000000000); // Any integer up to 2^53 can be precisely represented by a double. +var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down to -2^53 can be precisely represented by a double. + +module.exports = deserialize diff --git a/node_modules/bson/lib/bson/parser/serializer.js b/node_modules/bson/lib/bson/parser/serializer.js new file mode 100644 index 0000000..4fdb0cf --- /dev/null +++ b/node_modules/bson/lib/bson/parser/serializer.js @@ -0,0 +1,1001 @@ +"use strict" + +var writeIEEE754 = require('../float_parser').writeIEEE754, + readIEEE754 = require('../float_parser').readIEEE754, + Long = require('../long').Long, + Map = require('../map'), + Double = require('../double').Double, + Timestamp = require('../timestamp').Timestamp, + ObjectID = require('../objectid').ObjectID, + Symbol = require('../symbol').Symbol, + Code = require('../code').Code, + BSONRegExp = require('../regexp').BSONRegExp, + Int32 = require('../int_32').Int32, + MinKey = require('../min_key').MinKey, + MaxKey = require('../max_key').MaxKey, + Decimal128 = require('../decimal128'), + DBRef = require('../db_ref').DBRef, + Binary = require('../binary').Binary; + +try { + var _Buffer = Uint8Array; +} catch(e) { + var _Buffer = Buffer; +} + +var regexp = /\x00/ + +// To ensure that 0.4 of node works correctly +var isDate = function isDate(d) { + return typeof d === 'object' && Object.prototype.toString.call(d) === '[object Date]'; +} + +var isRegExp = function isRegExp(d) { + return Object.prototype.toString.call(d) === '[object RegExp]'; +} + +var serializeString = function(buffer, key, value, index, isArray) { + // Encode String type + buffer[index++] = BSON.BSON_DATA_STRING; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes + 1; + buffer[index - 1] = 0; + // Write the string + var size = buffer.write(value, index + 4, 'utf8'); + // Write the size of the string to buffer + buffer[index + 3] = (size + 1 >> 24) & 0xff; + buffer[index + 2] = (size + 1 >> 16) & 0xff; + buffer[index + 1] = (size + 1 >> 8) & 0xff; + buffer[index] = size + 1 & 0xff; + // Update index + index = index + 4 + size; + // Write zero + buffer[index++] = 0; + return index; +} + +var serializeNumber = function(buffer, key, value, index, isArray) { + // We have an integer value + if(Math.floor(value) === value && value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { + // If the value fits in 32 bits encode as int, if it fits in a double + // encode it as a double, otherwise long + if(value >= BSON.BSON_INT32_MIN && value <= BSON.BSON_INT32_MAX) { + // Set int type 32 bits or less + buffer[index++] = BSON.BSON_DATA_INT; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the int value + buffer[index++] = value & 0xff; + buffer[index++] = (value >> 8) & 0xff; + buffer[index++] = (value >> 16) & 0xff; + buffer[index++] = (value >> 24) & 0xff; + } else if(value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { + // Encode as double + buffer[index++] = BSON.BSON_DATA_NUMBER; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write float + writeIEEE754(buffer, value, index, 'little', 52, 8); + // Ajust index + index = index + 8; + } else { + // Set long type + buffer[index++] = BSON.BSON_DATA_LONG; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + var longVal = Long.fromNumber(value); + var lowBits = longVal.getLowBits(); + var highBits = longVal.getHighBits(); + // Encode low bits + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + // Encode high bits + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + } + } else { + // Encode as double + buffer[index++] = BSON.BSON_DATA_NUMBER; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write float + writeIEEE754(buffer, value, index, 'little', 52, 8); + // Ajust index + index = index + 8; + } + + return index; +} + +var serializeNull = function(buffer, key, value, index, isArray) { + // Set long type + buffer[index++] = BSON.BSON_DATA_NULL; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} + +var serializeBoolean = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_BOOLEAN; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Encode the boolean value + buffer[index++] = value ? 1 : 0; + return index; +} + +var serializeDate = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_DATE; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Write the date + var dateInMilis = Long.fromNumber(value.getTime()); + var lowBits = dateInMilis.getLowBits(); + var highBits = dateInMilis.getHighBits(); + // Encode low bits + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + // Encode high bits + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} + +var serializeRegExp = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_REGEXP; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + if (value.source && value.source.match(regexp) != null) { + throw Error("value " + value.source + " must not contain null bytes"); + } + // Adjust the index + index = index + buffer.write(value.source, index, 'utf8'); + // Write zero + buffer[index++] = 0x00; + // Write the parameters + if(value.global) buffer[index++] = 0x73; // s + if(value.ignoreCase) buffer[index++] = 0x69; // i + if(value.multiline) buffer[index++] = 0x6d; // m + // Add ending zero + buffer[index++] = 0x00; + return index; +} + +var serializeBSONRegExp = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_REGEXP; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Check the pattern for 0 bytes + if (value.pattern.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw Error("pattern " + value.pattern + " must not contain null bytes"); + } + + // Adjust the index + index = index + buffer.write(value.pattern, index, 'utf8'); + // Write zero + buffer[index++] = 0x00; + // Write the options + index = index + buffer.write(value.options.split('').sort().join(''), index, 'utf8'); + // Add ending zero + buffer[index++] = 0x00; + return index; +} + +var serializeMinMax = function(buffer, key, value, index, isArray) { + // Write the type of either min or max key + if(value === null) { + buffer[index++] = BSON.BSON_DATA_NULL; + } else if(value instanceof MinKey) { + buffer[index++] = BSON.BSON_DATA_MIN_KEY; + } else { + buffer[index++] = BSON.BSON_DATA_MAX_KEY; + } + + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + return index; +} + +var serializeObjectId = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_OID; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Write the objectId into the shared buffer + if(typeof value.id == 'string') { + buffer.write(value.id, index, 'binary') + } else if(value.id && value.id.copy){ + value.id.copy(buffer, index, 0, 12); + } else { + throw new Error('object [' + JSON.stringify(value) + "] is not a valid ObjectId"); + } + + // Ajust index + return index + 12; +} + +var serializeBuffer = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_BINARY; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Get size of the buffer (current write point) + var size = value.length; + // Write the size of the string to buffer + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + // Write the default subtype + buffer[index++] = BSON.BSON_BINARY_SUBTYPE_DEFAULT; + // Copy the content form the binary field to the buffer + value.copy(buffer, index, 0, size); + // Adjust the index + index = index + size; + return index; +} + +var serializeObject = function(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, isArray, path) { + for(var i = 0; i < path.length; i++) { + if(path[i] === value) throw new Error('cyclic dependency detected'); + } + + // Push value to stack + path.push(value); + // Write the type + buffer[index++] = Array.isArray(value) ? BSON.BSON_DATA_ARRAY : BSON.BSON_DATA_OBJECT; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + var endIndex = serializeInto(buffer, value, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined, path); + // Pop stack + path.pop(); + // Write size + var size = endIndex - index; + return endIndex; +} + +var serializeDecimal128 = function(buffer, key, value, index, isArray) { + buffer[index++] = BSON.BSON_DATA_DECIMAL128; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the data from the value + value.bytes.copy(buffer, index, 0, 16); + return index + 16; +} + +var serializeLong = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = value._bsontype == 'Long' ? BSON.BSON_DATA_LONG : BSON.BSON_DATA_TIMESTAMP; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the date + var lowBits = value.getLowBits(); + var highBits = value.getHighBits(); + // Encode low bits + buffer[index++] = lowBits & 0xff; + buffer[index++] = (lowBits >> 8) & 0xff; + buffer[index++] = (lowBits >> 16) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; + // Encode high bits + buffer[index++] = highBits & 0xff; + buffer[index++] = (highBits >> 8) & 0xff; + buffer[index++] = (highBits >> 16) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; + return index; +} + +var serializeInt32 = function(buffer, key, value, index, isArray) { + // Set int type 32 bits or less + buffer[index++] = BSON.BSON_DATA_INT; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the int value + buffer[index++] = value & 0xff; + buffer[index++] = (value >> 8) & 0xff; + buffer[index++] = (value >> 16) & 0xff; + buffer[index++] = (value >> 24) & 0xff; + return index; +} + +var serializeDouble = function(buffer, key, value, index, isArray) { + // Encode as double + buffer[index++] = BSON.BSON_DATA_NUMBER; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write float + writeIEEE754(buffer, value, index, 'little', 52, 8); + // Ajust index + index = index + 8; + return index; +} + +var serializeFunction = function(buffer, key, value, index, checkKeys, depth, isArray) { + buffer[index++] = BSON.BSON_DATA_CODE; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Function string + var functionString = value.toString(); + // Write the string + var size = buffer.write(functionString, index + 4, 'utf8') + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0; + return index; +} + +var serializeCode = function(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, isArray) { + if(value.scope && typeof value.scope == 'object') { + // Write the type + buffer[index++] = BSON.BSON_DATA_CODE_W_SCOPE; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + // Starting index + var startIndex = index; + + // Serialize the function + // Get the function string + var functionString = typeof value.code == 'string' ? value.code : value.code.toString(); + // Index adjustment + index = index + 4; + // Write string into buffer + var codeSize = buffer.write(functionString, index + 4, 'utf8') + 1; + // Write the size of the string to buffer + buffer[index] = codeSize & 0xff; + buffer[index + 1] = (codeSize >> 8) & 0xff; + buffer[index + 2] = (codeSize >> 16) & 0xff; + buffer[index + 3] = (codeSize >> 24) & 0xff; + // Write end 0 + buffer[index + 4 + codeSize - 1] = 0; + // Write the + index = index + codeSize + 4; + + // + // Serialize the scope value + var endIndex = serializeInto(buffer, value.scope, checkKeys, index, depth + 1, serializeFunctions, ignoreUndefined) + index = endIndex - 1; + + // Writ the total + var totalSize = endIndex - startIndex; + + // Write the total size of the object + buffer[startIndex++] = totalSize & 0xff; + buffer[startIndex++] = (totalSize >> 8) & 0xff; + buffer[startIndex++] = (totalSize >> 16) & 0xff; + buffer[startIndex++] = (totalSize >> 24) & 0xff; + // Write trailing zero + buffer[index++] = 0; + } else { + buffer[index++] = BSON.BSON_DATA_CODE; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Function string + var functionString = value.code.toString(); + // Write the string + var size = buffer.write(functionString, index + 4, 'utf8') + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0; + } + + return index; +} + +var serializeBinary = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_BINARY; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Extract the buffer + var data = value.value(true); + // Calculate size + var size = value.position; + // Add the deprecated 02 type 4 bytes of size to total + if(value.sub_type == Binary.SUBTYPE_BYTE_ARRAY) size = size + 4; + // Write the size of the string to buffer + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + // Write the subtype to the buffer + buffer[index++] = value.sub_type; + + // If we have binary type 2 the 4 first bytes are the size + if(value.sub_type == Binary.SUBTYPE_BYTE_ARRAY) { + size = size - 4; + buffer[index++] = size & 0xff; + buffer[index++] = (size >> 8) & 0xff; + buffer[index++] = (size >> 16) & 0xff; + buffer[index++] = (size >> 24) & 0xff; + } + + // Write the data to the object + data.copy(buffer, index, 0, value.position); + // Adjust the index + index = index + value.position; + return index; +} + +var serializeSymbol = function(buffer, key, value, index, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_SYMBOL; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + // Write the string + var size = buffer.write(value.value, index + 4, 'utf8') + 1; + // Write the size of the string to buffer + buffer[index] = size & 0xff; + buffer[index + 1] = (size >> 8) & 0xff; + buffer[index + 2] = (size >> 16) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; + // Update index + index = index + 4 + size - 1; + // Write zero + buffer[index++] = 0x00; + return index; +} + +var serializeDBRef = function(buffer, key, value, index, depth, serializeFunctions, isArray) { + // Write the type + buffer[index++] = BSON.BSON_DATA_OBJECT; + // Number of written bytes + var numberOfWrittenBytes = !isArray ? buffer.write(key, index, 'utf8') : buffer.write(key, index, 'ascii'); + + // Encode the name + index = index + numberOfWrittenBytes; + buffer[index++] = 0; + + var startIndex = index; + var endIndex; + + // Serialize object + if(null != value.db) { + endIndex = serializeInto(buffer, { + '$ref': value.namespace + , '$id' : value.oid + , '$db' : value.db + }, false, index, depth + 1, serializeFunctions); + } else { + endIndex = serializeInto(buffer, { + '$ref': value.namespace + , '$id' : value.oid + }, false, index, depth + 1, serializeFunctions); + } + + // Calculate object size + var size = endIndex - startIndex; + // Write the size + buffer[startIndex++] = size & 0xff; + buffer[startIndex++] = (size >> 8) & 0xff; + buffer[startIndex++] = (size >> 16) & 0xff; + buffer[startIndex++] = (size >> 24) & 0xff; + // Set index + return endIndex; +} + +var serializeInto = function serializeInto(buffer, object, checkKeys, startingIndex, depth, serializeFunctions, ignoreUndefined, path) { + startingIndex = startingIndex || 0; + path = path || []; + + // Push the object to the path + path.push(object); + + // Start place to serialize into + var index = startingIndex + 4; + var self = this; + + // Special case isArray + if(Array.isArray(object)) { + // Get object keys + for(var i = 0; i < object.length; i++) { + var key = "" + i; + var value = object[i]; + + // Is there an override value + if(value && value.toBSON) { + if(typeof value.toBSON != 'function') throw new Error("toBSON is not a function"); + value = value.toBSON(); + } + + var type = typeof value; + if(type == 'string') { + index = serializeString(buffer, key, value, index, true); + } else if(type == 'number') { + index = serializeNumber(buffer, key, value, index, true); + } else if(type == 'boolean') { + index = serializeBoolean(buffer, key, value, index, true); + } else if(value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index, true); + } else if(value === undefined) { + index = serializeNull(buffer, key, value, index, true); + } else if(value === null) { + index = serializeNull(buffer, key, value, index, true); + } else if(value['_bsontype'] == 'ObjectID') { + index = serializeObjectId(buffer, key, value, index, true); + } else if(Buffer.isBuffer(value)) { + index = serializeBuffer(buffer, key, value, index, true); + } else if(value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index, true); + } else if(type == 'object' && value['_bsontype'] == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, true, path); + } else if(type == 'object' && value['_bsontype'] == 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index, true); + } else if(value['_bsontype'] == 'Long' || value['_bsontype'] == 'Timestamp') { + index = serializeLong(buffer, key, value, index, true); + } else if(value['_bsontype'] == 'Double') { + index = serializeDouble(buffer, key, value, index, true); + } else if(typeof value == 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index, checkKeys, depth, serializeFunctions, true); + } else if(value['_bsontype'] == 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, true); + } else if(value['_bsontype'] == 'Binary') { + index = serializeBinary(buffer, key, value, index, true); + } else if(value['_bsontype'] == 'Symbol') { + index = serializeSymbol(buffer, key, value, index, true); + } else if(value['_bsontype'] == 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions, true); + } else if(value['_bsontype'] == 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index, true); + } else if(value['_bsontype'] == 'Int32') { + index = serializeInt32(buffer, key, value, index, true); + } else if(value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { + index = serializeMinMax(buffer, key, value, index, true); + } + } + } else if(object instanceof Map) { + var iterator = object.entries(); + var done = false; + + while(!done) { + // Unpack the next entry + var entry = iterator.next(); + done = entry.done; + // Are we done, then skip and terminate + if(done) continue; + + // Get the entry values + var key = entry.value[0]; + var value = entry.value[1]; + + // Check the type of the value + var type = typeof value; + + // Check the key and throw error if it's illegal + if(key != '$db' && key != '$ref' && key != '$id') { + if (key.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw Error("key " + key + " must not contain null bytes"); + } + + if (checkKeys) { + if('$' == key[0]) { + throw Error("key " + key + " must not start with '$'"); + } else if (!!~key.indexOf('.')) { + throw Error("key " + key + " must not contain '.'"); + } + } + } + + if(type == 'string') { + index = serializeString(buffer, key, value, index); + } else if(type == 'number') { + index = serializeNumber(buffer, key, value, index); + } else if(type == 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } else if(value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } else if(value === undefined && ignoreUndefined == true) { + } else if(value === null || value === undefined) { + index = serializeNull(buffer, key, value, index); + } else if(value['_bsontype'] == 'ObjectID') { + index = serializeObjectId(buffer, key, value, index); + } else if(Buffer.isBuffer(value)) { + index = serializeBuffer(buffer, key, value, index); + } else if(value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } else if(type == 'object' && value['_bsontype'] == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, false, path); + } else if(type == 'object' && value['_bsontype'] == 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } else if(value['_bsontype'] == 'Long' || value['_bsontype'] == 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } else if(value['_bsontype'] == 'Double') { + index = serializeDouble(buffer, key, value, index); + } else if(value['_bsontype'] == 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined); + } else if(typeof value == 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index, checkKeys, depth, serializeFunctions); + } else if(value['_bsontype'] == 'Binary') { + index = serializeBinary(buffer, key, value, index); + } else if(value['_bsontype'] == 'Symbol') { + index = serializeSymbol(buffer, key, value, index); + } else if(value['_bsontype'] == 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions); + } else if(value['_bsontype'] == 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } else if(value['_bsontype'] == 'Int32') { + index = serializeInt32(buffer, key, value, index); + } else if(value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + } + } else { + // Did we provide a custom serialization method + if(object.toBSON) { + if(typeof object.toBSON != 'function') throw new Error("toBSON is not a function"); + object = object.toBSON(); + if(object != null && typeof object != 'object') throw new Error("toBSON function did not return an object"); + } + + // Iterate over all the keys + for(var key in object) { + var value = object[key]; + // Is there an override value + if(value && value.toBSON) { + if(typeof value.toBSON != 'function') throw new Error("toBSON is not a function"); + value = value.toBSON(); + } + + // Check the type of the value + var type = typeof value; + + // Check the key and throw error if it's illegal + if(key != '$db' && key != '$ref' && key != '$id') { + if (key.match(regexp) != null) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw Error("key " + key + " must not contain null bytes"); + } + + if (checkKeys) { + if('$' == key[0]) { + throw Error("key " + key + " must not start with '$'"); + } else if (!!~key.indexOf('.')) { + throw Error("key " + key + " must not contain '.'"); + } + } + } + + if(type == 'string') { + index = serializeString(buffer, key, value, index); + } else if(type == 'number') { + index = serializeNumber(buffer, key, value, index); + } else if(type == 'boolean') { + index = serializeBoolean(buffer, key, value, index); + } else if(value instanceof Date || isDate(value)) { + index = serializeDate(buffer, key, value, index); + } else if(value === undefined && ignoreUndefined == true) { + } else if(value === null || value === undefined) { + index = serializeNull(buffer, key, value, index); + } else if(value['_bsontype'] == 'ObjectID') { + index = serializeObjectId(buffer, key, value, index); + } else if(Buffer.isBuffer(value)) { + index = serializeBuffer(buffer, key, value, index); + } else if(value instanceof RegExp || isRegExp(value)) { + index = serializeRegExp(buffer, key, value, index); + } else if(type == 'object' && value['_bsontype'] == null) { + index = serializeObject(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined, false, path); + } else if(type == 'object' && value['_bsontype'] == 'Decimal128') { + index = serializeDecimal128(buffer, key, value, index); + } else if(value['_bsontype'] == 'Long' || value['_bsontype'] == 'Timestamp') { + index = serializeLong(buffer, key, value, index); + } else if(value['_bsontype'] == 'Double') { + index = serializeDouble(buffer, key, value, index); + } else if(value['_bsontype'] == 'Code') { + index = serializeCode(buffer, key, value, index, checkKeys, depth, serializeFunctions, ignoreUndefined); + } else if(typeof value == 'function' && serializeFunctions) { + index = serializeFunction(buffer, key, value, index, checkKeys, depth, serializeFunctions); + } else if(value['_bsontype'] == 'Binary') { + index = serializeBinary(buffer, key, value, index); + } else if(value['_bsontype'] == 'Symbol') { + index = serializeSymbol(buffer, key, value, index); + } else if(value['_bsontype'] == 'DBRef') { + index = serializeDBRef(buffer, key, value, index, depth, serializeFunctions); + } else if(value['_bsontype'] == 'BSONRegExp') { + index = serializeBSONRegExp(buffer, key, value, index); + } else if(value['_bsontype'] == 'Int32') { + index = serializeInt32(buffer, key, value, index); + } else if(value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { + index = serializeMinMax(buffer, key, value, index); + } + } + } + + // Remove the path + path.pop(); + + // Final padding byte for object + buffer[index++] = 0x00; + + // Final size + var size = index - startingIndex; + // Write the size of the object + buffer[startingIndex++] = size & 0xff; + buffer[startingIndex++] = (size >> 8) & 0xff; + buffer[startingIndex++] = (size >> 16) & 0xff; + buffer[startingIndex++] = (size >> 24) & 0xff; + return index; +} + +var BSON = {}; + +/** + * Contains the function cache if we have that enable to allow for avoiding the eval step on each deserialization, comparison is by md5 + * + * @ignore + * @api private + */ +var functionCache = BSON.functionCache = {}; + +/** + * Number BSON Type + * + * @classconstant BSON_DATA_NUMBER + **/ +BSON.BSON_DATA_NUMBER = 1; +/** + * String BSON Type + * + * @classconstant BSON_DATA_STRING + **/ +BSON.BSON_DATA_STRING = 2; +/** + * Object BSON Type + * + * @classconstant BSON_DATA_OBJECT + **/ +BSON.BSON_DATA_OBJECT = 3; +/** + * Array BSON Type + * + * @classconstant BSON_DATA_ARRAY + **/ +BSON.BSON_DATA_ARRAY = 4; +/** + * Binary BSON Type + * + * @classconstant BSON_DATA_BINARY + **/ +BSON.BSON_DATA_BINARY = 5; +/** + * ObjectID BSON Type, deprecated + * + * @classconstant BSON_DATA_UNDEFINED + **/ +BSON.BSON_DATA_UNDEFINED = 6; +/** + * ObjectID BSON Type + * + * @classconstant BSON_DATA_OID + **/ +BSON.BSON_DATA_OID = 7; +/** + * Boolean BSON Type + * + * @classconstant BSON_DATA_BOOLEAN + **/ +BSON.BSON_DATA_BOOLEAN = 8; +/** + * Date BSON Type + * + * @classconstant BSON_DATA_DATE + **/ +BSON.BSON_DATA_DATE = 9; +/** + * null BSON Type + * + * @classconstant BSON_DATA_NULL + **/ +BSON.BSON_DATA_NULL = 10; +/** + * RegExp BSON Type + * + * @classconstant BSON_DATA_REGEXP + **/ +BSON.BSON_DATA_REGEXP = 11; +/** + * Code BSON Type + * + * @classconstant BSON_DATA_CODE + **/ +BSON.BSON_DATA_CODE = 13; +/** + * Symbol BSON Type + * + * @classconstant BSON_DATA_SYMBOL + **/ +BSON.BSON_DATA_SYMBOL = 14; +/** + * Code with Scope BSON Type + * + * @classconstant BSON_DATA_CODE_W_SCOPE + **/ +BSON.BSON_DATA_CODE_W_SCOPE = 15; +/** + * 32 bit Integer BSON Type + * + * @classconstant BSON_DATA_INT + **/ +BSON.BSON_DATA_INT = 16; +/** + * Timestamp BSON Type + * + * @classconstant BSON_DATA_TIMESTAMP + **/ +BSON.BSON_DATA_TIMESTAMP = 17; +/** + * Long BSON Type + * + * @classconstant BSON_DATA_LONG + **/ +BSON.BSON_DATA_LONG = 18; +/** + * Long BSON Type + * + * @classconstant BSON_DATA_DECIMAL128 + **/ +BSON.BSON_DATA_DECIMAL128 = 19; +/** + * MinKey BSON Type + * + * @classconstant BSON_DATA_MIN_KEY + **/ +BSON.BSON_DATA_MIN_KEY = 0xff; +/** + * MaxKey BSON Type + * + * @classconstant BSON_DATA_MAX_KEY + **/ +BSON.BSON_DATA_MAX_KEY = 0x7f; +/** + * Binary Default Type + * + * @classconstant BSON_BINARY_SUBTYPE_DEFAULT + **/ +BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0; +/** + * Binary Function Type + * + * @classconstant BSON_BINARY_SUBTYPE_FUNCTION + **/ +BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1; +/** + * Binary Byte Array Type + * + * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY + **/ +BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; +/** + * Binary UUID Type + * + * @classconstant BSON_BINARY_SUBTYPE_UUID + **/ +BSON.BSON_BINARY_SUBTYPE_UUID = 3; +/** + * Binary MD5 Type + * + * @classconstant BSON_BINARY_SUBTYPE_MD5 + **/ +BSON.BSON_BINARY_SUBTYPE_MD5 = 4; +/** + * Binary User Defined Type + * + * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED + **/ +BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; + +// BSON MAX VALUES +BSON.BSON_INT32_MAX = 0x7FFFFFFF; +BSON.BSON_INT32_MIN = -0x80000000; + +BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1; +BSON.BSON_INT64_MIN = -Math.pow(2, 63); + +// JS MAX PRECISE VALUES +BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double. +BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double. + +// Internal long versions +var JS_INT_MAX_LONG = Long.fromNumber(0x20000000000000); // Any integer up to 2^53 can be precisely represented by a double. +var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down to -2^53 can be precisely represented by a double. + +module.exports = serializeInto; diff --git a/node_modules/bson/lib/bson/regexp.js b/node_modules/bson/lib/bson/regexp.js new file mode 100644 index 0000000..9dd0066 --- /dev/null +++ b/node_modules/bson/lib/bson/regexp.js @@ -0,0 +1,30 @@ +/** + * A class representation of the BSON RegExp type. + * + * @class + * @return {BSONRegExp} A MinKey instance + */ +function BSONRegExp(pattern, options) { + if(!(this instanceof BSONRegExp)) return new BSONRegExp(); + + // Execute + this._bsontype = 'BSONRegExp'; + this.pattern = pattern || ''; + this.options = options || ''; + + // Validate options + for(var i = 0; i < this.options.length; i++) { + if(!(this.options[i] == 'i' + || this.options[i] == 'm' + || this.options[i] == 'x' + || this.options[i] == 'l' + || this.options[i] == 's' + || this.options[i] == 'u' + )) { + throw new Error('the regular expression options [' + this.options[i] + "] is not supported"); + } + } +} + +module.exports = BSONRegExp; +module.exports.BSONRegExp = BSONRegExp; diff --git a/node_modules/bson/lib/bson/symbol.js b/node_modules/bson/lib/bson/symbol.js new file mode 100644 index 0000000..7681a4d --- /dev/null +++ b/node_modules/bson/lib/bson/symbol.js @@ -0,0 +1,47 @@ +/** + * A class representation of the BSON Symbol type. + * + * @class + * @deprecated + * @param {string} value the string representing the symbol. + * @return {Symbol} + */ +function Symbol(value) { + if(!(this instanceof Symbol)) return new Symbol(value); + this._bsontype = 'Symbol'; + this.value = value; +} + +/** + * Access the wrapped string value. + * + * @method + * @return {String} returns the wrapped string. + */ +Symbol.prototype.valueOf = function() { + return this.value; +}; + +/** + * @ignore + */ +Symbol.prototype.toString = function() { + return this.value; +} + +/** + * @ignore + */ +Symbol.prototype.inspect = function() { + return this.value; +} + +/** + * @ignore + */ +Symbol.prototype.toJSON = function() { + return this.value; +} + +module.exports = Symbol; +module.exports.Symbol = Symbol; \ No newline at end of file diff --git a/node_modules/bson/lib/bson/timestamp.js b/node_modules/bson/lib/bson/timestamp.js new file mode 100644 index 0000000..7718caf --- /dev/null +++ b/node_modules/bson/lib/bson/timestamp.js @@ -0,0 +1,856 @@ +// 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. +// +// Copyright 2009 Google Inc. All Rights Reserved + +/** + * This type is for INTERNAL use in MongoDB only and should not be used in applications. + * The appropriate corresponding type is the JavaScript Date type. + * + * Defines a Timestamp class for representing a 64-bit two's-complement + * integer value, which faithfully simulates the behavior of a Java "Timestamp". This + * implementation is derived from TimestampLib in GWT. + * + * Constructs a 64-bit two's-complement integer, given its low and high 32-bit + * values as *signed* integers. See the from* functions below for more + * convenient ways of constructing Timestamps. + * + * The internal representation of a Timestamp is the two given signed, 32-bit values. + * We use 32-bit pieces because these are the size of integers on which + * Javascript performs bit-operations. For operations like addition and + * multiplication, we split each number into 16-bit pieces, which can easily be + * multiplied within Javascript's floating-point representation without overflow + * or change in sign. + * + * In the algorithms below, we frequently reduce the negative case to the + * positive case by negating the input(s) and then post-processing the result. + * Note that we must ALWAYS check specially whether those values are MIN_VALUE + * (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as + * a positive number, it overflows back into a negative). Not handling this + * case would often result in infinite recursion. + * + * @class + * @param {number} low the low (signed) 32 bits of the Timestamp. + * @param {number} high the high (signed) 32 bits of the Timestamp. + */ +function Timestamp(low, high) { + if(!(this instanceof Timestamp)) return new Timestamp(low, high); + this._bsontype = 'Timestamp'; + /** + * @type {number} + * @ignore + */ + this.low_ = low | 0; // force into 32 signed bits. + + /** + * @type {number} + * @ignore + */ + this.high_ = high | 0; // force into 32 signed bits. +}; + +/** + * Return the int value. + * + * @return {number} the value, assuming it is a 32-bit integer. + */ +Timestamp.prototype.toInt = function() { + return this.low_; +}; + +/** + * Return the Number value. + * + * @method + * @return {number} the closest floating-point representation to this value. + */ +Timestamp.prototype.toNumber = function() { + return this.high_ * Timestamp.TWO_PWR_32_DBL_ + + this.getLowBitsUnsigned(); +}; + +/** + * Return the JSON value. + * + * @method + * @return {string} the JSON representation. + */ +Timestamp.prototype.toJSON = function() { + return this.toString(); +} + +/** + * Return the String value. + * + * @method + * @param {number} [opt_radix] the radix in which the text should be written. + * @return {string} the textual representation of this value. + */ +Timestamp.prototype.toString = function(opt_radix) { + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (this.isZero()) { + return '0'; + } + + if (this.isNegative()) { + if (this.equals(Timestamp.MIN_VALUE)) { + // We need to change the Timestamp value before it can be negated, so we remove + // the bottom-most digit in this base and then recurse to do the rest. + var radixTimestamp = Timestamp.fromNumber(radix); + var div = this.div(radixTimestamp); + var rem = div.multiply(radixTimestamp).subtract(this); + return div.toString(radix) + rem.toInt().toString(radix); + } else { + return '-' + this.negate().toString(radix); + } + } + + // Do several (6) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = Timestamp.fromNumber(Math.pow(radix, 6)); + + var rem = this; + var result = ''; + while (true) { + var remDiv = rem.div(radixToPower); + var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt(); + var digits = intval.toString(radix); + + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } else { + while (digits.length < 6) { + digits = '0' + digits; + } + result = '' + digits + result; + } + } +}; + +/** + * Return the high 32-bits value. + * + * @method + * @return {number} the high 32-bits as a signed value. + */ +Timestamp.prototype.getHighBits = function() { + return this.high_; +}; + +/** + * Return the low 32-bits value. + * + * @method + * @return {number} the low 32-bits as a signed value. + */ +Timestamp.prototype.getLowBits = function() { + return this.low_; +}; + +/** + * Return the low unsigned 32-bits value. + * + * @method + * @return {number} the low 32-bits as an unsigned value. + */ +Timestamp.prototype.getLowBitsUnsigned = function() { + return (this.low_ >= 0) ? + this.low_ : Timestamp.TWO_PWR_32_DBL_ + this.low_; +}; + +/** + * Returns the number of bits needed to represent the absolute value of this Timestamp. + * + * @method + * @return {number} Returns the number of bits needed to represent the absolute value of this Timestamp. + */ +Timestamp.prototype.getNumBitsAbs = function() { + if (this.isNegative()) { + if (this.equals(Timestamp.MIN_VALUE)) { + return 64; + } else { + return this.negate().getNumBitsAbs(); + } + } else { + var val = this.high_ != 0 ? this.high_ : this.low_; + for (var bit = 31; bit > 0; bit--) { + if ((val & (1 << bit)) != 0) { + break; + } + } + return this.high_ != 0 ? bit + 33 : bit + 1; + } +}; + +/** + * Return whether this value is zero. + * + * @method + * @return {boolean} whether this value is zero. + */ +Timestamp.prototype.isZero = function() { + return this.high_ == 0 && this.low_ == 0; +}; + +/** + * Return whether this value is negative. + * + * @method + * @return {boolean} whether this value is negative. + */ +Timestamp.prototype.isNegative = function() { + return this.high_ < 0; +}; + +/** + * Return whether this value is odd. + * + * @method + * @return {boolean} whether this value is odd. + */ +Timestamp.prototype.isOdd = function() { + return (this.low_ & 1) == 1; +}; + +/** + * Return whether this Timestamp equals the other + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp equals the other + */ +Timestamp.prototype.equals = function(other) { + return (this.high_ == other.high_) && (this.low_ == other.low_); +}; + +/** + * Return whether this Timestamp does not equal the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp does not equal the other. + */ +Timestamp.prototype.notEquals = function(other) { + return (this.high_ != other.high_) || (this.low_ != other.low_); +}; + +/** + * Return whether this Timestamp is less than the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp is less than the other. + */ +Timestamp.prototype.lessThan = function(other) { + return this.compare(other) < 0; +}; + +/** + * Return whether this Timestamp is less than or equal to the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp is less than or equal to the other. + */ +Timestamp.prototype.lessThanOrEqual = function(other) { + return this.compare(other) <= 0; +}; + +/** + * Return whether this Timestamp is greater than the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp is greater than the other. + */ +Timestamp.prototype.greaterThan = function(other) { + return this.compare(other) > 0; +}; + +/** + * Return whether this Timestamp is greater than or equal to the other. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} whether this Timestamp is greater than or equal to the other. + */ +Timestamp.prototype.greaterThanOrEqual = function(other) { + return this.compare(other) >= 0; +}; + +/** + * Compares this Timestamp with the given one. + * + * @method + * @param {Timestamp} other Timestamp to compare against. + * @return {boolean} 0 if they are the same, 1 if the this is greater, and -1 if the given one is greater. + */ +Timestamp.prototype.compare = function(other) { + if (this.equals(other)) { + return 0; + } + + var thisNeg = this.isNegative(); + var otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) { + return -1; + } + if (!thisNeg && otherNeg) { + return 1; + } + + // at this point, the signs are the same, so subtraction will not overflow + if (this.subtract(other).isNegative()) { + return -1; + } else { + return 1; + } +}; + +/** + * The negation of this value. + * + * @method + * @return {Timestamp} the negation of this value. + */ +Timestamp.prototype.negate = function() { + if (this.equals(Timestamp.MIN_VALUE)) { + return Timestamp.MIN_VALUE; + } else { + return this.not().add(Timestamp.ONE); + } +}; + +/** + * Returns the sum of this and the given Timestamp. + * + * @method + * @param {Timestamp} other Timestamp to add to this one. + * @return {Timestamp} the sum of this and the given Timestamp. + */ +Timestamp.prototype.add = function(other) { + // Divide each number into 4 chunks of 16 bits, and then sum the chunks. + + var a48 = this.high_ >>> 16; + var a32 = this.high_ & 0xFFFF; + var a16 = this.low_ >>> 16; + var a00 = this.low_ & 0xFFFF; + + var b48 = other.high_ >>> 16; + var b32 = other.high_ & 0xFFFF; + var b16 = other.low_ >>> 16; + var b00 = other.low_ & 0xFFFF; + + var c48 = 0, c32 = 0, c16 = 0, c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 0xFFFF; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c48 += a48 + b48; + c48 &= 0xFFFF; + return Timestamp.fromBits((c16 << 16) | c00, (c48 << 16) | c32); +}; + +/** + * Returns the difference of this and the given Timestamp. + * + * @method + * @param {Timestamp} other Timestamp to subtract from this. + * @return {Timestamp} the difference of this and the given Timestamp. + */ +Timestamp.prototype.subtract = function(other) { + return this.add(other.negate()); +}; + +/** + * Returns the product of this and the given Timestamp. + * + * @method + * @param {Timestamp} other Timestamp to multiply with this. + * @return {Timestamp} the product of this and the other. + */ +Timestamp.prototype.multiply = function(other) { + if (this.isZero()) { + return Timestamp.ZERO; + } else if (other.isZero()) { + return Timestamp.ZERO; + } + + if (this.equals(Timestamp.MIN_VALUE)) { + return other.isOdd() ? Timestamp.MIN_VALUE : Timestamp.ZERO; + } else if (other.equals(Timestamp.MIN_VALUE)) { + return this.isOdd() ? Timestamp.MIN_VALUE : Timestamp.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().multiply(other.negate()); + } else { + return this.negate().multiply(other).negate(); + } + } else if (other.isNegative()) { + return this.multiply(other.negate()).negate(); + } + + // If both Timestamps are small, use float multiplication + if (this.lessThan(Timestamp.TWO_PWR_24_) && + other.lessThan(Timestamp.TWO_PWR_24_)) { + return Timestamp.fromNumber(this.toNumber() * other.toNumber()); + } + + // Divide each Timestamp into 4 chunks of 16 bits, and then add up 4x4 products. + // We can skip products that would overflow. + + var a48 = this.high_ >>> 16; + var a32 = this.high_ & 0xFFFF; + var a16 = this.low_ >>> 16; + var a00 = this.low_ & 0xFFFF; + + var b48 = other.high_ >>> 16; + var b32 = other.high_ & 0xFFFF; + var b16 = other.low_ >>> 16; + var b00 = other.low_ & 0xFFFF; + + var c48 = 0, c32 = 0, c16 = 0, c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 0xFFFF; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 0xFFFF; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 0xFFFF; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 0xFFFF; + return Timestamp.fromBits((c16 << 16) | c00, (c48 << 16) | c32); +}; + +/** + * Returns this Timestamp divided by the given one. + * + * @method + * @param {Timestamp} other Timestamp by which to divide. + * @return {Timestamp} this Timestamp divided by the given one. + */ +Timestamp.prototype.div = function(other) { + if (other.isZero()) { + throw Error('division by zero'); + } else if (this.isZero()) { + return Timestamp.ZERO; + } + + if (this.equals(Timestamp.MIN_VALUE)) { + if (other.equals(Timestamp.ONE) || + other.equals(Timestamp.NEG_ONE)) { + return Timestamp.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE + } else if (other.equals(Timestamp.MIN_VALUE)) { + return Timestamp.ONE; + } else { + // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|. + var halfThis = this.shiftRight(1); + var approx = halfThis.div(other).shiftLeft(1); + if (approx.equals(Timestamp.ZERO)) { + return other.isNegative() ? Timestamp.ONE : Timestamp.NEG_ONE; + } else { + var rem = this.subtract(other.multiply(approx)); + var result = approx.add(rem.div(other)); + return result; + } + } + } else if (other.equals(Timestamp.MIN_VALUE)) { + return Timestamp.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().div(other.negate()); + } else { + return this.negate().div(other).negate(); + } + } else if (other.isNegative()) { + return this.div(other.negate()).negate(); + } + + // Repeat the following until the remainder is less than other: find a + // floating-point that approximates remainder / other *from below*, add this + // into the result, and subtract it from the remainder. It is critical that + // the approximate value is less than or equal to the real value so that the + // remainder never becomes negative. + var res = Timestamp.ZERO; + var rem = this; + while (rem.greaterThanOrEqual(other)) { + // Approximate the result of division. This may be a little greater or + // smaller than the actual value. + var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber())); + + // We will tweak the approximate result by changing it in the 48-th digit or + // the smallest non-fractional digit, whichever is larger. + var log2 = Math.ceil(Math.log(approx) / Math.LN2); + var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48); + + // Decrease the approximation until it is smaller than the remainder. Note + // that if it is too large, the product overflows and is negative. + var approxRes = Timestamp.fromNumber(approx); + var approxRem = approxRes.multiply(other); + while (approxRem.isNegative() || approxRem.greaterThan(rem)) { + approx -= delta; + approxRes = Timestamp.fromNumber(approx); + approxRem = approxRes.multiply(other); + } + + // We know the answer can't be zero... and actually, zero would cause + // infinite recursion since we would make no progress. + if (approxRes.isZero()) { + approxRes = Timestamp.ONE; + } + + res = res.add(approxRes); + rem = rem.subtract(approxRem); + } + return res; +}; + +/** + * Returns this Timestamp modulo the given one. + * + * @method + * @param {Timestamp} other Timestamp by which to mod. + * @return {Timestamp} this Timestamp modulo the given one. + */ +Timestamp.prototype.modulo = function(other) { + return this.subtract(this.div(other).multiply(other)); +}; + +/** + * The bitwise-NOT of this value. + * + * @method + * @return {Timestamp} the bitwise-NOT of this value. + */ +Timestamp.prototype.not = function() { + return Timestamp.fromBits(~this.low_, ~this.high_); +}; + +/** + * Returns the bitwise-AND of this Timestamp and the given one. + * + * @method + * @param {Timestamp} other the Timestamp with which to AND. + * @return {Timestamp} the bitwise-AND of this and the other. + */ +Timestamp.prototype.and = function(other) { + return Timestamp.fromBits(this.low_ & other.low_, this.high_ & other.high_); +}; + +/** + * Returns the bitwise-OR of this Timestamp and the given one. + * + * @method + * @param {Timestamp} other the Timestamp with which to OR. + * @return {Timestamp} the bitwise-OR of this and the other. + */ +Timestamp.prototype.or = function(other) { + return Timestamp.fromBits(this.low_ | other.low_, this.high_ | other.high_); +}; + +/** + * Returns the bitwise-XOR of this Timestamp and the given one. + * + * @method + * @param {Timestamp} other the Timestamp with which to XOR. + * @return {Timestamp} the bitwise-XOR of this and the other. + */ +Timestamp.prototype.xor = function(other) { + return Timestamp.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_); +}; + +/** + * Returns this Timestamp with bits shifted to the left by the given amount. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Timestamp} this shifted to the left by the given amount. + */ +Timestamp.prototype.shiftLeft = function(numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var low = this.low_; + if (numBits < 32) { + var high = this.high_; + return Timestamp.fromBits( + low << numBits, + (high << numBits) | (low >>> (32 - numBits))); + } else { + return Timestamp.fromBits(0, low << (numBits - 32)); + } + } +}; + +/** + * Returns this Timestamp with bits shifted to the right by the given amount. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Timestamp} this shifted to the right by the given amount. + */ +Timestamp.prototype.shiftRight = function(numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var high = this.high_; + if (numBits < 32) { + var low = this.low_; + return Timestamp.fromBits( + (low >>> numBits) | (high << (32 - numBits)), + high >> numBits); + } else { + return Timestamp.fromBits( + high >> (numBits - 32), + high >= 0 ? 0 : -1); + } + } +}; + +/** + * Returns this Timestamp with bits shifted to the right by the given amount, with the new top bits matching the current sign bit. + * + * @method + * @param {number} numBits the number of bits by which to shift. + * @return {Timestamp} this shifted to the right by the given amount, with zeros placed into the new leading bits. + */ +Timestamp.prototype.shiftRightUnsigned = function(numBits) { + numBits &= 63; + if (numBits == 0) { + return this; + } else { + var high = this.high_; + if (numBits < 32) { + var low = this.low_; + return Timestamp.fromBits( + (low >>> numBits) | (high << (32 - numBits)), + high >>> numBits); + } else if (numBits == 32) { + return Timestamp.fromBits(high, 0); + } else { + return Timestamp.fromBits(high >>> (numBits - 32), 0); + } + } +}; + +/** + * Returns a Timestamp representing the given (32-bit) integer value. + * + * @method + * @param {number} value the 32-bit integer in question. + * @return {Timestamp} the corresponding Timestamp value. + */ +Timestamp.fromInt = function(value) { + if (-128 <= value && value < 128) { + var cachedObj = Timestamp.INT_CACHE_[value]; + if (cachedObj) { + return cachedObj; + } + } + + var obj = new Timestamp(value | 0, value < 0 ? -1 : 0); + if (-128 <= value && value < 128) { + Timestamp.INT_CACHE_[value] = obj; + } + return obj; +}; + +/** + * Returns a Timestamp representing the given value, provided that it is a finite number. Otherwise, zero is returned. + * + * @method + * @param {number} value the number in question. + * @return {Timestamp} the corresponding Timestamp value. + */ +Timestamp.fromNumber = function(value) { + if (isNaN(value) || !isFinite(value)) { + return Timestamp.ZERO; + } else if (value <= -Timestamp.TWO_PWR_63_DBL_) { + return Timestamp.MIN_VALUE; + } else if (value + 1 >= Timestamp.TWO_PWR_63_DBL_) { + return Timestamp.MAX_VALUE; + } else if (value < 0) { + return Timestamp.fromNumber(-value).negate(); + } else { + return new Timestamp( + (value % Timestamp.TWO_PWR_32_DBL_) | 0, + (value / Timestamp.TWO_PWR_32_DBL_) | 0); + } +}; + +/** + * Returns a Timestamp representing the 64-bit integer that comes by concatenating the given high and low bits. Each is assumed to use 32 bits. + * + * @method + * @param {number} lowBits the low 32-bits. + * @param {number} highBits the high 32-bits. + * @return {Timestamp} the corresponding Timestamp value. + */ +Timestamp.fromBits = function(lowBits, highBits) { + return new Timestamp(lowBits, highBits); +}; + +/** + * Returns a Timestamp representation of the given string, written using the given radix. + * + * @method + * @param {string} str the textual representation of the Timestamp. + * @param {number} opt_radix the radix in which the text is written. + * @return {Timestamp} the corresponding Timestamp value. + */ +Timestamp.fromString = function(str, opt_radix) { + if (str.length == 0) { + throw Error('number format error: empty string'); + } + + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (str.charAt(0) == '-') { + return Timestamp.fromString(str.substring(1), radix).negate(); + } else if (str.indexOf('-') >= 0) { + throw Error('number format error: interior "-" character: ' + str); + } + + // Do several (8) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = Timestamp.fromNumber(Math.pow(radix, 8)); + + var result = Timestamp.ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i); + var value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = Timestamp.fromNumber(Math.pow(radix, size)); + result = result.multiply(power).add(Timestamp.fromNumber(value)); + } else { + result = result.multiply(radixToPower); + result = result.add(Timestamp.fromNumber(value)); + } + } + return result; +}; + +// NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the +// from* methods on which they depend. + + +/** + * A cache of the Timestamp representations of small integer values. + * @type {Object} + * @ignore + */ +Timestamp.INT_CACHE_ = {}; + +// NOTE: the compiler should inline these constant values below and then remove +// these variables, so there should be no runtime penalty for these. + +/** + * Number used repeated below in calculations. This must appear before the + * first call to any from* function below. + * @type {number} + * @ignore + */ +Timestamp.TWO_PWR_16_DBL_ = 1 << 16; + +/** + * @type {number} + * @ignore + */ +Timestamp.TWO_PWR_24_DBL_ = 1 << 24; + +/** + * @type {number} + * @ignore + */ +Timestamp.TWO_PWR_32_DBL_ = Timestamp.TWO_PWR_16_DBL_ * Timestamp.TWO_PWR_16_DBL_; + +/** + * @type {number} + * @ignore + */ +Timestamp.TWO_PWR_31_DBL_ = Timestamp.TWO_PWR_32_DBL_ / 2; + +/** + * @type {number} + * @ignore + */ +Timestamp.TWO_PWR_48_DBL_ = Timestamp.TWO_PWR_32_DBL_ * Timestamp.TWO_PWR_16_DBL_; + +/** + * @type {number} + * @ignore + */ +Timestamp.TWO_PWR_64_DBL_ = Timestamp.TWO_PWR_32_DBL_ * Timestamp.TWO_PWR_32_DBL_; + +/** + * @type {number} + * @ignore + */ +Timestamp.TWO_PWR_63_DBL_ = Timestamp.TWO_PWR_64_DBL_ / 2; + +/** @type {Timestamp} */ +Timestamp.ZERO = Timestamp.fromInt(0); + +/** @type {Timestamp} */ +Timestamp.ONE = Timestamp.fromInt(1); + +/** @type {Timestamp} */ +Timestamp.NEG_ONE = Timestamp.fromInt(-1); + +/** @type {Timestamp} */ +Timestamp.MAX_VALUE = + Timestamp.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0); + +/** @type {Timestamp} */ +Timestamp.MIN_VALUE = Timestamp.fromBits(0, 0x80000000 | 0); + +/** + * @type {Timestamp} + * @ignore + */ +Timestamp.TWO_PWR_24_ = Timestamp.fromInt(1 << 24); + +/** + * Expose. + */ +module.exports = Timestamp; +module.exports.Timestamp = Timestamp; \ No newline at end of file diff --git a/node_modules/bson/package.json b/node_modules/bson/package.json new file mode 100644 index 0000000..130716f --- /dev/null +++ b/node_modules/bson/package.json @@ -0,0 +1,122 @@ +{ + "_args": [ + [ + { + "raw": "bson@~1.0.4", + "scope": null, + "escapedName": "bson", + "name": "bson", + "rawSpec": "~1.0.4", + "spec": ">=1.0.4 <1.1.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/mongodb-core" + ] + ], + "_from": "bson@>=1.0.4 <1.1.0", + "_id": "bson@1.0.4", + "_inCache": true, + "_location": "/bson", + "_nodeVersion": "4.4.0", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/bson-1.0.4.tgz_1484130635725_0.12069115601480007" + }, + "_npmUser": { + "name": "christkv", + "email": "christkv@gmail.com" + }, + "_npmVersion": "2.14.20", + "_phantomChildren": {}, + "_requested": { + "raw": "bson@~1.0.4", + "scope": null, + "escapedName": "bson", + "name": "bson", + "rawSpec": "~1.0.4", + "spec": ">=1.0.4 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/mongodb-core" + ], + "_resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", + "_shasum": "93c10d39eaa5b58415cbc4052f3e53e562b0b72c", + "_shrinkwrap": null, + "_spec": "bson@~1.0.4", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/mongodb-core", + "author": { + "name": "Christian Amor Kvalheim", + "email": "christkv@gmail.com" + }, + "browser": "lib/bson/bson.js", + "bugs": { + "url": "https://github.com/mongodb/js-bson/issues" + }, + "config": { + "native": false + }, + "contributors": [], + "dependencies": {}, + "description": "A bson parser for node.js and the browser", + "devDependencies": { + "babel-core": "^6.14.0", + "babel-loader": "^6.2.5", + "babel-polyfill": "^6.13.0", + "babel-preset-es2015": "^6.14.0", + "babel-preset-stage-0": "^6.5.0", + "babel-register": "^6.14.0", + "benchmark": "1.0.0", + "colors": "1.1.0", + "nodeunit": "0.9.0", + "webpack": "^1.13.2", + "webpack-polyfills-plugin": "0.0.9" + }, + "directories": { + "lib": "./lib/bson" + }, + "dist": { + "shasum": "93c10d39eaa5b58415cbc4052f3e53e562b0b72c", + "tarball": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz" + }, + "engines": { + "node": ">=0.6.19" + }, + "files": [ + "lib", + "index.js", + "browser_build", + "bower.json" + ], + "gitHead": "8dd35ca73c30a2bcab61615ccc5edd053aeb868b", + "homepage": "https://github.com/mongodb/js-bson#readme", + "keywords": [ + "mongodb", + "bson", + "parser" + ], + "license": "Apache-2.0", + "main": "./index", + "maintainers": [ + { + "name": "octave", + "email": "chinsay@gmail.com" + }, + { + "name": "christkv", + "email": "christkv@gmail.com" + } + ], + "name": "bson", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/mongodb/js-bson.git" + }, + "scripts": { + "build": "webpack --config ./webpack.dist.config.js", + "test": "nodeunit ./test/node" + }, + "version": "1.0.4" +} diff --git a/node_modules/buffer-shims/index.js b/node_modules/buffer-shims/index.js new file mode 100644 index 0000000..1cab4c0 --- /dev/null +++ b/node_modules/buffer-shims/index.js @@ -0,0 +1,108 @@ +'use strict'; + +var buffer = require('buffer'); +var Buffer = buffer.Buffer; +var SlowBuffer = buffer.SlowBuffer; +var MAX_LEN = buffer.kMaxLength || 2147483647; +exports.alloc = function alloc(size, fill, encoding) { + if (typeof Buffer.alloc === 'function') { + return Buffer.alloc(size, fill, encoding); + } + if (typeof encoding === 'number') { + throw new TypeError('encoding must not be number'); + } + if (typeof size !== 'number') { + throw new TypeError('size must be a number'); + } + if (size > MAX_LEN) { + throw new RangeError('size is too large'); + } + var enc = encoding; + var _fill = fill; + if (_fill === undefined) { + enc = undefined; + _fill = 0; + } + var buf = new Buffer(size); + if (typeof _fill === 'string') { + var fillBuf = new Buffer(_fill, enc); + var flen = fillBuf.length; + var i = -1; + while (++i < size) { + buf[i] = fillBuf[i % flen]; + } + } else { + buf.fill(_fill); + } + return buf; +} +exports.allocUnsafe = function allocUnsafe(size) { + if (typeof Buffer.allocUnsafe === 'function') { + return Buffer.allocUnsafe(size); + } + if (typeof size !== 'number') { + throw new TypeError('size must be a number'); + } + if (size > MAX_LEN) { + throw new RangeError('size is too large'); + } + return new Buffer(size); +} +exports.from = function from(value, encodingOrOffset, length) { + if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) { + return Buffer.from(value, encodingOrOffset, length); + } + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number'); + } + if (typeof value === 'string') { + return new Buffer(value, encodingOrOffset); + } + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + var offset = encodingOrOffset; + if (arguments.length === 1) { + return new Buffer(value); + } + if (typeof offset === 'undefined') { + offset = 0; + } + var len = length; + if (typeof len === 'undefined') { + len = value.byteLength - offset; + } + if (offset >= value.byteLength) { + throw new RangeError('\'offset\' is out of bounds'); + } + if (len > value.byteLength - offset) { + throw new RangeError('\'length\' is out of bounds'); + } + return new Buffer(value.slice(offset, offset + len)); + } + if (Buffer.isBuffer(value)) { + var out = new Buffer(value.length); + value.copy(out, 0, 0, value.length); + return out; + } + if (value) { + if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) { + return new Buffer(value); + } + if (value.type === 'Buffer' && Array.isArray(value.data)) { + return new Buffer(value.data); + } + } + + throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.'); +} +exports.allocUnsafeSlow = function allocUnsafeSlow(size) { + if (typeof Buffer.allocUnsafeSlow === 'function') { + return Buffer.allocUnsafeSlow(size); + } + if (typeof size !== 'number') { + throw new TypeError('size must be a number'); + } + if (size >= MAX_LEN) { + throw new RangeError('size is too large'); + } + return new SlowBuffer(size); +} diff --git a/node_modules/buffer-shims/license.md b/node_modules/buffer-shims/license.md new file mode 100644 index 0000000..01cfaef --- /dev/null +++ b/node_modules/buffer-shims/license.md @@ -0,0 +1,19 @@ +# Copyright (c) 2016 Calvin Metcalf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/buffer-shims/package.json b/node_modules/buffer-shims/package.json new file mode 100644 index 0000000..515d7fd --- /dev/null +++ b/node_modules/buffer-shims/package.json @@ -0,0 +1,85 @@ +{ + "_args": [ + [ + { + "raw": "buffer-shims@~1.0.0", + "scope": null, + "escapedName": "buffer-shims", + "name": "buffer-shims", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/readable-stream" + ] + ], + "_from": "buffer-shims@>=1.0.0 <1.1.0", + "_id": "buffer-shims@1.0.0", + "_inCache": true, + "_location": "/buffer-shims", + "_nodeVersion": "5.11.0", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/buffer-shims-1.0.0.tgz_1462560889323_0.8640750856138766" + }, + "_npmUser": { + "name": "cwmma", + "email": "calvin.metcalf@gmail.com" + }, + "_npmVersion": "3.8.6", + "_phantomChildren": {}, + "_requested": { + "raw": "buffer-shims@~1.0.0", + "scope": null, + "escapedName": "buffer-shims", + "name": "buffer-shims", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "_shasum": "9978ce317388c649ad8793028c3477ef044a8b51", + "_shrinkwrap": null, + "_spec": "buffer-shims@~1.0.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/readable-stream", + "bugs": { + "url": "https://github.com/calvinmetcalf/buffer-shims/issues" + }, + "dependencies": {}, + "description": "some shims for node buffers", + "devDependencies": { + "tape": "^4.5.1" + }, + "directories": {}, + "dist": { + "shasum": "9978ce317388c649ad8793028c3477ef044a8b51", + "tarball": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz" + }, + "files": [ + "index.js" + ], + "gitHead": "ea89b3857ab5b8203957922a84e9a48cf4c47e0a", + "homepage": "https://github.com/calvinmetcalf/buffer-shims#readme", + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "cwmma", + "email": "calvin.metcalf@gmail.com" + } + ], + "name": "buffer-shims", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/calvinmetcalf/buffer-shims.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "version": "1.0.0" +} diff --git a/node_modules/buffer-shims/readme.md b/node_modules/buffer-shims/readme.md new file mode 100644 index 0000000..7ea6475 --- /dev/null +++ b/node_modules/buffer-shims/readme.md @@ -0,0 +1,21 @@ +buffer-shims +=== + +functions to make sure the new buffer methods work in older browsers. + +```js +var bufferShim = require('buffer-shims'); +bufferShim.from('foo'); +bufferShim.alloc(9, 'cafeface', 'hex'); +bufferShim.allocUnsafe(15); +bufferShim.allocUnsafeSlow(21); +``` + +should just use the original in newer nodes and on older nodes uses fallbacks. + +Known Issues +=== +- this does not patch the buffer object, only the constructor stuff +- it's actually a polyfill + +![](https://i.imgur.com/zxII3jJ.gif) diff --git a/node_modules/bytes/History.md b/node_modules/bytes/History.md new file mode 100644 index 0000000..56932a4 --- /dev/null +++ b/node_modules/bytes/History.md @@ -0,0 +1,70 @@ +2.4.0 / 2016-06-01 +================== + + * Add option "unitSeparator" + +2.3.0 / 2016-02-15 +================== + + * Drop partial bytes on all parsed units + * Fix non-finite numbers to `.format` to return `null` + * Fix parsing byte string that looks like hex + * perf: hoist regular expressions + +2.2.0 / 2015-11-13 +================== + + * add option "decimalPlaces" + * add option "fixedDecimals" + +2.1.0 / 2015-05-21 +================== + + * add `.format` export + * add `.parse` export + +2.0.2 / 2015-05-20 +================== + + * remove map recreation + * remove unnecessary object construction + +2.0.1 / 2015-05-07 +================== + + * fix browserify require + * remove node.extend dependency + +2.0.0 / 2015-04-12 +================== + + * add option "case" + * add option "thousandsSeparator" + * return "null" on invalid parse input + * support proper round-trip: bytes(bytes(num)) === num + * units no longer case sensitive when parsing + +1.0.0 / 2014-05-05 +================== + + * add negative support. fixes #6 + +0.3.0 / 2014-03-19 +================== + + * added terabyte support + +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/bytes/LICENSE b/node_modules/bytes/LICENSE new file mode 100644 index 0000000..63e95a9 --- /dev/null +++ b/node_modules/bytes/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2012-2014 TJ Holowaychuk +Copyright (c) 2015 Jed Watson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/bytes/Readme.md b/node_modules/bytes/Readme.md new file mode 100644 index 0000000..7465fde --- /dev/null +++ b/node_modules/bytes/Readme.md @@ -0,0 +1,114 @@ +# Bytes utility + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][travis-image]][travis-url] + +Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa. + +## Usage + +```js +var bytes = require('bytes'); +``` + +#### bytes.format(number value, [options]): string|null + +Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is + rounded. + +**Arguments** + +| Name | Type | Description | +|---------|--------|--------------------| +| value | `number` | Value in bytes | +| options | `Object` | Conversion options | + +**Options** + +| Property | Type | Description | +|-------------------|--------|-----------------------------------------------------------------------------------------| +| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. | +| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` | +| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `.`... Default value to `' '`. | +| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. | + +**Returns** + +| Name | Type | Description | +|---------|-------------|-------------------------| +| results | `string`|`null` | Return null upon error. String value otherwise. | + +**Example** + +```js +bytes(1024); +// output: '1kB' + +bytes(1000); +// output: '1000B' + +bytes(1000, {thousandsSeparator: ' '}); +// output: '1 000B' + +bytes(1024 * 1.7, {decimalPlaces: 0}); +// output: '2kB' + +bytes(1024, {unitSeparator: ' '}); +// output: '1 kB' + +``` + +#### bytes.parse(string value): number|null + +Parse the string value into an integer in bytes. If no unit is given, it is assumed the value is in bytes. + +Supported units and abbreviations are as follows and are case-insensitive: + + * "b" for bytes + * "kb" for kilobytes + * "mb" for megabytes + * "gb" for gigabytes + * "tb" for terabytes + +The units are in powers of two, not ten. This means 1kb = 1024b according to this parser. + +**Arguments** + +| Name | Type | Description | +|---------------|--------|--------------------| +| value | `string` | String to parse. | + +**Returns** + +| Name | Type | Description | +|---------|-------------|-------------------------| +| results | `number`|`null` | Return null upon error. Value in bytes otherwise. | + +**Example** + +```js +bytes('1kB'); +// output: 1024 + +bytes('1024'); +// output: 1024 +``` + +## Installation + +```bash +npm install bytes --save +component install visionmedia/bytes.js +``` + +## License + +[![npm](https://img.shields.io/npm/l/express.svg)](https://github.com/visionmedia/bytes.js/blob/master/LICENSE) + +[downloads-image]: https://img.shields.io/npm/dm/bytes.svg +[downloads-url]: https://npmjs.org/package/bytes +[npm-image]: https://img.shields.io/npm/v/bytes.svg +[npm-url]: https://npmjs.org/package/bytes +[travis-image]: https://img.shields.io/travis/visionmedia/bytes.js/master.svg +[travis-url]: https://travis-ci.org/visionmedia/bytes.js diff --git a/node_modules/bytes/index.js b/node_modules/bytes/index.js new file mode 100644 index 0000000..aa24231 --- /dev/null +++ b/node_modules/bytes/index.js @@ -0,0 +1,157 @@ +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = bytes; +module.exports.format = format; +module.exports.parse = parse; + +/** + * Module variables. + * @private + */ + +var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; + +var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; + +var map = { + b: 1, + kb: 1 << 10, + mb: 1 << 20, + gb: 1 << 30, + tb: ((1 << 30) * 1024) +}; + +// TODO: use is-finite module? +var numberIsFinite = Number.isFinite || function (v) { return typeof v === 'number' && isFinite(v); }; + +var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i; + +/** + * Convert the given value in bytes into a string or parse to string to an integer in bytes. + * + * @param {string|number} value + * @param {{ + * case: [string], + * decimalPlaces: [number] + * fixedDecimals: [boolean] + * thousandsSeparator: [string] + * unitSeparator: [string] + * }} [options] bytes options. + * + * @returns {string|number|null} + */ + +function bytes(value, options) { + if (typeof value === 'string') { + return parse(value); + } + + if (typeof value === 'number') { + return format(value, options); + } + + return null; +} + +/** + * Format the given value in bytes into a string. + * + * If the value is negative, it is kept as such. If it is a float, + * it is rounded. + * + * @param {number} value + * @param {object} [options] + * @param {number} [options.decimalPlaces=2] + * @param {number} [options.fixedDecimals=false] + * @param {string} [options.thousandsSeparator=] + * @param {string} [options.unitSeparator=] + * + * @returns {string|null} + * @public + */ + +function format(value, options) { + if (!numberIsFinite(value)) { + return null; + } + + var mag = Math.abs(value); + var thousandsSeparator = (options && options.thousandsSeparator) || ''; + var unitSeparator = (options && options.unitSeparator) || ''; + var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2; + var fixedDecimals = Boolean(options && options.fixedDecimals); + var unit = 'B'; + + if (mag >= map.tb) { + unit = 'TB'; + } else if (mag >= map.gb) { + unit = 'GB'; + } else if (mag >= map.mb) { + unit = 'MB'; + } else if (mag >= map.kb) { + unit = 'kB'; + } + + var val = value / map[unit.toLowerCase()]; + var str = val.toFixed(decimalPlaces); + + if (!fixedDecimals) { + str = str.replace(formatDecimalsRegExp, '$1'); + } + + if (thousandsSeparator) { + str = str.replace(formatThousandsRegExp, thousandsSeparator); + } + + return str + unitSeparator + unit; +} + +/** + * Parse the string value into an integer in bytes. + * + * If no unit is given, it is assumed the value is in bytes. + * + * @param {number|string} val + * + * @returns {number|null} + * @public + */ + +function parse(val) { + if (typeof val === 'number' && !isNaN(val)) { + return val; + } + + if (typeof val !== 'string') { + return null; + } + + // Test if the string passed is valid + var results = parseRegExp.exec(val); + var floatValue; + var unit = 'b'; + + if (!results) { + // Nothing could be extracted from the given string + floatValue = parseInt(val, 10); + unit = 'b' + } else { + // Retrieve the value and the unit + floatValue = parseFloat(results[1]); + unit = results[4].toLowerCase(); + } + + return Math.floor(map[unit] * floatValue); +} diff --git a/node_modules/bytes/package.json b/node_modules/bytes/package.json new file mode 100644 index 0000000..174feff --- /dev/null +++ b/node_modules/bytes/package.json @@ -0,0 +1,120 @@ +{ + "_args": [ + [ + { + "raw": "bytes@2.4.0", + "scope": null, + "escapedName": "bytes", + "name": "bytes", + "rawSpec": "2.4.0", + "spec": "2.4.0", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/body-parser" + ] + ], + "_from": "bytes@2.4.0", + "_id": "bytes@2.4.0", + "_inCache": true, + "_location": "/bytes", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/bytes-2.4.0.tgz_1464812473023_0.6271433881483972" + }, + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "bytes@2.4.0", + "scope": null, + "escapedName": "bytes", + "name": "bytes", + "rawSpec": "2.4.0", + "spec": "2.4.0", + "type": "version" + }, + "_requiredBy": [ + "/body-parser", + "/raw-body" + ], + "_resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "_shasum": "7d97196f9d5baf7f6935e25985549edd2a6c2339", + "_shrinkwrap": null, + "_spec": "bytes@2.4.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/body-parser", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "bugs": { + "url": "https://github.com/visionmedia/bytes.js/issues" + }, + "component": { + "scripts": { + "bytes/index.js": "index.js" + } + }, + "contributors": [ + { + "name": "Jed Watson", + "email": "jed.watson@me.com" + }, + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "dependencies": {}, + "description": "Utility to parse a string bytes to bytes and vice-versa", + "devDependencies": { + "mocha": "1.21.5" + }, + "directories": {}, + "dist": { + "shasum": "7d97196f9d5baf7f6935e25985549edd2a6c2339", + "tarball": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz" + }, + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js" + ], + "gitHead": "2a598442bdfa796df8d01a96cc54495cda550e70", + "homepage": "https://github.com/visionmedia/bytes.js", + "keywords": [ + "byte", + "bytes", + "utility", + "parse", + "parser", + "convert", + "converter" + ], + "license": "MIT", + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + } + ], + "name": "bytes", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/visionmedia/bytes.js.git" + }, + "scripts": { + "test": "mocha --check-leaks --reporter spec" + }, + "version": "2.4.0" +} diff --git a/node_modules/callsite/.npmignore b/node_modules/callsite/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/node_modules/callsite/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/node_modules/callsite/History.md b/node_modules/callsite/History.md new file mode 100644 index 0000000..4994198 --- /dev/null +++ b/node_modules/callsite/History.md @@ -0,0 +1,10 @@ + +1.0.0 / 2013-01-24 +================== + + * remove lame magical getters + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/callsite/Makefile b/node_modules/callsite/Makefile new file mode 100644 index 0000000..634e372 --- /dev/null +++ b/node_modules/callsite/Makefile @@ -0,0 +1,6 @@ + +test: + @./node_modules/.bin/mocha \ + --require should + +.PHONY: test \ No newline at end of file diff --git a/node_modules/callsite/Readme.md b/node_modules/callsite/Readme.md new file mode 100644 index 0000000..0dbd16a --- /dev/null +++ b/node_modules/callsite/Readme.md @@ -0,0 +1,44 @@ +# callstack + + Access to v8's "raw" `CallSite`s. + +## Installation + + $ npm install callsite + +## Example + +```js +var stack = require('callsite'); + +foo(); + +function foo() { + bar(); +} + +function bar() { + baz(); +} + +function baz() { + console.log(); + stack().forEach(function(site){ + console.log(' \033[36m%s\033[90m in %s:%d\033[0m' + , site.getFunctionName() || 'anonymous' + , site.getFileName() + , site.getLineNumber()); + }); + console.log(); +} +``` + +## Why? + + Because you can do weird, stupid, clever, wacky things such as: + + - [better-assert](https://github.com/visionmedia/better-assert) + +## License + + MIT diff --git a/node_modules/callsite/index.js b/node_modules/callsite/index.js new file mode 100644 index 0000000..d3ee6f8 --- /dev/null +++ b/node_modules/callsite/index.js @@ -0,0 +1,10 @@ + +module.exports = function(){ + var orig = Error.prepareStackTrace; + Error.prepareStackTrace = function(_, stack){ return stack; }; + var err = new Error; + Error.captureStackTrace(err, arguments.callee); + var stack = err.stack; + Error.prepareStackTrace = orig; + return stack; +}; diff --git a/node_modules/callsite/package.json b/node_modules/callsite/package.json new file mode 100644 index 0000000..ea6bcbc --- /dev/null +++ b/node_modules/callsite/package.json @@ -0,0 +1,77 @@ +{ + "_args": [ + [ + { + "raw": "callsite@1.0.0", + "scope": null, + "escapedName": "callsite", + "name": "callsite", + "rawSpec": "1.0.0", + "spec": "1.0.0", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/better-assert" + ] + ], + "_from": "callsite@1.0.0", + "_id": "callsite@1.0.0", + "_inCache": true, + "_location": "/callsite", + "_npmUser": { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + "_npmVersion": "1.2.2", + "_phantomChildren": {}, + "_requested": { + "raw": "callsite@1.0.0", + "scope": null, + "escapedName": "callsite", + "name": "callsite", + "rawSpec": "1.0.0", + "spec": "1.0.0", + "type": "version" + }, + "_requiredBy": [ + "/better-assert" + ], + "_resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "_shasum": "280398e5d664bd74038b6f0905153e6e8af1bc20", + "_shrinkwrap": null, + "_spec": "callsite@1.0.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/better-assert", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "dependencies": {}, + "description": "access to v8's CallSites", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "directories": {}, + "dist": { + "shasum": "280398e5d664bd74038b6f0905153e6e8af1bc20", + "tarball": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz" + }, + "engines": { + "node": "*" + }, + "keywords": [ + "stack", + "trace", + "line" + ], + "main": "index", + "maintainers": [ + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + } + ], + "name": "callsite", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "version": "1.0.0" +} diff --git a/node_modules/component-bind/.npmignore b/node_modules/component-bind/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/node_modules/component-bind/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/node_modules/component-bind/History.md b/node_modules/component-bind/History.md new file mode 100644 index 0000000..2795fdb --- /dev/null +++ b/node_modules/component-bind/History.md @@ -0,0 +1,13 @@ + +1.0.0 / 2014-05-27 +================== + + * index: use slice ref (#7, @viatropos) + * package: rename package to "component-bind" + * package: add "repository" field (#6, @repoify) + * package: add "component" section + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/component-bind/Makefile b/node_modules/component-bind/Makefile new file mode 100644 index 0000000..4e9c8d3 --- /dev/null +++ b/node_modules/component-bind/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter spec + +.PHONY: test \ No newline at end of file diff --git a/node_modules/component-bind/Readme.md b/node_modules/component-bind/Readme.md new file mode 100644 index 0000000..6a8febc --- /dev/null +++ b/node_modules/component-bind/Readme.md @@ -0,0 +1,64 @@ +# bind + + Function binding utility. + +## Installation + +``` +$ component install component/bind +``` + +## API + + - [bind(obj, fn)](#bindobj-fn) + - [bind(obj, fn, ...)](#bindobj-fn-) + - [bind(obj, name)](#bindobj-name) + + + +### bind(obj, fn) +should bind the function to the given object. + +```js +var tobi = { name: 'tobi' }; + +function name() { + return this.name; +} + +var fn = bind(tobi, name); +fn().should.equal('tobi'); +``` + + +### bind(obj, fn, ...) +should curry the remaining arguments. + +```js +function add(a, b) { + return a + b; +} + +bind(null, add)(1, 2).should.equal(3); +bind(null, add, 1)(2).should.equal(3); +bind(null, add, 1, 2)().should.equal(3); +``` + + +### bind(obj, name) +should bind the method of the given name. + +```js +var tobi = { name: 'tobi' }; + +tobi.getName = function() { + return this.name; +}; + +var fn = bind(tobi, 'getName'); +fn().should.equal('tobi'); +``` + +## License + + MIT \ No newline at end of file diff --git a/node_modules/component-bind/component.json b/node_modules/component-bind/component.json new file mode 100644 index 0000000..4e1e93f --- /dev/null +++ b/node_modules/component-bind/component.json @@ -0,0 +1,13 @@ +{ + "name": "bind", + "version": "1.0.0", + "description": "function binding utility", + "keywords": [ + "bind", + "utility" + ], + "dependencies": {}, + "scripts": [ + "index.js" + ] +} diff --git a/node_modules/component-bind/index.js b/node_modules/component-bind/index.js new file mode 100644 index 0000000..4eeb2c0 --- /dev/null +++ b/node_modules/component-bind/index.js @@ -0,0 +1,23 @@ +/** + * Slice reference. + */ + +var slice = [].slice; + +/** + * Bind `obj` to `fn`. + * + * @param {Object} obj + * @param {Function|String} fn or string + * @return {Function} + * @api public + */ + +module.exports = function(obj, fn){ + if ('string' == typeof fn) fn = obj[fn]; + if ('function' != typeof fn) throw new Error('bind() requires a function'); + var args = slice.call(arguments, 2); + return function(){ + return fn.apply(obj, args.concat(slice.call(arguments))); + } +}; diff --git a/node_modules/component-bind/package.json b/node_modules/component-bind/package.json new file mode 100644 index 0000000..79e28f9 --- /dev/null +++ b/node_modules/component-bind/package.json @@ -0,0 +1,81 @@ +{ + "_args": [ + [ + { + "raw": "component-bind@1.0.0", + "scope": null, + "escapedName": "component-bind", + "name": "component-bind", + "rawSpec": "1.0.0", + "spec": "1.0.0", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/socket.io-client" + ] + ], + "_from": "component-bind@1.0.0", + "_id": "component-bind@1.0.0", + "_inCache": true, + "_location": "/component-bind", + "_npmUser": { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + "_npmVersion": "1.4.9", + "_phantomChildren": {}, + "_requested": { + "raw": "component-bind@1.0.0", + "scope": null, + "escapedName": "component-bind", + "name": "component-bind", + "rawSpec": "1.0.0", + "spec": "1.0.0", + "type": "version" + }, + "_requiredBy": [ + "/socket.io-client" + ], + "_resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "_shasum": "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1", + "_shrinkwrap": null, + "_spec": "component-bind@1.0.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/socket.io-client", + "bugs": { + "url": "https://github.com/component/bind/issues" + }, + "component": { + "scripts": { + "bind/index.js": "index.js" + } + }, + "dependencies": {}, + "description": "function binding utility", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "directories": {}, + "dist": { + "shasum": "00c608ab7dcd93897c0009651b1d3a8e1e73bbd1", + "tarball": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz" + }, + "homepage": "https://github.com/component/bind", + "keywords": [ + "bind", + "utility" + ], + "maintainers": [ + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + } + ], + "name": "component-bind", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/component/bind.git" + }, + "version": "1.0.0" +} diff --git a/node_modules/component-emitter/History.md b/node_modules/component-emitter/History.md new file mode 100644 index 0000000..9189c60 --- /dev/null +++ b/node_modules/component-emitter/History.md @@ -0,0 +1,68 @@ + +1.2.1 / 2016-04-18 +================== + + * enable client side use + +1.2.0 / 2014-02-12 +================== + + * prefix events with `$` to support object prototype method names + +1.1.3 / 2014-06-20 +================== + + * republish for npm + * add LICENSE file + +1.1.2 / 2014-02-10 +================== + + * package: rename to "component-emitter" + * package: update "main" and "component" fields + * Add license to Readme (same format as the other components) + * created .npmignore + * travis stuff + +1.1.1 / 2013-12-01 +================== + + * fix .once adding .on to the listener + * docs: Emitter#off() + * component: add `.repo` prop + +1.1.0 / 2013-10-20 +================== + + * add `.addEventListener()` and `.removeEventListener()` aliases + +1.0.1 / 2013-06-27 +================== + + * add support for legacy ie + +1.0.0 / 2013-02-26 +================== + + * add `.off()` support for removing all listeners + +0.0.6 / 2012-10-08 +================== + + * add `this._callbacks` initialization to prevent funky gotcha + +0.0.5 / 2012-09-07 +================== + + * fix `Emitter.call(this)` usage + +0.0.3 / 2012-07-11 +================== + + * add `.listeners()` + * rename `.has()` to `.hasListeners()` + +0.0.2 / 2012-06-28 +================== + + * fix `.off()` with `.once()`-registered callbacks diff --git a/node_modules/component-emitter/LICENSE b/node_modules/component-emitter/LICENSE new file mode 100644 index 0000000..d6e43f2 --- /dev/null +++ b/node_modules/component-emitter/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2014 Component 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/component-emitter/Readme.md b/node_modules/component-emitter/Readme.md new file mode 100644 index 0000000..0466411 --- /dev/null +++ b/node_modules/component-emitter/Readme.md @@ -0,0 +1,74 @@ +# Emitter [![Build Status](https://travis-ci.org/component/emitter.png)](https://travis-ci.org/component/emitter) + + Event emitter component. + +## Installation + +``` +$ component install component/emitter +``` + +## API + +### Emitter(obj) + + The `Emitter` may also be used as a mixin. For example + a "plain" object may become an emitter, or you may + extend an existing prototype. + + As an `Emitter` instance: + +```js +var Emitter = require('emitter'); +var emitter = new Emitter; +emitter.emit('something'); +``` + + As a mixin: + +```js +var Emitter = require('emitter'); +var user = { name: 'tobi' }; +Emitter(user); + +user.emit('im a user'); +``` + + As a prototype mixin: + +```js +var Emitter = require('emitter'); +Emitter(User.prototype); +``` + +### Emitter#on(event, fn) + + Register an `event` handler `fn`. + +### Emitter#once(event, fn) + + Register a single-shot `event` handler `fn`, + removed immediately after it is invoked the + first time. + +### Emitter#off(event, fn) + + * Pass `event` and `fn` to remove a listener. + * Pass `event` to remove all listeners on that event. + * Pass nothing to remove all listeners on all events. + +### Emitter#emit(event, ...) + + Emit an `event` with variable option args. + +### Emitter#listeners(event) + + Return an array of callbacks, or an empty array. + +### Emitter#hasListeners(event) + + Check if this emitter has `event` handlers. + +## License + +MIT diff --git a/node_modules/component-emitter/index.js b/node_modules/component-emitter/index.js new file mode 100644 index 0000000..df94c78 --- /dev/null +++ b/node_modules/component-emitter/index.js @@ -0,0 +1,163 @@ + +/** + * Expose `Emitter`. + */ + +if (typeof module !== 'undefined') { + module.exports = Emitter; +} + +/** + * Initialize a new `Emitter`. + * + * @api public + */ + +function Emitter(obj) { + if (obj) return mixin(obj); +}; + +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + +function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + return obj; +} + +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.on = +Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []) + .push(fn); + return this; +}; + +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.once = function(event, fn){ + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; +}; + +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.off = +Emitter.prototype.removeListener = +Emitter.prototype.removeAllListeners = +Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; + + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } + + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + return this; +}; + +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + +Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks['$' + event]; + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; + +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + +Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; +}; + +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + +Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; +}; diff --git a/node_modules/component-emitter/package.json b/node_modules/component-emitter/package.json new file mode 100644 index 0000000..277a86b --- /dev/null +++ b/node_modules/component-emitter/package.json @@ -0,0 +1,218 @@ +{ + "_args": [ + [ + { + "raw": "component-emitter@1.2.1", + "scope": null, + "escapedName": "component-emitter", + "name": "component-emitter", + "rawSpec": "1.2.1", + "spec": "1.2.1", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/socket.io-client" + ] + ], + "_from": "component-emitter@1.2.1", + "_id": "component-emitter@1.2.1", + "_inCache": true, + "_location": "/component-emitter", + "_nodeVersion": "0.12.4", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/component-emitter-1.2.1.tgz_1461005707641_0.14232611074112356" + }, + "_npmUser": { + "name": "nami-doc", + "email": "karp@hotmail.fr" + }, + "_npmVersion": "2.10.1", + "_phantomChildren": {}, + "_requested": { + "raw": "component-emitter@1.2.1", + "scope": null, + "escapedName": "component-emitter", + "name": "component-emitter", + "rawSpec": "1.2.1", + "spec": "1.2.1", + "type": "version" + }, + "_requiredBy": [ + "/engine.io-client", + "/socket.io-client", + "/socket.io-parser" + ], + "_resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "_shasum": "137918d6d78283f7df7a6b7c5a63e140e69425e6", + "_shrinkwrap": null, + "_spec": "component-emitter@1.2.1", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/socket.io-client", + "bugs": { + "url": "https://github.com/component/emitter/issues" + }, + "component": { + "scripts": { + "emitter/index.js": "index.js" + } + }, + "dependencies": {}, + "description": "Event emitter", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "directories": {}, + "dist": { + "shasum": "137918d6d78283f7df7a6b7c5a63e140e69425e6", + "tarball": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz" + }, + "files": [ + "index.js", + "LICENSE" + ], + "gitHead": "187492ab8028c7221b589bdfd482b715149cd868", + "homepage": "https://github.com/component/emitter#readme", + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "tootallnate", + "email": "nathan@tootallnate.net" + }, + { + "name": "hughsk", + "email": "hughskennedy@gmail.com" + }, + { + "name": "trevorgerhardt", + "email": "trevorgerhardt@gmail.com" + }, + { + "name": "timaschew", + "email": "timaschew@gmail.com" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "rauchg", + "email": "rauchg@gmail.com" + }, + { + "name": "retrofox", + "email": "rdsuarez@gmail.com" + }, + { + "name": "coreh", + "email": "thecoreh@gmail.com" + }, + { + "name": "forbeslindesay", + "email": "forbes@lindesay.co.uk" + }, + { + "name": "kelonye", + "email": "kelonyemitchel@gmail.com" + }, + { + "name": "mattmueller", + "email": "mattmuelle@gmail.com" + }, + { + "name": "yields", + "email": "yields@icloud.com" + }, + { + "name": "anthonyshort", + "email": "antshort@gmail.com" + }, + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "ianstormtaylor", + "email": "ian@ianstormtaylor.com" + }, + { + "name": "cristiandouce", + "email": "cristian@gravityonmars.com" + }, + { + "name": "swatinem", + "email": "arpad.borsos@googlemail.com" + }, + { + "name": "stagas", + "email": "gstagas@gmail.com" + }, + { + "name": "amasad", + "email": "amjad.masad@gmail.com" + }, + { + "name": "juliangruber", + "email": "julian@juliangruber.com" + }, + { + "name": "calvinfo", + "email": "calvin@calv.info" + }, + { + "name": "dominicbarnes", + "email": "dominic@dbarnes.info" + }, + { + "name": "blakeembrey", + "email": "hello@blakeembrey.com" + }, + { + "name": "timoxley", + "email": "secoif@gmail.com" + }, + { + "name": "jonathanong", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "queckezz", + "email": "fabian.eichenberger@gmail.com" + }, + { + "name": "nami-doc", + "email": "vendethiel@hotmail.fr" + }, + { + "name": "clintwood", + "email": "clint@anotherway.co.za" + }, + { + "name": "thehydroimpulse", + "email": "dnfagnan@gmail.com" + }, + { + "name": "stephenmathieson", + "email": "me@stephenmathieson.com" + }, + { + "name": "dfcreative", + "email": "df.creative@gmail.com" + }, + { + "name": "defunctzombie", + "email": "shtylman@gmail.com" + } + ], + "name": "component-emitter", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/component/emitter.git" + }, + "scripts": { + "test": "make test" + }, + "version": "1.2.1" +} diff --git a/node_modules/component-inherit/.npmignore b/node_modules/component-inherit/.npmignore new file mode 100644 index 0000000..665aa21 --- /dev/null +++ b/node_modules/component-inherit/.npmignore @@ -0,0 +1,3 @@ +components +build +node_modules diff --git a/node_modules/component-inherit/History.md b/node_modules/component-inherit/History.md new file mode 100644 index 0000000..22d87e1 --- /dev/null +++ b/node_modules/component-inherit/History.md @@ -0,0 +1,5 @@ + +0.0.2 / 2012-09-03 +================== + + * fix typo in package.json diff --git a/node_modules/component-inherit/Makefile b/node_modules/component-inherit/Makefile new file mode 100644 index 0000000..ebbc52a --- /dev/null +++ b/node_modules/component-inherit/Makefile @@ -0,0 +1,16 @@ + +build: components index.js + @component build + +components: + @Component install + +clean: + rm -fr build components template.js + +test: + @node_modules/.bin/mocha \ + --require should \ + --reporter spec + +.PHONY: clean test diff --git a/node_modules/component-inherit/Readme.md b/node_modules/component-inherit/Readme.md new file mode 100644 index 0000000..f03ab27 --- /dev/null +++ b/node_modules/component-inherit/Readme.md @@ -0,0 +1,24 @@ +# inherit + + Prototype inheritance utility. + +## Installation + +``` +$ component install component/inherit +``` + +## Example + +```js +var inherit = require('inherit'); + +function Human() {} +function Woman() {} + +inherit(Woman, Human); +``` + +## License + + MIT diff --git a/node_modules/component-inherit/component.json b/node_modules/component-inherit/component.json new file mode 100644 index 0000000..ae57747 --- /dev/null +++ b/node_modules/component-inherit/component.json @@ -0,0 +1,10 @@ +{ + "name": "inherit", + "description": "Prototype inheritance utility", + "version": "0.0.3", + "keywords": ["inherit", "utility"], + "dependencies": {}, + "scripts": [ + "index.js" + ] +} diff --git a/node_modules/component-inherit/index.js b/node_modules/component-inherit/index.js new file mode 100644 index 0000000..aaebc03 --- /dev/null +++ b/node_modules/component-inherit/index.js @@ -0,0 +1,7 @@ + +module.exports = function(a, b){ + var fn = function(){}; + fn.prototype = b.prototype; + a.prototype = new fn; + a.prototype.constructor = a; +}; \ No newline at end of file diff --git a/node_modules/component-inherit/package.json b/node_modules/component-inherit/package.json new file mode 100644 index 0000000..b532765 --- /dev/null +++ b/node_modules/component-inherit/package.json @@ -0,0 +1,78 @@ +{ + "_args": [ + [ + { + "raw": "component-inherit@0.0.3", + "scope": null, + "escapedName": "component-inherit", + "name": "component-inherit", + "rawSpec": "0.0.3", + "spec": "0.0.3", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-client" + ] + ], + "_from": "component-inherit@0.0.3", + "_id": "component-inherit@0.0.3", + "_inCache": true, + "_location": "/component-inherit", + "_npmUser": { + "name": "coreh", + "email": "thecoreh@gmail.com" + }, + "_npmVersion": "1.3.24", + "_phantomChildren": {}, + "_requested": { + "raw": "component-inherit@0.0.3", + "scope": null, + "escapedName": "component-inherit", + "name": "component-inherit", + "rawSpec": "0.0.3", + "spec": "0.0.3", + "type": "version" + }, + "_requiredBy": [ + "/engine.io-client" + ], + "_resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "_shasum": "645fc4adf58b72b649d5cae65135619db26ff143", + "_shrinkwrap": null, + "_spec": "component-inherit@0.0.3", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/engine.io-client", + "bugs": { + "url": "https://github.com/component/inherit/issues" + }, + "component": { + "scripts": { + "inherit/index.js": "index.js" + } + }, + "dependencies": {}, + "description": "Prototype inheritance utility", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "645fc4adf58b72b649d5cae65135619db26ff143", + "tarball": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz" + }, + "homepage": "https://github.com/component/inherit", + "keywords": [ + "inherit", + "utility" + ], + "maintainers": [ + { + "name": "coreh", + "email": "thecoreh@gmail.com" + } + ], + "name": "component-inherit", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/component/inherit.git" + }, + "version": "0.0.3" +} diff --git a/node_modules/component-inherit/test/inherit.js b/node_modules/component-inherit/test/inherit.js new file mode 100644 index 0000000..14852f2 --- /dev/null +++ b/node_modules/component-inherit/test/inherit.js @@ -0,0 +1,21 @@ + +/** + * Module dependencies. + */ + +var inherit = require('..'); + +describe('inherit(a, b)', function(){ + it('should inherit b\'s prototype', function(){ + function Loki(){} + function Animal(){} + + Animal.prototype.species = 'unknown'; + + inherit(Loki, Animal); + + var loki = new Loki; + loki.species.should.equal('unknown'); + loki.constructor.should.equal(Loki); + }) +}) \ No newline at end of file diff --git a/node_modules/concat-map/.travis.yml b/node_modules/concat-map/.travis.yml new file mode 100644 index 0000000..f1d0f13 --- /dev/null +++ b/node_modules/concat-map/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/node_modules/concat-map/LICENSE b/node_modules/concat-map/LICENSE new file mode 100644 index 0000000..ee27ba4 --- /dev/null +++ b/node_modules/concat-map/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/concat-map/README.markdown b/node_modules/concat-map/README.markdown new file mode 100644 index 0000000..408f70a --- /dev/null +++ b/node_modules/concat-map/README.markdown @@ -0,0 +1,62 @@ +concat-map +========== + +Concatenative mapdashery. + +[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map) + +[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map) + +example +======= + +``` js +var concatMap = require('concat-map'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); +``` + +*** + +``` +[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ] +``` + +methods +======= + +``` js +var concatMap = require('concat-map') +``` + +concatMap(xs, fn) +----------------- + +Return an array of concatenated elements by calling `fn(x, i)` for each element +`x` and each index `i` in the array `xs`. + +When `fn(x, i)` returns an array, its result will be concatenated with the +result array. If `fn(x, i)` returns anything else, that value will be pushed +onto the end of the result array. + +install +======= + +With [npm](http://npmjs.org) do: + +``` +npm install concat-map +``` + +license +======= + +MIT + +notes +===== + +This module was written while sitting high above the ground in a tree. diff --git a/node_modules/concat-map/example/map.js b/node_modules/concat-map/example/map.js new file mode 100644 index 0000000..3365621 --- /dev/null +++ b/node_modules/concat-map/example/map.js @@ -0,0 +1,6 @@ +var concatMap = require('../'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); diff --git a/node_modules/concat-map/index.js b/node_modules/concat-map/index.js new file mode 100644 index 0000000..b29a781 --- /dev/null +++ b/node_modules/concat-map/index.js @@ -0,0 +1,13 @@ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; diff --git a/node_modules/concat-map/package.json b/node_modules/concat-map/package.json new file mode 100644 index 0000000..854bdf9 --- /dev/null +++ b/node_modules/concat-map/package.json @@ -0,0 +1,117 @@ +{ + "_args": [ + [ + { + "raw": "concat-map@0.0.1", + "scope": null, + "escapedName": "concat-map", + "name": "concat-map", + "rawSpec": "0.0.1", + "spec": "0.0.1", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/brace-expansion" + ] + ], + "_from": "concat-map@0.0.1", + "_id": "concat-map@0.0.1", + "_inCache": true, + "_location": "/concat-map", + "_npmUser": { + "name": "substack", + "email": "mail@substack.net" + }, + "_npmVersion": "1.3.21", + "_phantomChildren": {}, + "_requested": { + "raw": "concat-map@0.0.1", + "scope": null, + "escapedName": "concat-map", + "name": "concat-map", + "rawSpec": "0.0.1", + "spec": "0.0.1", + "type": "version" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "_shrinkwrap": null, + "_spec": "concat-map@0.0.1", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/brace-expansion", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/node-concat-map/issues" + }, + "dependencies": {}, + "description": "concatenative mapdashery", + "devDependencies": { + "tape": "~2.4.0" + }, + "directories": { + "example": "example", + "test": "test" + }, + "dist": { + "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "tarball": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + }, + "homepage": "https://github.com/substack/node-concat-map", + "keywords": [ + "concat", + "concatMap", + "map", + "functional", + "higher-order" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "substack", + "email": "mail@substack.net" + } + ], + "name": "concat-map", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/substack/node-concat-map.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": { + "ie": [ + 6, + 7, + 8, + 9 + ], + "ff": [ + 3.5, + 10, + 15 + ], + "chrome": [ + 10, + 22 + ], + "safari": [ + 5.1 + ], + "opera": [ + 12 + ] + } + }, + "version": "0.0.1" +} diff --git a/node_modules/concat-map/test/map.js b/node_modules/concat-map/test/map.js new file mode 100644 index 0000000..fdbd702 --- /dev/null +++ b/node_modules/concat-map/test/map.js @@ -0,0 +1,39 @@ +var concatMap = require('../'); +var test = require('tape'); + +test('empty or not', function (t) { + var xs = [ 1, 2, 3, 4, 5, 6 ]; + var ixes = []; + var ys = concatMap(xs, function (x, ix) { + ixes.push(ix); + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; + }); + t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); + t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); + t.end(); +}); + +test('always something', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('scalars', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : x; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('undefs', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function () {}); + t.same(ys, [ undefined, undefined, undefined, undefined ]); + t.end(); +}); diff --git a/node_modules/content-disposition/HISTORY.md b/node_modules/content-disposition/HISTORY.md new file mode 100644 index 0000000..1192551 --- /dev/null +++ b/node_modules/content-disposition/HISTORY.md @@ -0,0 +1,40 @@ +0.5.0 / 2014-10-11 +================== + + * Add `parse` function + +0.4.0 / 2014-09-21 +================== + + * Expand non-Unicode `filename` to the full ISO-8859-1 charset + +0.3.0 / 2014-09-20 +================== + + * Add `fallback` option + * Add `type` option + +0.2.0 / 2014-09-19 +================== + + * Reduce ambiguity of file names with hex escape in buggy browsers + +0.1.2 / 2014-09-19 +================== + + * Fix periodic invalid Unicode filename header + +0.1.1 / 2014-09-19 +================== + + * Fix invalid characters appearing in `filename*` parameter + +0.1.0 / 2014-09-18 +================== + + * Make the `filename` argument optional + +0.0.0 / 2014-09-18 +================== + + * Initial release diff --git a/node_modules/content-disposition/LICENSE b/node_modules/content-disposition/LICENSE new file mode 100644 index 0000000..b7dce6c --- /dev/null +++ b/node_modules/content-disposition/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/content-disposition/README.md b/node_modules/content-disposition/README.md new file mode 100644 index 0000000..d265431 --- /dev/null +++ b/node_modules/content-disposition/README.md @@ -0,0 +1,141 @@ +# content-disposition + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Create and parse HTTP `Content-Disposition` header + +## Installation + +```sh +$ npm install content-disposition +``` + +## API + +```js +var contentDisposition = require('content-disposition') +``` + +### contentDisposition(filename, options) + +Create an attachment `Content-Disposition` header value using the given file name, +if supplied. The `filename` is optional and if no file name is desired, but you +want to specify `options`, set `filename` to `undefined`. + +```js +res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf')) +``` + +**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this +header through a means different from `setHeader` in Node.js, you'll want to specify +the `'binary'` encoding in Node.js. + +#### Options + +`contentDisposition` accepts these properties in the options object. + +##### fallback + +If the `filename` option is outside ISO-8859-1, then the file name is actually +stored in a supplemental field for clients that support Unicode file names and +a ISO-8859-1 version of the file name is automatically generated. + +This specifies the ISO-8859-1 file name to override the automatic generation or +disables the generation all together, defaults to `true`. + + - A string will specify the ISO-8859-1 file name to use in place of automatic + generation. + - `false` will disable including a ISO-8859-1 file name and only include the + Unicode version (unless the file name is already ISO-8859-1). + - `true` will enable automatic generation if the file name is outside ISO-8859-1. + +If the `filename` option is ISO-8859-1 and this option is specified and has a +different value, then the `filename` option is encoded in the extended field +and this set as the fallback field, even though they are both ISO-8859-1. + +##### type + +Specifies the disposition type, defaults to `"attachment"`. This can also be +`"inline"`, or any other value (all values except inline are treated like +`attachment`, but can convey additional information if both parties agree to +it). The type is normalized to lower-case. + +### contentDisposition.parse(string) + +```js +var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt"'); +``` + +Parse a `Content-Disposition` header string. This automatically handles extended +("Unicode") parameters by decoding them and providing them under the standard +parameter name. This will return an object with the following properties (examples +are shown for the string `'attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'`): + + - `type`: The disposition type (always lower case). Example: `'attachment'` + + - `parameters`: An object of the parameters in the disposition (name of parameter + always lower case and extended versions replace non-extended versions). Example: + `{filename: "€ rates.txt"}` + +## Examples + +### Send a file for download + +```js +var contentDisposition = require('content-disposition') +var destroy = require('destroy') +var http = require('http') +var onFinished = require('on-finished') + +var filePath = '/path/to/public/plans.pdf' + +http.createServer(function onRequest(req, res) { + // set headers + res.setHeader('Content-Type', 'application/pdf') + res.setHeader('Content-Disposition', contentDisposition(filePath)) + + // send file + var stream = fs.createReadStream(filePath) + stream.pipe(res) + onFinished(res, function (err) { + destroy(stream) + }) +}) +``` + +## Testing + +```sh +$ npm test +``` + +## References + +- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616] +- [RFC 5987: Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987] +- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266] +- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231] + +[rfc-2616]: https://tools.ietf.org/html/rfc2616 +[rfc-5987]: https://tools.ietf.org/html/rfc5987 +[rfc-6266]: https://tools.ietf.org/html/rfc6266 +[tc-2231]: http://greenbytes.de/tech/tc2231/ + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/content-disposition.svg?style=flat +[npm-url]: https://npmjs.org/package/content-disposition +[node-version-image]: https://img.shields.io/node/v/content-disposition.svg?style=flat +[node-version-url]: http://nodejs.org/download/ +[travis-image]: https://img.shields.io/travis/jshttp/content-disposition.svg?style=flat +[travis-url]: https://travis-ci.org/jshttp/content-disposition +[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg?style=flat +[coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master +[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg?style=flat +[downloads-url]: https://npmjs.org/package/content-disposition diff --git a/node_modules/content-disposition/index.js b/node_modules/content-disposition/index.js new file mode 100644 index 0000000..fa3bc74 --- /dev/null +++ b/node_modules/content-disposition/index.js @@ -0,0 +1,443 @@ +/*! + * content-disposition + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = contentDisposition +module.exports.parse = parse + +/** + * Module dependencies. + */ + +var basename = require('path').basename + +/** + * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%") + */ + +var encodeUriAttrCharRegExp = /[\x00-\x20"'\(\)*,\/:;<=>?@\[\\\]\{\}\x7f]/g + +/** + * RegExp to match percent encoding escape. + */ + +var hexEscapeRegExp = /%[0-9A-Fa-f]{2}/ +var hexEscapeReplaceRegExp = /%([0-9A-Fa-f]{2})/g + +/** + * RegExp to match non-latin1 characters. + */ + +var nonLatin1RegExp = /[^\x20-\x7e\xa0-\xff]/g + +/** + * RegExp to match quoted-pair in RFC 2616 + * + * quoted-pair = "\" CHAR + * CHAR = + */ + +var qescRegExp = /\\([\u0000-\u007f])/g; + +/** + * RegExp to match chars that must be quoted-pair in RFC 2616 + */ + +var quoteRegExp = /([\\"])/g + +/** + * RegExp for various RFC 2616 grammar + * + * parameter = token "=" ( token | quoted-string ) + * token = 1* + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = > + * quoted-pair = "\" CHAR + * CHAR = + * TEXT = + * LWS = [CRLF] 1*( SP | HT ) + * CRLF = CR LF + * CR = + * LF = + * SP = + * HT = + * CTL = + * OCTET = + */ + +var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g +var textRegExp = /^[\x20-\x7e\x80-\xff]+$/ +var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/ + +/** + * RegExp for various RFC 5987 grammar + * + * ext-value = charset "'" [ language ] "'" value-chars + * charset = "UTF-8" / "ISO-8859-1" / mime-charset + * mime-charset = 1*mime-charsetc + * mime-charsetc = ALPHA / DIGIT + * / "!" / "#" / "$" / "%" / "&" + * / "+" / "-" / "^" / "_" / "`" + * / "{" / "}" / "~" + * language = ( 2*3ALPHA [ extlang ] ) + * / 4ALPHA + * / 5*8ALPHA + * extlang = *3( "-" 3ALPHA ) + * value-chars = *( pct-encoded / attr-char ) + * pct-encoded = "%" HEXDIG HEXDIG + * attr-char = ALPHA / DIGIT + * / "!" / "#" / "$" / "&" / "+" / "-" / "." + * / "^" / "_" / "`" / "|" / "~" + */ + +var extValueRegExp = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+\-\.^_`|~])+)$/ + +/** + * RegExp for various RFC 6266 grammar + * + * disposition-type = "inline" | "attachment" | disp-ext-type + * disp-ext-type = token + * disposition-parm = filename-parm | disp-ext-parm + * filename-parm = "filename" "=" value + * | "filename*" "=" ext-value + * disp-ext-parm = token "=" value + * | ext-token "=" ext-value + * ext-token = + */ + +var dispositionTypeRegExp = /^([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *(?:$|;)/ + +/** + * Create an attachment Content-Disposition header. + * + * @param {string} [filename] + * @param {object} [options] + * @param {string} [options.type=attachment] + * @param {string|boolean} [options.fallback=true] + * @return {string} + * @api public + */ + +function contentDisposition(filename, options) { + var opts = options || {} + + // get type + var type = opts.type || 'attachment' + + // get parameters + var params = createparams(filename, opts.fallback) + + // format into string + return format(new ContentDisposition(type, params)) +} + +/** + * Create parameters object from filename and fallback. + * + * @param {string} [filename] + * @param {string|boolean} [fallback=true] + * @return {object} + * @api private + */ + +function createparams(filename, fallback) { + if (filename === undefined) { + return + } + + var params = {} + + if (typeof filename !== 'string') { + throw new TypeError('filename must be a string') + } + + // fallback defaults to true + if (fallback === undefined) { + fallback = true + } + + if (typeof fallback !== 'string' && typeof fallback !== 'boolean') { + throw new TypeError('fallback must be a string or boolean') + } + + if (typeof fallback === 'string' && nonLatin1RegExp.test(fallback)) { + throw new TypeError('fallback must be ISO-8859-1 string') + } + + // restrict to file base name + var name = basename(filename) + + // determine if name is suitable for quoted string + var isQuotedString = textRegExp.test(name) + + // generate fallback name + var fallbackName = typeof fallback !== 'string' + ? fallback && getlatin1(name) + : basename(fallback) + var hasFallback = typeof fallbackName === 'string' && fallbackName !== name + + // set extended filename parameter + if (hasFallback || !isQuotedString || hexEscapeRegExp.test(name)) { + params['filename*'] = name + } + + // set filename parameter + if (isQuotedString || hasFallback) { + params.filename = hasFallback + ? fallbackName + : name + } + + return params +} + +/** + * Format object to Content-Disposition header. + * + * @param {object} obj + * @param {string} obj.type + * @param {object} [obj.parameters] + * @return {string} + * @api private + */ + +function format(obj) { + var parameters = obj.parameters + var type = obj.type + + if (!type || typeof type !== 'string' || !tokenRegExp.test(type)) { + throw new TypeError('invalid type') + } + + // start with normalized type + var string = String(type).toLowerCase() + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + var val = param.substr(-1) === '*' + ? ustring(parameters[param]) + : qstring(parameters[param]) + + string += '; ' + param + '=' + val + } + } + + return string +} + +/** + * Decode a RFC 6987 field value (gracefully). + * + * @param {string} str + * @return {string} + * @api private + */ + +function decodefield(str) { + var match = extValueRegExp.exec(str) + + if (!match) { + throw new TypeError('invalid extended field value') + } + + var charset = match[1].toLowerCase() + var encoded = match[2] + var value + + // to binary string + var binary = encoded.replace(hexEscapeReplaceRegExp, pdecode) + + switch (charset) { + case 'iso-8859-1': + value = getlatin1(binary) + break + case 'utf-8': + value = new Buffer(binary, 'binary').toString('utf8') + break + default: + throw new TypeError('unsupported charset in extended field') + } + + return value +} + +/** + * Get ISO-8859-1 version of string. + * + * @param {string} val + * @return {string} + * @api private + */ + +function getlatin1(val) { + // simple Unicode -> ISO-8859-1 transformation + return String(val).replace(nonLatin1RegExp, '?') +} + +/** + * Parse Content-Disposition header string. + * + * @param {string} string + * @return {object} + * @api private + */ + +function parse(string) { + if (!string || typeof string !== 'string') { + throw new TypeError('argument string is required') + } + + var match = dispositionTypeRegExp.exec(string) + + if (!match) { + throw new TypeError('invalid type format') + } + + // normalize type + var index = match[0].length + var type = match[1].toLowerCase() + + var key + var names = [] + var params = {} + var value + + // calculate index to start at + index = paramRegExp.lastIndex = match[0].substr(-1) === ';' + ? index - 1 + : index + + // match parameters + while (match = paramRegExp.exec(string)) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (names.indexOf(key) !== -1) { + throw new TypeError('invalid duplicate parameter') + } + + names.push(key) + + if (key.indexOf('*') + 1 === key.length) { + // decode extended value + key = key.slice(0, -1) + value = decodefield(value) + + // overwrite existing value + params[key] = value + continue + } + + if (typeof params[key] === 'string') { + continue + } + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(qescRegExp, '$1') + } + + params[key] = value + } + + if (index !== -1 && index !== string.length) { + throw new TypeError('invalid parameter format') + } + + return new ContentDisposition(type, params) +} + +/** + * Percent decode a single character. + * + * @param {string} str + * @param {string} hex + * @return {string} + * @api private + */ + +function pdecode(str, hex) { + return String.fromCharCode(parseInt(hex, 16)) +} + +/** + * Percent encode a single character. + * + * @param {string} char + * @return {string} + * @api private + */ + +function pencode(char) { + var hex = String(char) + .charCodeAt(0) + .toString(16) + .toUpperCase() + return hex.length === 1 + ? '%0' + hex + : '%' + hex +} + +/** + * Quote a string for HTTP. + * + * @param {string} val + * @return {string} + * @api private + */ + +function qstring(val) { + var str = String(val) + + return '"' + str.replace(quoteRegExp, '\\$1') + '"' +} + +/** + * Encode a Unicode string for HTTP (RFC 5987). + * + * @param {string} val + * @return {string} + * @api private + */ + +function ustring(val) { + var str = String(val) + + // percent encode as UTF-8 + var encoded = encodeURIComponent(str) + .replace(encodeUriAttrCharRegExp, pencode) + + return 'UTF-8\'\'' + encoded +} + +/** + * Class for parsed Content-Disposition header for v8 optimization + */ + +function ContentDisposition(type, parameters) { + this.type = type + this.parameters = parameters +} diff --git a/node_modules/content-disposition/package.json b/node_modules/content-disposition/package.json new file mode 100644 index 0000000..85e8b87 --- /dev/null +++ b/node_modules/content-disposition/package.json @@ -0,0 +1,100 @@ +{ + "_args": [ + [ + { + "raw": "content-disposition@0.5.0", + "scope": null, + "escapedName": "content-disposition", + "name": "content-disposition", + "rawSpec": "0.5.0", + "spec": "0.5.0", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/express" + ] + ], + "_from": "content-disposition@0.5.0", + "_id": "content-disposition@0.5.0", + "_inCache": true, + "_location": "/content-disposition", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.21", + "_phantomChildren": {}, + "_requested": { + "raw": "content-disposition@0.5.0", + "scope": null, + "escapedName": "content-disposition", + "name": "content-disposition", + "rawSpec": "0.5.0", + "spec": "0.5.0", + "type": "version" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz", + "_shasum": "4284fe6ae0630874639e44e80a418c2934135e9e", + "_shrinkwrap": null, + "_spec": "content-disposition@0.5.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/express", + "bugs": { + "url": "https://github.com/jshttp/content-disposition/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "dependencies": {}, + "description": "Create and parse Content-Disposition header", + "devDependencies": { + "istanbul": "0.3.2", + "mocha": "~1.21.4" + }, + "directories": {}, + "dist": { + "shasum": "4284fe6ae0630874639e44e80a418c2934135e9e", + "tarball": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "gitHead": "f3c915f0c9d9f5ec79713dba24c8c6181b73305d", + "homepage": "https://github.com/jshttp/content-disposition", + "keywords": [ + "content-disposition", + "http", + "rfc6266", + "res" + ], + "license": "MIT", + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "content-disposition", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/content-disposition.git" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "version": "0.5.0" +} diff --git a/node_modules/content-type/HISTORY.md b/node_modules/content-type/HISTORY.md new file mode 100644 index 0000000..01652ff --- /dev/null +++ b/node_modules/content-type/HISTORY.md @@ -0,0 +1,14 @@ +1.0.2 / 2016-05-09 +================== + + * perf: enable strict mode + +1.0.1 / 2015-02-13 +================== + + * Improve missing `Content-Type` header error message + +1.0.0 / 2015-02-01 +================== + + * Initial implementation, derived from `media-typer@0.3.0` diff --git a/node_modules/content-type/LICENSE b/node_modules/content-type/LICENSE new file mode 100644 index 0000000..34b1a2d --- /dev/null +++ b/node_modules/content-type/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/content-type/README.md b/node_modules/content-type/README.md new file mode 100644 index 0000000..3ed6741 --- /dev/null +++ b/node_modules/content-type/README.md @@ -0,0 +1,92 @@ +# content-type + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Create and parse HTTP Content-Type header according to RFC 7231 + +## Installation + +```sh +$ npm install content-type +``` + +## API + +```js +var contentType = require('content-type') +``` + +### contentType.parse(string) + +```js +var obj = contentType.parse('image/svg+xml; charset=utf-8') +``` + +Parse a content type string. This will return an object with the following +properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`): + + - `type`: The media type (the type and subtype, always lower case). + Example: `'image/svg+xml'` + + - `parameters`: An object of the parameters in the media type (name of parameter + always lower case). Example: `{charset: 'utf-8'}` + +Throws a `TypeError` if the string is missing or invalid. + +### contentType.parse(req) + +```js +var obj = contentType.parse(req) +``` + +Parse the `content-type` header from the given `req`. Short-cut for +`contentType.parse(req.headers['content-type'])`. + +Throws a `TypeError` if the `Content-Type` header is missing or invalid. + +### contentType.parse(res) + +```js +var obj = contentType.parse(res) +``` + +Parse the `content-type` header set on the given `res`. Short-cut for +`contentType.parse(res.getHeader('content-type'))`. + +Throws a `TypeError` if the `Content-Type` header is missing or invalid. + +### contentType.format(obj) + +```js +var str = contentType.format({type: 'image/svg+xml'}) +``` + +Format an object into a content type string. This will return a string of the +content type for the given object with the following properties (examples are +shown that produce the string `'image/svg+xml; charset=utf-8'`): + + - `type`: The media type (will be lower-cased). Example: `'image/svg+xml'` + + - `parameters`: An object of the parameters in the media type (name of the + parameter will be lower-cased). Example: `{charset: 'utf-8'}` + +Throws a `TypeError` if the object contains an invalid type or parameter names. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/content-type.svg +[npm-url]: https://npmjs.org/package/content-type +[node-version-image]: https://img.shields.io/node/v/content-type.svg +[node-version-url]: http://nodejs.org/download/ +[travis-image]: https://img.shields.io/travis/jshttp/content-type/master.svg +[travis-url]: https://travis-ci.org/jshttp/content-type +[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-type/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/content-type +[downloads-image]: https://img.shields.io/npm/dm/content-type.svg +[downloads-url]: https://npmjs.org/package/content-type diff --git a/node_modules/content-type/index.js b/node_modules/content-type/index.js new file mode 100644 index 0000000..61ba6b5 --- /dev/null +++ b/node_modules/content-type/index.js @@ -0,0 +1,216 @@ +/*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1 + * + * parameter = token "=" ( token / quoted-string ) + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" + * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + * / DIGIT / ALPHA + * ; any VCHAR, except delimiters + * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE + * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text + * obs-text = %x80-FF + * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + */ +var paramRegExp = /; *([!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+) */g +var textRegExp = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/ +var tokenRegExp = /^[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+$/ + +/** + * RegExp to match quoted-pair in RFC 7230 sec 3.2.6 + * + * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + * obs-text = %x80-FF + */ +var qescRegExp = /\\([\u000b\u0020-\u00ff])/g + +/** + * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6 + */ +var quoteRegExp = /([\\"])/g + +/** + * RegExp to match type in RFC 6838 + * + * media-type = type "/" subtype + * type = token + * subtype = token + */ +var typeRegExp = /^[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+\/[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+$/ + +/** + * Module exports. + * @public + */ + +exports.format = format +exports.parse = parse + +/** + * Format object to media type. + * + * @param {object} obj + * @return {string} + * @public + */ + +function format(obj) { + if (!obj || typeof obj !== 'object') { + throw new TypeError('argument obj is required') + } + + var parameters = obj.parameters + var type = obj.type + + if (!type || !typeRegExp.test(type)) { + throw new TypeError('invalid type') + } + + var string = type + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + if (!tokenRegExp.test(param)) { + throw new TypeError('invalid parameter name') + } + + string += '; ' + param + '=' + qstring(parameters[param]) + } + } + + return string +} + +/** + * Parse media type to object. + * + * @param {string|object} string + * @return {Object} + * @public + */ + +function parse(string) { + if (!string) { + throw new TypeError('argument string is required') + } + + if (typeof string === 'object') { + // support req/res-like objects as argument + string = getcontenttype(string) + + if (typeof string !== 'string') { + throw new TypeError('content-type header is missing from object'); + } + } + + if (typeof string !== 'string') { + throw new TypeError('argument string is required to be a string') + } + + var index = string.indexOf(';') + var type = index !== -1 + ? string.substr(0, index).trim() + : string.trim() + + if (!typeRegExp.test(type)) { + throw new TypeError('invalid media type') + } + + var key + var match + var obj = new ContentType(type.toLowerCase()) + var value + + paramRegExp.lastIndex = index + + while (match = paramRegExp.exec(string)) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(qescRegExp, '$1') + } + + obj.parameters[key] = value + } + + if (index !== -1 && index !== string.length) { + throw new TypeError('invalid parameter format') + } + + return obj +} + +/** + * Get content-type from req/res objects. + * + * @param {object} + * @return {Object} + * @private + */ + +function getcontenttype(obj) { + if (typeof obj.getHeader === 'function') { + // res-like + return obj.getHeader('content-type') + } + + if (typeof obj.headers === 'object') { + // req-like + return obj.headers && obj.headers['content-type'] + } +} + +/** + * Quote a string if necessary. + * + * @param {string} val + * @return {string} + * @private + */ + +function qstring(val) { + var str = String(val) + + // no need to quote tokens + if (tokenRegExp.test(str)) { + return str + } + + if (str.length > 0 && !textRegExp.test(str)) { + throw new TypeError('invalid parameter value') + } + + return '"' + str.replace(quoteRegExp, '\\$1') + '"' +} + +/** + * Class to represent a content type. + * @private + */ +function ContentType(type) { + this.parameters = Object.create(null) + this.type = type +} diff --git a/node_modules/content-type/package.json b/node_modules/content-type/package.json new file mode 100644 index 0000000..1739d05 --- /dev/null +++ b/node_modules/content-type/package.json @@ -0,0 +1,104 @@ +{ + "_args": [ + [ + { + "raw": "content-type@~1.0.2", + "scope": null, + "escapedName": "content-type", + "name": "content-type", + "rawSpec": "~1.0.2", + "spec": ">=1.0.2 <1.1.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express" + ] + ], + "_from": "content-type@>=1.0.2 <1.1.0", + "_id": "content-type@1.0.2", + "_inCache": true, + "_location": "/content-type", + "_nodeVersion": "4.4.3", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/content-type-1.0.2.tgz_1462852785748_0.5491233412176371" + }, + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "2.15.1", + "_phantomChildren": {}, + "_requested": { + "raw": "content-type@~1.0.2", + "scope": null, + "escapedName": "content-type", + "name": "content-type", + "rawSpec": "~1.0.2", + "spec": ">=1.0.2 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "_shasum": "b7d113aee7a8dd27bd21133c4dc2529df1721eed", + "_shrinkwrap": null, + "_spec": "content-type@~1.0.2", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bugs": { + "url": "https://github.com/jshttp/content-type/issues" + }, + "dependencies": {}, + "description": "Create and parse HTTP Content-Type header", + "devDependencies": { + "istanbul": "0.4.3", + "mocha": "~1.21.5" + }, + "directories": {}, + "dist": { + "shasum": "b7d113aee7a8dd27bd21133c4dc2529df1721eed", + "tarball": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "gitHead": "8118763adfbbac80cf1254191889330aec8b8be7", + "homepage": "https://github.com/jshttp/content-type#readme", + "keywords": [ + "content-type", + "http", + "req", + "res", + "rfc7231" + ], + "license": "MIT", + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "content-type", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/content-type.git" + }, + "scripts": { + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" + }, + "version": "1.0.2" +} diff --git a/node_modules/cookie-parser/HISTORY.md b/node_modules/cookie-parser/HISTORY.md new file mode 100644 index 0000000..4f28f50 --- /dev/null +++ b/node_modules/cookie-parser/HISTORY.md @@ -0,0 +1,85 @@ +1.4.3 / 2016-05-26 +================== + + * deps: cookie@0.3.1 + - perf: use for loop in parse + +1.4.2 / 2016-05-20 +================== + + * deps: cookie@0.2.4 + - perf: enable strict mode + - perf: use for loop in parse + - perf: use string concatination for serialization + +1.4.1 / 2016-01-11 +================== + + * deps: cookie@0.2.3 + * perf: enable strict mode + +1.4.0 / 2015-09-18 +================== + + * Accept array of secrets in addition to a single secret + * Fix `JSONCookie` to return `undefined` for non-string arguments + * Fix `signedCookie` to return `undefined` for non-string arguments + * deps: cookie@0.2.2 + +1.3.5 / 2015-05-19 +================== + + * deps: cookie@0.1.3 + - Slight optimizations + +1.3.4 / 2015-02-15 +================== + + * deps: cookie-signature@1.0.6 + +1.3.3 / 2014-09-05 +================== + + * deps: cookie-signature@1.0.5 + +1.3.2 / 2014-06-26 +================== + + * deps: cookie-signature@1.0.4 + - fix for timing attacks + +1.3.1 / 2014-06-17 +================== + + * actually export `signedCookie` + +1.3.0 / 2014-06-17 +================== + + * add `signedCookie` export for single cookie unsigning + +1.2.0 / 2014-06-17 +================== + + * export parsing functions + * `req.cookies` and `req.signedCookies` are now plain objects + * slightly faster parsing of many cookies + +1.1.0 / 2014-05-12 +================== + + * Support for NodeJS version 0.8 + * deps: cookie@0.1.2 + - Fix for maxAge == 0 + - made compat with expires field + - tweak maxAge NaN error message + +1.0.1 / 2014-02-20 +================== + + * add missing dependencies + +1.0.0 / 2014-02-15 +================== + + * Genesis from `connect` diff --git a/node_modules/cookie-parser/LICENSE b/node_modules/cookie-parser/LICENSE new file mode 100644 index 0000000..343f2ad --- /dev/null +++ b/node_modules/cookie-parser/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/cookie-parser/README.md b/node_modules/cookie-parser/README.md new file mode 100644 index 0000000..05dbdc5 --- /dev/null +++ b/node_modules/cookie-parser/README.md @@ -0,0 +1,85 @@ +# cookie-parser + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Parse `Cookie` header and populate `req.cookies` with an object keyed by the cookie +names. Optionally you may enable signed cookie support by passing a `secret` string, +which assigns `req.secret` so it may be used by other middleware. + +## Installation + +```sh +$ npm install cookie-parser +``` + +## API + +```js +var express = require('express') +var cookieParser = require('cookie-parser') + +var app = express() +app.use(cookieParser()) +``` + +### cookieParser(secret, options) + +- `secret` a string or array used for signing cookies. This is optional and if not specified, will not parse signed cookies. If a string is provided, this is used as the secret. If an array is provided, an attempt will be made to unsign the cookie with each secret in order. +- `options` an object that is passed to `cookie.parse` as the second option. See [cookie](https://www.npmjs.org/package/cookie) for more information. + - `decode` a function to decode the value of the cookie + +### cookieParser.JSONCookie(str) + +Parse a cookie value as a JSON cookie. This will return the parsed JSON value if it was a JSON cookie, otherwise it will return the passed value. + +### cookieParser.JSONCookies(cookies) + +Given an object, this will iterate over the keys and call `JSONCookie` on each value. This will return the same object passed in. + +### cookieParser.signedCookie(str, secret) + +Parse a cookie value as a signed cookie. This will return the parsed unsigned value if it was a signed cookie and the signature was valid, otherwise it will return the passed value. + +The `secret` argument can be an array or string. If a string is provided, this is used as the secret. If an array is provided, an attempt will be made to unsign the cookie with each secret in order. + +### cookieParser.signedCookies(cookies, secret) + +Given an object, this will iterate over the keys and check if any value is a signed cookie. If it is a signed cookie and the signature is valid, the key will be deleted from the object and added to the new object that is returned. + +The `secret` argument can be an array or string. If a string is provided, this is used as the secret. If an array is provided, an attempt will be made to unsign the cookie with each secret in order. + +## Example + +```js +var express = require('express') +var cookieParser = require('cookie-parser') + +var app = express() +app.use(cookieParser()) + +app.get('/', function(req, res) { + console.log('Cookies: ', req.cookies) +}) + +app.listen(8080) + +// curl command that sends an HTTP request with two cookies +// curl http://127.0.0.1:8080 --cookie "Cho=Kim;Greet=Hello" +``` + +### [MIT Licensed](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/cookie-parser.svg +[npm-url]: https://npmjs.org/package/cookie-parser +[node-version-image]: https://img.shields.io/node/v/cookie-parser.svg +[node-version-url]: https://nodejs.org/en/download +[travis-image]: https://img.shields.io/travis/expressjs/cookie-parser/master.svg +[travis-url]: https://travis-ci.org/expressjs/cookie-parser +[coveralls-image]: https://img.shields.io/coveralls/expressjs/cookie-parser/master.svg +[coveralls-url]: https://coveralls.io/r/expressjs/cookie-parser?branch=master +[downloads-image]: https://img.shields.io/npm/dm/cookie-parser.svg +[downloads-url]: https://npmjs.org/package/cookie-parser diff --git a/node_modules/cookie-parser/index.js b/node_modules/cookie-parser/index.js new file mode 100644 index 0000000..59816a2 --- /dev/null +++ b/node_modules/cookie-parser/index.js @@ -0,0 +1,181 @@ +/*! + * cookie-parser + * Copyright(c) 2014 TJ Holowaychuk + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module dependencies. + * @private + */ + +var cookie = require('cookie'); +var signature = require('cookie-signature'); + +/** + * Module exports. + * @public + */ + +module.exports = cookieParser; +module.exports.JSONCookie = JSONCookie; +module.exports.JSONCookies = JSONCookies; +module.exports.signedCookie = signedCookie; +module.exports.signedCookies = signedCookies; + +/** + * Parse Cookie header and populate `req.cookies` + * with an object keyed by the cookie names. + * + * @param {string|array} [secret] A string (or array of strings) representing cookie signing secret(s). + * @param {Object} [options] + * @return {Function} + * @public + */ + +function cookieParser(secret, options) { + return function cookieParser(req, res, next) { + if (req.cookies) { + return next(); + } + + var cookies = req.headers.cookie; + var secrets = !secret || Array.isArray(secret) + ? (secret || []) + : [secret]; + + req.secret = secrets[0]; + req.cookies = Object.create(null); + req.signedCookies = Object.create(null); + + // no cookies + if (!cookies) { + return next(); + } + + req.cookies = cookie.parse(cookies, options); + + // parse signed cookies + if (secrets.length !== 0) { + req.signedCookies = signedCookies(req.cookies, secrets); + req.signedCookies = JSONCookies(req.signedCookies); + } + + // parse JSON cookies + req.cookies = JSONCookies(req.cookies); + + next(); + }; +} + +/** + * Parse JSON cookie string. + * + * @param {String} str + * @return {Object} Parsed object or undefined if not json cookie + * @public + */ + +function JSONCookie(str) { + if (typeof str !== 'string' || str.substr(0, 2) !== 'j:') { + return undefined; + } + + try { + return JSON.parse(str.slice(2)); + } catch (err) { + return undefined; + } +} + +/** + * Parse JSON cookies. + * + * @param {Object} obj + * @return {Object} + * @public + */ + +function JSONCookies(obj) { + var cookies = Object.keys(obj); + var key; + var val; + + for (var i = 0; i < cookies.length; i++) { + key = cookies[i]; + val = JSONCookie(obj[key]); + + if (val) { + obj[key] = val; + } + } + + return obj; +} + +/** + * Parse a signed cookie string, return the decoded value. + * + * @param {String} str signed cookie string + * @param {string|array} secret + * @return {String} decoded value + * @public + */ + +function signedCookie(str, secret) { + if (typeof str !== 'string') { + return undefined; + } + + if (str.substr(0, 2) !== 's:') { + return str; + } + + var secrets = !secret || Array.isArray(secret) + ? (secret || []) + : [secret]; + + for (var i = 0; i < secrets.length; i++) { + var val = signature.unsign(str.slice(2), secrets[i]); + + if (val !== false) { + return val; + } + } + + return false; +} + +/** + * Parse signed cookies, returning an object containing the decoded key/value + * pairs, while removing the signed key from obj. + * + * @param {Object} obj + * @param {string|array} secret + * @return {Object} + * @public + */ + +function signedCookies(obj, secret) { + var cookies = Object.keys(obj); + var dec; + var key; + var ret = Object.create(null); + var val; + + for (var i = 0; i < cookies.length; i++) { + key = cookies[i]; + val = obj[key]; + dec = signedCookie(val, secret); + + if (val !== dec) { + ret[key] = dec; + delete obj[key]; + } + } + + return ret; +} diff --git a/node_modules/cookie-parser/package.json b/node_modules/cookie-parser/package.json new file mode 100644 index 0000000..b810fd1 --- /dev/null +++ b/node_modules/cookie-parser/package.json @@ -0,0 +1,114 @@ +{ + "_args": [ + [ + { + "raw": "cookie-parser", + "scope": null, + "escapedName": "cookie-parser", + "name": "cookie-parser", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "/Users/macbookpro/Documents/Courses/NodeJs" + ] + ], + "_from": "cookie-parser@latest", + "_id": "cookie-parser@1.4.3", + "_inCache": true, + "_location": "/cookie-parser", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/cookie-parser-1.4.3.tgz_1464325360032_0.20419598533771932" + }, + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "cookie-parser", + "scope": null, + "escapedName": "cookie-parser", + "name": "cookie-parser", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "#USER" + ], + "_resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "_shasum": "0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5", + "_shrinkwrap": null, + "_spec": "cookie-parser", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "bugs": { + "url": "https://github.com/expressjs/cookie-parser/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "dependencies": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + }, + "description": "cookie parsing with signatures", + "devDependencies": { + "istanbul": "0.4.3", + "mocha": "2.5.3", + "supertest": "1.1.0" + }, + "directories": {}, + "dist": { + "shasum": "0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5", + "tarball": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz" + }, + "engines": { + "node": ">= 0.8.0" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "gitHead": "ad0b2cb834affe3929f0a690cd0494cd0b96d6be", + "homepage": "https://github.com/expressjs/cookie-parser", + "keywords": [ + "cookie", + "middleware" + ], + "license": "MIT", + "maintainers": [ + { + "name": "defunctzombie", + "email": "shtylman@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "cookie-parser", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/expressjs/cookie-parser.git" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "version": "1.4.3" +} diff --git a/node_modules/cookie-signature/.npmignore b/node_modules/cookie-signature/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/node_modules/cookie-signature/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/node_modules/cookie-signature/History.md b/node_modules/cookie-signature/History.md new file mode 100644 index 0000000..78513cc --- /dev/null +++ b/node_modules/cookie-signature/History.md @@ -0,0 +1,38 @@ +1.0.6 / 2015-02-03 +================== + +* use `npm test` instead of `make test` to run tests +* clearer assertion messages when checking input + + +1.0.5 / 2014-09-05 +================== + +* add license to package.json + +1.0.4 / 2014-06-25 +================== + + * corrected avoidance of timing attacks (thanks @tenbits!) + +1.0.3 / 2014-01-28 +================== + + * [incorrect] fix for timing attacks + +1.0.2 / 2014-01-28 +================== + + * fix missing repository warning + * fix typo in test + +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/cookie-signature/Readme.md b/node_modules/cookie-signature/Readme.md new file mode 100644 index 0000000..2559e84 --- /dev/null +++ b/node_modules/cookie-signature/Readme.md @@ -0,0 +1,42 @@ + +# 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/cookie-signature/index.js b/node_modules/cookie-signature/index.js new file mode 100644 index 0000000..b8c9463 --- /dev/null +++ b/node_modules/cookie-signature/index.js @@ -0,0 +1,51 @@ +/** + * 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 value must be provided as a string."); + if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); + 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("Signed cookie string must be provided."); + if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); + var str = val.slice(0, val.lastIndexOf('.')) + , mac = exports.sign(str, secret); + + return sha1(mac) == sha1(val) ? str : false; +}; + +/** + * Private + */ + +function sha1(str){ + return crypto.createHash('sha1').update(str).digest('hex'); +} diff --git a/node_modules/cookie-signature/package.json b/node_modules/cookie-signature/package.json new file mode 100644 index 0000000..04075fb --- /dev/null +++ b/node_modules/cookie-signature/package.json @@ -0,0 +1,92 @@ +{ + "_args": [ + [ + { + "raw": "cookie-signature@1.0.6", + "scope": null, + "escapedName": "cookie-signature", + "name": "cookie-signature", + "rawSpec": "1.0.6", + "spec": "1.0.6", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express" + ] + ], + "_from": "cookie-signature@1.0.6", + "_id": "cookie-signature@1.0.6", + "_inCache": true, + "_location": "/cookie-signature", + "_nodeVersion": "0.10.36", + "_npmUser": { + "name": "natevw", + "email": "natevw@yahoo.com" + }, + "_npmVersion": "2.3.0", + "_phantomChildren": {}, + "_requested": { + "raw": "cookie-signature@1.0.6", + "scope": null, + "escapedName": "cookie-signature", + "name": "cookie-signature", + "rawSpec": "1.0.6", + "spec": "1.0.6", + "type": "version" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "_shasum": "e303a882b342cc3ee8ca513a79999734dab3ae2c", + "_shrinkwrap": null, + "_spec": "cookie-signature@1.0.6", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@learnboost.com" + }, + "bugs": { + "url": "https://github.com/visionmedia/node-cookie-signature/issues" + }, + "dependencies": {}, + "description": "Sign and unsign cookies", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "directories": {}, + "dist": { + "shasum": "e303a882b342cc3ee8ca513a79999734dab3ae2c", + "tarball": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + }, + "gitHead": "391b56cf44d88c493491b7e3fc53208cfb976d2a", + "homepage": "https://github.com/visionmedia/node-cookie-signature", + "keywords": [ + "cookie", + "sign", + "unsign" + ], + "license": "MIT", + "main": "index", + "maintainers": [ + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "natevw", + "email": "natevw@yahoo.com" + } + ], + "name": "cookie-signature", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/visionmedia/node-cookie-signature.git" + }, + "scripts": { + "test": "mocha --require should --reporter spec" + }, + "version": "1.0.6" +} diff --git a/node_modules/cookie/HISTORY.md b/node_modules/cookie/HISTORY.md new file mode 100644 index 0000000..5bd6485 --- /dev/null +++ b/node_modules/cookie/HISTORY.md @@ -0,0 +1,118 @@ +0.3.1 / 2016-05-26 +================== + + * Fix `sameSite: true` to work with draft-7 clients + - `true` now sends `SameSite=Strict` instead of `SameSite` + +0.3.0 / 2016-05-26 +================== + + * Add `sameSite` option + - Replaces `firstPartyOnly` option, never implemented by browsers + * Improve error message when `encode` is not a function + * Improve error message when `expires` is not a `Date` + +0.2.4 / 2016-05-20 +================== + + * perf: enable strict mode + * perf: use for loop in parse + * perf: use string concatination for serialization + +0.2.3 / 2015-10-25 +================== + + * Fix cookie `Max-Age` to never be a floating point number + +0.2.2 / 2015-09-17 +================== + + * Fix regression when setting empty cookie value + - Ease the new restriction, which is just basic header-level validation + * Fix typo in invalid value errors + +0.2.1 / 2015-09-17 +================== + + * Throw on invalid values provided to `serialize` + - Ensures the resulting string is a valid HTTP header value + +0.2.0 / 2015-08-13 +================== + + * Add `firstPartyOnly` option + * Throw better error for invalid argument to parse + * perf: hoist regular expression + +0.1.5 / 2015-09-17 +================== + + * Fix regression when setting empty cookie value + - Ease the new restriction, which is just basic header-level validation + * Fix typo in invalid value errors + +0.1.4 / 2015-09-17 +================== + + * Throw better error for invalid argument to parse + * Throw on invalid values provided to `serialize` + - Ensures the resulting string is a valid HTTP header value + +0.1.3 / 2015-05-19 +================== + + * Reduce the scope of try-catch deopt + * Remove argument reassignments + +0.1.2 / 2014-04-16 +================== + + * Remove unnecessary files from npm package + +0.1.1 / 2014-02-23 +================== + + * Fix bad parse when cookie value contained a comma + * Fix support for `maxAge` of `0` + +0.1.0 / 2013-05-01 +================== + + * Add `decode` option + * Add `encode` option + +0.0.6 / 2013-04-08 +================== + + * Ignore cookie parts missing `=` + +0.0.5 / 2012-10-29 +================== + + * Return raw cookie value if value unescape errors + +0.0.4 / 2012-06-21 +================== + + * Use encode/decodeURIComponent for cookie encoding/decoding + - Improve server/client interoperability + +0.0.3 / 2012-06-06 +================== + + * Only escape special characters per the cookie RFC + +0.0.2 / 2012-06-01 +================== + + * Fix `maxAge` option to not throw error + +0.0.1 / 2012-05-28 +================== + + * Add more tests + +0.0.0 / 2012-05-28 +================== + + * Initial release diff --git a/node_modules/cookie/LICENSE b/node_modules/cookie/LICENSE new file mode 100644 index 0000000..058b6b4 --- /dev/null +++ b/node_modules/cookie/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2012-2014 Roman Shtylman +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/cookie/README.md b/node_modules/cookie/README.md new file mode 100644 index 0000000..db0d078 --- /dev/null +++ b/node_modules/cookie/README.md @@ -0,0 +1,220 @@ +# cookie + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Basic HTTP cookie parser and serializer for HTTP servers. + +## Installation + +```sh +$ npm install cookie +``` + +## API + +```js +var cookie = require('cookie'); +``` + +### cookie.parse(str, options) + +Parse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs. +The `str` argument is the string representing a `Cookie` header value and `options` is an +optional object containing additional parsing options. + +```js +var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2'); +// { foo: 'bar', equation: 'E=mc^2' } +``` + +#### Options + +`cookie.parse` accepts these properties in the options object. + +##### decode + +Specifies a function that will be used to decode a cookie's value. Since the value of a cookie +has a limited character set (and must be a simple string), this function can be used to decode +a previously-encoded cookie value into a JavaScript string or other object. + +The default function is the global `decodeURIComponent`, which will decode any URL-encoded +sequences into their byte representations. + +**note** if an error is thrown from this function, the original, non-decoded cookie value will +be returned as the cookie's value. + +### cookie.serialize(name, value, options) + +Serialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the +name for the cookie, the `value` argument is the value to set the cookie to, and the `options` +argument is an optional object containing additional serialization options. + +```js +var setCookie = cookie.serialize('foo', 'bar'); +// foo=bar +``` + +#### Options + +`cookie.serialize` accepts these properties in the options object. + +##### domain + +Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6266-5.2.3]. By default, no +domain is set, and most clients will consider the cookie to apply to only the current domain. + +##### encode + +Specifies a function that will be used to encode a cookie's value. Since value of a cookie +has a limited character set (and must be a simple string), this function can be used to encode +a value into a string suited for a cookie's value. + +The default function is the global `ecodeURIComponent`, which will encode a JavaScript string +into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range. + +##### expires + +Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6266-5.2.1]. +By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and +will delete it on a condition like exiting a web browser application. + +**note** the [cookie storage model specification][rfc-6266-5.3] states that if both `expires` and +`magAge` are set, then `maxAge` takes precedence, but it is possiblke not all clients by obey this, +so if both are set, they should point to the same date and time. + +##### httpOnly + +Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6266-5.2.6]. When truthy, +the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set. + +**note** be careful when setting this to `true`, as compliant clients will not allow client-side +JavaScript to see the cookie in `document.cookie`. + +##### maxAge + +Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6266-5.2.2]. +The given number will be converted to an integer by rounding down. By default, no maximum age is set. + +**note** the [cookie storage model specification][rfc-6266-5.3] states that if both `expires` and +`magAge` are set, then `maxAge` takes precedence, but it is possiblke not all clients by obey this, +so if both are set, they should point to the same date and time. + +##### path + +Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6266-5.2.4]. By default, the path +is considered the ["default path"][rfc-6266-5.1.4]. By default, no maximum age is set, and most +clients will consider this a "non-persistent cookie" and will delete it on a condition like exiting +a web browser application. + +##### sameSite + +Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][draft-west-first-party-cookies-07]. + + - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement. + - `false` will not set the `SameSite` attribute. + - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement. + - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement. + +More information about the different enforcement levels can be found in the specification +https://tools.ietf.org/html/draft-west-first-party-cookies-07#section-4.1.1 + +**note** This is an attribute that has not yet been fully standardized, and may change in the future. +This also means many clients may ignore this attribute until they understand it. + +##### secure + +Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6266-5.2.5]. When truthy, +the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set. + +**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to +the server in the future if the browser does not have an HTTPS connection. + +## Example + +The following example uses this module in conjunction with the Node.js core HTTP server +to prompt a user for their name and display it back on future visits. + +```js +var cookie = require('cookie'); +var escapeHtml = require('escape-html'); +var http = require('http'); +var url = require('url'); + +function onRequest(req, res) { + // Parse the query string + var query = url.parse(req.url, true, true).query; + + if (query && query.name) { + // Set a new cookie with the name + res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), { + httpOnly: true, + maxAge: 60 * 60 * 24 * 7 // 1 week + })); + + // Redirect back after setting cookie + res.statusCode = 302; + res.setHeader('Location', req.headers.referer || '/'); + res.end(); + return; + } + + // Parse the cookies on the request + var cookies = cookie.parse(req.headers.cookie || ''); + + // Get the visitor name set in the cookie + var name = cookies.name; + + res.setHeader('Content-Type', 'text/html; charset=UTF-8'); + + if (name) { + res.write('

    Welcome back, ' + escapeHtml(name) + '!

    '); + } else { + res.write('

    Hello, new visitor!

    '); + } + + res.write('
    '); + res.write(' '); + res.end(' values + * + * @param {string} str + * @param {object} [options] + * @return {object} + * @public + */ + +function parse(str, options) { + if (typeof str !== 'string') { + throw new TypeError('argument str must be a string'); + } + + var obj = {} + var opt = options || {}; + var pairs = str.split(pairSplitRegExp); + var dec = opt.decode || decode; + + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i]; + var eq_idx = pair.indexOf('='); + + // skip things that don't look like key=value + if (eq_idx < 0) { + continue; + } + + 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]) { + obj[key] = tryDecode(val, dec); + } + } + + return obj; +} + +/** + * Serialize data into a cookie header. + * + * 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} + * @public + */ + +function serialize(name, val, options) { + var opt = options || {}; + var enc = opt.encode || encode; + + if (typeof enc !== 'function') { + throw new TypeError('option encode is invalid'); + } + + if (!fieldContentRegExp.test(name)) { + throw new TypeError('argument name is invalid'); + } + + var value = enc(val); + + if (value && !fieldContentRegExp.test(value)) { + throw new TypeError('argument val is invalid'); + } + + var str = name + '=' + value; + + if (null != opt.maxAge) { + var maxAge = opt.maxAge - 0; + if (isNaN(maxAge)) throw new Error('maxAge should be a Number'); + str += '; Max-Age=' + Math.floor(maxAge); + } + + if (opt.domain) { + if (!fieldContentRegExp.test(opt.domain)) { + throw new TypeError('option domain is invalid'); + } + + str += '; Domain=' + opt.domain; + } + + if (opt.path) { + if (!fieldContentRegExp.test(opt.path)) { + throw new TypeError('option path is invalid'); + } + + str += '; Path=' + opt.path; + } + + if (opt.expires) { + if (typeof opt.expires.toUTCString !== 'function') { + throw new TypeError('option expires is invalid'); + } + + str += '; Expires=' + opt.expires.toUTCString(); + } + + if (opt.httpOnly) { + str += '; HttpOnly'; + } + + if (opt.secure) { + str += '; Secure'; + } + + if (opt.sameSite) { + var sameSite = typeof opt.sameSite === 'string' + ? opt.sameSite.toLowerCase() : opt.sameSite; + + switch (sameSite) { + case true: + str += '; SameSite=Strict'; + break; + case 'lax': + str += '; SameSite=Lax'; + break; + case 'strict': + str += '; SameSite=Strict'; + break; + default: + throw new TypeError('option sameSite is invalid'); + } + } + + return str; +} + +/** + * Try decoding a string using a decoding function. + * + * @param {string} str + * @param {function} decode + * @private + */ + +function tryDecode(str, decode) { + try { + return decode(str); + } catch (e) { + return str; + } +} diff --git a/node_modules/cookie/package.json b/node_modules/cookie/package.json new file mode 100644 index 0000000..b157bdf --- /dev/null +++ b/node_modules/cookie/package.json @@ -0,0 +1,106 @@ +{ + "_args": [ + [ + { + "raw": "cookie@0.3.1", + "scope": null, + "escapedName": "cookie", + "name": "cookie", + "rawSpec": "0.3.1", + "spec": "0.3.1", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express" + ] + ], + "_from": "cookie@0.3.1", + "_id": "cookie@0.3.1", + "_inCache": true, + "_location": "/cookie", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/cookie-0.3.1.tgz_1464323556714_0.6435900838114321" + }, + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "cookie@0.3.1", + "scope": null, + "escapedName": "cookie", + "name": "cookie", + "rawSpec": "0.3.1", + "spec": "0.3.1", + "type": "version" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "_shasum": "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb", + "_shrinkwrap": null, + "_spec": "cookie@0.3.1", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express", + "author": { + "name": "Roman Shtylman", + "email": "shtylman@gmail.com" + }, + "bugs": { + "url": "https://github.com/jshttp/cookie/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "dependencies": {}, + "description": "HTTP server cookie parsing and serialization", + "devDependencies": { + "istanbul": "0.4.3", + "mocha": "1.21.5" + }, + "directories": {}, + "dist": { + "shasum": "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb", + "tarball": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "gitHead": "e3c77d497d66c8b8d4b677b8954c1b192a09f0b3", + "homepage": "https://github.com/jshttp/cookie", + "keywords": [ + "cookie", + "cookies" + ], + "license": "MIT", + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "cookie", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jshttp/cookie.git" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" + }, + "version": "0.3.1" +} diff --git a/node_modules/core-util-is/LICENSE b/node_modules/core-util-is/LICENSE new file mode 100644 index 0000000..d8d7f94 --- /dev/null +++ b/node_modules/core-util-is/LICENSE @@ -0,0 +1,19 @@ +Copyright Node.js 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/core-util-is/README.md b/node_modules/core-util-is/README.md new file mode 100644 index 0000000..5a76b41 --- /dev/null +++ b/node_modules/core-util-is/README.md @@ -0,0 +1,3 @@ +# core-util-is + +The `util.is*` functions introduced in Node v0.12. diff --git a/node_modules/core-util-is/float.patch b/node_modules/core-util-is/float.patch new file mode 100644 index 0000000..a06d5c0 --- /dev/null +++ b/node_modules/core-util-is/float.patch @@ -0,0 +1,604 @@ +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/core-util-is/lib/util.js b/node_modules/core-util-is/lib/util.js new file mode 100644 index 0000000..ff4c851 --- /dev/null +++ b/node_modules/core-util-is/lib/util.js @@ -0,0 +1,107 @@ +// 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(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +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 objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (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 = Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} diff --git a/node_modules/core-util-is/package.json b/node_modules/core-util-is/package.json new file mode 100644 index 0000000..3eb10f9 --- /dev/null +++ b/node_modules/core-util-is/package.json @@ -0,0 +1,94 @@ +{ + "_args": [ + [ + { + "raw": "core-util-is@~1.0.0", + "scope": null, + "escapedName": "core-util-is", + "name": "core-util-is", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/readable-stream" + ] + ], + "_from": "core-util-is@>=1.0.0 <1.1.0", + "_id": "core-util-is@1.0.2", + "_inCache": true, + "_location": "/core-util-is", + "_nodeVersion": "4.0.0", + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_npmVersion": "3.3.2", + "_phantomChildren": {}, + "_requested": { + "raw": "core-util-is@~1.0.0", + "scope": null, + "escapedName": "core-util-is", + "name": "core-util-is", + "rawSpec": "~1.0.0", + "spec": ">=1.0.0 <1.1.0", + "type": "range" + }, + "_requiredBy": [ + "/readable-stream" + ], + "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "_shasum": "b5fd54220aa2bc5ab57aab7140c940754503c1a7", + "_shrinkwrap": null, + "_spec": "core-util-is@~1.0.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/readable-stream", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/core-util-is/issues" + }, + "dependencies": {}, + "description": "The `util.is*` functions introduced in Node v0.12.", + "devDependencies": { + "tap": "^2.3.0" + }, + "directories": {}, + "dist": { + "shasum": "b5fd54220aa2bc5ab57aab7140c940754503c1a7", + "tarball": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + }, + "gitHead": "a177da234df5638b363ddc15fa324619a38577c8", + "homepage": "https://github.com/isaacs/core-util-is#readme", + "keywords": [ + "util", + "isBuffer", + "isArray", + "isNumber", + "isString", + "isRegExp", + "isThis", + "isThat", + "polyfill" + ], + "license": "MIT", + "main": "lib/util.js", + "maintainers": [ + { + "name": "isaacs", + "email": "i@izs.me" + } + ], + "name": "core-util-is", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/core-util-is.git" + }, + "scripts": { + "test": "tap test.js" + }, + "version": "1.0.2" +} diff --git a/node_modules/core-util-is/test.js b/node_modules/core-util-is/test.js new file mode 100644 index 0000000..1a490c6 --- /dev/null +++ b/node_modules/core-util-is/test.js @@ -0,0 +1,68 @@ +var assert = require('tap'); + +var t = require('./lib/util'); + +assert.equal(t.isArray([]), true); +assert.equal(t.isArray({}), false); + +assert.equal(t.isBoolean(null), false); +assert.equal(t.isBoolean(true), true); +assert.equal(t.isBoolean(false), true); + +assert.equal(t.isNull(null), true); +assert.equal(t.isNull(undefined), false); +assert.equal(t.isNull(false), false); +assert.equal(t.isNull(), false); + +assert.equal(t.isNullOrUndefined(null), true); +assert.equal(t.isNullOrUndefined(undefined), true); +assert.equal(t.isNullOrUndefined(false), false); +assert.equal(t.isNullOrUndefined(), true); + +assert.equal(t.isNumber(null), false); +assert.equal(t.isNumber('1'), false); +assert.equal(t.isNumber(1), true); + +assert.equal(t.isString(null), false); +assert.equal(t.isString('1'), true); +assert.equal(t.isString(1), false); + +assert.equal(t.isSymbol(null), false); +assert.equal(t.isSymbol('1'), false); +assert.equal(t.isSymbol(1), false); +assert.equal(t.isSymbol(Symbol()), true); + +assert.equal(t.isUndefined(null), false); +assert.equal(t.isUndefined(undefined), true); +assert.equal(t.isUndefined(false), false); +assert.equal(t.isUndefined(), true); + +assert.equal(t.isRegExp(null), false); +assert.equal(t.isRegExp('1'), false); +assert.equal(t.isRegExp(new RegExp()), true); + +assert.equal(t.isObject({}), true); +assert.equal(t.isObject([]), true); +assert.equal(t.isObject(new RegExp()), true); +assert.equal(t.isObject(new Date()), true); + +assert.equal(t.isDate(null), false); +assert.equal(t.isDate('1'), false); +assert.equal(t.isDate(new Date()), true); + +assert.equal(t.isError(null), false); +assert.equal(t.isError({ err: true }), false); +assert.equal(t.isError(new Error()), true); + +assert.equal(t.isFunction(null), false); +assert.equal(t.isFunction({ }), false); +assert.equal(t.isFunction(function() {}), true); + +assert.equal(t.isPrimitive(null), true); +assert.equal(t.isPrimitive(''), true); +assert.equal(t.isPrimitive(0), true); +assert.equal(t.isPrimitive(new Date()), false); + +assert.equal(t.isBuffer(null), false); +assert.equal(t.isBuffer({}), false); +assert.equal(t.isBuffer(new Buffer(0)), true); diff --git a/node_modules/crc/LICENSE b/node_modules/crc/LICENSE new file mode 100644 index 0000000..c49097c --- /dev/null +++ b/node_modules/crc/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright 2014 Alex Gorbatchev + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +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/crc/README.md b/node_modules/crc/README.md new file mode 100644 index 0000000..ca501f6 --- /dev/null +++ b/node_modules/crc/README.md @@ -0,0 +1,106 @@ +# crc + +[![GitTip](http://img.shields.io/gittip/alexgorbatchev.svg?style=flat)](https://www.gittip.com/alexgorbatchev/) +[![Dependency status](http://img.shields.io/david/alexgorbatchev/node-crc.svg?style=flat)](https://david-dm.org/alexgorbatchev/node-crc) +[![devDependency Status](http://img.shields.io/david/dev/alexgorbatchev/node-crc.svg?style=flat)](https://david-dm.org/alexgorbatchev/node-crc?type=dev) +[![Build Status](http://img.shields.io/travis/alexgorbatchev/node-crc.svg?style=flat&branch=master)](https://travis-ci.org/alexgorbatchev/node-crc) + +[![NPM](https://nodei.co/npm/crc.svg?style=flat)](https://npmjs.org/package/crc) + +Module for calculating Cyclic Redundancy Check (CRC) for Node.js and the Browser. + +# Important: Node >= 6.3.0 < 6.9.2 + +There's was a bug in Node [#9342](https://github.com/nodejs/node/issues/9342) that affected CRC calculation if `Buffer.split()` is used (see issue discussion for details). This affected all version starting from `6.3.0` up to but not including `6.9.2`. The patch [#9341](https://github.com/nodejs/node/pull/9341) was released in `6.9.2`. If you are upgrading and seeing odd CRC calculation mismatches, this might be the reason. + +## Features + +* Full test suite comparing values against reference `pycrc` implementation. +* Pure JavaScript implementation, no dependencies. +* Provides CRC tables for optimized calculations. +* Provides support for the following CRC algorithms: + * CRC1 `crc.crc1(…)` + * CRC8 `crc.crc8(…)` + * CRC8 1-Wire `crc.crc81wire(…)` + * CRC16 `crc.crc16(…)` + * CRC16 CCITT `crc.crc16ccitt(…)` + * CRC16 Modbus `crc.crc16modbus(…)` + * CRC16 Kermit `crc.crc16kermit(…)` + * CRC16 XModem `crc.crc16xmodem(…)` + * CRC24 `crc.crc24(…)` + * CRC32 `crc.crc32(…)` + +## Installation + +``` +npm install crc +``` + +## Usage + +Calculate a CRC32: + +```js +var crc = require('crc'); + +crc.crc32('hello').toString(16); +// "3610a686" +``` + +Calculate a CRC32 of a file: + +```js +crc.crc32(fs.readFileSync('README.md', 'utf8')).toString(16); +// "127ad531" +``` + +Or using a `Buffer`: + +```js +crc.crc32(fs.readFileSync('README.md')).toString(16); +// "127ad531" +``` + +Incrementally calculate a CRC32: + +```js +value = crc.crc32('one'); +value = crc.crc32('two', value); +value = crc.crc32('three', value); +value.toString(16); +// "9e1c092" +``` + +## Running tests + +``` +npm test +``` + +## Thanks! + +[pycrc](http://www.tty1.net/pycrc/) library is which the source of all of the CRC tables. + +# License + +The MIT License (MIT) + +Copyright (c) 2014 Alex Gorbatchev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/crc/lib/crc1.js b/node_modules/crc/lib/crc1.js new file mode 100644 index 0000000..dd72bb2 --- /dev/null +++ b/node_modules/crc/lib/crc1.js @@ -0,0 +1,28 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = (0, _define_crc2.default)('crc1', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = ~~previous; + var accum = 0; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + accum += byte; + } + + crc += accum % 256; + return crc % 256; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc16.js b/node_modules/crc/lib/crc16.js new file mode 100644 index 0000000..a4436f3 --- /dev/null +++ b/node_modules/crc/lib/crc16.js @@ -0,0 +1,31 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Generated by `./pycrc.py --algorithm=table-driven --model=crc-16 --generate=c` +var TABLE = [0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040]; + +if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE); + +module.exports = (0, _define_crc2.default)('crc-16', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = ~~previous; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + crc = (TABLE[(crc ^ byte) & 0xff] ^ crc >> 8) & 0xffff; + } + + return crc; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc16_ccitt.js b/node_modules/crc/lib/crc16_ccitt.js new file mode 100644 index 0000000..bc0a930 --- /dev/null +++ b/node_modules/crc/lib/crc16_ccitt.js @@ -0,0 +1,31 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Generated by `./pycrc.py --algorithm=table-driven --model=ccitt --generate=c` +var TABLE = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0]; + +if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE); + +module.exports = (0, _define_crc2.default)('ccitt', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = typeof previous !== 'undefined' ? ~~previous : 0xffff; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + crc = (TABLE[(crc >> 8 ^ byte) & 0xff] ^ crc << 8) & 0xffff; + } + + return crc; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc16_kermit.js b/node_modules/crc/lib/crc16_kermit.js new file mode 100644 index 0000000..09af8e8 --- /dev/null +++ b/node_modules/crc/lib/crc16_kermit.js @@ -0,0 +1,31 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Generated by `./pycrc.py --algorithm=table-driven --model=kermit --generate=c` +var TABLE = [0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78]; + +if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE); + +module.exports = (0, _define_crc2.default)('kermit', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = typeof previous !== 'undefined' ? ~~previous : 0x0000; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + crc = (TABLE[(crc ^ byte) & 0xff] ^ crc >> 8) & 0xffff; + } + + return crc; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc16_modbus.js b/node_modules/crc/lib/crc16_modbus.js new file mode 100644 index 0000000..d12e89b --- /dev/null +++ b/node_modules/crc/lib/crc16_modbus.js @@ -0,0 +1,31 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Generated by `./pycrc.py --algorithm=table-driven --model=crc-16-modbus --generate=c` +var TABLE = [0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040]; + +if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE); + +module.exports = (0, _define_crc2.default)('crc-16-modbus', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = typeof previous !== 'undefined' ? ~~previous : 0xffff; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + crc = (TABLE[(crc ^ byte) & 0xff] ^ crc >> 8) & 0xffff; + } + + return crc; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc16_xmodem.js b/node_modules/crc/lib/crc16_xmodem.js new file mode 100644 index 0000000..03bf560 --- /dev/null +++ b/node_modules/crc/lib/crc16_xmodem.js @@ -0,0 +1,35 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = (0, _define_crc2.default)('xmodem', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = typeof previous !== 'undefined' ? ~~previous : 0x0; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + var code = crc >>> 8 & 0xFF; + + code ^= byte & 0xFF; + code ^= code >>> 4; + crc = crc << 8 & 0xFFFF; + crc ^= code; + code = code << 5 & 0xFFFF; + crc ^= code; + code = code << 7 & 0xFFFF; + crc ^= code; + } + + return crc; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc24.js b/node_modules/crc/lib/crc24.js new file mode 100644 index 0000000..a1f9f30 --- /dev/null +++ b/node_modules/crc/lib/crc24.js @@ -0,0 +1,31 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Generated by `./pycrc.py --algorithm=table-drive --model=crc-24 --generate=c` +var TABLE = [0x000000, 0x864cfb, 0x8ad50d, 0x0c99f6, 0x93e6e1, 0x15aa1a, 0x1933ec, 0x9f7f17, 0xa18139, 0x27cdc2, 0x2b5434, 0xad18cf, 0x3267d8, 0xb42b23, 0xb8b2d5, 0x3efe2e, 0xc54e89, 0x430272, 0x4f9b84, 0xc9d77f, 0x56a868, 0xd0e493, 0xdc7d65, 0x5a319e, 0x64cfb0, 0xe2834b, 0xee1abd, 0x685646, 0xf72951, 0x7165aa, 0x7dfc5c, 0xfbb0a7, 0x0cd1e9, 0x8a9d12, 0x8604e4, 0x00481f, 0x9f3708, 0x197bf3, 0x15e205, 0x93aefe, 0xad50d0, 0x2b1c2b, 0x2785dd, 0xa1c926, 0x3eb631, 0xb8faca, 0xb4633c, 0x322fc7, 0xc99f60, 0x4fd39b, 0x434a6d, 0xc50696, 0x5a7981, 0xdc357a, 0xd0ac8c, 0x56e077, 0x681e59, 0xee52a2, 0xe2cb54, 0x6487af, 0xfbf8b8, 0x7db443, 0x712db5, 0xf7614e, 0x19a3d2, 0x9fef29, 0x9376df, 0x153a24, 0x8a4533, 0x0c09c8, 0x00903e, 0x86dcc5, 0xb822eb, 0x3e6e10, 0x32f7e6, 0xb4bb1d, 0x2bc40a, 0xad88f1, 0xa11107, 0x275dfc, 0xdced5b, 0x5aa1a0, 0x563856, 0xd074ad, 0x4f0bba, 0xc94741, 0xc5deb7, 0x43924c, 0x7d6c62, 0xfb2099, 0xf7b96f, 0x71f594, 0xee8a83, 0x68c678, 0x645f8e, 0xe21375, 0x15723b, 0x933ec0, 0x9fa736, 0x19ebcd, 0x8694da, 0x00d821, 0x0c41d7, 0x8a0d2c, 0xb4f302, 0x32bff9, 0x3e260f, 0xb86af4, 0x2715e3, 0xa15918, 0xadc0ee, 0x2b8c15, 0xd03cb2, 0x567049, 0x5ae9bf, 0xdca544, 0x43da53, 0xc596a8, 0xc90f5e, 0x4f43a5, 0x71bd8b, 0xf7f170, 0xfb6886, 0x7d247d, 0xe25b6a, 0x641791, 0x688e67, 0xeec29c, 0x3347a4, 0xb50b5f, 0xb992a9, 0x3fde52, 0xa0a145, 0x26edbe, 0x2a7448, 0xac38b3, 0x92c69d, 0x148a66, 0x181390, 0x9e5f6b, 0x01207c, 0x876c87, 0x8bf571, 0x0db98a, 0xf6092d, 0x7045d6, 0x7cdc20, 0xfa90db, 0x65efcc, 0xe3a337, 0xef3ac1, 0x69763a, 0x578814, 0xd1c4ef, 0xdd5d19, 0x5b11e2, 0xc46ef5, 0x42220e, 0x4ebbf8, 0xc8f703, 0x3f964d, 0xb9dab6, 0xb54340, 0x330fbb, 0xac70ac, 0x2a3c57, 0x26a5a1, 0xa0e95a, 0x9e1774, 0x185b8f, 0x14c279, 0x928e82, 0x0df195, 0x8bbd6e, 0x872498, 0x016863, 0xfad8c4, 0x7c943f, 0x700dc9, 0xf64132, 0x693e25, 0xef72de, 0xe3eb28, 0x65a7d3, 0x5b59fd, 0xdd1506, 0xd18cf0, 0x57c00b, 0xc8bf1c, 0x4ef3e7, 0x426a11, 0xc426ea, 0x2ae476, 0xaca88d, 0xa0317b, 0x267d80, 0xb90297, 0x3f4e6c, 0x33d79a, 0xb59b61, 0x8b654f, 0x0d29b4, 0x01b042, 0x87fcb9, 0x1883ae, 0x9ecf55, 0x9256a3, 0x141a58, 0xefaaff, 0x69e604, 0x657ff2, 0xe33309, 0x7c4c1e, 0xfa00e5, 0xf69913, 0x70d5e8, 0x4e2bc6, 0xc8673d, 0xc4fecb, 0x42b230, 0xddcd27, 0x5b81dc, 0x57182a, 0xd154d1, 0x26359f, 0xa07964, 0xace092, 0x2aac69, 0xb5d37e, 0x339f85, 0x3f0673, 0xb94a88, 0x87b4a6, 0x01f85d, 0x0d61ab, 0x8b2d50, 0x145247, 0x921ebc, 0x9e874a, 0x18cbb1, 0xe37b16, 0x6537ed, 0x69ae1b, 0xefe2e0, 0x709df7, 0xf6d10c, 0xfa48fa, 0x7c0401, 0x42fa2f, 0xc4b6d4, 0xc82f22, 0x4e63d9, 0xd11cce, 0x575035, 0x5bc9c3, 0xdd8538]; + +if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE); + +module.exports = (0, _define_crc2.default)('crc-24', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = typeof previous !== 'undefined' ? ~~previous : 0xb704ce; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + crc = (TABLE[(crc >> 16 ^ byte) & 0xff] ^ crc << 8) & 0xffffff; + } + + return crc; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc32.js b/node_modules/crc/lib/crc32.js new file mode 100644 index 0000000..f2aa8ca --- /dev/null +++ b/node_modules/crc/lib/crc32.js @@ -0,0 +1,31 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Generated by `./pycrc.py --algorithm=table-driven --model=crc-32 --generate=c` +var 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]; + +if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE); + +module.exports = (0, _define_crc2.default)('crc-32', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = previous === 0 ? 0 : ~~previous ^ -1; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + crc = TABLE[(crc ^ byte) & 0xff] ^ crc >>> 8; + } + + return crc ^ -1; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc8.js b/node_modules/crc/lib/crc8.js new file mode 100644 index 0000000..735927f --- /dev/null +++ b/node_modules/crc/lib/crc8.js @@ -0,0 +1,31 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Generated by `./pycrc.py --algorithm=table-driven --model=crc-8 --generate=c` +var TABLE = [0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a, 0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4, 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34, 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83, 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3]; + +if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE); + +module.exports = (0, _define_crc2.default)('crc-8', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = ~~previous; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + crc = TABLE[(crc ^ byte) & 0xff] & 0xff; + } + + return crc; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/crc8_1wire.js b/node_modules/crc/lib/crc8_1wire.js new file mode 100644 index 0000000..5eb4f5d --- /dev/null +++ b/node_modules/crc/lib/crc8_1wire.js @@ -0,0 +1,31 @@ +'use strict'; + +var _buffer = require('buffer'); + +var _create_buffer = require('./create_buffer'); + +var _create_buffer2 = _interopRequireDefault(_create_buffer); + +var _define_crc = require('./define_crc'); + +var _define_crc2 = _interopRequireDefault(_define_crc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Generated by `./pycrc.py --algorithm=table-driven --model=dallas-1-wire --generate=c` +var TABLE = [0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35]; + +if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE); + +module.exports = (0, _define_crc2.default)('dallas-1-wire', function (buf, previous) { + if (!_buffer.Buffer.isBuffer(buf)) buf = (0, _create_buffer2.default)(buf); + + var crc = ~~previous; + + for (var index = 0; index < buf.length; index++) { + var byte = buf[index]; + crc = TABLE[(crc ^ byte) & 0xff] & 0xff; + } + + return crc; +}); \ No newline at end of file diff --git a/node_modules/crc/lib/create_buffer.js b/node_modules/crc/lib/create_buffer.js new file mode 100644 index 0000000..eabd6ac --- /dev/null +++ b/node_modules/crc/lib/create_buffer.js @@ -0,0 +1,16 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _buffer = require('buffer'); + +var createBuffer = _buffer.Buffer.from && _buffer.Buffer.alloc && _buffer.Buffer.allocUnsafe && _buffer.Buffer.allocUnsafeSlow ? _buffer.Buffer.from + +// support for Node < 5.10 +: function (val) { + return new _buffer.Buffer(val); +}; + +exports.default = createBuffer; \ No newline at end of file diff --git a/node_modules/crc/lib/define_crc.js b/node_modules/crc/lib/define_crc.js new file mode 100644 index 0000000..70c3bdc --- /dev/null +++ b/node_modules/crc/lib/define_crc.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (model, calc) { + var fn = function fn(buf, previous) { + return calc(buf, previous) >>> 0; + }; + fn.signed = calc; + fn.unsigned = fn; + fn.model = model; + + return fn; +}; \ No newline at end of file diff --git a/node_modules/crc/lib/index.js b/node_modules/crc/lib/index.js new file mode 100644 index 0000000..d25d8df --- /dev/null +++ b/node_modules/crc/lib/index.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports = { + crc1: require('./crc1'), + crc8: require('./crc8'), + crc81wire: require('./crc8_1wire'), + crc16: require('./crc16'), + crc16ccitt: require('./crc16_ccitt'), + crc16modbus: require('./crc16_modbus'), + crc16xmodem: require('./crc16_xmodem'), + crc16kermit: require('./crc16_kermit'), + crc24: require('./crc24'), + crc32: require('./crc32') +}; \ No newline at end of file diff --git a/node_modules/crc/package.json b/node_modules/crc/package.json new file mode 100644 index 0000000..213aee5 --- /dev/null +++ b/node_modules/crc/package.json @@ -0,0 +1,101 @@ +{ + "_args": [ + [ + { + "raw": "crc@3.4.4", + "scope": null, + "escapedName": "crc", + "name": "crc", + "rawSpec": "3.4.4", + "spec": "3.4.4", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express-session" + ] + ], + "_from": "crc@3.4.4", + "_id": "crc@3.4.4", + "_inCache": true, + "_location": "/crc", + "_nodeVersion": "6.9.2", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/crc-3.4.4.tgz_1481570747807_0.07623594417236745" + }, + "_npmUser": { + "name": "alexgorbatchev", + "email": "alex.gorbatchev@gmail.com" + }, + "_npmVersion": "3.10.9", + "_phantomChildren": {}, + "_requested": { + "raw": "crc@3.4.4", + "scope": null, + "escapedName": "crc", + "name": "crc", + "rawSpec": "3.4.4", + "spec": "3.4.4", + "type": "version" + }, + "_requiredBy": [ + "/express-session" + ], + "_resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "_shasum": "9da1e980e3bd44fc5c93bf5ab3da3378d85e466b", + "_shrinkwrap": null, + "_spec": "crc@3.4.4", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express-session", + "author": { + "name": "Alex Gorbatchev", + "url": "https://github.com/alexgorbatchev" + }, + "bugs": { + "url": "https://github.com/alexgorbatchev/node-crc/issues" + }, + "dependencies": {}, + "description": "Module for calculating Cyclic Redundancy Check (CRC) for Node.js and the Browser.", + "devDependencies": { + "babel-cli": "^6.3.15", + "babel-core": "^6.1.21", + "babel-preset-es2015": "^6.1.18", + "beautify-benchmark": "^0.2.4", + "benchmark": "^1.0.0", + "buffer-crc32": "^0.2.3", + "chai": "^3.4.1", + "mocha": "*", + "seedrandom": "^2.3.6" + }, + "directories": {}, + "dist": { + "shasum": "9da1e980e3bd44fc5c93bf5ab3da3378d85e466b", + "tarball": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz" + }, + "files": [ + "lib" + ], + "gitHead": "360367e1ae930d8663679aff89bb79705947c08c", + "homepage": "https://github.com/alexgorbatchev/node-crc", + "keywords": [ + "crc" + ], + "license": "MIT", + "main": "./lib/index.js", + "maintainers": [ + { + "name": "alexgorbatchev", + "email": "alex.gorbatchev@gmail.com" + } + ], + "name": "crc", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/alexgorbatchev/node-crc.git" + }, + "scripts": { + "pretest": "cd src && babel --out-dir ../lib *.js", + "test": "mocha test/*.test.js" + }, + "version": "3.4.4" +} diff --git a/node_modules/deasync-promise/.npmignore b/node_modules/deasync-promise/.npmignore new file mode 100644 index 0000000..d410697 --- /dev/null +++ b/node_modules/deasync-promise/.npmignore @@ -0,0 +1,2 @@ +/node_modules/ +.git diff --git a/node_modules/deasync-promise/Readme.md b/node_modules/deasync-promise/Readme.md new file mode 100644 index 0000000..a99b97d --- /dev/null +++ b/node_modules/deasync-promise/Readme.md @@ -0,0 +1,17 @@ +# deasync-promise + +Transforms async functions into sync with promise API + +## Usage + +```js +import deasyncPromise from 'deasync-promise'; +let promiseWhichWillBeResolved = generateSuccessPromise(); +let syncResult = deasyncPromise(promiseWhichWillBeResolved) + +let promiseWhichWillBeRejected = generateRejectedPromise(); +try { + let syncResult = deasyncPromise(promiseWhichWillBeRejected) +} catch (err) { +} +``` \ No newline at end of file diff --git a/node_modules/deasync-promise/index.js b/node_modules/deasync-promise/index.js new file mode 100644 index 0000000..dbe3a09 --- /dev/null +++ b/node_modules/deasync-promise/index.js @@ -0,0 +1,19 @@ +var loop = require('deasync').runLoopOnce; + +module.exports = function(promise) { + var result, error, done = false; + promise.then(function(res) { + result = res; + }, function(err) { + error = err; + }).then(function() { + done = true; + }); + while(!done) { + loop(); + } + if (error) { + throw error; + } + return result; +} \ No newline at end of file diff --git a/node_modules/deasync-promise/package.json b/node_modules/deasync-promise/package.json new file mode 100644 index 0000000..24813cf --- /dev/null +++ b/node_modules/deasync-promise/package.json @@ -0,0 +1,89 @@ +{ + "_args": [ + [ + { + "raw": "deasync-promise@1.0.1", + "scope": null, + "escapedName": "deasync-promise", + "name": "deasync-promise", + "rawSpec": "1.0.1", + "spec": "1.0.1", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/system-sleep" + ] + ], + "_from": "deasync-promise@1.0.1", + "_id": "deasync-promise@1.0.1", + "_inCache": true, + "_location": "/deasync-promise", + "_nodeVersion": "5.11.1", + "_npmOperationalInternal": { + "host": "packages-16-east.internal.npmjs.com", + "tmp": "tmp/deasync-promise-1.0.1.tgz_1473104559619_0.0667382818646729" + }, + "_npmUser": { + "name": "jakwuh", + "email": "jakwuh@gmail.com" + }, + "_npmVersion": "3.8.6", + "_phantomChildren": {}, + "_requested": { + "raw": "deasync-promise@1.0.1", + "scope": null, + "escapedName": "deasync-promise", + "name": "deasync-promise", + "rawSpec": "1.0.1", + "spec": "1.0.1", + "type": "version" + }, + "_requiredBy": [ + "/system-sleep" + ], + "_resolved": "https://registry.npmjs.org/deasync-promise/-/deasync-promise-1.0.1.tgz", + "_shasum": "2b27de478167af4ef34ba99879c52ec0cedd61c2", + "_shrinkwrap": null, + "_spec": "deasync-promise@1.0.1", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/system-sleep", + "author": { + "name": "jakwuh", + "email": "jakwuh@gmail.com" + }, + "bugs": { + "url": "https://github.com/jakwuh/deasync-promise/issues" + }, + "dependencies": { + "deasync": "^0.1.7" + }, + "description": "Transform async functions into sync with promise API", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "2b27de478167af4ef34ba99879c52ec0cedd61c2", + "tarball": "https://registry.npmjs.org/deasync-promise/-/deasync-promise-1.0.1.tgz" + }, + "gitHead": "60a3db30098bbea5e04410fe64fc2fe0370e2d30", + "homepage": "https://github.com/jakwuh/deasync-promise#readme", + "license": "ISC", + "main": "index.js", + "maintainers": [ + { + "name": "jakwuh", + "email": "jakwuh@gmail.com" + } + ], + "name": "deasync-promise", + "optionalDependencies": {}, + "publishConfig": { + "registry": "https://registry.npmjs.org" + }, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/jakwuh/deasync-promise.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "version": "1.0.1" +} diff --git a/node_modules/deasync/.npmignore b/node_modules/deasync/.npmignore new file mode 100644 index 0000000..71af399 --- /dev/null +++ b/node_modules/deasync/.npmignore @@ -0,0 +1,6 @@ +build/ +.project/ +.c9/ +.node-gyp +test/ +node-src/ \ No newline at end of file diff --git a/node_modules/deasync/README.md b/node_modules/deasync/README.md new file mode 100644 index 0000000..8c6fec9 --- /dev/null +++ b/node_modules/deasync/README.md @@ -0,0 +1,114 @@ +DeAsync.js +======= +[![NPM version](http://img.shields.io/npm/v/deasync.svg)](https://www.npmjs.org/package/deasync) + +DeAsync turns async function into sync, implemented with a blocking mechanism by calling Node.js event loop at JavaScript layer. The core of deasync is writen in C++. + + +## Motivation + +Suppose you maintain a library that exposes a function getData. Your users call it to get actual data: +var myData = getData(); +Under the hood data is saved in a file so you implemented getData using Node.js built-in fs.readFileSync. It's obvious both getData and fs.readFileSync are sync functions. One day you were told to switch the underlying data source to a repo such as MongoDB which can only be accessed asynchronously. You were also told to avoid pissing off your users, getData API cannot be changed to return merely a promise or demand a callback parameter. How do you meet both requirements? + +You may tempted to use [node-fibers](https://github.com/laverdet/node-fibers) or a module derived from it, but node fibers can only wrap async function call into a sync function inside a fiber. In the case above you cannot assume all callers are inside fibers. On the other hand, if you start a fiber in `getData` then `getData` itself will still return immediately without waiting for the async call result. For similar reason ES6 generators introduced in Node v0.11 won't work either. + +What really needed is a way to block subsequent JavaScript from running without blocking entire thread by yielding to allow other events in the event loop to be handled. Ideally the blockage is removed as soon as the result of async function is available. A less ideal but often acceptable alternative is a `sleep` function which you can use to implement the blockage like ```while(!done) sleep(100);```. It is less ideal because sleep duration has to be guessed. It is important the `sleep` function not only shouldn't block entire thread, but also shouldn't incur busy wait that pegs the CPU to 100%. + + +DeAsync supports both alternatives. + + + +## Usages + + +* Generic wrapper of async function with standard API signature `function(p1,...pn,function cb(error,result){})`. Returns `result` and throws `error` as exception if not null: + +```javascript +var deasync = require('deasync'); +var cp = require('child_process'); +var exec = deasync(cp.exec); +// output result of ls -la +try{ + console.log(exec('ls -la')); +} +catch(err){ + console.log(err); +} +// done is printed last, as supposed, with cp.exec wrapped in deasync; first without. +console.log('done'); +``` + +* For async function with non-standard API, for instance `function asyncFunction(p1,function cb(res){})`, use `loopWhile(predicateFunc)` where `predicateFunc` is a function that returns boolean loop condition + +```javascript +var done = false; +var data; +asyncFunction(p1,function cb(res){ + data = res; + done = true; +}); +require('deasync').loopWhile(function(){return !done;}); +// data is now populated +``` + +* Sleep (a wrapper of setTimeout) + +```javascript +function SyncFunction(){ + var ret; + setTimeout(function(){ + ret = "hello"; + },3000); + while(ret === undefined) { + require('deasync').sleep(100); + } + // returns hello with sleep; undefined without + return ret; +} +``` + +## Installation +Prerequisites + +1. Node v0.11+ +2. [Node-Gyp](https://github.com/TooTallNate/node-gyp) +3. Find your platform and Node version combination [here](https://github.com/abbr/deasync-bin). If you **cannot find yours** you may have to install the node-gyp compilers listed [here](https://github.com/TooTallNate/node-gyp) +4. You may also need to [update npm's bundled node gyp](https://github.com/TooTallNate/node-gyp/wiki/Updating-npm's-bundled-node-gyp). + +To install, run: +```npm install deasync``` + + + +## Support +Pull requests and issue reporting are welcome. For issues to be considered by maintainer: + 1. they must be reproducible. + 2. there must be evidence the issue is related to `deasync`. + +To that end, the issue should contain platform information, error message relevant to `deasync`, and preferably code snippet. If code snippet is supplied, it must be self-contained, i.e. independent from your runtime environment or other modules not explictly specified via `require` in the code snippet. + +## License + +The MIT License (MIT) + +Copyright (c) 2015 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION 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/deasync/bin/darwin-x64-node-0.10/deasync.node b/node_modules/deasync/bin/darwin-x64-node-0.10/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..497fd083766d7d7067d10be7a594208a172f6e97 GIT binary patch literal 10344 zcmeHNU2Ggz6}}t)B&4Zhq#~uzG#hF|XxiOuoETf>r`velHE}m9uM@07dOJHawl|%f zU3O;e81Z8%Ey`AMF;X9p$U|SM7SXr9l!vyo2~8`+PpLow0R^NAThNyxC_<3sJ9o~F zXD4w~DkNU!O6Q*Q-Fxo2=bkw;x^riK`p>s7ZxtfZC4|@p+5sx|2=T~r0+J9ngZ6C^ zLdxmf%(QCitol2lU<{iAW<)P{OX=IE{SDoyy$dukN+Ot65XQ6{rCTg-0P@H4n`Q4x zQ`FuoHwInWWx{M)b!=mM8~%|!Id404y8(@;y<7SMdrt>U5Wc>Drsp>*?i}k!?OkAd zw{pM63_ES3QOc&fSaB^`ac64^cV3S_vOS9pXsqo;xs>+2oNX9YJLrk}m){w*KgR83}ab%t$GZtnuECWT0W|Nb^y zUtFXcAQwSYD0hj-pS>WyKK1ZxH&1r2Z28VqIn*@ujifhU3We7;&R{8SC8#J zHh?zeYR`5&n6|6u(g^DY_Z^|FBHi>FX{S;q@_ftOzdtpcLJC#N=tiN(O2@da@1iBq zF|M@a`F1sR&vnO%NARfV95-j0(o1E+!^Fp6o%}wV44$W-U`%n0OB{hX0&xW52*eSH zBk;eAK(;iwvU}*S?RK`*9^8-J$j&{YJ$O5W)%4Fn(XtKu9$DVG10o5Z@v3M z8)fYTIwx8e^Q|{Cf6x4U?Ji~E;@X|yusBJYFK1qZ#ci;dl_%Htpl7u`IEGD8dvILU zc~yT-)sw0&sJf`?DOFFa`h==yRDHjyzo_a5P-DWC-EU)w>*p@F+mP2uUJc~8NPakw z|3LETK>jVsP9Xn^mUEX&4 z4%QRdzW#4)IdY?Z|0KOJ(4SbZ5Y-z$)ALyOH@isB0Zp-<8P&V@O!s4OnDib8t*{<; z(LssKEBb#R+h50CmAQV;-PaeWA7Xwt^GW72%q`}1=3ilcmign%pJ4tB^XHh;`$V|t z_u${r#vSFCtQVlTjw299AdWyBfj9zj1mXz95r`uYM<9+s9Dz6jaRlB^1n658jthEs zF;6n5@0ZkmfH|Lt^xn;wzA;jNk@*bs2bs?^r_(UfJI(wF@NVF5gX4Ilca`yln{Vp9 z!`!Y;Wh}JmG7KS%v%s@m3GtinjFw1;j$cx!^m)NK;DHc+5%^({E~GyI(&sRQ3#h`F z>}}_dnXi+62>%)QTJ}t|Q_=RqnCw;A-d@OLPh-+2fAskbVe%)8Y5XFO|14x0ukks^ z*Yc+TJ5}mWe8j{q(euU?1>TuhzT*FR!XFTVzLQgVgD@7azkB~07{f0Iz34+Sh4H=!&PMR52>ww7_jh;N zOGWTK5nPI3BZBJ@{Iv+)i-mj?bQ@>@Gzg+^#vcdKJxAY*ZwKuMQBKmqFMVTwzvGf3 zecZDfUV64+TZ^`nvgOgZ0T`QkT z`9@>T_OI9vAJf+GkHYL`sG%{JzmRonHwT-4JPt?Oh0;NZrDWvc z6Nb~Yu@v|V81nZ$I85Q9$;nMV(&kGhl!pyLKg*~;p=2392jO=k{RdO+m2+YQ%nbVjM` z869*alUulE$5^;ycpRbhD>Zl8uGSsHw=ERlf?#N((sqEK7K_jH+_4gT8&(l$tUx~q=6mOWc>ZHv~0+X2XEIzD9*@<`tw72LWT$iuzf0a=y4!3gmmp*v?x literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/darwin-x64-node-0.11/deasync.node b/node_modules/deasync/bin/darwin-x64-node-0.11/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..1901902c631e81a9d2811ac2b077986ac8ccf23d GIT binary patch literal 10808 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/darwin-x64-node-0.12/deasync.node b/node_modules/deasync/bin/darwin-x64-node-0.12/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..32ae998db922c7205f3e75e33f2a60d17b38f8ed GIT binary patch literal 10848 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/darwin-x64-node-6/deasync.node b/node_modules/deasync/bin/darwin-x64-node-6/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..fac05182abb03975826c3212e6cd2aad66ac651b GIT binary patch literal 13032 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/darwin-x64-node-7/deasync.node b/node_modules/deasync/bin/darwin-x64-node-7/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..56806d32500d59e39c12f2fa61e24324c0d836d4 GIT binary patch literal 13088 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 KS1)UQB>W5AG?OF% literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/darwin-x64-node-8/deasync.node b/node_modules/deasync/bin/darwin-x64-node-8/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..3bfce12fa76b815a96abf9ea1b331d2b8368e68b GIT binary patch literal 13112 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 xc-zZJ@e$G!Jcj+w<>C%KwFb{t35*+718! literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-ia32-node-0.10/deasync.node b/node_modules/deasync/bin/linux-ia32-node-0.10/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..e209605cf2f24a8b2d8506014ca5e528107d1916 GIT binary patch literal 7672 zcmeHMYiwLc6`r-Xi9?*NTbw3M3|Xbyl7{pq8@sMUi&)2AyKWrUc%3vfZEvr4uk9`S zaCh%Ic8S!MEfCAKWC%j7sCYD$njaBDqC%kbM~Y2DQAE?0ivB=?QiVFiQa2)i1tsSD zX6`uGn;4LI{L0v8&wO*voOzvj+?mItoozm!Pv}r7Dg{w+xeyKDcVDL@4I(I(i%p_V z+$iN*pZuARD7uEAMo4)nAVlfoitd8J=RnI`c?I}~kbej{sRT@--0xB?^fiT$M$)qG zGfv{z3L!LYfsCZ(pM@OovY_qvK<=$y4ay=hKbYjT;FX~Eu05hXdfwN){d;4-|MWL~ zoq@w2`^Mg9zfajmL2L`{9(rn{PfSNvFl{wxEof)-?b+k+eeK}nn}2-wok#c8{dnSh z;16$o5P19ek!vAd6xdcB(1qd#4Zwq-56a}3GTiCW--vkDgK6(*nf~i#a*tR9Av^9# zVE%n&_;4BiOPRg>9vnpc3uXG-%jC=1k#1ml-!0R>4e~8PrBH+3i2y&nfY*px;I+UU zx9cEpSfsy36kzX^bU-1l7c1zdVgx?KaJ{G&gOEQQRDN`wSR;gK4y3agGw)bA$25i6 zpUfnM+0nb(OxQVlAendUT<`9dR5oMxT74;7$*wFh<0BRgSgGV=P`qc@>~Sr$q^x}2 z&I|MYuIZ_nMBI&K=k&#R;pk}qtTvS zKs%aq1BJAmaq`h$}yD@6MgLHx`tJQV{zDM38QXWNe&57u8?t+ckIc)YBFOd7TOT@=5Ok; z4q&MAcC@=2b#6*#FnSmcw=E0(!!%n0CT) zEVxWxKCe6mNtuMsU}UlhTeNp}>})Z&8)2hfdY$@#n=ToASdA|Iac%O6n~;IN%aGrY zga=oM9@ofFl@RzB&%1mDq{Li@$uGFPHmGpW2J^2nb^$x z5Ii|`5^H>MwsxYp70MHbxdYvLx;VG&z_Q|W?fwU+#*4GiL;0n#+R*&zb7v=;~V@-k2+BL*pOP&}%T%8uHWF8|ThUyu?N+d-q9ucPM*L z9FI^?2#ps@s{Fusk;~$kKQyxnDKky@d9_F_pQm-gPrDv0)tAD+92 z(%*Dej~C~Z!Icv-O*TtfID0b$?4-%P7=+No1EIRHy3oni5Ia|Z%kBpEmk^s_bBeS6 z@m8tEM(HHv8h1i<%mJNw=6D(-tHm;h6RJYGw9KqX+s3BRsQh6j7ONAB)1mzjO}YKW z`Zb__K@<}~X$v`qP|Qhxh#41~g2OMEnqZCHvaZm8v1Qs~ak^owwEv->_{F(ZliqNa z)kHr@U;Xyq=|_)aub0lr^~^A~=5z6_?owmK<9ZQ6Eqv=M@7x5=*0myQEBFf-n?Yij zeF1zL{FmSya0cIFJ;Hae%D2AS?>~g51d&z;nnOLdfr~&@TcG-$Ygan{5%HOIcW&Mu z+Sr8T2&e(Jp9L4qfvPW8GzY4Sl`Vm7iNF^8cFW%fwfW zeY8Apq#_!)t0fS5Fi_p%X5ef)2AYAsJU=qe)o`^3uJ*vy9{3;hKn?bv6F7S?aAoIt z3P%bN1?QH+Zv-55!c9J|(k6!`tE!!q>C4IrKmS$Bp>6wr;zJP+R9((k+gPe*x zIVBmkb9sCcEdnNFIXgvt6&Xr7!jPX2hGUN)F2C1|TvndU4SUe+&sk~P984gmMkmwNOuQUr17OW@Qaaj)iBQIEby`VNRPFv+>cMnKFmhNhQR!J?hif(;%(KIYDB*smJ-G^@b5= zT{+h{S4lS^t^@TLc=phGCFqd0Ns0QQZR+x@qV;&^McT*8x`BEOUj%7A-W!ng8H;jV z?jcu?_ZvL9k~~vP+Mu0DS5NjIbaiA2DJaq{-f?&9z78RzyMrH@7EqZu2;3t!}rfZ(B=OQDJ-Auhy>Bc(Cb88hoBpIADs2u z=3?q?cH?A}k+@dVmJWNNSJD8SIt=6-GaZhu7UBt1iu0e}i>x2AN}u=I+k{Q#v?oE^ zgX(2L-x;bKTeU_|snRW(Yk|VbAm_Zos&_cI6;=_>VTC!OYOX5G6-&)Yh1sKO?kNnX zMBp4_sFX8S$hoAj+D$lT6y{E==7z%Dan&497*2#hUuUS49;^IXVfLKbixuXmC_h!0 zJE^)`R+u}gx>r!x^{5~b?PG8d=tm5d?#>$tN(juI`ckNbr+LT4FV4@iMVu!LKJ4T? zJ8Vr05?=)8CohMbxV$~&CpRk8Q7%zPr$>>+gX9JBB2~{tig|x$LkBLH zdDHH>P1kq8QQiV~*7p=LxK@XX=U$zHa5#?pnfRb-9k52bcPv~+<67Ko>uKH{HKSdv zd?=8eqvIn@jmCiOm_u>X87yQzZ}g3@k@>7SD6jK{+4{Mz=G`4FNX2V{w$a{s@6P5< z^WL_$ShUydZQj`#h2{Uk_4_}4z))`xm)(Ku+iiKG*6mg|^@|=hA`$Nu_y6Zb<4PC* zmp!7CKXRxyhw=xW%Ul01Uk%V1iykv{=cpHovgZQ%BCzO*K#k`TZ!Jqd5_tzmK8(mg W)l+WKo7ANW;rT+nt{{o`jQ;=-b`Zn> literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-ia32-node-0.11/deasync.node b/node_modules/deasync/bin/linux-ia32-node-0.11/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..561860966cc15c27aefee0a02c308d8304abd1cc GIT binary patch literal 7914 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 B;~@Y5 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-ia32-node-5/deasync.node b/node_modules/deasync/bin/linux-ia32-node-5/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..49bf1067ccfab62c2916c513eeada3d95d396b0f GIT binary patch literal 12551 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 C2jTnx literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-ia32-node-6/deasync.node b/node_modules/deasync/bin/linux-ia32-node-6/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..f752062abd4057873b973f683d1cb2c1a0643f88 GIT binary patch literal 12551 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 Cdg2fO literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-ia32-node-7/deasync.node b/node_modules/deasync/bin/linux-ia32-node-7/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..18d632c94758fb857f82c9ce8fa6961a859fd00c GIT binary patch literal 12832 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 Z*FWb5`%n+y+HmWe`vmm4&J0@L{{k)zVL1Q* literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-x64-node-0.10/deasync.node b/node_modules/deasync/bin/linux-x64-node-0.10/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..3bc92c988a49dd1fea6c518e8614ea5383d49ef9 GIT binary patch literal 9580 zcmeHNeQaCR6~B&~)P<6yAM3(r-=LMk023!oN!YT+O`N)InwmI49UXeS*e{8hKQjBd zBy8G{0;mBZb!eLynlv;vgs3!i(=-9wP*_W85z-2%Q^g;w3^8oz7~KZy#D;gyedoCM zJ^P7GL;H(c#pj;iJzw|Z-Fx3V{Z?dnsKMtGT>Roo0y*sh8|kNp*0odt(l2^M6Z~E- zE|Id0=bLJ3FRrv9reIkD=%Wd1t&#<**%hLt2AiGrQ#ZN3QgVyZculhWej{zo*}L@EZe>lV=XR z{I}OneQnQWPc5Epe*2ZbG@ty{qb<v-zv^lX4hzH z_##MnX|)r74eYOiRj@>OJ85-$$ZrAp)ph0_$9}a~Db8K!a4R~c{WhUdJbSoV*QYYM ztX{B;yrt_xpG;*_Le~?s23C!9>P}PWJND_L=2WU+nfZaVQ7D)Nq2DsnxvwX*d8n98 zSgBlg%*@QB4a@8rG4F`PhDPH0=BSZPrp@h8?Y`Ma7tKf{GP)DE-f(`Zm@%_fArgsq z=_B!wjzYch)Ku26ig^_Dv>ys>Gc9%+*++7l<5oVEo$3YW@wv=IE***OOh7+mkehc; z+-@eUuDEGMJmQjJ=%E{8`P__|x8}kY*qbO?W<(VC=}B|aD5fnvoy*OL6!a;NC{}bB zEsJ9f*&U82z{WrbVq+mWxX9&;SrYCY&w|xd)=XCW5K{GfMvXfL(z${eiNzr1o>Ugb z9;So(QXL;vXVB>rVojPxVJ@4{Gr43jZHjbiqF^Nx*IW}UxOz^-6dY}F*`we*7T9*1 zf~!Zyw1TT~&M3ILrOYZg4;k9OOTjNffXaRaZ)Ona0R>kNxrY>7Jx?A{@KuVP==_;L zsRBUhVc6+P--R)a&L0UJu5|x3poz-Hzr%0K`hKV(KaHB@(-kNi-$ovEMEQi||A;(J zNqI@~uOg32pnOR3FC&jrUw%aLFCdRoRX!m3-y)AwRK82{Pa}_0Q=XCh&ymL|Dc>gf zCy-x(d`$8`LLR4}+%Nfuk;kDgcS!z0 z&hXW5M4$c8ADw^47wtV&&|20H;vg^iq6>`~Xb)G`9s$t_s6u=G&7+MYQ1$H%f93e$ z$(HqZLx?Efw+Bp$aR|V=1jM^2(q{0#1zL_*PUAcsKWs-l9(pjOPrgh&rcF1!WyOS`!GTxk@m z^GCo|Y45FvxxeL|0Q2Aj#eSnpoTQFr7|ywhbuog31?xUJGNB1o{Bb2Y~YH zf$z>y;hSysUAl640PolvpzSjF+Yfp=P!Vo!y|*FK+&1qYY1SIT&259tt>NYX%HbF- zft9wMI4et!StGoRl--v6kQL%k=-Fz*4eWr)%@1)%4s zo$nqx+2=b4->LX6rqMls#6*nrd0*qZ5WZJqIYt2E0jlubXh}*5c%!ll`-5#u#$Un{ z9SV%M3tHwZ)a83~FrSkzNI`R2pUfK>Q=d+PE^{K7 zuyXkVIJC*_31~zGv<|v55+jpJfcG5OgrA^vWE+K-F0hcx;Hxu_-~UQ41q1jf@N?w# zosIpt*L4sYK7cjP`uvh*kF` z+MkvXgu?z=pZlMMHdUYZIi|cXqCP&FZv9!nFfQ7@s^1ZLKW9H6A`ALbO92>Fzk~Jz zrthi3P-lI9r~9T$pTA=>J>{A()?>4GyY%_oVan$f%d>yx?<0Ml=O#MPm|nqxL^&L$ z50XC5zt{I>HskjHh)X|8{+VL`)WY+}*b`8}Sa^M$|1NJ!xW~(_|1+0UpXn)RQOBR}B^v4PuWH&A)?@m*OMi*{FOhz`OJ8&GZvl_Cxc_2}Em0zUe7@D9 zsSMQ5z#qon;lf$}S{F{kDRr<3zrj>}E3#|X*v$J1hE>*Q78{nqZe*sjK zvKQ(;aXx;2K5i#GK>gz9ZWeH~v*fbl6+fO|7=OSO|F^2kw>s48i7I z&(0PP9KRb}S>siR2@mfUsvE^w0dJHuY11;3!OdNpdIdH>ZgUp6?vSwGVw1&8W{&+tMh2yuq0#WJ zh|V0k;re+m@_ko&QNB~_w+wIE4tY~dAS+2?PHoEM?{L>>F$>vZ5K+>_kUSj@g%a@j zJ29;rcNlZA-fE5&vc21ecW(_3>$``B;*l|ZEWC9%g5!}a}EIJeH#dM zTE-w_ig6grw2W6LtTPapYJB~#=)?GiQs8fcjnEuXv_iXOI zyhU1PI{hPeX7}9lyXTyH?ztcD>wF{B+*n#tBDna(mjrS3mpVwjYA~);6_9#SCoaPO zLNQ;;mQ6HGs=Zw4Kum=&BtU&k$8W(Ek_9zng=x9Z!4D|PdZmC#uTJUJDLtlp)lit0 zJ7&Z*Q2HHL?QXhM$uT8aDy^^EF{=N*Lb8+SN(UB9S?^}(k)Ib@RG37Y>aSQ_vdVv^ zij`xVi_R!q8(KQW^0IHebo=Pw3(wy^^7>yAadT~!|Hf( zMxn?vV0nys%TJ5o`!La7^39MpbOWkB8w2u^-%|unLeEQ{wt^R419?OBrIUF@@E`*1 zWv8VG{#23iz7P9ecFq-%pI-z&T4Y=cir}Fl_#H*Y`$`dcz{0@KUG4!eM_eqnsMT~x z2}EUl<_cqpp%8}*O1w%Obm3>v0okcm`!lVy!jPZiu@3K6cHH*gf!=IUCF+&^?aB_t zevY_A{8-snun?xXwLh6K({?0fo2D>(`VxJ@Z0gu##;laJwJ&X3sg6wz@npj4h;+v- zr_H;?jBbyRfk?b>2Lv|`nr+HLLp+jBTWOIQH2Y$43*99Lgn9dlwoIb!rk0w)x|-_7 zOd@LcB@+#ic)U9j{Yq1!C)w1}Zmzl|63w%iQ8s838%oPG6`j_raF|4Mh0ly z=dk6L_iar?>`aQL8LLmu^W@G00n9jilpkGfyPfJwYz+k9T4O5N-)Z;M zxm>&{+R|Qa2FQ6wxMOI*%6FuOy`tT+br0cJe(ANZFu?{^x2CYHQua{LMxWgo+Y04Z z6Sj>l63Lil_9tT*EOFi<(WV2!hf#Lf$}AV@`n|Ee6fSmwN<|_I-%j0ppDCm8cx?> zE~hm73I;*58m?brPiuIUCVy7L=j*r{R|zn>?sHk7@QVQ8Qj#x*hT{m$mt`8x_de8E zt>Jnc>NH%xKdRSo>YGbg!+CC~tyRM>W?|6VG<>FpZ_#iy<+8O`!}S}R0S(uW{_PsB zUzc}k_-w7;`!#%yhVRwz%QSqyhSU8VmjfD3_Z(av)o^`&!^3Zvhxe3K%{4^$zA?Kj z+fX7zc=$;9Vb*l$_^MKfj9)bk{}qetQ6s*W8gr+{QLg&nGVo9qxf7Cqk9b-dxiQJV zNjxoy+~bmejd)rLxdW2_3-PoBa(g9zl6ac>+)l~=j(D2#+<@etCZ47`w?*>5CZ47^ z*DCp65KmhuS1zp~X^L~FKL&8s zy~NYh=1xg|2k|texf7C45kH6cG4P$?(Y5=5ghyWQ%58>zkH2E^F0=}Sb3H;nS~f<_ zqif0U&hRy7AsHS%J8N5M*I`UhYz`VRLGN{qpQ89fe#DU{KUn_ISzmbM>F}X9Zw!~5 z2>as zdFZA`j-UA8ElndI2Rnlu&7; z9C`W*@ZZqd3y&O=^4T~^j{KFBf+TS#_@+2=Q#j zQ6tF@P~CLjJ5770+n;UP(#5XHP>Ey?4QANCx{@?j1nbw%E(Gb?FAn?_ZuyMVIqMFdF6SA)e_L`EIC2KeX9a zLXn=8Y#4qUbQeZvgYE;}2O5JbM?m?EDcR8`O14*)ESh;yIXycsMcd{0o%(Qmyq;!Y zR%PR?1sf}7Y%AX>Zd`c77gj925~!5HG8g5rE3a$8S(Up>8!nw5gdyP9;upj3Ec`eG zD!6^!gT4);(;g@b4Not9^b!aM<>id}CI9xrURsxLc)&M2t+dOr>h${*+IM1{v-5Hr z^ZgPuRi+{^6@jS;OhsTS0#gx~iojF^rXnyEfvE^gMc|Vo!0%D{y(zyZWlerp_BHh~ zaHeYD?|%G_jlY|GMz!U6`MX`CTNxTdP!t86Q&)vY)NWKYl04{rzj) z@t^&ao&F#E@pp5#EA!NZUae@YqK%5)qG*qzgNp7}^xKL)qUf&_J*wynivC^EGm1`E z3um69S1Ve}3(Do_n3_KqoM(BRGQjWenP7jl*(hX{-9NNpZMAEkWTN4?7ccw2MyRI)LB-a~B_X>Y(C;?4}+9}~r zS@8&gsx}a}ggN zupa5}i^7W}4C2o(dvPq{LyPc7ll}epG{^z?l$7>4?G^X_;(bQ%d-O6*XHfU!cLsZh z^?Cm@U9aSMKl46hGj*uY-e-M2ADGI72((kbB*Xf=Z|i}P?YzD^Z}{Bd^93TZsO`_J z2&2Zf3FPyFDW4Z^|GED*mp-3AOgWCEPrkeTzY`ew#ODs5&rJE;g@`Qf_}>at*B5G^ zGL`QJl`auJ&zW|+^!a+iG|GWhHds%w@=Ju?KVMIn@;S@$ZvPXi{~9ImGxaftss3$^ zM0oy~4l0b@bmsxBRCbxT``_i#cL(TYR#cSdkKqSVp)-uv2VXxqKgb;~xBkP>r6IFE zUtgE0fxG41{3Fn%Sg?Mz`hHq{f%-pzF0DP*=j%sIwl^r-AAEe7zYn9K|gT$^RSqno~IrLbiDP#u5XZ zKz@rPV!uQ3|3<#%RQ>=${a3qi)?ezvNtOyzdNJ-sO(|vpn$*JE?yKdlDa{`TWxbeDIjB4~4i-gS@$7hiubAB=o6QT{QlD# zeE15*`$~i1Pt~M6FlzS+{R_CGLF;sycz4|4CjKexrHFGY9ik}wTtLg0aE`zHh6L<- z{7T@@DZ@Zbh!MME+b6yb9NuO6+T6Nn!LZm-yto(j^k-QBKg7BKSVwg_a$iM~ldh6_Mw!`Tl4W z`FzcRKolSSqrGNiTV$wpO+F1&wpn+V?&$S+|=HI zEY*qBRMYM^qm-PQ7MyUWL8ci?np@+^?nvB>*~wJejAXV8JQ)teE!&FuYuBuFS1=c>N`%Pql8O$`8% zRGSxwrITi_Ok5S_hUU%dg3adU#>VzghuINa*BpWkCnfT{*{v6n9y=+ab5c%aVGi#F zWW#CNn~d|#pGYRR(vF9NPb705irbb{G@Yyq||gSFl{_ucby z{qkPvK$`YPuJnBF`Q3BQJ@@mEuAi!k^5Dp0TE?P;Q-b#7oH_oau%qe_86`Y+x*BUS*N_w||9{PE)Npury7xg*yOHTMt zRIt2lHBcFL*XGtvR@JsO^rt7^dSS;Co34Fg!AmPY`$T#X`hw+4;6Xj~@7@W;#r8KY zLu?s5*sY%n*X-F8`0d+I{rQ1=_I-KL(W7JUmj8bDZCAYX)ORZ0dhu`NAacRvhS_m) zezC~&z)~CKk{>wWhhd=YPscnj2=nrs>;-!crwn^P{%ekrlqxA@rh{+8(;9ebsBu3U;z{UB=p54_@Xo8&Z|}Zai|W)o`zq_XA6lRd8)O=?s1`ZU zRA=8QOx0K8AdiZ_JgyOI$-o5o>=*~iCuX60Tlj5v8@wyr*`r{l?8UN5-ToKE$1>OBn> z7q>=R!?mgxoi~I#2KzO$BGK$MVNI7k1i#Fw7ha>9(+1Xu&XTE^ruL;`S(wYT7MQBV zB6HTH31s@mhHRFoHEs#9% zlNS78vF^*RDwhATz)vnWa6C)p^L|3Y<)iR-5{_psrPC6AC4oS5623sfCncO8?4oQ+ z!WT>OQ=(li!0?=>v_#;S002janG^|!Ez?Y^C7j-Mu&`Fb<@dn`377k)QNpoqN)*{5a=7xD0rl68XnD{~q!<74k3&`UT=i4~{4DvX%`9{wF9C=()`C88Z z2zgu@d4==eLmr1bU&;ALkjJ6UGtNJRJPvVw@;m@5A3z?5Hh-G)Uqc>;G(W-luOeTK z{5bHP!Lf~x0TLW}y(_PRevhYO`F<#6(49@tXHC0)~=B zOgj<|j&+U0>}0bf=1mrdp0zD?ucFy8qMxRg<22*K@iU!Fw{`;1ITVW@J?uSuKwxJ zXeZ+?v@OY1qxA6c#yfm>`nr5~;pntgzV+I4*G#vkBODz0F!$QO(dl)MK)(dMQ1txd!u6{0G z02~{SYZ;d=zEF8QH)PV$8|W;IM(J3D|8UFPH`RhXF1EFxivNLhu=+O8{m?oc=wYCT zfyTg<<3MSTaqVkouDzA6WeYAT!~e=FpzI2GPJdV^G~x)9S2mX~*-|loPuUQ=dFf5p zu32$4pj-x~IV%IZe82UTR~{_!FP!TGLx5igPYj+Z@Z%UzM&+CCcW)k>b6;s-cy7sK z^FY|gk43B({d*AX?Uv>J_qm7Xl-yxhHR^pD%7>txRi@k)vtEQ|(`*mS_P}fp%=W-+ z56t$!Y!A%#z-$l9_P}fp%=W;?=mBv#M)#<6Z%UTv?kpxQ2N#F}`tC<}ZuH&cQ=**i zZ|M%QQs7GkrTbd^FN%ro0RM5mkV1YE|C>UhJH`f)p}WNfafwNHfxCr&bO%d!t^$US zQwq07cc1iKnEofz-K2TfCJYn)xNwmCY!m*`9VONGuY%z}`N=E&Klq{V=2lnciUGY` z&{cxg3)(E`t%CLlIw0slLBApBqk{fa&=Z2bEa)48o)vVim_U~cx{4;0#nEvweiqnd zX`T{5_xZ#VrTcv1iEj4$Z&X%yc4w1%R$1$5@YG%J-H_$1_ZkCW%##`H(<9wL^|V2I zDVI#?nrBxs>*>zM6S3>#F~+&xNT!#0VuMN0G^n0tp0t*TASiPE37vWPXA_UE?S(x5 z#^_0>_~#Oj)~oiUBYm3M8v|Y93=K7sPDcg}4a(mg1u?K5>5E6fixe1y9}lm^un6B@ zm?xU*>w`~&)B&H6;yTB*VqIUf&hY+6PIF`i@*a53!rCEyTK`0wggmWhT8Ct&0W!Gu zNuTxyqC6l1%CTOQA$?l6jewzTQ(x>iwC~XV0wO$#2=o9Tbv_BK2eHTP{viAQDKxO?&v5^wxcZEV13GL@ZyDj>3 zo)C>t#|j&yCs_VvLav|A6QZ=wlDyUbq^Q462z*<7+#xD|YeNwlKcWKyBR8#aKx>6v zBG&r%Tl6PI{Y3vrih|Pk5qv*na1W#TLFXsM2U+{es{at^VwI#%=j&?GaI3tPe-w1F zFG#;ud{3>tNd51FF3vsDr}L&k=pPatP5nmoQ@eg*sh_^Lo?H$EkZ^s=iS&s+35Bx% zblx+?(0W`}hCJyJeFiXDpU#_c#ZcU75c5|tb4KPQ5VS?@SFTckV-VlM3472W=C5Mr zjLffrVEwfgob*>%aFoSF6z|HZZeAdMnne9C%OK=Qk6`3!?h}Ue$ZCU|6dMb^-(3d} z^&9P9xIXRbKXikkf0PE^U}w}XU|Zq_Y1;o}0XKL|=R+~>X6C*x6}VxCru|%k!S7OY zzb?k1(Xw_+z>!)RR<%P*P{2ZrTtCVvq( zG;p5IVejJSv!aBrlO@p4jkt+IqG7}7i#VM_{F@SBH^SqBuVkl%pN+s{YKF(o{w;vJ z;MBAB&s~6{{Wi;cYewKh7W|;Vt^c#W#qCe`1GWz~D3e&#$;I6gDZ?>d27=feh$&zwKo0k^ow zJ4)QvepBZ1f4{$p_F^<+Q z&hj|mcJYocIM{gua6A9s=lJyeq+TjG$k)JOU}vY(0gnQ17k?RdkblDgKhN=*^Q{!l zpGt`Pw8oXr<2bcunyz=izXZ5l|9{;<{<{wH^mX48jY2$Mi`N^4Ab@DE8rc&WY};Ul zfig3C4x%u5lpIR07ol}5n$|OV7Q#Hhh`Pn!uC|229T25D9h$1@eQFegQ!|X>@FYl8 zV<~l4BGny9s4+d2&Zv>>UIzaR`xBb3#XR*J*4Ke$8zCMCYy9Jc7(P8c$c+D}v20)8 zAgD;3ihpg3L{+u9-M1~E23ngiq?UUw@=dq5`nHAq076i$DG#L*FO2Zu zj|fr)>7vkGJ`fj*PyR3Cjg4^O3&lc{zx;ATj{CHa59NdS3F1|$Iv%V|q1q0?vj59S qU3pp>amOMO7NcK{X=xwUJR?HeW}bhXNNStNa~sP>D0FfB`+oqSohNMo literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-x64-node-4/deasync.node b/node_modules/deasync/bin/linux-x64-node-4/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..a5610943ee8caff094a2ad3fd80bf3093a2d62e7 GIT binary patch literal 13989 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-x64-node-5/deasync.node b/node_modules/deasync/bin/linux-x64-node-5/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..199cd7eca56567cddb3b351b94f2ca79e84965a4 GIT binary patch literal 13989 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-x64-node-6/deasync.node b/node_modules/deasync/bin/linux-x64-node-6/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..787899ce5c226703774b5af30528019f81df32e9 GIT binary patch literal 13989 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-x64-node-7/deasync.node b/node_modules/deasync/bin/linux-x64-node-7/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..6b4d14ea3430760d85481708d2bfb7699c8758a3 GIT binary patch literal 14014 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 RmZr=9LSX$LK<{0F`Y8ovMl literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/linux-x64-node-8/deasync.node b/node_modules/deasync/bin/linux-x64-node-8/deasync.node new file mode 100755 index 0000000000000000000000000000000000000000..54c8960ff4304f2de0b06c5f58a03acecf8b0a7d GIT binary patch literal 14014 zcmeHOeQ;FO6~D_8(EloiWwH?h005Tyx^{RwkmCz$PAcjJ8 zyk&-s1&V)1MZ2BO6LLgR7LUeLW)QD;Udh=!y2yeVQPTSc=%JsNdU%9jljzSWF2llq zqJrgP!%$5c&@d3%4;Xz`|;!VA846zN9rtgf$bPN)I}H%!}{szHfj3$Hi~mv-#TPZ#2Jp`i+l@q3NQB8?r*NNgW0a8k?;Aj01ig zCb*FNEC;*^>?pEfaeV=3Av=2@0EO_BgZzgM^3TIW7qSy_z;AZIE1_Qn{_Mv_n4m)T ziyZv977QqMBf!7n(C?cLcAj;J^IivkLJsmP9OREX;JSnVGackrhki3)r%>F$3{&9G ze!R`&Go4k)H2-E6X)@eZ_W^C<@n?|fzwHd^$ykYTkIZqWkUbu^%d zI`0L+HQid1uuv1y<8dR-v^y6zCBjW>8x}U`;fnIwL^xn}M#43EDAcA0?yd{BN9r0X zx+@oN)I$lw@ArcS@=NRDk&td0zVg+ES(AvxjIinN7L7iis)vIiqd5?X8Z|zDV?(n> z3VxR8hLN=EiIAyMCE>^l2w`W&= zAPRI++YM>ktT`nu1eS7E8cOpb%@1s~hVfq3+_^QZn~4}EHhSb+2E&Y-u|&X(#8w&| zdUt0ecJY~C!qdU7p!<{08IsQ?R7jjCF>$@@cD$ zMY=Ya?UlLd)wni*!@}rUvMoEJMm9%;mkVKb9J|6>0ArO6X7gfLn)n(}v9Z!u(Gub5 z>+g!1J78SlNYK!_BEdw+&}dC!ni14Z9oDzDc-&gv015|L(9q*M!T~QT!5S^z=jgp{ zpIA4`Y&gB2mfP^CkRMhQzNC^J;yrV6aYL-XvuwC$8dqm!HoQm350zSW@EuBi&pRpM z@~hCWgip0h^K(kV=Suil3BOvxFG%>;Bz%?_?-hW-qcM9Z5)P02>`^A+@aW1O1fb-Lk$COF$4&E7gb?%{|fYLgL>lykW_mw6!(m2Jp>c~`x0n`i9gqx z8OHeq`3aUh_CxY7UvR6*gX+s4+^)KY)YmQ~xblo1uKYSEtH~pocTs=mienyyvBV8( z?~3)%3?`DN%*krsiYCBQUwo0tq&mRO)+0rG0dW2OP&*!3r$KG!6i_p-2j^}P&dtVA zZUY!>WrkYQo4`Ox=}rbmdTq{_2e7;9mb&EU&1!$^5M;NKx&!)Dlkb3wsoSvoXW{e` zCaju#HFX~%OW{=4H+>$&cz@FH~A`>CsYGw--Q`BBP^X2F3!LEk7} zmpr2Otp@R`Nej621y}cS-+2^02_p4LV@OTF2C@@9UYFDnb60ocLP))+N70m+SkD!Db$##h+sre^rx*Fibaqp6@&aAhiyz zUc#FhT&+vKl3DzRi2*)AY%Wf%7bbqfO}tf~e78RNPjvqXHdu3Pg*5dPAn7GwB((>w zP9LV5D%FSVZdf8=-Na=Qf7N)sx5Q(CTj)(E5TKVH*oV2seJk!A;Q}}KX(rPMbPIIP zV9-$r+IHZFf$jy0_x})3Jm?wYy0?kBwtHOHOuk|~?s?6FHeA;`z!v^yXT_e{;#q4- zCiRTp$!?#0>rD&i%>|Up!R^n^LSOLO#aMN*XV;jTDdSc?>|WJ7c1+7eFjzf_-3(0_ zvP$sbNm;J;5qJOChl|wSabxa5S-&Sa1V$q;8iCOW{7)l5`){=0M*C~zM6tLy zH`cnCEO`13NP95!orCtWXrGVvCOkrq_AqE)kM=0&UGS4HGZ7R$i|>|j&>q!*xS+kM za{N&O2kj+ggnzV$M0+UNJuyY$@F z4ZgZ0lttc3Z^Z)NvIJ*+H(CH=-uR9#Q*Q%m#w^-FSK)|hc(;ZV-nK+%D7c_A$T-)b z$2*uexFZaj7Byqc8#6*Wg5oL~GMSfuAN1lE9p>d<3B9oh-)Q$59a?)#?=rNGAm|cj zX=r*Zrth#c=z3cK#K5}V)foUUB47|sUfzpk5q9pGHxTLSg7173fXk$K|Kq(t_nlK+ z26ZEDV`7;XuFk_fMf$WZ5dFH4r2CxiPcl#m7kDd^KCK%>w+Kb-7iCDF?&m7NP=xep z9U@BW4v6qWEDOXk6|TrOg0zkhrFF#aKlP9G53)Y3OGIfMLw)q!?*CnYp-;4K(z;EQ z)?*OihdutA0G0Kt#C=Yb??DJ%B(%;GZL{gqbB1US4P4kDJ;CywX1RZQ&Jd;bm*nmK zheiJtLO>Ur`b4iIML}u)h;|Eontywp5bo{BhrRy?pb>46{(jLv(KE6#T+{p!{0LlN z$SF+pT&4OUd%W!Wdq5YLO46t2Zn+q^UEa<=4Z7$*=~s&Hag~>-|2*ho?vXw{kE(<| z?rGscaijieT)%}jxqtdDH&n{iSh+>AXVNEnz^2a>#gY|d*y6Hh(j$5hTIBxec{8k7 zDqAd)JuBHO>*6R7w3QwI90fQA^(dU=%{TTXAIE_~%sx)ipC=0oS%k`i z{huH}P|_n9dCFbFkPenv9RD%{m-ybd0RAX$w0`0JS*ZUqF`!3jVFEck?EPD4;j3JecxWQw3KIGzVM(chqK9FqT@VR&iqxB&d_b|HebMdKAr>V#gzji|f72T(D zqnp9vrxcQ(&gj0%m7kGUw}tI)CVx@2G%#<*vX3(sH*&_`D`VIMwuNs#GxnrtY85!W z2lBmaz`iSRdOis?HUPK_cjf0Oa0T}-KU;g@h5CI4+FkH8w8stCGxR6>pcHnF3B24R z073pNaQpAFbAY?pNPOtNalwTPR($(BmI03a((gU$Wf7Op&xglBpwPIQx%?Ei7eXN) zI>+ww%u>-yf9_WSaJOQ{z z%3F%wuQ*QJ2t5S&G|1btVi5dW7Bqjt@%(l2GY30Y!u~;_I4tFOe!ktt@%;MG8V5U3 z2mF@~_z?$uDm)LBk>O{r<^x{H|FsTy!~y?-gMIp9=?w(1@Cyq?7j||<>nj#gof=h( zZi?yAs1fr+T^>{*Iu_>nMvBS6VErQe9m{J>vxSgUK8MAIR7D0wqr6%SRhEhpGZu)M zaWerQ-N7|&O-++lU)S6MwX-9ovYOeY1+Z8)&a#$9AWaKKw5_2?n;z1FQ1chp^u%@s zzjLD@!!&~4CCippfaL;0ye`-J{S38iW^4zuesKpAU0pjsMdElNZ;q&@)izbH^K1Tw zRaofDJr~!j?r5l9S62fd6!~Tag7Jvf!E0)nwz_`(%IbP;eQj;CzeQ`QURm#_ioBdU z!@R;e{iu z(K3ITm6MlIxQT_}l*qYd;N0b$47jX9=lt5#|8EWM#VX*X!qUP8sQ-DDyH$3dA5*D% z_bV!(MbRr3x>`w7IK3TiQ+vJlrPpR(v<}{OpXN^~milJb;rtxn1?dIKDq_rD|l4Nm|avH$=8 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-ia32-node-0.10/deasync.node b/node_modules/deasync/bin/win32-ia32-node-0.10/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..d3fbec3fcee63f2ee642e5f871f5b5d480459869 GIT binary patch literal 33792 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 z%0D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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-ia32-node-4/deasync.node b/node_modules/deasync/bin/win32-ia32-node-4/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..a8c55fd8490f05f7443cc5fea459c743dfb8d3b8 GIT binary patch literal 106496 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

    dkqxRD>vP0>N1v_ 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

    m%LL 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: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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-ia32-node-6/deasync.node b/node_modules/deasync/bin/win32-ia32-node-6/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..3729028e97a855bef929b3f33aea50dd2a916998 GIT binary patch literal 101376 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 EpJP{_w*UYD literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-ia32-node-7/deasync.node b/node_modules/deasync/bin/win32-ia32-node-7/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..278c54dcb0fbdc0bdea60344d132e66daac03323 GIT binary patch literal 75776 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 UBiYr&ALd>+xT)6UHDYfxjYtXc8LQ_zv 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-ia32-node-8/deasync.node b/node_modules/deasync/bin/win32-ia32-node-8/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..11a6ef1df0f0660a34923dc2a1a050b4f06a15dd GIT binary patch literal 75776 zcmeFadwdi{)<4{n%p^lHVFpMbV30w=8aKj52V8JK6J#JN(FuVWMonOMCB^}jg>FD4 zkl2Z4=$)1Qt?uRV^2p-uvUm2;<>GaQ!CVj_Tvihy8Wgp%9W`PML1Oy-p6Z@l#JxQ4 z=lA~iqUo-#%c)aUr_MQb>Qqh9ZQF!IK@iON(=0Q!0k@(;7j_*Y7!}sxyX_0aKePv_|-Xo^BMc4E9+tCXCJ{hI>7q(_Z zzK{1^(z_8W-hZ3^R&*tQzY{Iz@5vGUeTsiCzWWCiR9C!ZUXLIwG9?M8-_Hxgh##&@pwD%7vbLy9!?O1B>p-07OK!G)S38~Amrl%g{a)XTmRfO!6Yn3 ztoag?Fo%*?n1puZzUbc?lh6fJ9H}N@$wi5S5gSuX!^bQl2sS= zH|)TJ@T0aGcq7FBIf2#mwRe6`{2uxUf4uGA$9pGF9(d$~T&C;U1n($B=b_>hyn)lu zfBAqg{jT!6?_8%>CwP&LKIDiF$%uUU)7P$B`vb)BK0)8`d}A+yhkPqn--nFUM*{ka zwGfAk86`N1 zSsG@5(j^~o)b@yJn=iHR>8U;}2+39I80A*8eUHgo98B=D5rB<6%a!`F(inhiQo7=? zYLY{fY}%SEZA~UK1CV?my*9GhYTpw{BN#lZPm!$J`YdgICd;NQ<(c@)5&{7olH#$s zj`?2M6crq`5z(PED_!B6Oj{G?)kLK8xkr^EYj~bX{+?Nozh@IdSA`0!1Lb^vm-b2( z3My}*=vcjILb;M4?@uUqH%MRP9zFUc0WdEmatz&X4&85CJ`6?<3I@?r%2G#(QksSS za>^Zo_-(nvB<0i`6O-(_4;HAFeF8`?WL1jNLxp%|h6-(=WscCsbTvtK3W)G2Yx2;6 z=!hAblzrA#Swm?JUv88$(;xuKcRk_Kk%(G1?vQ6QaibLY_Wlfw`D^QIj%5CVT)tjGlcDx;0%ur#2MW zcpnubE+JHq8TNE}8w#>$#uR-ZTE34muC2G6RdX=_s#4~3VGOb%~ob#}V8BpY>@%Su7J zu|q@t$(_!UrOLDuRB5Zvul-%=-Rn&!613NR2-N-IMcLU}MlaHXRA;*1t7W893l?Q( z$p>t~1TDixpJKKH$(de2KqH!wUlX%4DM~qvA`U%IdTo!CqGfbZbz*jU1yzMSPJ()f zBBz;=5xt=tQiPxhBXk%5=V#9Vd5+Wa{8~l}av>ex$=;wq$w5<4KwbI8%7Ka%qXmaQ zln0PA0I`$j%|a8LTAr5CjZX@P619wWsw}p=tn_yIfHM{cL12P{zht23U>2j#vh<|BP67p^WFfsc|J$-0BG`6Fa z!+!MHl_+UN%a@m-H?xM(SH&}csAXg!H9!gSrfjoGw74Sst%47LZ57>wzd20U8yG7kew92sl_uNDyudXzhE6mO4Jr zG;J?YV#i4eQEzn|r4Z3jM+1du?sdFOAsUg6=O{!&+VMLIQ3rPXH-(6jIv%GGbz+A? zAtI-aY6{Wp=-5CZ>c5VAC`7Zo;|CNXitY$di2A7GRtnLS>F`j9CPs&wLNu#7uA&f8 zQOD&JqJHa`NFgGyjxh+i)697$$5|=iZ0u~u3h1^vAC;LPx@2Y&o%9$*5A<@rn#V?4 z1VOd1PG~>iOX?&ptgI{(9T!j?a-~DCKORAfmyH9L3zY7+2|-6ijsyMqXNbF?!14hh z05O#8igdK281n#Do#*}MOm(Fn$t(K=dF~>&$svfz!DRMHGPEuWeG|`QcOh#{L|n?RPkBFL+_S!}C;Rj#{_Ui=kQXli^O%caHB7t{FR^=My zFnbQTX>V$lE78g5G}edj*w)gIH0gcz43&rlZ54&oBTph_J7uelY%#kc>aB%4=!>~9 z5Otn2gPoDUJL5F9>?qRYsl12c2!gJOmLU?$2zj39#x{OnyO||6w#zJY)ZWH z3aWe((x?Wd(k5#rF-6uAM2k{tRj6_U=>_SkD)!3U+3u$HgDH{#L1 zMKsDw$tBDIH8!AU=|ELH3nk@(PhX07ZwWh!c!Yc_%2)+)}_qps!nso6?Vr(!DB@+#gRD?oSR>Jxfn9fndqkQq}}GFJ~; zVf2?$&+f)3lEURvX0FEg13ymQqfr(@Kvyq1(c4fjh=P$*uC$pX3zI-QgBAQ0^Z~|e zWFdB913SS$fP*1WF~TfFAgvGtPfN#(>l)Ra*%*-EIQHvmK>&xc1QP;pT(Ki>w#gAn zyON$6IrN;EP0yK5dd|(lv;0RHh5VH^hrcFf@|Pu@zot6)YnlzOCm*%s1?l19%*18{l2&!)B%XD@DUOFe>AuOfHU%nJ;yjzXaji|>pW}X0 z`UjYKX-wI#o@a#^R!s54t0S>Hw-Zb9z2XJyP`qZ<>~0n@8rqp02ASWl;Xg zVr&dABqp=FL7QN0MOlKd%M=5rIsynakpLK4j0HfEU|Iy4&6&)@$?R4{svjdWn}H~n zk57D{o$M754{FKeWW&j-DBVjl^k+msOQ9uZL1$#2XV82tjjW{DI&H<9@ab?Ox?==t;RIRuD?35p}L5Fd@<(QRnkv3`^a9 z4CSkYF&|I4QHzf!^kpc^P>_H9>tDZ0<@E>@LEJ7AVwZD`H)vs`ARh`^E9!_RDa72s zllB(fCJ5!TF(86NTCp8#en&MKTO4G8kZ#?F^*xg7FvJe20CcmD(sHBTV)i_^1o3(C z+voDL5nClqHm3b9lR8Q9bSi?Ysd^S5N9>P*MG|u`GF%;D#i*Z;UqAX2Knv~2| zOa$Si>YaT6;Q+e!lE}H{DIP1I3Iyu~@JBtmrI1I;o$2z*ZuC#Dz(M=`uio-u{)^zt zkmC(vT5Y{J;#~6%ntW<`*wYQ3lM}%*&eQ9n;po#cvhjHp1)O>y?CC_NEXq{W754PG ziaK3IeXd6L5h;1!t$?jMY7a{`C7L#Bp&&%tv6c$)$$su=h);5T6d~lmBrDdSnOeq` zfEMFnb{A$=AhvfS;$wTO=*d1sqm)9kY&C}p&FrK2R|39bd-DsB1*EMr$Pyn||F(&qFK@)N z{6~*J%U|JN@Yho!f7PzxuV1g`uRm4b_2i?qPvWI`%%R%H5C~J?83Yrky((_Uy#m&|5O$B*vvb zrpt}6rx&9^f&-i*&AvN!uH}-*WD7O2>~>B{7u@c`anV2mv(!>4vx=g=v9c1MQ za@4ydb9iUwf}$uOMxbO!a4X-@Ecg#dB)rz2eH%sSq*BUe}o6r;# zs-mXAMF7Mb0Agy_^_qQdB*`R*Q|7KnN)W`XxohZ^G1r@vD2O8wiB~cr69s9MGItx$ zk&l={JfJ2S5tZG^iU-J?0UDeUvQ1Y9lb5-g^jgEECqjv#b>`5`)=&vBZ}}Zr>_T8p zo?dZ;d?Y~!x4i6k0!(z`J$eV28!Xg#ZQ@;Fz76PqhC+cF0elB6Gv z7Gwsr!b(`bz?`&$~KFl*$wnLx?1{x*Mw;3SRqRr>a`$)E6K=>6A+Yfn(Q8W5_N zWqgczSxbPt;o39wV%PGh=P4XC(>k}}Cs_RX*#r(EXSo9I_6AG-d_W+8)Tn)|-BCl-{%au1-CHVGVO?5?DZDeC`vmYRK^ zJ?+vAdG34=o*?E{(3_P*2Eg0|aXdkpNioV{7)c-@Z@K`S-c+P6GV#FZS7c+$02Fq> z*&A)*a`on|MVfL!zR+*4U5A`CP2zV{Xan6qOi(lB2W|c0r4^)p`jppS;7h%$QQQYs z#(u>$d#mE<);U(p$oH1g$kOyWC|_uqjcp+Hwy2YEcvHF2%3gvPIK&=;Ccv)4q+)3Z z#Wlz0P!!>0HUp9B$80RhlKMCW@zC@z)u67m0|0agnmWvi3|t2p&3=zOtPc-l83Djt z&0voqLeI;m<$ON>#8Eya&&!fwTU6=;(Ca?KOvKQ`hGetvo}X=1-hwH{T-#)?nS&v| zJ7U5=`MlHq<9E?D)#t15wEsw<=L=Jb!f0A}UO7@~-EnC$ZZAVazR-blH9 zO+-jMVjq<(H#p>vx^j=`AT}=wKTA58V7#`K+qWd+Z=r)8PI~0gBcC2#daR(wn((Vt zCCy3S%+F+JD%;%!Ls8@8xTkr%@1&Eu4X1T#CcUbjw z>0<*Z#tH-s{_gXKvudA3m$@QXX{0I{L|^g|O*yEXg%0TII)2!FPQ06zx=OwJ129#$ zlrB!tu3-UGKn9BMkocC;rB1!9D+0p50&7y}1}iYSN*BtG@v%Q+HU}O_RQKuG)K>ki z><>Djm1B8z{D|wzN8GLm2$-{BOmiUUcSXW;o_Y)j0zJFZh{>25E-;a*F(s-lRkEIX z77WZ+A%H-G0&JIe8g)vS>)c)L^-F0!-$06*;OYT|jez$52uwQaD5d_9WT2ev(=zU$ zvh`%4=Mto1*?ugFm(YVkpyStQ?qK?oC>h6%`-6+?)#qq-tBJv@m+5lESFxIkR?ve& zK@+PTQhov!RJ3>}3%s#}zv5yLHB`Ea9ux{Duz5p3j6yjAVP&88TvYilsL*5dpinT8 z&&@dUPEB%BNm|tnL*X|U1A3ld{E;3M3Yyug#8Hi2u%mX^knZEf(C)HQZR#R)BeD95 zMk*Ac2ZgYBszpikp3;R<=)zQ#oT*osq-88av3Sq5P@!geP$-zhZoatWg)exUQPMl4 zWG59mLk|kUBsXfXByGbO)xI)Nc*&5$LJZ}4sW63tR(1k*hj>$Ipa!fhoAvU5NI zvc@L&_ls`8m?3}JFPhzF*G~`6SRcOQIfs&p-7NV*vmhO+FoDNHw6b4;@$4g!N*~YT zL)~@fqoj9{m5Q`=fHj{hFoXXKdnupjLVZ@H(CTVri~pf%OO=XDZ4I^t9om|7b{&Qb zQn-}oK{G-Ldx^8fmcoc`Wrd&vNKJsWDpzPf%+h|Csr@jAjW7!BHw#OB{t^Y&6W2-C zF;|aE(~jOw8k_PDi+TvlgW7Z;=2 zboM(;CqfD)b)6@I6^xwQh@Qt53zM*U4x2FQhAn6XamHRvyj(X&NF%+>%Vz>l2?PZ% zdjQ{ofRFtZSOYbAE|t-wL{}sRJ(O#k+DwX5dRaOz3uz~&B55_~2Ml&zFb6Hco-C}9 zFbnjEqkVb-Hi?4u&UXfW}DI!-6%`KW$ns_ZXcdpdLBsX@1 z)=$H%Qf$wKpuf{JrTCAk_#WfgPHPr|Jh>g}~H<&}KY)gy1%L1i=+d;Wnb4)?QJN?Re z7$xc#+60Ku6vYJ1Kq)Y*W4A-4q6Pfu?S)st?zPaoeGz|K)%iX)7aCdEZw@6d4sXD` zUKC1E3JblVk!&4ISw8K%>=$?|c4Fz(UQFh)oe5H!+?WvJU#QFkdZhWoQJ{H4y1#w* z$OYkoSLNRE8xrNH)4qG$!tgxfbH5YlncWA)w{s6JSE4k(3HvyfIkP=hX&hUJ3DO{p zMF+7zVv6p?blZaI2K$!yerd;}_@w;>zUxjDP7_>*BX>H&MO_$T@N#yBL@8V&G%*=V zirSL^JYf)U2>`!BfYk+1tL42rX*{H~5`l_f~ z>9X%m#OF=;M8Dhs(l@)i#J6(0sw(>g^n6j5yq)^$D{`aYOIO~);$oe`^cAPAggPs? zUXCQfy&=jHW=pn9PM$kHrA5qAlCZwP+)Jf>PqKk%OM4+N7P>D;XRu&gUgmn^c6R&> z+6Ehp4to$Z9|Lt9x4?{4ju-&oIU%KRJ$RP@SMU z5U8a(AHa(BS9z*d;s4HgvzX{L;Il_%^e&Sm{$VS$VP4X?c5Yl#xA@!WL#a5 z>PjmOi~TVS33lmrI%xfUANoiF&y_~AdFV(i_D4WRVGkf2fCl*&GUAifx@ztc%zeRL z`%54Mqv*ax_2wx zmDi2t9IvQAs){W-layK^BFtuB-N!2h%uyAEpxTOAcrbyBwF)mqETV`{AzMiD(Ovgi$TqI!v9nx)o5?WFLRbZ$>1gC=YGjPXAoF$dWM6<)p(~ts zZqK9A`4v%S-Dx7-8>8TWJi>w{ox~F0--;aA8AQS+#2liXvRMew@`DRf!`^R_K359n zBu1-eaXbHqhMm7KQ#vVc6i2TAyS$eH5^XVGJV(ebPA1fftk3i6IrrgRj7X3$Ef#c-N(O2d-qY19e3iv zzBK}51kTH@qrvvE@6wAaBnE>Z(OPMB9aGM2O;$7K%oR=Zl*8eGX{)IKR)+JruP;da zY-G<(?u8qXGx!%6X;P-&mKSUD0d9>{*M>iW4@3xXMl-wm3)tP}MaY7?Ag zq+ZA`#BfE0c3t{{LMTs;fO+(>C!w>_>`Lsdx?Yfer;aLNSD;w)4VCCRV!tKf$VP$0a;tRz$abotmdI)FHX9Lj}1^M^N^ zvG^>qV%@1Tach7$@Ht71vtRqWd_d#k6GN&9ZVPoa>8AIS6f!^?Nh^$`GCirH>AQl1 zj}LngF%@U%^9~xR)%etA@X%Ri`zs2hk;j2Tk5D1vPF)0W*)V{l=?(xSHuOyZSA7lO zH5?!x0(c|=vv83HB7iNOZ%Ift+Du~PrZOM_|3$vhL-X+=iYuUi9ACN_{VaE84i2Ic z4S86JA}Ehb@upS7P*2Xo@UFC|KL!F~nxFj?nurcA zpzL=Yi#PrFL8XYfcvBP;{IneW={4&w>vHU2bAfa_3!eH~H=|d2eZVLWJcIYjrI04P z*ObN*fh5c^KWK80>hyaWFpk;wA=LF4|QApo5kiKVVI!EOvs3L6stI~?% z;TijMtSbBBt)>A`j_CGeP?J)h+W-X&+L!y>CCAPko6;Ow+6U**WZs&W; zoSwmyx$I_9vk{Fk_7C)Y1p zCbBTh+j!%DUcHZ7L0mm#+B@u;Nm_)D-3OJ?$NZPlvmZ83A1l3#o`vU0I;GPZ5RCVK zIsh`Zea$skSvG0DE_>7}UBW+K@y>wSQ7@)>Su6EWXeMRSW_ITT#RkM^GkXz)`-~n% zG^Ncvgs2ctU^{q3GmoHX21Sna^w3O-qxvf%kiHd#c(8XtN??fW1+aYG+|4w|IO>MM zOmk^JJfO=}lBw6F;+wYA!SNiUP(#m3h|$kc4l6~h1}^1JOaro9g%L7;$gVzn9|-C4 zMaE{nI1MnN9n3s%9qm^Ci0cSarjM;bPr{DIZ3ss;05=0NWtgfWsh>V6VbgdrX9|vhlSe*Dc4@CkRYM zwZXAvp*%JfA?_CLSH8?WyVZOh%+=7gEaXD{*>cR!)VdV*5@o+kJ>u$7k28jT10L4k zST+mv5a_W~fkYC-$=F7Bm+~}AFd3dkK~n{kxqMhKd-zz{5V{7I(qTf_7HoGNTXwF; z?Xj($VgHMSp4MA_n={_>FW`4(wA>o+&mk?J1mrGixra2eG|pc=aA-Fds5bU6C>C-X zUxo0{j!WPoFd;Z@o8*mV)8>)z{N}6AD&$pd@vohjDuZj$aDiEA&OIvcPxQHZqW?&6 zN4ZPIe$=4NcvuPlPd$4tDAXy&JZ^i*De8X*oOkcfg4=Nlc=B zRm8>~!fN3g^fC4pR5c9sOl8*{=wnRN+^<>22eof5a?)vie6LXjS@Jo9BlB>&YbMpi z9cUcK5kZ6iYJ7!3Z4nOf)e_W5Qs2PwVxV?%9zxxgpas8u76=!&>)uMr~>FVB~Ir>*@gT=22nJ8FX^n6|7m7OtL;DuN>e?nc@xkt1-` zQOvI$Kz^eGeB2EdfQmy__FH6zO@l{;^1w*g0hmsp$0qHq!@P{ik@Oh*Ydoq(k83v^au-OXVSgBRswgah!Q6|<`Yr=>9W_{h3*=}yki-SX0J&aOUT=IV?~lX*Z_5s zefQE{#Ga47XH9LssD1kftw5j_eXsbp5T;-iw9j>}#TYLnR#3N+l&R5415(CX;Uy^} zv=Kt2q#wZ`#dT_!_-K)=m=J#++yG9)#&Q}fD}jwdAyU=3p8hVCBY0~F-mX(|cv}YG zd2C$QEGz`8%Y?oG!EBQ3)#phli^;`o0i^iw3JA(T1)Jj)Y@-Tp9jM^acmvULh%deE2Cn&qU79eg%@c>hQ7M0%i2vzQf}yhqSjoRwO04-0 z^PT?>^JNi{#aUQ!F^1RGR1mx&RG5iigHUx4CJAVUbu@br2sGpu(oi5+9x7bTUv+Ci zFbK)dEJ7yG@_-^~VU+-Xk@{z5V~LiboyIHXY6y2590>?Sd}WZnP)_4=i4aq)*h2?C zVoEW)9?6IbXlv#$mmb#EGEC?AWWZerE( zeIKQ3pd2g(MO3U8!t2J0JJA;G`Fw{O-wW=gNh7?h58I0Yb(Y@%DIz;qPoiJ_pn{O~ zvkr(-Xv!y$j|?1|NK#@ogd(@M7-9BvbP?1fvUhVuQR#A>9EwIg5e}hI97kg(b+Lg) z36nS)xp6c;M)u)okdu1}yCsf=G{UG^jR%x>xdA0sQLq3C_3tsQcNpEL`z9|3u>mBS z3;_(UUzL^*@eYQTe;6g?G>V|LMcnKH_aS4{#zA~-cjDklE#Gp0t4a_;V3;P%Gt)9b zyg2jYDMn_v%+f|k{v+_DwpQ#SuJY%%H0>3liP;FpyQIW@(%o-$1MGpM}}V_t3}>8Va%y;M-`t z-K#v-ObbDQ`m+WjO;Q2-Yg8QcXY8+SMEbz~8izb|f9)bTq5%h6ESPSf6L^C-vC>cy zb)&%l7oH%`HiNeRV^0u{GH~;U=hQZ%sfr!KXNU_3_Jp%)yN>?f_5rzlxgm6iY|Hp6 ze(@%jhTG`DT_F=57*Z zwwm*;0XGTq@i2@(1a;XU)Q=DTbErEBDhJJ7C@kE0i}-pM*GI*#LG=zo{rSIux{IK4 z(A>QuiIL84K-Cr9uLE8(2>3b!uvOm=9M-ib2=F0#aMz1;b{7E0yEbEp>%~A`BanMA<$`P+i+M7rwBN&hC*0&T87kcxhCb1_MQ#Ln2X(F2I~BJ8kj!hA$Ar7 zOv+yjwseVsNA@@1(M@=C(t|?5Ojg-9*iy(@-KA%sO1^jV67d&QW3lzShLM!K3_AZP`Tq+sVCr^=S?qt8c7IIqI-WjE^R>S)9rUuY)(bH^8I3mjj# z5ye{3Ma+2eF(AX$+paIcKDZ49Ht0h1e4O!ejrMxv8&EjY(1L%j-Te|GNLLYj%4b1H z3n;nyg)r&u*aA@vtX)$Lvf@?iSnmaj29Vy>=ad)aBMumT2FJ4mb zrJ=_mKA@M8tDn!$ z{Ucmj7zYG=%=9K~4i5t3(1YZ<8+wuYoA+q=LE9hx@P}8aJ8~~pzvF30qCr z&1x$F_;76>N_qWwqntNrDq$lh2=G|sN#I2Ofi%Cin_64Kf@5gWnU5mi5R`K;PX(FD zV}s~Jh%r6$)s$pZ!M zBWt5-Ao$`m)^pFvr zGhEPKm!KxpO;C7I9TtIp0lYwWOt|(ye71o5A01uZ{+4ec|W7R(i4R*DYTzu;tVScu=`N zmnJd~PVwm8BFg7}wjGXXfdStOekRJozJdme9YV}|Ou5XPr3`#jZ{({fSeDilvQ<>7 zAsJu=

    <%= user.name %>

    +<% } %> +``` + +Try EJS online at: https://ionicabizau.github.io/ejs-playground/. + +## Usage + +```javascript +var template = ejs.compile(str, options); +template(data); +// => Rendered HTML string + +ejs.render(str, data, options); +// => Rendered HTML string + +ejs.renderFile(filename, data, options, function(err, str){ + // str => Rendered HTML string +}); +``` + +It is also possible to use `ejs.render(dataAndOptions);` where you pass +everything in a single object. In that case, you'll end up with local variables +for all the passed options. However, be aware that your code could break if we +add an option with the same name as one of your data object's properties. +Therefore, we do not recommend using this shortcut. + +## Options + + - `cache` Compiled functions are cached, requires `filename` + - `filename` The name of the file being rendered. Not required if you + are using `renderFile()`. Used by `cache` to key caches, and for includes. + - `root` Set project root for includes with an absolute path (/file.ejs). + - `context` Function execution context + - `compileDebug` When `false` no debug instrumentation is compiled + - `client` When `true`, compiles a function that can be rendered + in the browser without needing to load the EJS Runtime + ([ejs.min.js](https://github.com/mde/ejs/releases/latest)). + - `delimiter` Character to use with angle brackets for open/close + - `debug` Output generated function body + - `strict` When set to `true`, generated function is in strict mode + - `_with` Whether or not to use `with() {}` constructs. If `false` then the locals will be stored in the `locals` object. Set to `false` in strict mode. + - `localsName` Name to use for the object storing local variables when not using `with` Defaults to `locals` + - `rmWhitespace` Remove all safe-to-remove whitespace, including leading + and trailing whitespace. It also enables a safer version of `-%>` line + slurping for all scriptlet tags (it does not strip new lines of tags in + the middle of a line). + - `escape` The escaping function used with `<%=` construct. It is + used in rendering and is `.toString()`ed in the generation of client functions. (By default escapes XML). + +This project uses [JSDoc](http://usejsdoc.org/). For the full public API +documentation, clone the repository and run `npm run doc`. This will run JSDoc +with the proper options and output the documentation to `out/`. If you want +the both the public & private API docs, run `npm run devdoc` instead. + +## Tags + + - `<%` 'Scriptlet' tag, for control-flow, no output + - `<%_` 'Whitespace Slurping' Scriptlet tag, strips all whitespace before it + - `<%=` Outputs the value into the template (escaped) + - `<%-` Outputs the unescaped value into the template + - `<%#` Comment tag, no execution, no output + - `<%%` Outputs a literal '<%' + - `%%>` Outputs a literal '%>' + - `%>` Plain ending tag + - `-%>` Trim-mode ('newline slurp') tag, trims following newline + - `_%>` 'Whitespace Slurping' ending tag, removes all whitespace after it + +For the full syntax documentation, please see [docs/syntax.md](https://github.com/mde/ejs/blob/master/docs/syntax.md). + +## Includes + +Includes either have to be an absolute path, or, if not, are assumed as +relative to the template with the `include` call. For example if you are +including `./views/user/show.ejs` from `./views/users.ejs` you would +use `<%- include('user/show') %>`. + +You must specify the `filename` option for the template with the `include` +call unless you are using `renderFile()`. + +You'll likely want to use the raw output tag (`<%-`) with your include to avoid +double-escaping the HTML output. + +```html +
      + <% users.forEach(function(user){ %> + <%- include('user/show', {user: user}) %> + <% }); %> +
    +``` + +Includes are inserted at runtime, so you can use variables for the path in the +`include` call (for example `<%- include(somePath) %>`). Variables in your +top-level data object are available to all your includes, but local variables +need to be passed down. + +NOTE: Include preprocessor directives (`<% include user/show %>`) are +still supported. + +## Custom delimiters + +Custom delimiters can be applied on a per-template basis, or globally: + +```javascript +var ejs = require('ejs'), + users = ['geddy', 'neil', 'alex']; + +// Just one template +ejs.render('', {users: users}, {delimiter: '?'}); +// => 'geddy | neil | alex' + +// Or globally +ejs.delimiter = '$'; +ejs.render('<$= users.join(" | "); $>', {users: users}); +// => 'geddy | neil | alex' +``` + +## Caching + +EJS ships with a basic in-process cache for caching the intermediate JavaScript +functions used to render templates. It's easy to plug in LRU caching using +Node's `lru-cache` library: + +```javascript +var ejs = require('ejs') + , LRU = require('lru-cache'); +ejs.cache = LRU(100); // LRU cache with 100-item limit +``` + +If you want to clear the EJS cache, call `ejs.clearCache`. If you're using the +LRU cache and need a different limit, simple reset `ejs.cache` to a new instance +of the LRU. + +## Custom FileLoader + +The default file loader is `fs.readFileSync`, if you want to customize it, you can set ejs.fileLoader. + +```javascript +var ejs = require('ejs'); +var myFileLoad = function (filePath) { + return 'myFileLoad: ' + fs.readFileSync(filePath); +}; + +ejs.fileLoader = myFileLoad; +``` + +With this feature, you can preprocess the template before reading it. + +## Layouts + +EJS does not specifically support blocks, but layouts can be implemented by +including headers and footers, like so: + + +```html +<%- include('header') -%> +

    + Title +

    +

    + My page +

    +<%- include('footer') -%> +``` + +## Client-side support + +Go to the [Latest Release](https://github.com/mde/ejs/releases/latest), download +`./ejs.js` or `./ejs.min.js`. Alternately, you can compile it yourself by cloning +the repository and running `jake build` (or `$(npm bin)/jake build` if jake is +not installed globally). + +Include one of these files on your page, and `ejs` should be available globally. + +### Example + +```html +
    + + +``` + +### Caveats + +Most of EJS will work as expected; however, there are a few things to note: + +1. Obviously, since you do not have access to the filesystem, `ejs.renderFile()` won't work. +2. For the same reason, `include`s do not work unless you use an `IncludeCallback`. Here is an example: + ```javascript + var str = "Hello <%= include('file', {person: 'John'}); %>", + fn = ejs.compile(str, {client: true}); + + fn(data, null, function(path, d){ // IncludeCallback + // path -> 'file' + // d -> {person: 'John'} + // Put your code here + // Return the contents of file as a string + }); // returns rendered string + ``` + +## Related projects + +There are a number of implementations of EJS: + + * TJ's implementation, the v1 of this library: https://github.com/tj/ejs + * Jupiter Consulting's EJS: http://www.embeddedjs.com/ + * EJS Embedded JavaScript Framework on Google Code: https://code.google.com/p/embeddedjavascript/ + * Sam Stephenson's Ruby implementation: https://rubygems.org/gems/ejs + * Erubis, an ERB implementation which also runs JavaScript: http://www.kuwata-lab.com/erubis/users-guide.04.html#lang-javascript + +## License + +Licensed under the Apache License, Version 2.0 +() + +- - - +EJS Embedded JavaScript templates copyright 2112 +mde@fleegix.org. diff --git a/node_modules/ejs/ejs.js b/node_modules/ejs/ejs.js new file mode 100644 index 0000000..7e6dba5 --- /dev/null +++ b/node_modules/ejs/ejs.js @@ -0,0 +1,1469 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ejs = f()}})(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);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + * @author Tiancheng "Timothy" Gu + * @project EJS + * @license {@link http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0} + */ + +/** + * EJS internal functions. + * + * Technically this "module" lies in the same file as {@link module:ejs}, for + * the sake of organization all the private functions re grouped into this + * module. + * + * @module ejs-internal + * @private + */ + +/** + * Embedded JavaScript templating engine. + * + * @module ejs + * @public + */ + +var fs = require('fs'); +var path = require('path'); +var utils = require('./utils'); + +var scopeOptionWarned = false; +var _VERSION_STRING = require('../package.json').version; +var _DEFAULT_DELIMITER = '%'; +var _DEFAULT_LOCALS_NAME = 'locals'; +var _NAME = 'ejs'; +var _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)'; +var _OPTS = ['delimiter', 'scope', 'context', 'debug', 'compileDebug', + 'client', '_with', 'rmWhitespace', 'strict', 'filename']; +// We don't allow 'cache' option to be passed in the data obj +// for the normal `render` call, but this is where Express puts it +// so we make an exception for `renderFile` +var _OPTS_EXPRESS = _OPTS.concat('cache'); +var _BOM = /^\uFEFF/; + +/** + * EJS template function cache. This can be a LRU object from lru-cache NPM + * module. By default, it is {@link module:utils.cache}, a simple in-process + * cache that grows continuously. + * + * @type {Cache} + */ + +exports.cache = utils.cache; + +/** + * Custom file loader. Useful for template preprocessing or restricting access + * to a certain part of the filesystem. + * + * @type {fileLoader} + */ + +exports.fileLoader = fs.readFileSync; + +/** + * Name of the object containing the locals. + * + * This variable is overridden by {@link Options}`.localsName` if it is not + * `undefined`. + * + * @type {String} + * @public + */ + +exports.localsName = _DEFAULT_LOCALS_NAME; + +/** + * Get the path to the included file from the parent file path and the + * specified path. + * + * @param {String} name specified path + * @param {String} filename parent file path + * @param {Boolean} isDir parent file path whether is directory + * @return {String} + */ +exports.resolveInclude = function(name, filename, isDir) { + var dirname = path.dirname; + var extname = path.extname; + var resolve = path.resolve; + var includePath = resolve(isDir ? filename : dirname(filename), name); + var ext = extname(name); + if (!ext) { + includePath += '.ejs'; + } + return includePath; +}; + +/** + * Get the path to the included file by Options + * + * @param {String} path specified path + * @param {Options} options compilation options + * @return {String} + */ +function getIncludePath(path, options){ + var includePath; + if (path.charAt(0) == '/') { + includePath = exports.resolveInclude(path.replace(/^\/*/,''), options.root || '/', true); + } + else { + if (!options.filename) { + throw new Error('`include` use relative path requires the \'filename\' option.'); + } + includePath = exports.resolveInclude(path, options.filename); + } + return includePath; +} + +/** + * Get the template from a string or a file, either compiled on-the-fly or + * read from cache (if enabled), and cache the template if needed. + * + * If `template` is not set, the file specified in `options.filename` will be + * read. + * + * If `options.cache` is true, this function reads the file from + * `options.filename` so it must be set prior to calling this function. + * + * @memberof module:ejs-internal + * @param {Options} options compilation options + * @param {String} [template] template source + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `options.client`, either type might be returned. + * @static + */ + +function handleCache(options, template) { + var func; + var filename = options.filename; + var hasTemplate = arguments.length > 1; + + if (options.cache) { + if (!filename) { + throw new Error('cache option requires a filename'); + } + func = exports.cache.get(filename); + if (func) { + return func; + } + if (!hasTemplate) { + template = fileLoader(filename).toString().replace(_BOM, ''); + } + } + else if (!hasTemplate) { + // istanbul ignore if: should not happen at all + if (!filename) { + throw new Error('Internal EJS error: no file name or template ' + + 'provided'); + } + template = fileLoader(filename).toString().replace(_BOM, ''); + } + func = exports.compile(template, options); + if (options.cache) { + exports.cache.set(filename, func); + } + return func; +} + +/** + * Try calling handleCache with the given options and data and call the + * callback with the result. If an error occurs, call the callback with + * the error. Used by renderFile(). + * + * @memberof module:ejs-internal + * @param {Options} options compilation options + * @param {Object} data template data + * @param {RenderFileCallback} cb callback + * @static + */ + +function tryHandleCache(options, data, cb) { + var result; + try { + result = handleCache(options)(data); + } + catch (err) { + return cb(err); + } + return cb(null, result); +} + +/** + * fileLoader is independent + * + * @param {String} filePath ejs file path. + * @return {String} The contents of the specified file. + * @static + */ + +function fileLoader(filePath){ + return exports.fileLoader(filePath); +} + +/** + * Get the template function. + * + * If `options.cache` is `true`, then the template is cached. + * + * @memberof module:ejs-internal + * @param {String} path path for the specified file + * @param {Options} options compilation options + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `options.client`, either type might be returned + * @static + */ + +function includeFile(path, options) { + var opts = utils.shallowCopy({}, options); + opts.filename = getIncludePath(path, opts); + return handleCache(opts); +} + +/** + * Get the JavaScript source of an included file. + * + * @memberof module:ejs-internal + * @param {String} path path for the specified file + * @param {Options} options compilation options + * @return {Object} + * @static + */ + +function includeSource(path, options) { + var opts = utils.shallowCopy({}, options); + var includePath; + var template; + includePath = getIncludePath(path, opts); + template = fileLoader(includePath).toString().replace(_BOM, ''); + opts.filename = includePath; + var templ = new Template(template, opts); + templ.generateSource(); + return { + source: templ.source, + filename: includePath, + template: template + }; +} + +/** + * Re-throw the given `err` in context to the `str` of ejs, `filename`, and + * `lineno`. + * + * @implements RethrowCallback + * @memberof module:ejs-internal + * @param {Error} err Error object + * @param {String} str EJS source + * @param {String} filename file name of the EJS file + * @param {String} lineno line number of the error + * @static + */ + +function rethrow(err, str, flnm, lineno, esc){ + var lines = str.split('\n'); + var start = Math.max(lineno - 3, 0); + var end = Math.min(lines.length, lineno + 3); + var filename = esc(flnm); // eslint-disable-line + // 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 || 'ejs') + ':' + + lineno + '\n' + + context + '\n\n' + + err.message; + + throw err; +} + +function stripSemi(str){ + return str.replace(/;(\s*$)/, '$1'); +} + +/** + * Compile the given `str` of ejs into a template function. + * + * @param {String} template EJS template + * + * @param {Options} opts compilation options + * + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `opts.client`, either type might be returned. + * @public + */ + +exports.compile = function compile(template, opts) { + var templ; + + // v1 compat + // 'scope' is 'context' + // FIXME: Remove this in a future version + if (opts && opts.scope) { + if (!scopeOptionWarned){ + console.warn('`scope` option is deprecated and will be removed in EJS 3'); + scopeOptionWarned = true; + } + if (!opts.context) { + opts.context = opts.scope; + } + delete opts.scope; + } + templ = new Template(template, opts); + return templ.compile(); +}; + +/** + * Render the given `template` of ejs. + * + * If you would like to include options but not data, you need to explicitly + * call this function with `data` being an empty object or `null`. + * + * @param {String} template EJS template + * @param {Object} [data={}] template data + * @param {Options} [opts={}] compilation and rendering options + * @return {String} + * @public + */ + +exports.render = function (template, d, o) { + var data = d || {}; + var opts = o || {}; + + // No options object -- if there are optiony names + // in the data, copy them to options + if (arguments.length == 2) { + utils.shallowCopyFromList(opts, data, _OPTS); + } + + return handleCache(opts, template)(data); +}; + +/** + * Render an EJS file at the given `path` and callback `cb(err, str)`. + * + * If you would like to include options but not data, you need to explicitly + * call this function with `data` being an empty object or `null`. + * + * @param {String} path path to the EJS file + * @param {Object} [data={}] template data + * @param {Options} [opts={}] compilation and rendering options + * @param {RenderFileCallback} cb callback + * @public + */ + +exports.renderFile = function () { + var filename = arguments[0]; + var cb = arguments[arguments.length - 1]; + var opts = {filename: filename}; + var data; + + if (arguments.length > 2) { + data = arguments[1]; + + // No options object -- if there are optiony names + // in the data, copy them to options + if (arguments.length === 3) { + // Express 4 + if (data.settings && data.settings['view options']) { + utils.shallowCopyFromList(opts, data.settings['view options'], _OPTS_EXPRESS); + } + // Express 3 and lower + else { + utils.shallowCopyFromList(opts, data, _OPTS_EXPRESS); + } + } + else { + // Use shallowCopy so we don't pollute passed in opts obj with new vals + utils.shallowCopy(opts, arguments[2]); + } + + opts.filename = filename; + } + else { + data = {}; + } + + return tryHandleCache(opts, data, cb); +}; + +/** + * Clear intermediate JavaScript cache. Calls {@link Cache#reset}. + * @public + */ + +exports.clearCache = function () { + exports.cache.reset(); +}; + +function Template(text, opts) { + opts = opts || {}; + var options = {}; + this.templateText = text; + this.mode = null; + this.truncate = false; + this.currentLine = 1; + this.source = ''; + this.dependencies = []; + options.client = opts.client || false; + options.escapeFunction = opts.escape || utils.escapeXML; + options.compileDebug = opts.compileDebug !== false; + options.debug = !!opts.debug; + options.filename = opts.filename; + options.delimiter = opts.delimiter || exports.delimiter || _DEFAULT_DELIMITER; + options.strict = opts.strict || false; + options.context = opts.context; + options.cache = opts.cache || false; + options.rmWhitespace = opts.rmWhitespace; + options.root = opts.root; + options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME; + + if (options.strict) { + options._with = false; + } + else { + options._with = typeof opts._with != 'undefined' ? opts._with : true; + } + + this.opts = options; + + this.regex = this.createRegex(); +} + +Template.modes = { + EVAL: 'eval', + ESCAPED: 'escaped', + RAW: 'raw', + COMMENT: 'comment', + LITERAL: 'literal' +}; + +Template.prototype = { + createRegex: function () { + var str = _REGEX_STRING; + var delim = utils.escapeRegExpChars(this.opts.delimiter); + str = str.replace(/%/g, delim); + return new RegExp(str); + }, + + compile: function () { + var src; + var fn; + var opts = this.opts; + var prepended = ''; + var appended = ''; + var escapeFn = opts.escapeFunction; + + if (!this.source) { + this.generateSource(); + prepended += ' var __output = [], __append = __output.push.bind(__output);' + '\n'; + if (opts._with !== false) { + prepended += ' with (' + opts.localsName + ' || {}) {' + '\n'; + appended += ' }' + '\n'; + } + appended += ' return __output.join("");' + '\n'; + this.source = prepended + this.source + appended; + } + + if (opts.compileDebug) { + src = 'var __line = 1' + '\n' + + ' , __lines = ' + JSON.stringify(this.templateText) + '\n' + + ' , __filename = ' + (opts.filename ? + JSON.stringify(opts.filename) : 'undefined') + ';' + '\n' + + 'try {' + '\n' + + this.source + + '} catch (e) {' + '\n' + + ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n' + + '}' + '\n'; + } + else { + src = this.source; + } + + if (opts.debug) { + console.log(src); + } + + if (opts.client) { + src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\n' + src; + if (opts.compileDebug) { + src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\n' + src; + } + } + + if (opts.strict) { + src = '"use strict";\n' + src; + } + + try { + fn = new Function(opts.localsName + ', escapeFn, include, rethrow', src); + } + catch(e) { + // istanbul ignore else + if (e instanceof SyntaxError) { + if (opts.filename) { + e.message += ' in ' + opts.filename; + } + e.message += ' while compiling ejs\n\n'; + e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\n'; + e.message += 'https://github.com/RyanZim/EJS-Lint'; + } + throw e; + } + + if (opts.client) { + fn.dependencies = this.dependencies; + return fn; + } + + // Return a callable function which will execute the function + // created by the source-code, with the passed data as locals + // Adds a local `include` function which allows full recursive include + var returnedFn = function (data) { + var include = function (path, includeData) { + var d = utils.shallowCopy({}, data); + if (includeData) { + d = utils.shallowCopy(d, includeData); + } + return includeFile(path, opts)(d); + }; + return fn.apply(opts.context, [data || {}, escapeFn, include, rethrow]); + }; + returnedFn.dependencies = this.dependencies; + return returnedFn; + }, + + generateSource: function () { + var opts = this.opts; + + if (opts.rmWhitespace) { + // Have to use two separate replace here as `^` and `$` operators don't + // work well with `\r`. + this.templateText = + this.templateText.replace(/\r/g, '').replace(/^\s+|\s+$/gm, ''); + } + + // Slurp spaces and tabs before <%_ and after _%> + this.templateText = + this.templateText.replace(/[ \t]*<%_/gm, '<%_').replace(/_%>[ \t]*/gm, '_%>'); + + var self = this; + var matches = this.parseTemplateText(); + var d = this.opts.delimiter; + + if (matches && matches.length) { + matches.forEach(function (line, index) { + var opening; + var closing; + var include; + var includeOpts; + var includeObj; + var includeSrc; + // If this is an opening tag, check for closing tags + // FIXME: May end up with some false positives here + // Better to store modes as k/v with '<' + delimiter as key + // Then this can simply check against the map + if ( line.indexOf('<' + d) === 0 // If it is a tag + && line.indexOf('<' + d + d) !== 0) { // and is not escaped + closing = matches[index + 2]; + if (!(closing == d + '>' || closing == '-' + d + '>' || closing == '_' + d + '>')) { + throw new Error('Could not find matching close tag for "' + line + '".'); + } + } + // HACK: backward-compat `include` preprocessor directives + if ((include = line.match(/^\s*include\s+(\S+)/))) { + opening = matches[index - 1]; + // Must be in EVAL or RAW mode + if (opening && (opening == '<' + d || opening == '<' + d + '-' || opening == '<' + d + '_')) { + includeOpts = utils.shallowCopy({}, self.opts); + includeObj = includeSource(include[1], includeOpts); + if (self.opts.compileDebug) { + includeSrc = + ' ; (function(){' + '\n' + + ' var __line = 1' + '\n' + + ' , __lines = ' + JSON.stringify(includeObj.template) + '\n' + + ' , __filename = ' + JSON.stringify(includeObj.filename) + ';' + '\n' + + ' try {' + '\n' + + includeObj.source + + ' } catch (e) {' + '\n' + + ' rethrow(e, __lines, __filename, __line);' + '\n' + + ' }' + '\n' + + ' ; }).call(this)' + '\n'; + }else{ + includeSrc = ' ; (function(){' + '\n' + includeObj.source + + ' ; }).call(this)' + '\n'; + } + self.source += includeSrc; + self.dependencies.push(exports.resolveInclude(include[1], + includeOpts.filename)); + return; + } + } + self.scanLine(line); + }); + } + + }, + + parseTemplateText: function () { + var str = this.templateText; + var pat = this.regex; + var result = pat.exec(str); + var arr = []; + var firstPos; + + while (result) { + firstPos = result.index; + + if (firstPos !== 0) { + arr.push(str.substring(0, firstPos)); + str = str.slice(firstPos); + } + + arr.push(result[0]); + str = str.slice(result[0].length); + result = pat.exec(str); + } + + if (str) { + arr.push(str); + } + + return arr; + }, + + scanLine: function (line) { + var self = this; + var d = this.opts.delimiter; + var newLineCount = 0; + + function _addOutput() { + if (self.truncate) { + // Only replace single leading linebreak in the line after + // -%> tag -- this is the single, trailing linebreak + // after the tag that the truncation mode replaces + // Handle Win / Unix / old Mac linebreaks -- do the \r\n + // combo first in the regex-or + line = line.replace(/^(?:\r\n|\r|\n)/, ''); + self.truncate = false; + } + else if (self.opts.rmWhitespace) { + // rmWhitespace has already removed trailing spaces, just need + // to remove linebreaks + line = line.replace(/^\n/, ''); + } + if (!line) { + return; + } + + // Preserve literal slashes + line = line.replace(/\\/g, '\\\\'); + + // Convert linebreaks + line = line.replace(/\n/g, '\\n'); + line = line.replace(/\r/g, '\\r'); + + // Escape double-quotes + // - this will be the delimiter during execution + line = line.replace(/"/g, '\\"'); + self.source += ' ; __append("' + line + '")' + '\n'; + } + + newLineCount = (line.split('\n').length - 1); + + switch (line) { + case '<' + d: + case '<' + d + '_': + this.mode = Template.modes.EVAL; + break; + case '<' + d + '=': + this.mode = Template.modes.ESCAPED; + break; + case '<' + d + '-': + this.mode = Template.modes.RAW; + break; + case '<' + d + '#': + this.mode = Template.modes.COMMENT; + break; + case '<' + d + d: + this.mode = Template.modes.LITERAL; + this.source += ' ; __append("' + line.replace('<' + d + d, '<' + d) + '")' + '\n'; + break; + case d + d + '>': + this.mode = Template.modes.LITERAL; + this.source += ' ; __append("' + line.replace(d + d + '>', d + '>') + '")' + '\n'; + break; + case d + '>': + case '-' + d + '>': + case '_' + d + '>': + if (this.mode == Template.modes.LITERAL) { + _addOutput(); + } + + this.mode = null; + this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0; + break; + default: + // In script mode, depends on type of tag + if (this.mode) { + // If '//' is found without a line break, add a line break. + switch (this.mode) { + case Template.modes.EVAL: + case Template.modes.ESCAPED: + case Template.modes.RAW: + if (line.lastIndexOf('//') > line.lastIndexOf('\n')) { + line += '\n'; + } + } + switch (this.mode) { + // Just executing code + case Template.modes.EVAL: + this.source += ' ; ' + line + '\n'; + break; + // Exec, esc, and output + case Template.modes.ESCAPED: + this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\n'; + break; + // Exec and output + case Template.modes.RAW: + this.source += ' ; __append(' + stripSemi(line) + ')' + '\n'; + break; + case Template.modes.COMMENT: + // Do nothing + break; + // Literal <%% mode, append as raw output + case Template.modes.LITERAL: + _addOutput(); + break; + } + } + // In string mode, just add the output + else { + _addOutput(); + } + } + + if (self.opts.compileDebug && newLineCount) { + this.currentLine += newLineCount; + this.source += ' ; __line = ' + this.currentLine + '\n'; + } + } +}; + +/** + * Escape characters reserved in XML. + * + * This is simply an export of {@link module:utils.escapeXML}. + * + * If `markup` is `undefined` or `null`, the empty string is returned. + * + * @param {String} markup Input string + * @return {String} Escaped string + * @public + * @func + * */ +exports.escapeXML = utils.escapeXML; + +/** + * Express.js support. + * + * This is an alias for {@link module:ejs.renderFile}, in order to support + * Express.js out-of-the-box. + * + * @func + */ + +exports.__express = exports.renderFile; + +// Add require support +/* istanbul ignore else */ +if (require.extensions) { + require.extensions['.ejs'] = function (module, flnm) { + var filename = flnm || /* istanbul ignore next */ module.filename; + var options = { + filename: filename, + client: true + }; + var template = fileLoader(filename).toString(); + var fn = exports.compile(template, options); + module._compile('module.exports = ' + fn.toString() + ';', filename); + }; +} + +/** + * Version of EJS. + * + * @readonly + * @type {String} + * @public + */ + +exports.VERSION = _VERSION_STRING; + +/** + * Name for detection of EJS. + * + * @readonly + * @type {String} + * @public + */ + +exports.name = _NAME; + +/* istanbul ignore if */ +if (typeof window != 'undefined') { + window.ejs = exports; +} + +},{"../package.json":6,"./utils":2,"fs":3,"path":4}],2:[function(require,module,exports){ +/* + * EJS Embedded JavaScript templates + * Copyright 2112 Matthew Eernisse (mde@fleegix.org) + * + * 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. + * +*/ + +/** + * Private utility functions + * @module utils + * @private + */ + +'use strict'; + +var regExpChars = /[|\\{}()[\]^$+*?.]/g; + +/** + * Escape characters reserved in regular expressions. + * + * If `string` is `undefined` or `null`, the empty string is returned. + * + * @param {String} string Input string + * @return {String} Escaped string + * @static + * @private + */ +exports.escapeRegExpChars = function (string) { + // istanbul ignore if + if (!string) { + return ''; + } + return String(string).replace(regExpChars, '\\$&'); +}; + +var _ENCODE_HTML_RULES = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +var _MATCH_HTML = /[&<>\'"]/g; + +function encode_char(c) { + return _ENCODE_HTML_RULES[c] || c; +} + +/** + * Stringified version of constants used by {@link module:utils.escapeXML}. + * + * It is used in the process of generating {@link ClientFunction}s. + * + * @readonly + * @type {String} + */ + +var escapeFuncStr = + 'var _ENCODE_HTML_RULES = {\n' ++ ' "&": "&"\n' ++ ' , "<": "<"\n' ++ ' , ">": ">"\n' ++ ' , \'"\': """\n' ++ ' , "\'": "'"\n' ++ ' }\n' ++ ' , _MATCH_HTML = /[&<>\'"]/g;\n' ++ 'function encode_char(c) {\n' ++ ' return _ENCODE_HTML_RULES[c] || c;\n' ++ '};\n'; + +/** + * Escape characters reserved in XML. + * + * If `markup` is `undefined` or `null`, the empty string is returned. + * + * @implements {EscapeCallback} + * @param {String} markup Input string + * @return {String} Escaped string + * @static + * @private + */ + +exports.escapeXML = function (markup) { + return markup == undefined + ? '' + : String(markup) + .replace(_MATCH_HTML, encode_char); +}; +exports.escapeXML.toString = function () { + return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr; +}; + +/** + * Naive copy of properties from one object to another. + * Does not recurse into non-scalar properties + * Does not check to see if the property has a value before copying + * + * @param {Object} to Destination object + * @param {Object} from Source object + * @return {Object} Destination object + * @static + * @private + */ +exports.shallowCopy = function (to, from) { + from = from || {}; + for (var p in from) { + to[p] = from[p]; + } + return to; +}; + +/** + * Naive copy of a list of key names, from one object to another. + * Only copies property if it is actually defined + * Does not recurse into non-scalar properties + * + * @param {Object} to Destination object + * @param {Object} from Source object + * @param {Array} list List of properties to copy + * @return {Object} Destination object + * @static + * @private + */ +exports.shallowCopyFromList = function (to, from, list) { + for (var i = 0; i < list.length; i++) { + var p = list[i]; + if (typeof from[p] != 'undefined') { + to[p] = from[p]; + } + } + return to; +}; + +/** + * Simple in-process cache implementation. Does not implement limits of any + * sort. + * + * @implements Cache + * @static + * @private + */ +exports.cache = { + _data: {}, + set: function (key, val) { + this._data[key] = val; + }, + get: function (key) { + return this._data[key]; + }, + reset: function () { + this._data = {}; + } +}; + +},{}],3:[function(require,module,exports){ + +},{}],4:[function(require,module,exports){ +(function (process){ +// 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. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":5}],5:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],6:[function(require,module,exports){ +module.exports={ + "name": "ejs", + "description": "Embedded JavaScript templates", + "keywords": [ + "template", + "engine", + "ejs" + ], + "version": "2.5.5", + "author": "Matthew Eernisse (http://fleegix.org)", + "contributors": [ + "Timothy Gu (https://timothygu.github.io)" + ], + "license": "Apache-2.0", + "main": "./lib/ejs.js", + "repository": { + "type": "git", + "url": "git://github.com/mde/ejs.git" + }, + "bugs": "https://github.com/mde/ejs/issues", + "homepage": "https://github.com/mde/ejs", + "dependencies": {}, + "devDependencies": { + "browserify": "^13.0.1", + "eslint": "^3.0.0", + "git-directory-deploy": "^1.5.1", + "istanbul": "~0.4.3", + "jake": "^8.0.0", + "jsdoc": "^3.4.0", + "lru-cache": "^4.0.1", + "mocha": "^3.0.2", + "uglify-js": "^2.6.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "lint": "eslint \"**/*.js\" Jakefile", + "coverage": "istanbul cover node_modules/mocha/bin/_mocha", + "doc": "jake doc", + "devdoc": "jake doc[dev]" + } +} + +},{}]},{},[1])(1) +}); \ No newline at end of file diff --git a/node_modules/ejs/ejs.min.js b/node_modules/ejs/ejs.min.js new file mode 100644 index 0000000..559d386 --- /dev/null +++ b/node_modules/ejs/ejs.min.js @@ -0,0 +1 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ejs=f()}})(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);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o1;if(options.cache){if(!filename){throw new Error("cache option requires a filename")}func=exports.cache.get(filename);if(func){return func}if(!hasTemplate){template=fileLoader(filename).toString().replace(_BOM,"")}}else if(!hasTemplate){if(!filename){throw new Error("Internal EJS error: no file name or template "+"provided")}template=fileLoader(filename).toString().replace(_BOM,"")}func=exports.compile(template,options);if(options.cache){exports.cache.set(filename,func)}return func}function tryHandleCache(options,data,cb){var result;try{result=handleCache(options)(data)}catch(err){return cb(err)}return cb(null,result)}function fileLoader(filePath){return exports.fileLoader(filePath)}function includeFile(path,options){var opts=utils.shallowCopy({},options);opts.filename=getIncludePath(path,opts);return handleCache(opts)}function includeSource(path,options){var opts=utils.shallowCopy({},options);var includePath;var template;includePath=getIncludePath(path,opts);template=fileLoader(includePath).toString().replace(_BOM,"");opts.filename=includePath;var templ=new Template(template,opts);templ.generateSource();return{source:templ.source,filename:includePath,template:template}}function rethrow(err,str,flnm,lineno,esc){var lines=str.split("\n");var start=Math.max(lineno-3,0);var end=Math.min(lines.length,lineno+3);var filename=esc(flnm);var context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" >> ":" ")+curr+"| "+line}).join("\n");err.path=filename;err.message=(filename||"ejs")+":"+lineno+"\n"+context+"\n\n"+err.message;throw err}function stripSemi(str){return str.replace(/;(\s*$)/,"$1")}exports.compile=function compile(template,opts){var templ;if(opts&&opts.scope){if(!scopeOptionWarned){console.warn("`scope` option is deprecated and will be removed in EJS 3");scopeOptionWarned=true}if(!opts.context){opts.context=opts.scope}delete opts.scope}templ=new Template(template,opts);return templ.compile()};exports.render=function(template,d,o){var data=d||{};var opts=o||{};if(arguments.length==2){utils.shallowCopyFromList(opts,data,_OPTS)}return handleCache(opts,template)(data)};exports.renderFile=function(){var filename=arguments[0];var cb=arguments[arguments.length-1];var opts={filename:filename};var data;if(arguments.length>2){data=arguments[1];if(arguments.length===3){if(data.settings&&data.settings["view options"]){utils.shallowCopyFromList(opts,data.settings["view options"],_OPTS_EXPRESS)}else{utils.shallowCopyFromList(opts,data,_OPTS_EXPRESS)}}else{utils.shallowCopy(opts,arguments[2])}opts.filename=filename}else{data={}}return tryHandleCache(opts,data,cb)};exports.clearCache=function(){exports.cache.reset()};function Template(text,opts){opts=opts||{};var options={};this.templateText=text;this.mode=null;this.truncate=false;this.currentLine=1;this.source="";this.dependencies=[];options.client=opts.client||false;options.escapeFunction=opts.escape||utils.escapeXML;options.compileDebug=opts.compileDebug!==false;options.debug=!!opts.debug;options.filename=opts.filename;options.delimiter=opts.delimiter||exports.delimiter||_DEFAULT_DELIMITER;options.strict=opts.strict||false;options.context=opts.context;options.cache=opts.cache||false;options.rmWhitespace=opts.rmWhitespace;options.root=opts.root;options.localsName=opts.localsName||exports.localsName||_DEFAULT_LOCALS_NAME;if(options.strict){options._with=false}else{options._with=typeof opts._with!="undefined"?opts._with:true}this.opts=options;this.regex=this.createRegex()}Template.modes={EVAL:"eval",ESCAPED:"escaped",RAW:"raw",COMMENT:"comment",LITERAL:"literal"};Template.prototype={createRegex:function(){var str=_REGEX_STRING;var delim=utils.escapeRegExpChars(this.opts.delimiter);str=str.replace(/%/g,delim);return new RegExp(str)},compile:function(){var src;var fn;var opts=this.opts;var prepended="";var appended="";var escapeFn=opts.escapeFunction;if(!this.source){this.generateSource();prepended+=" var __output = [], __append = __output.push.bind(__output);"+"\n";if(opts._with!==false){prepended+=" with ("+opts.localsName+" || {}) {"+"\n";appended+=" }"+"\n"}appended+=' return __output.join("");'+"\n";this.source=prepended+this.source+appended}if(opts.compileDebug){src="var __line = 1"+"\n"+" , __lines = "+JSON.stringify(this.templateText)+"\n"+" , __filename = "+(opts.filename?JSON.stringify(opts.filename):"undefined")+";"+"\n"+"try {"+"\n"+this.source+"} catch (e) {"+"\n"+" rethrow(e, __lines, __filename, __line, escapeFn);"+"\n"+"}"+"\n"}else{src=this.source}if(opts.debug){console.log(src)}if(opts.client){src="escapeFn = escapeFn || "+escapeFn.toString()+";"+"\n"+src;if(opts.compileDebug){src="rethrow = rethrow || "+rethrow.toString()+";"+"\n"+src}}if(opts.strict){src='"use strict";\n'+src}try{fn=new Function(opts.localsName+", escapeFn, include, rethrow",src)}catch(e){if(e instanceof SyntaxError){if(opts.filename){e.message+=" in "+opts.filename}e.message+=" while compiling ejs\n\n";e.message+="If the above error is not helpful, you may want to try EJS-Lint:\n";e.message+="https://github.com/RyanZim/EJS-Lint"}throw e}if(opts.client){fn.dependencies=this.dependencies;return fn}var returnedFn=function(data){var include=function(path,includeData){var d=utils.shallowCopy({},data);if(includeData){d=utils.shallowCopy(d,includeData)}return includeFile(path,opts)(d)};return fn.apply(opts.context,[data||{},escapeFn,include,rethrow])};returnedFn.dependencies=this.dependencies;return returnedFn},generateSource:function(){var opts=this.opts;if(opts.rmWhitespace){this.templateText=this.templateText.replace(/\r/g,"").replace(/^\s+|\s+$/gm,"")}this.templateText=this.templateText.replace(/[ \t]*<%_/gm,"<%_").replace(/_%>[ \t]*/gm,"_%>");var self=this;var matches=this.parseTemplateText();var d=this.opts.delimiter;if(matches&&matches.length){matches.forEach(function(line,index){var opening;var closing;var include;var includeOpts;var includeObj;var includeSrc;if(line.indexOf("<"+d)===0&&line.indexOf("<"+d+d)!==0){closing=matches[index+2];if(!(closing==d+">"||closing=="-"+d+">"||closing=="_"+d+">")){throw new Error('Could not find matching close tag for "'+line+'".')}}if(include=line.match(/^\s*include\s+(\S+)/)){opening=matches[index-1];if(opening&&(opening=="<"+d||opening=="<"+d+"-"||opening=="<"+d+"_")){includeOpts=utils.shallowCopy({},self.opts);includeObj=includeSource(include[1],includeOpts);if(self.opts.compileDebug){includeSrc=" ; (function(){"+"\n"+" var __line = 1"+"\n"+" , __lines = "+JSON.stringify(includeObj.template)+"\n"+" , __filename = "+JSON.stringify(includeObj.filename)+";"+"\n"+" try {"+"\n"+includeObj.source+" } catch (e) {"+"\n"+" rethrow(e, __lines, __filename, __line);"+"\n"+" }"+"\n"+" ; }).call(this)"+"\n"}else{includeSrc=" ; (function(){"+"\n"+includeObj.source+" ; }).call(this)"+"\n"}self.source+=includeSrc;self.dependencies.push(exports.resolveInclude(include[1],includeOpts.filename));return}}self.scanLine(line)})}},parseTemplateText:function(){var str=this.templateText;var pat=this.regex;var result=pat.exec(str);var arr=[];var firstPos;while(result){firstPos=result.index;if(firstPos!==0){arr.push(str.substring(0,firstPos));str=str.slice(firstPos)}arr.push(result[0]);str=str.slice(result[0].length);result=pat.exec(str)}if(str){arr.push(str)}return arr},scanLine:function(line){var self=this;var d=this.opts.delimiter;var newLineCount=0;function _addOutput(){if(self.truncate){line=line.replace(/^(?:\r\n|\r|\n)/,"");self.truncate=false}else if(self.opts.rmWhitespace){line=line.replace(/^\n/,"")}if(!line){return}line=line.replace(/\\/g,"\\\\");line=line.replace(/\n/g,"\\n");line=line.replace(/\r/g,"\\r");line=line.replace(/"/g,'\\"');self.source+=' ; __append("'+line+'")'+"\n"}newLineCount=line.split("\n").length-1;switch(line){case"<"+d:case"<"+d+"_":this.mode=Template.modes.EVAL;break;case"<"+d+"=":this.mode=Template.modes.ESCAPED;break;case"<"+d+"-":this.mode=Template.modes.RAW;break;case"<"+d+"#":this.mode=Template.modes.COMMENT;break;case"<"+d+d:this.mode=Template.modes.LITERAL;this.source+=' ; __append("'+line.replace("<"+d+d,"<"+d)+'")'+"\n";break;case d+d+">":this.mode=Template.modes.LITERAL;this.source+=' ; __append("'+line.replace(d+d+">",d+">")+'")'+"\n";break;case d+">":case"-"+d+">":case"_"+d+">":if(this.mode==Template.modes.LITERAL){_addOutput()}this.mode=null;this.truncate=line.indexOf("-")===0||line.indexOf("_")===0;break;default:if(this.mode){switch(this.mode){case Template.modes.EVAL:case Template.modes.ESCAPED:case Template.modes.RAW:if(line.lastIndexOf("//")>line.lastIndexOf("\n")){line+="\n"}}switch(this.mode){case Template.modes.EVAL:this.source+=" ; "+line+"\n";break;case Template.modes.ESCAPED:this.source+=" ; __append(escapeFn("+stripSemi(line)+"))"+"\n";break;case Template.modes.RAW:this.source+=" ; __append("+stripSemi(line)+")"+"\n";break;case Template.modes.COMMENT:break;case Template.modes.LITERAL:_addOutput();break}}else{_addOutput()}}if(self.opts.compileDebug&&newLineCount){this.currentLine+=newLineCount;this.source+=" ; __line = "+this.currentLine+"\n"}}};exports.escapeXML=utils.escapeXML;exports.__express=exports.renderFile;if(require.extensions){require.extensions[".ejs"]=function(module,flnm){var filename=flnm||module.filename;var options={filename:filename,client:true};var template=fileLoader(filename).toString();var fn=exports.compile(template,options);module._compile("module.exports = "+fn.toString()+";",filename)}}exports.VERSION=_VERSION_STRING;exports.name=_NAME;if(typeof window!="undefined"){window.ejs=exports}},{"../package.json":6,"./utils":2,fs:3,path:4}],2:[function(require,module,exports){"use strict";var regExpChars=/[|\\{}()[\]^$+*?.]/g;exports.escapeRegExpChars=function(string){if(!string){return""}return String(string).replace(regExpChars,"\\$&")};var _ENCODE_HTML_RULES={"&":"&","<":"<",">":">",'"':""","'":"'"};var _MATCH_HTML=/[&<>\'"]/g;function encode_char(c){return _ENCODE_HTML_RULES[c]||c}var escapeFuncStr="var _ENCODE_HTML_RULES = {\n"+' "&": "&"\n'+' , "<": "<"\n'+' , ">": ">"\n'+' , \'"\': """\n'+' , "\'": "'"\n'+" }\n"+" , _MATCH_HTML = /[&<>'\"]/g;\n"+"function encode_char(c) {\n"+" return _ENCODE_HTML_RULES[c] || c;\n"+"};\n";exports.escapeXML=function(markup){return markup==undefined?"":String(markup).replace(_MATCH_HTML,encode_char)};exports.escapeXML.toString=function(){return Function.prototype.toString.call(this)+";\n"+escapeFuncStr};exports.shallowCopy=function(to,from){from=from||{};for(var p in from){to[p]=from[p]}return to};exports.shallowCopyFromList=function(to,from,list){for(var i=0;i=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i1){for(var i=1;i (http://fleegix.org)",contributors:["Timothy Gu (https://timothygu.github.io)"],license:"Apache-2.0",main:"./lib/ejs.js",repository:{type:"git",url:"git://github.com/mde/ejs.git"},bugs:"https://github.com/mde/ejs/issues",homepage:"https://github.com/mde/ejs",dependencies:{},devDependencies:{browserify:"^13.0.1",eslint:"^3.0.0","git-directory-deploy":"^1.5.1",istanbul:"~0.4.3",jake:"^8.0.0",jsdoc:"^3.4.0","lru-cache":"^4.0.1",mocha:"^3.0.2","uglify-js":"^2.6.2"},engines:{node:">=0.10.0"},scripts:{test:"mocha",lint:'eslint "**/*.js" Jakefile',coverage:"istanbul cover node_modules/mocha/bin/_mocha",doc:"jake doc",devdoc:"jake doc[dev]"}}},{}]},{},[1])(1)}); diff --git a/node_modules/ejs/lib/ejs.js b/node_modules/ejs/lib/ejs.js new file mode 100644 index 0000000..b53ee78 --- /dev/null +++ b/node_modules/ejs/lib/ejs.js @@ -0,0 +1,841 @@ +/* + * EJS Embedded JavaScript templates + * Copyright 2112 Matthew Eernisse (mde@fleegix.org) + * + * 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. + * +*/ + +'use strict'; + +/** + * @file Embedded JavaScript templating engine. {@link http://ejs.co} + * @author Matthew Eernisse + * @author Tiancheng "Timothy" Gu + * @project EJS + * @license {@link http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0} + */ + +/** + * EJS internal functions. + * + * Technically this "module" lies in the same file as {@link module:ejs}, for + * the sake of organization all the private functions re grouped into this + * module. + * + * @module ejs-internal + * @private + */ + +/** + * Embedded JavaScript templating engine. + * + * @module ejs + * @public + */ + +var fs = require('fs'); +var path = require('path'); +var utils = require('./utils'); + +var scopeOptionWarned = false; +var _VERSION_STRING = require('../package.json').version; +var _DEFAULT_DELIMITER = '%'; +var _DEFAULT_LOCALS_NAME = 'locals'; +var _NAME = 'ejs'; +var _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)'; +var _OPTS = ['delimiter', 'scope', 'context', 'debug', 'compileDebug', + 'client', '_with', 'rmWhitespace', 'strict', 'filename']; +// We don't allow 'cache' option to be passed in the data obj +// for the normal `render` call, but this is where Express puts it +// so we make an exception for `renderFile` +var _OPTS_EXPRESS = _OPTS.concat('cache'); +var _BOM = /^\uFEFF/; + +/** + * EJS template function cache. This can be a LRU object from lru-cache NPM + * module. By default, it is {@link module:utils.cache}, a simple in-process + * cache that grows continuously. + * + * @type {Cache} + */ + +exports.cache = utils.cache; + +/** + * Custom file loader. Useful for template preprocessing or restricting access + * to a certain part of the filesystem. + * + * @type {fileLoader} + */ + +exports.fileLoader = fs.readFileSync; + +/** + * Name of the object containing the locals. + * + * This variable is overridden by {@link Options}`.localsName` if it is not + * `undefined`. + * + * @type {String} + * @public + */ + +exports.localsName = _DEFAULT_LOCALS_NAME; + +/** + * Get the path to the included file from the parent file path and the + * specified path. + * + * @param {String} name specified path + * @param {String} filename parent file path + * @param {Boolean} isDir parent file path whether is directory + * @return {String} + */ +exports.resolveInclude = function(name, filename, isDir) { + var dirname = path.dirname; + var extname = path.extname; + var resolve = path.resolve; + var includePath = resolve(isDir ? filename : dirname(filename), name); + var ext = extname(name); + if (!ext) { + includePath += '.ejs'; + } + return includePath; +}; + +/** + * Get the path to the included file by Options + * + * @param {String} path specified path + * @param {Options} options compilation options + * @return {String} + */ +function getIncludePath(path, options){ + var includePath; + if (path.charAt(0) == '/') { + includePath = exports.resolveInclude(path.replace(/^\/*/,''), options.root || '/', true); + } + else { + if (!options.filename) { + throw new Error('`include` use relative path requires the \'filename\' option.'); + } + includePath = exports.resolveInclude(path, options.filename); + } + return includePath; +} + +/** + * Get the template from a string or a file, either compiled on-the-fly or + * read from cache (if enabled), and cache the template if needed. + * + * If `template` is not set, the file specified in `options.filename` will be + * read. + * + * If `options.cache` is true, this function reads the file from + * `options.filename` so it must be set prior to calling this function. + * + * @memberof module:ejs-internal + * @param {Options} options compilation options + * @param {String} [template] template source + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `options.client`, either type might be returned. + * @static + */ + +function handleCache(options, template) { + var func; + var filename = options.filename; + var hasTemplate = arguments.length > 1; + + if (options.cache) { + if (!filename) { + throw new Error('cache option requires a filename'); + } + func = exports.cache.get(filename); + if (func) { + return func; + } + if (!hasTemplate) { + template = fileLoader(filename).toString().replace(_BOM, ''); + } + } + else if (!hasTemplate) { + // istanbul ignore if: should not happen at all + if (!filename) { + throw new Error('Internal EJS error: no file name or template ' + + 'provided'); + } + template = fileLoader(filename).toString().replace(_BOM, ''); + } + func = exports.compile(template, options); + if (options.cache) { + exports.cache.set(filename, func); + } + return func; +} + +/** + * Try calling handleCache with the given options and data and call the + * callback with the result. If an error occurs, call the callback with + * the error. Used by renderFile(). + * + * @memberof module:ejs-internal + * @param {Options} options compilation options + * @param {Object} data template data + * @param {RenderFileCallback} cb callback + * @static + */ + +function tryHandleCache(options, data, cb) { + var result; + try { + result = handleCache(options)(data); + } + catch (err) { + return cb(err); + } + return cb(null, result); +} + +/** + * fileLoader is independent + * + * @param {String} filePath ejs file path. + * @return {String} The contents of the specified file. + * @static + */ + +function fileLoader(filePath){ + return exports.fileLoader(filePath); +} + +/** + * Get the template function. + * + * If `options.cache` is `true`, then the template is cached. + * + * @memberof module:ejs-internal + * @param {String} path path for the specified file + * @param {Options} options compilation options + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `options.client`, either type might be returned + * @static + */ + +function includeFile(path, options) { + var opts = utils.shallowCopy({}, options); + opts.filename = getIncludePath(path, opts); + return handleCache(opts); +} + +/** + * Get the JavaScript source of an included file. + * + * @memberof module:ejs-internal + * @param {String} path path for the specified file + * @param {Options} options compilation options + * @return {Object} + * @static + */ + +function includeSource(path, options) { + var opts = utils.shallowCopy({}, options); + var includePath; + var template; + includePath = getIncludePath(path, opts); + template = fileLoader(includePath).toString().replace(_BOM, ''); + opts.filename = includePath; + var templ = new Template(template, opts); + templ.generateSource(); + return { + source: templ.source, + filename: includePath, + template: template + }; +} + +/** + * Re-throw the given `err` in context to the `str` of ejs, `filename`, and + * `lineno`. + * + * @implements RethrowCallback + * @memberof module:ejs-internal + * @param {Error} err Error object + * @param {String} str EJS source + * @param {String} filename file name of the EJS file + * @param {String} lineno line number of the error + * @static + */ + +function rethrow(err, str, flnm, lineno, esc){ + var lines = str.split('\n'); + var start = Math.max(lineno - 3, 0); + var end = Math.min(lines.length, lineno + 3); + var filename = esc(flnm); // eslint-disable-line + // 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 || 'ejs') + ':' + + lineno + '\n' + + context + '\n\n' + + err.message; + + throw err; +} + +function stripSemi(str){ + return str.replace(/;(\s*$)/, '$1'); +} + +/** + * Compile the given `str` of ejs into a template function. + * + * @param {String} template EJS template + * + * @param {Options} opts compilation options + * + * @return {(TemplateFunction|ClientFunction)} + * Depending on the value of `opts.client`, either type might be returned. + * @public + */ + +exports.compile = function compile(template, opts) { + var templ; + + // v1 compat + // 'scope' is 'context' + // FIXME: Remove this in a future version + if (opts && opts.scope) { + if (!scopeOptionWarned){ + console.warn('`scope` option is deprecated and will be removed in EJS 3'); + scopeOptionWarned = true; + } + if (!opts.context) { + opts.context = opts.scope; + } + delete opts.scope; + } + templ = new Template(template, opts); + return templ.compile(); +}; + +/** + * Render the given `template` of ejs. + * + * If you would like to include options but not data, you need to explicitly + * call this function with `data` being an empty object or `null`. + * + * @param {String} template EJS template + * @param {Object} [data={}] template data + * @param {Options} [opts={}] compilation and rendering options + * @return {String} + * @public + */ + +exports.render = function (template, d, o) { + var data = d || {}; + var opts = o || {}; + + // No options object -- if there are optiony names + // in the data, copy them to options + if (arguments.length == 2) { + utils.shallowCopyFromList(opts, data, _OPTS); + } + + return handleCache(opts, template)(data); +}; + +/** + * Render an EJS file at the given `path` and callback `cb(err, str)`. + * + * If you would like to include options but not data, you need to explicitly + * call this function with `data` being an empty object or `null`. + * + * @param {String} path path to the EJS file + * @param {Object} [data={}] template data + * @param {Options} [opts={}] compilation and rendering options + * @param {RenderFileCallback} cb callback + * @public + */ + +exports.renderFile = function () { + var filename = arguments[0]; + var cb = arguments[arguments.length - 1]; + var opts = {filename: filename}; + var data; + + if (arguments.length > 2) { + data = arguments[1]; + + // No options object -- if there are optiony names + // in the data, copy them to options + if (arguments.length === 3) { + // Express 4 + if (data.settings && data.settings['view options']) { + utils.shallowCopyFromList(opts, data.settings['view options'], _OPTS_EXPRESS); + } + // Express 3 and lower + else { + utils.shallowCopyFromList(opts, data, _OPTS_EXPRESS); + } + } + else { + // Use shallowCopy so we don't pollute passed in opts obj with new vals + utils.shallowCopy(opts, arguments[2]); + } + + opts.filename = filename; + } + else { + data = {}; + } + + return tryHandleCache(opts, data, cb); +}; + +/** + * Clear intermediate JavaScript cache. Calls {@link Cache#reset}. + * @public + */ + +exports.clearCache = function () { + exports.cache.reset(); +}; + +function Template(text, opts) { + opts = opts || {}; + var options = {}; + this.templateText = text; + this.mode = null; + this.truncate = false; + this.currentLine = 1; + this.source = ''; + this.dependencies = []; + options.client = opts.client || false; + options.escapeFunction = opts.escape || utils.escapeXML; + options.compileDebug = opts.compileDebug !== false; + options.debug = !!opts.debug; + options.filename = opts.filename; + options.delimiter = opts.delimiter || exports.delimiter || _DEFAULT_DELIMITER; + options.strict = opts.strict || false; + options.context = opts.context; + options.cache = opts.cache || false; + options.rmWhitespace = opts.rmWhitespace; + options.root = opts.root; + options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME; + + if (options.strict) { + options._with = false; + } + else { + options._with = typeof opts._with != 'undefined' ? opts._with : true; + } + + this.opts = options; + + this.regex = this.createRegex(); +} + +Template.modes = { + EVAL: 'eval', + ESCAPED: 'escaped', + RAW: 'raw', + COMMENT: 'comment', + LITERAL: 'literal' +}; + +Template.prototype = { + createRegex: function () { + var str = _REGEX_STRING; + var delim = utils.escapeRegExpChars(this.opts.delimiter); + str = str.replace(/%/g, delim); + return new RegExp(str); + }, + + compile: function () { + var src; + var fn; + var opts = this.opts; + var prepended = ''; + var appended = ''; + var escapeFn = opts.escapeFunction; + + if (!this.source) { + this.generateSource(); + prepended += ' var __output = [], __append = __output.push.bind(__output);' + '\n'; + if (opts._with !== false) { + prepended += ' with (' + opts.localsName + ' || {}) {' + '\n'; + appended += ' }' + '\n'; + } + appended += ' return __output.join("");' + '\n'; + this.source = prepended + this.source + appended; + } + + if (opts.compileDebug) { + src = 'var __line = 1' + '\n' + + ' , __lines = ' + JSON.stringify(this.templateText) + '\n' + + ' , __filename = ' + (opts.filename ? + JSON.stringify(opts.filename) : 'undefined') + ';' + '\n' + + 'try {' + '\n' + + this.source + + '} catch (e) {' + '\n' + + ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n' + + '}' + '\n'; + } + else { + src = this.source; + } + + if (opts.debug) { + console.log(src); + } + + if (opts.client) { + src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\n' + src; + if (opts.compileDebug) { + src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\n' + src; + } + } + + if (opts.strict) { + src = '"use strict";\n' + src; + } + + try { + fn = new Function(opts.localsName + ', escapeFn, include, rethrow', src); + } + catch(e) { + // istanbul ignore else + if (e instanceof SyntaxError) { + if (opts.filename) { + e.message += ' in ' + opts.filename; + } + e.message += ' while compiling ejs\n\n'; + e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\n'; + e.message += 'https://github.com/RyanZim/EJS-Lint'; + } + throw e; + } + + if (opts.client) { + fn.dependencies = this.dependencies; + return fn; + } + + // Return a callable function which will execute the function + // created by the source-code, with the passed data as locals + // Adds a local `include` function which allows full recursive include + var returnedFn = function (data) { + var include = function (path, includeData) { + var d = utils.shallowCopy({}, data); + if (includeData) { + d = utils.shallowCopy(d, includeData); + } + return includeFile(path, opts)(d); + }; + return fn.apply(opts.context, [data || {}, escapeFn, include, rethrow]); + }; + returnedFn.dependencies = this.dependencies; + return returnedFn; + }, + + generateSource: function () { + var opts = this.opts; + + if (opts.rmWhitespace) { + // Have to use two separate replace here as `^` and `$` operators don't + // work well with `\r`. + this.templateText = + this.templateText.replace(/\r/g, '').replace(/^\s+|\s+$/gm, ''); + } + + // Slurp spaces and tabs before <%_ and after _%> + this.templateText = + this.templateText.replace(/[ \t]*<%_/gm, '<%_').replace(/_%>[ \t]*/gm, '_%>'); + + var self = this; + var matches = this.parseTemplateText(); + var d = this.opts.delimiter; + + if (matches && matches.length) { + matches.forEach(function (line, index) { + var opening; + var closing; + var include; + var includeOpts; + var includeObj; + var includeSrc; + // If this is an opening tag, check for closing tags + // FIXME: May end up with some false positives here + // Better to store modes as k/v with '<' + delimiter as key + // Then this can simply check against the map + if ( line.indexOf('<' + d) === 0 // If it is a tag + && line.indexOf('<' + d + d) !== 0) { // and is not escaped + closing = matches[index + 2]; + if (!(closing == d + '>' || closing == '-' + d + '>' || closing == '_' + d + '>')) { + throw new Error('Could not find matching close tag for "' + line + '".'); + } + } + // HACK: backward-compat `include` preprocessor directives + if ((include = line.match(/^\s*include\s+(\S+)/))) { + opening = matches[index - 1]; + // Must be in EVAL or RAW mode + if (opening && (opening == '<' + d || opening == '<' + d + '-' || opening == '<' + d + '_')) { + includeOpts = utils.shallowCopy({}, self.opts); + includeObj = includeSource(include[1], includeOpts); + if (self.opts.compileDebug) { + includeSrc = + ' ; (function(){' + '\n' + + ' var __line = 1' + '\n' + + ' , __lines = ' + JSON.stringify(includeObj.template) + '\n' + + ' , __filename = ' + JSON.stringify(includeObj.filename) + ';' + '\n' + + ' try {' + '\n' + + includeObj.source + + ' } catch (e) {' + '\n' + + ' rethrow(e, __lines, __filename, __line);' + '\n' + + ' }' + '\n' + + ' ; }).call(this)' + '\n'; + }else{ + includeSrc = ' ; (function(){' + '\n' + includeObj.source + + ' ; }).call(this)' + '\n'; + } + self.source += includeSrc; + self.dependencies.push(exports.resolveInclude(include[1], + includeOpts.filename)); + return; + } + } + self.scanLine(line); + }); + } + + }, + + parseTemplateText: function () { + var str = this.templateText; + var pat = this.regex; + var result = pat.exec(str); + var arr = []; + var firstPos; + + while (result) { + firstPos = result.index; + + if (firstPos !== 0) { + arr.push(str.substring(0, firstPos)); + str = str.slice(firstPos); + } + + arr.push(result[0]); + str = str.slice(result[0].length); + result = pat.exec(str); + } + + if (str) { + arr.push(str); + } + + return arr; + }, + + scanLine: function (line) { + var self = this; + var d = this.opts.delimiter; + var newLineCount = 0; + + function _addOutput() { + if (self.truncate) { + // Only replace single leading linebreak in the line after + // -%> tag -- this is the single, trailing linebreak + // after the tag that the truncation mode replaces + // Handle Win / Unix / old Mac linebreaks -- do the \r\n + // combo first in the regex-or + line = line.replace(/^(?:\r\n|\r|\n)/, ''); + self.truncate = false; + } + else if (self.opts.rmWhitespace) { + // rmWhitespace has already removed trailing spaces, just need + // to remove linebreaks + line = line.replace(/^\n/, ''); + } + if (!line) { + return; + } + + // Preserve literal slashes + line = line.replace(/\\/g, '\\\\'); + + // Convert linebreaks + line = line.replace(/\n/g, '\\n'); + line = line.replace(/\r/g, '\\r'); + + // Escape double-quotes + // - this will be the delimiter during execution + line = line.replace(/"/g, '\\"'); + self.source += ' ; __append("' + line + '")' + '\n'; + } + + newLineCount = (line.split('\n').length - 1); + + switch (line) { + case '<' + d: + case '<' + d + '_': + this.mode = Template.modes.EVAL; + break; + case '<' + d + '=': + this.mode = Template.modes.ESCAPED; + break; + case '<' + d + '-': + this.mode = Template.modes.RAW; + break; + case '<' + d + '#': + this.mode = Template.modes.COMMENT; + break; + case '<' + d + d: + this.mode = Template.modes.LITERAL; + this.source += ' ; __append("' + line.replace('<' + d + d, '<' + d) + '")' + '\n'; + break; + case d + d + '>': + this.mode = Template.modes.LITERAL; + this.source += ' ; __append("' + line.replace(d + d + '>', d + '>') + '")' + '\n'; + break; + case d + '>': + case '-' + d + '>': + case '_' + d + '>': + if (this.mode == Template.modes.LITERAL) { + _addOutput(); + } + + this.mode = null; + this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0; + break; + default: + // In script mode, depends on type of tag + if (this.mode) { + // If '//' is found without a line break, add a line break. + switch (this.mode) { + case Template.modes.EVAL: + case Template.modes.ESCAPED: + case Template.modes.RAW: + if (line.lastIndexOf('//') > line.lastIndexOf('\n')) { + line += '\n'; + } + } + switch (this.mode) { + // Just executing code + case Template.modes.EVAL: + this.source += ' ; ' + line + '\n'; + break; + // Exec, esc, and output + case Template.modes.ESCAPED: + this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\n'; + break; + // Exec and output + case Template.modes.RAW: + this.source += ' ; __append(' + stripSemi(line) + ')' + '\n'; + break; + case Template.modes.COMMENT: + // Do nothing + break; + // Literal <%% mode, append as raw output + case Template.modes.LITERAL: + _addOutput(); + break; + } + } + // In string mode, just add the output + else { + _addOutput(); + } + } + + if (self.opts.compileDebug && newLineCount) { + this.currentLine += newLineCount; + this.source += ' ; __line = ' + this.currentLine + '\n'; + } + } +}; + +/** + * Escape characters reserved in XML. + * + * This is simply an export of {@link module:utils.escapeXML}. + * + * If `markup` is `undefined` or `null`, the empty string is returned. + * + * @param {String} markup Input string + * @return {String} Escaped string + * @public + * @func + * */ +exports.escapeXML = utils.escapeXML; + +/** + * Express.js support. + * + * This is an alias for {@link module:ejs.renderFile}, in order to support + * Express.js out-of-the-box. + * + * @func + */ + +exports.__express = exports.renderFile; + +// Add require support +/* istanbul ignore else */ +if (require.extensions) { + require.extensions['.ejs'] = function (module, flnm) { + var filename = flnm || /* istanbul ignore next */ module.filename; + var options = { + filename: filename, + client: true + }; + var template = fileLoader(filename).toString(); + var fn = exports.compile(template, options); + module._compile('module.exports = ' + fn.toString() + ';', filename); + }; +} + +/** + * Version of EJS. + * + * @readonly + * @type {String} + * @public + */ + +exports.VERSION = _VERSION_STRING; + +/** + * Name for detection of EJS. + * + * @readonly + * @type {String} + * @public + */ + +exports.name = _NAME; + +/* istanbul ignore if */ +if (typeof window != 'undefined') { + window.ejs = exports; +} diff --git a/node_modules/ejs/lib/utils.js b/node_modules/ejs/lib/utils.js new file mode 100644 index 0000000..1b539da --- /dev/null +++ b/node_modules/ejs/lib/utils.js @@ -0,0 +1,164 @@ +/* + * EJS Embedded JavaScript templates + * Copyright 2112 Matthew Eernisse (mde@fleegix.org) + * + * 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. + * +*/ + +/** + * Private utility functions + * @module utils + * @private + */ + +'use strict'; + +var regExpChars = /[|\\{}()[\]^$+*?.]/g; + +/** + * Escape characters reserved in regular expressions. + * + * If `string` is `undefined` or `null`, the empty string is returned. + * + * @param {String} string Input string + * @return {String} Escaped string + * @static + * @private + */ +exports.escapeRegExpChars = function (string) { + // istanbul ignore if + if (!string) { + return ''; + } + return String(string).replace(regExpChars, '\\$&'); +}; + +var _ENCODE_HTML_RULES = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +var _MATCH_HTML = /[&<>\'"]/g; + +function encode_char(c) { + return _ENCODE_HTML_RULES[c] || c; +} + +/** + * Stringified version of constants used by {@link module:utils.escapeXML}. + * + * It is used in the process of generating {@link ClientFunction}s. + * + * @readonly + * @type {String} + */ + +var escapeFuncStr = + 'var _ENCODE_HTML_RULES = {\n' ++ ' "&": "&"\n' ++ ' , "<": "<"\n' ++ ' , ">": ">"\n' ++ ' , \'"\': """\n' ++ ' , "\'": "'"\n' ++ ' }\n' ++ ' , _MATCH_HTML = /[&<>\'"]/g;\n' ++ 'function encode_char(c) {\n' ++ ' return _ENCODE_HTML_RULES[c] || c;\n' ++ '};\n'; + +/** + * Escape characters reserved in XML. + * + * If `markup` is `undefined` or `null`, the empty string is returned. + * + * @implements {EscapeCallback} + * @param {String} markup Input string + * @return {String} Escaped string + * @static + * @private + */ + +exports.escapeXML = function (markup) { + return markup == undefined + ? '' + : String(markup) + .replace(_MATCH_HTML, encode_char); +}; +exports.escapeXML.toString = function () { + return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr; +}; + +/** + * Naive copy of properties from one object to another. + * Does not recurse into non-scalar properties + * Does not check to see if the property has a value before copying + * + * @param {Object} to Destination object + * @param {Object} from Source object + * @return {Object} Destination object + * @static + * @private + */ +exports.shallowCopy = function (to, from) { + from = from || {}; + for (var p in from) { + to[p] = from[p]; + } + return to; +}; + +/** + * Naive copy of a list of key names, from one object to another. + * Only copies property if it is actually defined + * Does not recurse into non-scalar properties + * + * @param {Object} to Destination object + * @param {Object} from Source object + * @param {Array} list List of properties to copy + * @return {Object} Destination object + * @static + * @private + */ +exports.shallowCopyFromList = function (to, from, list) { + for (var i = 0; i < list.length; i++) { + var p = list[i]; + if (typeof from[p] != 'undefined') { + to[p] = from[p]; + } + } + return to; +}; + +/** + * Simple in-process cache implementation. Does not implement limits of any + * sort. + * + * @implements Cache + * @static + * @private + */ +exports.cache = { + _data: {}, + set: function (key, val) { + this._data[key] = val; + }, + get: function (key) { + return this._data[key]; + }, + reset: function () { + this._data = {}; + } +}; diff --git a/node_modules/ejs/package.json b/node_modules/ejs/package.json new file mode 100644 index 0000000..48b3391 --- /dev/null +++ b/node_modules/ejs/package.json @@ -0,0 +1,113 @@ +{ + "_args": [ + [ + { + "raw": "ejs", + "scope": null, + "escapedName": "ejs", + "name": "ejs", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "/Users/macbookpro/Documents/Courses/NodeJs" + ] + ], + "_from": "ejs@latest", + "_id": "ejs@2.5.6", + "_inCache": true, + "_location": "/ejs", + "_nodeVersion": "6.9.1", + "_npmOperationalInternal": { + "host": "packages-12-west.internal.npmjs.com", + "tmp": "tmp/ejs-2.5.6.tgz_1487277787176_0.4875628533773124" + }, + "_npmUser": { + "name": "mde", + "email": "mde@fleegix.org" + }, + "_npmVersion": "3.10.8", + "_phantomChildren": {}, + "_requested": { + "raw": "ejs", + "scope": null, + "escapedName": "ejs", + "name": "ejs", + "rawSpec": "", + "spec": "latest", + "type": "tag" + }, + "_requiredBy": [ + "#USER" + ], + "_resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz", + "_shasum": "479636bfa3fe3b1debd52087f0acb204b4f19c88", + "_shrinkwrap": null, + "_spec": "ejs", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs", + "author": { + "name": "Matthew Eernisse", + "email": "mde@fleegix.org", + "url": "http://fleegix.org" + }, + "bugs": { + "url": "https://github.com/mde/ejs/issues" + }, + "contributors": [ + { + "name": "Timothy Gu", + "email": "timothygu99@gmail.com", + "url": "https://timothygu.github.io" + } + ], + "dependencies": {}, + "description": "Embedded JavaScript templates", + "devDependencies": { + "browserify": "^13.0.1", + "eslint": "^3.0.0", + "git-directory-deploy": "^1.5.1", + "istanbul": "~0.4.3", + "jake": "^8.0.0", + "jsdoc": "^3.4.0", + "lru-cache": "^4.0.1", + "mocha": "^3.0.2", + "uglify-js": "^2.6.2" + }, + "directories": {}, + "dist": { + "shasum": "479636bfa3fe3b1debd52087f0acb204b4f19c88", + "tarball": "https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz" + }, + "engines": { + "node": ">=0.10.0" + }, + "homepage": "https://github.com/mde/ejs", + "keywords": [ + "template", + "engine", + "ejs" + ], + "license": "Apache-2.0", + "main": "./lib/ejs.js", + "maintainers": [ + { + "name": "mde", + "email": "mde@fleegix.org" + } + ], + "name": "ejs", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/mde/ejs.git" + }, + "scripts": { + "coverage": "istanbul cover node_modules/mocha/bin/_mocha", + "devdoc": "jake doc[dev]", + "doc": "jake doc", + "lint": "eslint \"**/*.js\" Jakefile", + "test": "mocha" + }, + "version": "2.5.6" +} diff --git a/node_modules/ejs/test/ejs.js b/node_modules/ejs/test/ejs.js new file mode 100644 index 0000000..8960a1e --- /dev/null +++ b/node_modules/ejs/test/ejs.js @@ -0,0 +1,1039 @@ +/* jshint mocha: true */ +/* eslint-env node, mocha */ + +/** + * Module dependencies. + */ + +var ejs = require('..'); +var fs = require('fs'); +var read = fs.readFileSync; +var assert = require('assert'); +var path = require('path'); +var LRU = require('lru-cache'); + +try { + fs.mkdirSync(__dirname + '/tmp'); +} catch (ex) { + if (ex.code !== 'EEXIST') { + throw ex; + } +} + +// From https://gist.github.com/pguillory/729616 +function hook_stdio(stream, callback) { + var old_write = stream.write; + + stream.write = (function() { + return function(string, encoding, fd) { + callback(string, encoding, fd); + }; + })(stream.write); + + return function() { + stream.write = old_write; + }; +} + +/** + * Load fixture `name`. + */ + +function fixture(name) { + return read('test/fixtures/' + name, 'utf8'); +} + +/** + * User fixtures. + */ + +var users = []; +users.push({name: 'geddy'}); +users.push({name: 'neil'}); +users.push({name: 'alex'}); + +suite('ejs.compile(str, options)', function () { + test('compile to a function', function () { + var fn = ejs.compile('

    yay

    '); + assert.equal(fn(), '

    yay

    '); + }); + + test('empty input works', function () { + var fn = ejs.compile(''); + assert.equal(fn(), ''); + }); + + test('throw if there are syntax errors', function () { + try { + ejs.compile(fixture('fail.ejs')); + } + catch (err) { + assert.ok(err.message.indexOf('compiling ejs') > -1); + + try { + ejs.compile(fixture('fail.ejs'), {filename: 'fail.ejs'}); + } + catch (err) { + assert.ok(err.message.indexOf('fail.ejs') > -1); + return; + } + } + throw new Error('no error reported when there should be'); + }); + + test('allow customizing delimiter local var', function () { + var fn; + fn = ejs.compile('

    ', {delimiter: '?'}); + assert.equal(fn({name: 'geddy'}), '

    geddy

    '); + + fn = ejs.compile('

    <:= name :>

    ', {delimiter: ':'}); + assert.equal(fn({name: 'geddy'}), '

    geddy

    '); + + fn = ejs.compile('

    <$= name $>

    ', {delimiter: '$'}); + assert.equal(fn({name: 'geddy'}), '

    geddy

    '); + }); + + test('default to using ejs.delimiter', function () { + var fn; + ejs.delimiter = '&'; + fn = ejs.compile('

    <&= name &>

    '); + assert.equal(fn({name: 'geddy'}), '

    geddy

    '); + + fn = ejs.compile('

    <|= name |>

    ', {delimiter: '|'}); + assert.equal(fn({name: 'geddy'}), '

    geddy

    '); + delete ejs.delimiter; + }); + + test('support custom escape function', function () { + var customEscape; + var fn; + customEscape = function customEscape(str) { + return !str ? '' : str.toUpperCase(); + }; + fn = ejs.compile('HELLO <%= name %>', {escape: customEscape}); + assert.equal(fn({name: 'world'}), 'HELLO WORLD'); + }); + + test('strict mode works', function () { + assert.equal(ejs.render(fixture('strict.ejs'), {}, {strict: true}), 'true'); + }); + +}); + +suite('client mode', function () { + + test('have a working client option', function () { + var fn; + var str; + var preFn; + fn = ejs.compile('

    <%= foo %>

    ', {client: true}); + str = fn.toString(); + if (!process.env.running_under_istanbul) { + eval('var preFn = ' + str); + assert.equal(preFn({foo: 'bar'}), '

    bar

    '); + } + }); + + test('support client mode without locals', function () { + var fn; + var str; + var preFn; + fn = ejs.compile('

    <%= "foo" %>

    ', {client: true}); + str = fn.toString(); + if (!process.env.running_under_istanbul) { + eval('var preFn = ' + str); + assert.equal(preFn(), '

    foo

    '); + } + }); + + test('not include rethrow() in client mode if compileDebug is false', function () { + var fn = ejs.compile('

    <%= "foo" %>

    ', { + client: true, + compileDebug: false + }); + // There could be a `rethrow` in the function declaration + assert((fn.toString().match(/rethrow/g) || []).length <= 1); + }); + + test('support custom escape function in client mode', function () { + var customEscape; + var fn; + var str; + customEscape = function customEscape(str) { + return !str ? '' : str.toUpperCase(); + }; + fn = ejs.compile('HELLO <%= name %>', {escape: customEscape, client: true}); + str = fn.toString(); + if (!process.env.running_under_istanbul) { + eval('var preFn = ' + str); + assert.equal(preFn({name: 'world'}), 'HELLO WORLD'); // eslint-disable-line no-undef + } + }); + + test('escape filename in errors in client mode', function () { + assert.throws(function () { + var fn = ejs.compile('<% throw new Error("whoops"); %>', {client: true, filename: ' + +``` + +### With browserify + +Engine.IO is a commonjs module, which means you can include it by using +`require` on the browser and package using [browserify](http://browserify.org/): + +1. install the client package + + ```bash + $ npm install engine.io-client + ``` + +1. write your app code + + ```js + var socket = require('engine.io-client')('ws://localhost'); + socket.on('open', function(){ + socket.on('message', function(data){}); + socket.on('close', function(){}); + }); + ``` + +1. build your app bundle + + ```bash + $ browserify app.js > bundle.js + ``` + +1. include on your page + + ```html + + ``` + +### Sending and receiving binary + +```html + + +``` + +### Node.JS + +Add `engine.io-client` to your `package.json` and then: + +```js +var socket = require('engine.io-client')('ws://localhost'); +socket.on('open', function(){ + socket.on('message', function(data){}); + socket.on('close', function(){}); +}); +``` + +### Node.js with certificates +```js +var opts = { + key: fs.readFileSync('test/fixtures/client.key'), + cert: fs.readFileSync('test/fixtures/client.crt'), + ca: fs.readFileSync('test/fixtures/ca.crt') +}; + +var socket = require('engine.io-client')('ws://localhost', opts); +socket.on('open', function(){ + socket.on('message', function(data){}); + socket.on('close', function(){}); +}); +``` + +### Node.js with extraHeaders +```js +var opts = { + extraHeaders: { + 'X-Custom-Header-For-My-Project': 'my-secret-access-token', + 'Cookie': 'user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly' + } +}; + +var socket = require('engine.io-client')('ws://localhost', opts); +socket.on('open', function(){ + socket.on('message', function(data){}); + socket.on('close', function(){}); +}); +``` + +## Features + +- Lightweight +- Runs on browser and node.js seamlessly +- Transports are independent of `Engine` + - Easy to debug + - Easy to unit test +- Runs inside HTML5 WebWorker +- Can send and receive binary data + - Receives as ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer + in Node + - When XHR2 or WebSockets are used, binary is emitted directly. Otherwise + binary is encoded into base64 strings, and decoded when binary types are + supported. + - With browsers that don't support ArrayBuffer, an object { base64: true, + data: dataAsBase64String } is emitted on the `message` event. + +## API + +### Socket + +The client class. Mixes in [Emitter](http://github.com/component/emitter). +Exposed as `eio` in the browser standalone build. + +#### Properties + +- `protocol` _(Number)_: protocol revision number +- `binaryType` _(String)_ : can be set to 'arraybuffer' or 'blob' in browsers, + and `buffer` or `arraybuffer` in Node. Blob is only used in browser if it's + supported. + +#### Events + +- `open` + - Fired upon successful connection. +- `message` + - Fired when data is received from the server. + - **Arguments** + - `String` | `ArrayBuffer`: utf-8 encoded data or ArrayBuffer containing + binary data +- `close` + - Fired upon disconnection. In compliance with the WebSocket API spec, this event may be + fired even if the `open` event does not occur (i.e. due to connection error or `close()`). +- `error` + - Fired when an error occurs. +- `flush` + - Fired upon completing a buffer flush +- `drain` + - Fired after `drain` event of transport if writeBuffer is empty +- `upgradeError` + - Fired if an error occurs with a transport we're trying to upgrade to. +- `upgrade` + - Fired upon upgrade success, after the new transport is set +- `ping` + - Fired upon _flushing_ a ping packet (ie: actual packet write out) +- `pong` + - Fired upon receiving a pong packet. + +#### Methods + +- **constructor** + - Initializes the client + - **Parameters** + - `String` uri + - `Object`: optional, options object + - **Options** + - `agent` (`http.Agent`): `http.Agent` to use, defaults to `false` (NodeJS only) + - `upgrade` (`Boolean`): defaults to true, whether the client should try + to upgrade the transport from long-polling to something better. + - `forceJSONP` (`Boolean`): forces JSONP for polling transport. + - `jsonp` (`Boolean`): determines whether to use JSONP when + necessary for polling. If disabled (by settings to false) an error will + be emitted (saying "No transports available") if no other transports + are available. If another transport is available for opening a + connection (e.g. WebSocket) that transport + will be used instead. + - `forceBase64` (`Boolean`): forces base 64 encoding for polling transport even when XHR2 responseType is available and WebSocket even if the used standard supports binary. + - `enablesXDR` (`Boolean`): enables XDomainRequest for IE8 to avoid loading bar flashing with click sound. default to `false` because XDomainRequest has a flaw of not sending cookie. + - `timestampRequests` (`Boolean`): whether to add the timestamp with each + transport request. Note: polling requests are always stamped unless this + option is explicitly set to `false` (`false`) + - `timestampParam` (`String`): timestamp parameter (`t`) + - `policyPort` (`Number`): port the policy server listens on (`843`) + - `path` (`String`): path to connect to, default is `/engine.io` + - `transports` (`Array`): a list of transports to try (in order). + Defaults to `['polling', 'websocket']`. `Engine` + always attempts to connect directly with the first one, provided the + feature detection test for it passes. + - `transportOptions` (`Object`): hash of options, indexed by transport name, overriding the common options for the given transport + - `rememberUpgrade` (`Boolean`): defaults to false. + If true and if the previous websocket connection to the server succeeded, + the connection attempt will bypass the normal upgrade process and will initially + try websocket. A connection attempt following a transport error will use the + normal upgrade process. It is recommended you turn this on only when using + SSL/TLS connections, or if you know that your network does not block websockets. + - `pfx` (`String`): Certificate, Private key and CA certificates to use for SSL. Can be used in Node.js client environment to manually specify certificate information. + - `key` (`String`): Private key to use for SSL. Can be used in Node.js client environment to manually specify certificate information. + - `passphrase` (`String`): A string of passphrase for the private key or pfx. Can be used in Node.js client environment to manually specify certificate information. + - `cert` (`String`): Public x509 certificate to use. Can be used in Node.js client environment to manually specify certificate information. + - `ca` (`String`|`Array`): An authority certificate or array of authority certificates to check the remote host against.. Can be used in Node.js client environment to manually specify certificate information. + - `ciphers` (`String`): A string describing the ciphers to use or exclude. Consult the [cipher format list](http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT) for details on the format. Can be used in Node.js client environment to manually specify certificate information. + - `rejectUnauthorized` (`Boolean`): If true, the server certificate is verified against the list of supplied CAs. An 'error' event is emitted if verification fails. Verification happens at the connection level, before the HTTP request is sent. Can be used in Node.js client environment to manually specify certificate information. + - `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension + (see [ws module](https://github.com/einaros/ws) api docs). Set to `false` to disable. (`true`) + - `threshold` (`Number`): data is compressed only if the byte size is above this value. This option is ignored on the browser. (`1024`) + - `extraHeaders` (`Object`): Headers that will be passed for each request to the server (via xhr-polling and via websockets). These values then can be used during handshake or for special proxies. Can only be used in Node.js client environment. + - `onlyBinaryUpgrades` (`Boolean`): whether transport upgrades should be restricted to transports supporting binary data (`false`) + - `forceNode` (`Boolean`): Uses NodeJS implementation for websockets - even if there is a native Browser-Websocket available, which is preferred by default over the NodeJS implementation. (This is useful when using hybrid platforms like nw.js or electron) (`false`, NodeJS only) + - `localAddress` (`String`): the local IP address to connect to + - **Polling-only options** + - `requestTimeout` (`Number`): Timeout for xhr-polling requests in milliseconds (`0`) + - **Websocket-only options** + - `protocols` (`Array`): a list of subprotocols (see [MDN reference](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#Subprotocols)) +- `send` + - Sends a message to the server + - **Parameters** + - `String` | `ArrayBuffer` | `ArrayBufferView` | `Blob`: data to send + - `Object`: optional, options object + - `Function`: optional, callback upon `drain` + - **Options** + - `compress` (`Boolean`): whether to compress sending data. This option is ignored and forced to be `true` on the browser. (`true`) +- `close` + - Disconnects the client. + +### Transport + +The transport class. Private. _Inherits from EventEmitter_. + +#### Events + +- `poll`: emitted by polling transports upon starting a new request +- `pollComplete`: emitted by polling transports upon completing a request +- `drain`: emitted by polling transports upon a buffer drain + +## Tests + +`engine.io-client` is used to test +[engine](http://github.com/socketio/engine.io). Running the `engine.io` +test suite ensures the client works and vice-versa. + +Browser tests are run using [zuul](https://github.com/defunctzombie/zuul). You can +run the tests locally using the following command. + +``` +./node_modules/.bin/zuul --local 8080 -- test/index.js +``` + +Additionally, `engine.io-client` has a standalone test suite you can run +with `make test` which will run node.js and browser tests. You must have zuul setup with +a saucelabs account. + +## Support + +The support channels for `engine.io-client` are the same as `socket.io`: + - irc.freenode.net **#socket.io** + - [Google Groups](http://groups.google.com/group/socket_io) + - [Website](http://socket.io) + +## Development + +To contribute patches, run tests or benchmarks, make sure to clone the +repository: + +```bash +git clone git://github.com/socketio/engine.io-client.git +``` + +Then: + +```bash +cd engine.io-client +npm install +``` + +See the `Tests` section above for how to run tests before submitting any patches. + +## License + +MIT - Copyright (c) 2014 Automattic, Inc. diff --git a/node_modules/engine.io-client/engine.io.js b/node_modules/engine.io-client/engine.io.js new file mode 100644 index 0000000..0109c17 --- /dev/null +++ b/node_modules/engine.io-client/engine.io.js @@ -0,0 +1,4707 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["eio"] = factory(); + else + root["eio"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(1); + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(2); + + /** + * Exports parser + * + * @api public + * + */ + module.exports.parser = __webpack_require__(9); + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + /** + * Module dependencies. + */ + + var transports = __webpack_require__(3); + var Emitter = __webpack_require__(19); + var debug = __webpack_require__(23)('engine.io-client:socket'); + var index = __webpack_require__(30); + var parser = __webpack_require__(9); + var parseuri = __webpack_require__(31); + var parsejson = __webpack_require__(32); + var parseqs = __webpack_require__(20); + + /** + * Module exports. + */ + + module.exports = Socket; + + /** + * Socket constructor. + * + * @param {String|Object} uri or options + * @param {Object} options + * @api public + */ + + function Socket(uri, opts) { + if (!(this instanceof Socket)) return new Socket(uri, opts); + + opts = opts || {}; + + if (uri && 'object' === (typeof uri === 'undefined' ? 'undefined' : _typeof(uri))) { + opts = uri; + uri = null; + } + + if (uri) { + uri = parseuri(uri); + opts.hostname = uri.host; + opts.secure = uri.protocol === 'https' || uri.protocol === 'wss'; + opts.port = uri.port; + if (uri.query) opts.query = uri.query; + } else if (opts.host) { + opts.hostname = parseuri(opts.host).host; + } + + this.secure = null != opts.secure ? opts.secure : global.location && 'https:' === location.protocol; + + if (opts.hostname && !opts.port) { + // if no port is specified manually, use the protocol default + opts.port = this.secure ? '443' : '80'; + } + + this.agent = opts.agent || false; + this.hostname = opts.hostname || (global.location ? location.hostname : 'localhost'); + this.port = opts.port || (global.location && location.port ? location.port : this.secure ? 443 : 80); + this.query = opts.query || {}; + if ('string' === typeof this.query) this.query = parseqs.decode(this.query); + this.upgrade = false !== opts.upgrade; + this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/'; + this.forceJSONP = !!opts.forceJSONP; + this.jsonp = false !== opts.jsonp; + this.forceBase64 = !!opts.forceBase64; + this.enablesXDR = !!opts.enablesXDR; + this.timestampParam = opts.timestampParam || 't'; + this.timestampRequests = opts.timestampRequests; + this.transports = opts.transports || ['polling', 'websocket']; + this.transportOptions = opts.transportOptions || {}; + this.readyState = ''; + this.writeBuffer = []; + this.prevBufferLen = 0; + this.policyPort = opts.policyPort || 843; + this.rememberUpgrade = opts.rememberUpgrade || false; + this.binaryType = null; + this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades; + this.perMessageDeflate = false !== opts.perMessageDeflate ? opts.perMessageDeflate || {} : false; + + if (true === this.perMessageDeflate) this.perMessageDeflate = {}; + if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) { + this.perMessageDeflate.threshold = 1024; + } + + // SSL options for Node.js client + this.pfx = opts.pfx || null; + this.key = opts.key || null; + this.passphrase = opts.passphrase || null; + this.cert = opts.cert || null; + this.ca = opts.ca || null; + this.ciphers = opts.ciphers || null; + this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized; + this.forceNode = !!opts.forceNode; + + // other options for Node.js client + var freeGlobal = (typeof global === 'undefined' ? 'undefined' : _typeof(global)) === 'object' && global; + if (freeGlobal.global === freeGlobal) { + if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) { + this.extraHeaders = opts.extraHeaders; + } + + if (opts.localAddress) { + this.localAddress = opts.localAddress; + } + } + + // set on handshake + this.id = null; + this.upgrades = null; + this.pingInterval = null; + this.pingTimeout = null; + + // set on heartbeat + this.pingIntervalTimer = null; + this.pingTimeoutTimer = null; + + this.open(); + } + + Socket.priorWebsocketSuccess = false; + + /** + * Mix in `Emitter`. + */ + + Emitter(Socket.prototype); + + /** + * Protocol version. + * + * @api public + */ + + Socket.protocol = parser.protocol; // this is an int + + /** + * Expose deps for legacy compatibility + * and standalone browser access. + */ + + Socket.Socket = Socket; + Socket.Transport = __webpack_require__(8); + Socket.transports = __webpack_require__(3); + Socket.parser = __webpack_require__(9); + + /** + * Creates transport of the given type. + * + * @param {String} transport name + * @return {Transport} + * @api private + */ + + Socket.prototype.createTransport = function (name) { + debug('creating transport "%s"', name); + var query = clone(this.query); + + // append engine.io protocol identifier + query.EIO = parser.protocol; + + // transport name + query.transport = name; + + // per-transport options + var options = this.transportOptions[name] || {}; + + // session id if we already have one + if (this.id) query.sid = this.id; + + var transport = new transports[name]({ + query: query, + socket: this, + agent: options.agent || this.agent, + hostname: options.hostname || this.hostname, + port: options.port || this.port, + secure: options.secure || this.secure, + path: options.path || this.path, + forceJSONP: options.forceJSONP || this.forceJSONP, + jsonp: options.jsonp || this.jsonp, + forceBase64: options.forceBase64 || this.forceBase64, + enablesXDR: options.enablesXDR || this.enablesXDR, + timestampRequests: options.timestampRequests || this.timestampRequests, + timestampParam: options.timestampParam || this.timestampParam, + policyPort: options.policyPort || this.policyPort, + pfx: options.pfx || this.pfx, + key: options.key || this.key, + passphrase: options.passphrase || this.passphrase, + cert: options.cert || this.cert, + ca: options.ca || this.ca, + ciphers: options.ciphers || this.ciphers, + rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized, + perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate, + extraHeaders: options.extraHeaders || this.extraHeaders, + forceNode: options.forceNode || this.forceNode, + localAddress: options.localAddress || this.localAddress, + requestTimeout: options.requestTimeout || this.requestTimeout, + protocols: options.protocols || void 0 + }); + + return transport; + }; + + function clone(obj) { + var o = {}; + for (var i in obj) { + if (obj.hasOwnProperty(i)) { + o[i] = obj[i]; + } + } + return o; + } + + /** + * Initializes transport to use and starts probe. + * + * @api private + */ + Socket.prototype.open = function () { + var transport; + if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) { + transport = 'websocket'; + } else if (0 === this.transports.length) { + // Emit error on next tick so it can be listened to + var self = this; + setTimeout(function () { + self.emit('error', 'No transports available'); + }, 0); + return; + } else { + transport = this.transports[0]; + } + this.readyState = 'opening'; + + // Retry with the next transport if the transport is disabled (jsonp: false) + try { + transport = this.createTransport(transport); + } catch (e) { + this.transports.shift(); + this.open(); + return; + } + + transport.open(); + this.setTransport(transport); + }; + + /** + * Sets the current transport. Disables the existing one (if any). + * + * @api private + */ + + Socket.prototype.setTransport = function (transport) { + debug('setting transport %s', transport.name); + var self = this; + + if (this.transport) { + debug('clearing existing transport %s', this.transport.name); + this.transport.removeAllListeners(); + } + + // set up transport + this.transport = transport; + + // set up transport listeners + transport.on('drain', function () { + self.onDrain(); + }).on('packet', function (packet) { + self.onPacket(packet); + }).on('error', function (e) { + self.onError(e); + }).on('close', function () { + self.onClose('transport close'); + }); + }; + + /** + * Probes a transport. + * + * @param {String} transport name + * @api private + */ + + Socket.prototype.probe = function (name) { + debug('probing transport "%s"', name); + var transport = this.createTransport(name, { probe: 1 }); + var failed = false; + var self = this; + + Socket.priorWebsocketSuccess = false; + + function onTransportOpen() { + if (self.onlyBinaryUpgrades) { + var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary; + failed = failed || upgradeLosesBinary; + } + if (failed) return; + + debug('probe transport "%s" opened', name); + transport.send([{ type: 'ping', data: 'probe' }]); + transport.once('packet', function (msg) { + if (failed) return; + if ('pong' === msg.type && 'probe' === msg.data) { + debug('probe transport "%s" pong', name); + self.upgrading = true; + self.emit('upgrading', transport); + if (!transport) return; + Socket.priorWebsocketSuccess = 'websocket' === transport.name; + + debug('pausing current transport "%s"', self.transport.name); + self.transport.pause(function () { + if (failed) return; + if ('closed' === self.readyState) return; + debug('changing transport and sending upgrade packet'); + + cleanup(); + + self.setTransport(transport); + transport.send([{ type: 'upgrade' }]); + self.emit('upgrade', transport); + transport = null; + self.upgrading = false; + self.flush(); + }); + } else { + debug('probe transport "%s" failed', name); + var err = new Error('probe error'); + err.transport = transport.name; + self.emit('upgradeError', err); + } + }); + } + + function freezeTransport() { + if (failed) return; + + // Any callback called by transport should be ignored since now + failed = true; + + cleanup(); + + transport.close(); + transport = null; + } + + // Handle any error that happens while probing + function onerror(err) { + var error = new Error('probe error: ' + err); + error.transport = transport.name; + + freezeTransport(); + + debug('probe transport "%s" failed because of error: %s', name, err); + + self.emit('upgradeError', error); + } + + function onTransportClose() { + onerror('transport closed'); + } + + // When the socket is closed while we're probing + function onclose() { + onerror('socket closed'); + } + + // When the socket is upgraded while we're probing + function onupgrade(to) { + if (transport && to.name !== transport.name) { + debug('"%s" works - aborting "%s"', to.name, transport.name); + freezeTransport(); + } + } + + // Remove all listeners on the transport and on self + function cleanup() { + transport.removeListener('open', onTransportOpen); + transport.removeListener('error', onerror); + transport.removeListener('close', onTransportClose); + self.removeListener('close', onclose); + self.removeListener('upgrading', onupgrade); + } + + transport.once('open', onTransportOpen); + transport.once('error', onerror); + transport.once('close', onTransportClose); + + this.once('close', onclose); + this.once('upgrading', onupgrade); + + transport.open(); + }; + + /** + * Called when connection is deemed open. + * + * @api public + */ + + Socket.prototype.onOpen = function () { + debug('socket open'); + this.readyState = 'open'; + Socket.priorWebsocketSuccess = 'websocket' === this.transport.name; + this.emit('open'); + this.flush(); + + // we check for `readyState` in case an `open` + // listener already closed the socket + if ('open' === this.readyState && this.upgrade && this.transport.pause) { + debug('starting upgrade probes'); + for (var i = 0, l = this.upgrades.length; i < l; i++) { + this.probe(this.upgrades[i]); + } + } + }; + + /** + * Handles a packet. + * + * @api private + */ + + Socket.prototype.onPacket = function (packet) { + if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) { + debug('socket receive: type "%s", data "%s"', packet.type, packet.data); + + this.emit('packet', packet); + + // Socket is live - any packet counts + this.emit('heartbeat'); + + switch (packet.type) { + case 'open': + this.onHandshake(parsejson(packet.data)); + break; + + case 'pong': + this.setPing(); + this.emit('pong'); + break; + + case 'error': + var err = new Error('server error'); + err.code = packet.data; + this.onError(err); + break; + + case 'message': + this.emit('data', packet.data); + this.emit('message', packet.data); + break; + } + } else { + debug('packet received with socket readyState "%s"', this.readyState); + } + }; + + /** + * Called upon handshake completion. + * + * @param {Object} handshake obj + * @api private + */ + + Socket.prototype.onHandshake = function (data) { + this.emit('handshake', data); + this.id = data.sid; + this.transport.query.sid = data.sid; + this.upgrades = this.filterUpgrades(data.upgrades); + this.pingInterval = data.pingInterval; + this.pingTimeout = data.pingTimeout; + this.onOpen(); + // In case open handler closes socket + if ('closed' === this.readyState) return; + this.setPing(); + + // Prolong liveness of socket on heartbeat + this.removeListener('heartbeat', this.onHeartbeat); + this.on('heartbeat', this.onHeartbeat); + }; + + /** + * Resets ping timeout. + * + * @api private + */ + + Socket.prototype.onHeartbeat = function (timeout) { + clearTimeout(this.pingTimeoutTimer); + var self = this; + self.pingTimeoutTimer = setTimeout(function () { + if ('closed' === self.readyState) return; + self.onClose('ping timeout'); + }, timeout || self.pingInterval + self.pingTimeout); + }; + + /** + * Pings server every `this.pingInterval` and expects response + * within `this.pingTimeout` or closes connection. + * + * @api private + */ + + Socket.prototype.setPing = function () { + var self = this; + clearTimeout(self.pingIntervalTimer); + self.pingIntervalTimer = setTimeout(function () { + debug('writing ping packet - expecting pong within %sms', self.pingTimeout); + self.ping(); + self.onHeartbeat(self.pingTimeout); + }, self.pingInterval); + }; + + /** + * Sends a ping packet. + * + * @api private + */ + + Socket.prototype.ping = function () { + var self = this; + this.sendPacket('ping', function () { + self.emit('ping'); + }); + }; + + /** + * Called on `drain` event + * + * @api private + */ + + Socket.prototype.onDrain = function () { + this.writeBuffer.splice(0, this.prevBufferLen); + + // setting prevBufferLen = 0 is very important + // for example, when upgrading, upgrade packet is sent over, + // and a nonzero prevBufferLen could cause problems on `drain` + this.prevBufferLen = 0; + + if (0 === this.writeBuffer.length) { + this.emit('drain'); + } else { + this.flush(); + } + }; + + /** + * Flush write buffers. + * + * @api private + */ + + Socket.prototype.flush = function () { + if ('closed' !== this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) { + debug('flushing %d packets in socket', this.writeBuffer.length); + this.transport.send(this.writeBuffer); + // keep track of current length of writeBuffer + // splice writeBuffer and callbackBuffer on `drain` + this.prevBufferLen = this.writeBuffer.length; + this.emit('flush'); + } + }; + + /** + * Sends a message. + * + * @param {String} message. + * @param {Function} callback function. + * @param {Object} options. + * @return {Socket} for chaining. + * @api public + */ + + Socket.prototype.write = Socket.prototype.send = function (msg, options, fn) { + this.sendPacket('message', msg, options, fn); + return this; + }; + + /** + * Sends a packet. + * + * @param {String} packet type. + * @param {String} data. + * @param {Object} options. + * @param {Function} callback function. + * @api private + */ + + Socket.prototype.sendPacket = function (type, data, options, fn) { + if ('function' === typeof data) { + fn = data; + data = undefined; + } + + if ('function' === typeof options) { + fn = options; + options = null; + } + + if ('closing' === this.readyState || 'closed' === this.readyState) { + return; + } + + options = options || {}; + options.compress = false !== options.compress; + + var packet = { + type: type, + data: data, + options: options + }; + this.emit('packetCreate', packet); + this.writeBuffer.push(packet); + if (fn) this.once('flush', fn); + this.flush(); + }; + + /** + * Closes the connection. + * + * @api private + */ + + Socket.prototype.close = function () { + if ('opening' === this.readyState || 'open' === this.readyState) { + this.readyState = 'closing'; + + var self = this; + + if (this.writeBuffer.length) { + this.once('drain', function () { + if (this.upgrading) { + waitForUpgrade(); + } else { + close(); + } + }); + } else if (this.upgrading) { + waitForUpgrade(); + } else { + close(); + } + } + + function close() { + self.onClose('forced close'); + debug('socket closing - telling transport to close'); + self.transport.close(); + } + + function cleanupAndClose() { + self.removeListener('upgrade', cleanupAndClose); + self.removeListener('upgradeError', cleanupAndClose); + close(); + } + + function waitForUpgrade() { + // wait for upgrade to finish since we can't send packets while pausing a transport + self.once('upgrade', cleanupAndClose); + self.once('upgradeError', cleanupAndClose); + } + + return this; + }; + + /** + * Called upon transport error + * + * @api private + */ + + Socket.prototype.onError = function (err) { + debug('socket error %j', err); + Socket.priorWebsocketSuccess = false; + this.emit('error', err); + this.onClose('transport error', err); + }; + + /** + * Called upon transport close. + * + * @api private + */ + + Socket.prototype.onClose = function (reason, desc) { + if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) { + debug('socket close with reason: "%s"', reason); + var self = this; + + // clear timers + clearTimeout(this.pingIntervalTimer); + clearTimeout(this.pingTimeoutTimer); + + // stop event from firing again for transport + this.transport.removeAllListeners('close'); + + // ensure transport won't stay open + this.transport.close(); + + // ignore further transport communication + this.transport.removeAllListeners(); + + // set ready state + this.readyState = 'closed'; + + // clear session id + this.id = null; + + // emit close event + this.emit('close', reason, desc); + + // clean buffers after, so users can still + // grab the buffers on `close` event + self.writeBuffer = []; + self.prevBufferLen = 0; + } + }; + + /** + * Filters upgrades, returning only those matching client transports. + * + * @param {Array} server upgrades + * @api private + * + */ + + Socket.prototype.filterUpgrades = function (upgrades) { + var filteredUpgrades = []; + for (var i = 0, j = upgrades.length; i < j; i++) { + if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]); + } + return filteredUpgrades; + }; + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; + + /** + * Module dependencies + */ + + var XMLHttpRequest = __webpack_require__(4); + var XHR = __webpack_require__(6); + var JSONP = __webpack_require__(27); + var websocket = __webpack_require__(28); + + /** + * Export transports. + */ + + exports.polling = polling; + exports.websocket = websocket; + + /** + * Polling transport polymorphic constructor. + * Decides on xhr vs jsonp based on feature detection. + * + * @api private + */ + + function polling(opts) { + var xhr; + var xd = false; + var xs = false; + var jsonp = false !== opts.jsonp; + + if (global.location) { + var isSSL = 'https:' === location.protocol; + var port = location.port; + + // some user agents have empty `location.port` + if (!port) { + port = isSSL ? 443 : 80; + } + + xd = opts.hostname !== location.hostname || port !== opts.port; + xs = opts.secure !== isSSL; + } + + opts.xdomain = xd; + opts.xscheme = xs; + xhr = new XMLHttpRequest(opts); + + if ('open' in xhr && !opts.forceJSONP) { + return new XHR(opts); + } else { + if (!jsonp) throw new Error('JSONP disabled'); + return new JSONP(opts); + } + } + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 4 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; + + // browser shim for xmlhttprequest module + + var hasCORS = __webpack_require__(5); + + module.exports = function (opts) { + var xdomain = opts.xdomain; + + // scheme must be same when usign XDomainRequest + // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx + var xscheme = opts.xscheme; + + // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default. + // https://github.com/Automattic/engine.io-client/pull/217 + var enablesXDR = opts.enablesXDR; + + // XMLHttpRequest can be disabled on IE + try { + if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) { + return new XMLHttpRequest(); + } + } catch (e) {} + + // Use XDomainRequest for IE8 if enablesXDR is true + // because loading bar keeps flashing when using jsonp-polling + // https://github.com/yujiosaka/socke.io-ie8-loading-example + try { + if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) { + return new XDomainRequest(); + } + } catch (e) {} + + if (!xdomain) { + try { + return new global[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP'); + } catch (e) {} + } + }; + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 5 */ +/***/ function(module, exports) { + + + /** + * Module exports. + * + * Logic borrowed from Modernizr: + * + * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js + */ + + try { + module.exports = typeof XMLHttpRequest !== 'undefined' && + 'withCredentials' in new XMLHttpRequest(); + } catch (err) { + // if XMLHttp support is disabled in IE then it will throw + // when trying to create + module.exports = false; + } + + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; + + /** + * Module requirements. + */ + + var XMLHttpRequest = __webpack_require__(4); + var Polling = __webpack_require__(7); + var Emitter = __webpack_require__(19); + var inherit = __webpack_require__(21); + var debug = __webpack_require__(23)('engine.io-client:polling-xhr'); + + /** + * Module exports. + */ + + module.exports = XHR; + module.exports.Request = Request; + + /** + * Empty function + */ + + function empty() {} + + /** + * XHR Polling constructor. + * + * @param {Object} opts + * @api public + */ + + function XHR(opts) { + Polling.call(this, opts); + this.requestTimeout = opts.requestTimeout; + this.extraHeaders = opts.extraHeaders; + + if (global.location) { + var isSSL = 'https:' === location.protocol; + var port = location.port; + + // some user agents have empty `location.port` + if (!port) { + port = isSSL ? 443 : 80; + } + + this.xd = opts.hostname !== global.location.hostname || port !== opts.port; + this.xs = opts.secure !== isSSL; + } + } + + /** + * Inherits from Polling. + */ + + inherit(XHR, Polling); + + /** + * XHR supports binary + */ + + XHR.prototype.supportsBinary = true; + + /** + * Creates a request. + * + * @param {String} method + * @api private + */ + + XHR.prototype.request = function (opts) { + opts = opts || {}; + opts.uri = this.uri(); + opts.xd = this.xd; + opts.xs = this.xs; + opts.agent = this.agent || false; + opts.supportsBinary = this.supportsBinary; + opts.enablesXDR = this.enablesXDR; + + // SSL options for Node.js client + opts.pfx = this.pfx; + opts.key = this.key; + opts.passphrase = this.passphrase; + opts.cert = this.cert; + opts.ca = this.ca; + opts.ciphers = this.ciphers; + opts.rejectUnauthorized = this.rejectUnauthorized; + opts.requestTimeout = this.requestTimeout; + + // other options for Node.js client + opts.extraHeaders = this.extraHeaders; + + return new Request(opts); + }; + + /** + * Sends data. + * + * @param {String} data to send. + * @param {Function} called upon flush. + * @api private + */ + + XHR.prototype.doWrite = function (data, fn) { + var isBinary = typeof data !== 'string' && data !== undefined; + var req = this.request({ method: 'POST', data: data, isBinary: isBinary }); + var self = this; + req.on('success', fn); + req.on('error', function (err) { + self.onError('xhr post error', err); + }); + this.sendXhr = req; + }; + + /** + * Starts a poll cycle. + * + * @api private + */ + + XHR.prototype.doPoll = function () { + debug('xhr poll'); + var req = this.request(); + var self = this; + req.on('data', function (data) { + self.onData(data); + }); + req.on('error', function (err) { + self.onError('xhr poll error', err); + }); + this.pollXhr = req; + }; + + /** + * Request constructor + * + * @param {Object} options + * @api public + */ + + function Request(opts) { + this.method = opts.method || 'GET'; + this.uri = opts.uri; + this.xd = !!opts.xd; + this.xs = !!opts.xs; + this.async = false !== opts.async; + this.data = undefined !== opts.data ? opts.data : null; + this.agent = opts.agent; + this.isBinary = opts.isBinary; + this.supportsBinary = opts.supportsBinary; + this.enablesXDR = opts.enablesXDR; + this.requestTimeout = opts.requestTimeout; + + // SSL options for Node.js client + this.pfx = opts.pfx; + this.key = opts.key; + this.passphrase = opts.passphrase; + this.cert = opts.cert; + this.ca = opts.ca; + this.ciphers = opts.ciphers; + this.rejectUnauthorized = opts.rejectUnauthorized; + + // other options for Node.js client + this.extraHeaders = opts.extraHeaders; + + this.create(); + } + + /** + * Mix in `Emitter`. + */ + + Emitter(Request.prototype); + + /** + * Creates the XHR object and sends the request. + * + * @api private + */ + + Request.prototype.create = function () { + var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR }; + + // SSL options for Node.js client + opts.pfx = this.pfx; + opts.key = this.key; + opts.passphrase = this.passphrase; + opts.cert = this.cert; + opts.ca = this.ca; + opts.ciphers = this.ciphers; + opts.rejectUnauthorized = this.rejectUnauthorized; + + var xhr = this.xhr = new XMLHttpRequest(opts); + var self = this; + + try { + debug('xhr open %s: %s', this.method, this.uri); + xhr.open(this.method, this.uri, this.async); + try { + if (this.extraHeaders) { + xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true); + for (var i in this.extraHeaders) { + if (this.extraHeaders.hasOwnProperty(i)) { + xhr.setRequestHeader(i, this.extraHeaders[i]); + } + } + } + } catch (e) {} + + if ('POST' === this.method) { + try { + if (this.isBinary) { + xhr.setRequestHeader('Content-type', 'application/octet-stream'); + } else { + xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8'); + } + } catch (e) {} + } + + try { + xhr.setRequestHeader('Accept', '*/*'); + } catch (e) {} + + // ie6 check + if ('withCredentials' in xhr) { + xhr.withCredentials = true; + } + + if (this.requestTimeout) { + xhr.timeout = this.requestTimeout; + } + + if (this.hasXDR()) { + xhr.onload = function () { + self.onLoad(); + }; + xhr.onerror = function () { + self.onError(xhr.responseText); + }; + } else { + xhr.onreadystatechange = function () { + if (xhr.readyState === 2) { + var contentType; + try { + contentType = xhr.getResponseHeader('Content-Type'); + } catch (e) {} + if (contentType === 'application/octet-stream') { + xhr.responseType = 'arraybuffer'; + } + } + if (4 !== xhr.readyState) return; + if (200 === xhr.status || 1223 === xhr.status) { + self.onLoad(); + } else { + // make sure the `error` event handler that's user-set + // does not throw in the same tick and gets caught here + setTimeout(function () { + self.onError(xhr.status); + }, 0); + } + }; + } + + debug('xhr data %s', this.data); + xhr.send(this.data); + } catch (e) { + // Need to defer since .create() is called directly fhrom the constructor + // and thus the 'error' event can only be only bound *after* this exception + // occurs. Therefore, also, we cannot throw here at all. + setTimeout(function () { + self.onError(e); + }, 0); + return; + } + + if (global.document) { + this.index = Request.requestsCount++; + Request.requests[this.index] = this; + } + }; + + /** + * Called upon successful response. + * + * @api private + */ + + Request.prototype.onSuccess = function () { + this.emit('success'); + this.cleanup(); + }; + + /** + * Called if we have data. + * + * @api private + */ + + Request.prototype.onData = function (data) { + this.emit('data', data); + this.onSuccess(); + }; + + /** + * Called upon error. + * + * @api private + */ + + Request.prototype.onError = function (err) { + this.emit('error', err); + this.cleanup(true); + }; + + /** + * Cleans up house. + * + * @api private + */ + + Request.prototype.cleanup = function (fromError) { + if ('undefined' === typeof this.xhr || null === this.xhr) { + return; + } + // xmlhttprequest + if (this.hasXDR()) { + this.xhr.onload = this.xhr.onerror = empty; + } else { + this.xhr.onreadystatechange = empty; + } + + if (fromError) { + try { + this.xhr.abort(); + } catch (e) {} + } + + if (global.document) { + delete Request.requests[this.index]; + } + + this.xhr = null; + }; + + /** + * Called upon load. + * + * @api private + */ + + Request.prototype.onLoad = function () { + var data; + try { + var contentType; + try { + contentType = this.xhr.getResponseHeader('Content-Type'); + } catch (e) {} + if (contentType === 'application/octet-stream') { + data = this.xhr.response || this.xhr.responseText; + } else { + data = this.xhr.responseText; + } + } catch (e) { + this.onError(e); + } + if (null != data) { + this.onData(data); + } + }; + + /** + * Check if it has XDomainRequest. + * + * @api private + */ + + Request.prototype.hasXDR = function () { + return 'undefined' !== typeof global.XDomainRequest && !this.xs && this.enablesXDR; + }; + + /** + * Aborts the request. + * + * @api public + */ + + Request.prototype.abort = function () { + this.cleanup(); + }; + + /** + * Aborts pending requests when unloading the window. This is needed to prevent + * memory leaks (e.g. when using IE) and to ensure that no spurious error is + * emitted. + */ + + Request.requestsCount = 0; + Request.requests = {}; + + if (global.document) { + if (global.attachEvent) { + global.attachEvent('onunload', unloadHandler); + } else if (global.addEventListener) { + global.addEventListener('beforeunload', unloadHandler, false); + } + } + + function unloadHandler() { + for (var i in Request.requests) { + if (Request.requests.hasOwnProperty(i)) { + Request.requests[i].abort(); + } + } + } + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + /** + * Module dependencies. + */ + + var Transport = __webpack_require__(8); + var parseqs = __webpack_require__(20); + var parser = __webpack_require__(9); + var inherit = __webpack_require__(21); + var yeast = __webpack_require__(22); + var debug = __webpack_require__(23)('engine.io-client:polling'); + + /** + * Module exports. + */ + + module.exports = Polling; + + /** + * Is XHR2 supported? + */ + + var hasXHR2 = function () { + var XMLHttpRequest = __webpack_require__(4); + var xhr = new XMLHttpRequest({ xdomain: false }); + return null != xhr.responseType; + }(); + + /** + * Polling interface. + * + * @param {Object} opts + * @api private + */ + + function Polling(opts) { + var forceBase64 = opts && opts.forceBase64; + if (!hasXHR2 || forceBase64) { + this.supportsBinary = false; + } + Transport.call(this, opts); + } + + /** + * Inherits from Transport. + */ + + inherit(Polling, Transport); + + /** + * Transport name. + */ + + Polling.prototype.name = 'polling'; + + /** + * Opens the socket (triggers polling). We write a PING message to determine + * when the transport is open. + * + * @api private + */ + + Polling.prototype.doOpen = function () { + this.poll(); + }; + + /** + * Pauses polling. + * + * @param {Function} callback upon buffers are flushed and transport is paused + * @api private + */ + + Polling.prototype.pause = function (onPause) { + var self = this; + + this.readyState = 'pausing'; + + function pause() { + debug('paused'); + self.readyState = 'paused'; + onPause(); + } + + if (this.polling || !this.writable) { + var total = 0; + + if (this.polling) { + debug('we are currently polling - waiting to pause'); + total++; + this.once('pollComplete', function () { + debug('pre-pause polling complete'); + --total || pause(); + }); + } + + if (!this.writable) { + debug('we are currently writing - waiting to pause'); + total++; + this.once('drain', function () { + debug('pre-pause writing complete'); + --total || pause(); + }); + } + } else { + pause(); + } + }; + + /** + * Starts polling cycle. + * + * @api public + */ + + Polling.prototype.poll = function () { + debug('polling'); + this.polling = true; + this.doPoll(); + this.emit('poll'); + }; + + /** + * Overloads onData to detect payloads. + * + * @api private + */ + + Polling.prototype.onData = function (data) { + var self = this; + debug('polling got data %s', data); + var callback = function callback(packet, index, total) { + // if its the first message we consider the transport open + if ('opening' === self.readyState) { + self.onOpen(); + } + + // if its a close packet, we close the ongoing requests + if ('close' === packet.type) { + self.onClose(); + return false; + } + + // otherwise bypass onData and handle the message + self.onPacket(packet); + }; + + // decode payload + parser.decodePayload(data, this.socket.binaryType, callback); + + // if an event did not trigger closing + if ('closed' !== this.readyState) { + // if we got data we're not polling + this.polling = false; + this.emit('pollComplete'); + + if ('open' === this.readyState) { + this.poll(); + } else { + debug('ignoring poll - transport state "%s"', this.readyState); + } + } + }; + + /** + * For polling, send a close packet. + * + * @api private + */ + + Polling.prototype.doClose = function () { + var self = this; + + function close() { + debug('writing close packet'); + self.write([{ type: 'close' }]); + } + + if ('open' === this.readyState) { + debug('transport open - closing'); + close(); + } else { + // in case we're trying to close while + // handshaking is in progress (GH-164) + debug('transport not open - deferring close'); + this.once('open', close); + } + }; + + /** + * Writes a packets payload. + * + * @param {Array} data packets + * @param {Function} drain callback + * @api private + */ + + Polling.prototype.write = function (packets) { + var self = this; + this.writable = false; + var callbackfn = function callbackfn() { + self.writable = true; + self.emit('drain'); + }; + + parser.encodePayload(packets, this.supportsBinary, function (data) { + self.doWrite(data, callbackfn); + }); + }; + + /** + * Generates uri for connection. + * + * @api private + */ + + Polling.prototype.uri = function () { + var query = this.query || {}; + var schema = this.secure ? 'https' : 'http'; + var port = ''; + + // cache busting is forced + if (false !== this.timestampRequests) { + query[this.timestampParam] = yeast(); + } + + if (!this.supportsBinary && !query.sid) { + query.b64 = 1; + } + + query = parseqs.encode(query); + + // avoid port if default for schema + if (this.port && ('https' === schema && Number(this.port) !== 443 || 'http' === schema && Number(this.port) !== 80)) { + port = ':' + this.port; + } + + // prepend ? to query + if (query.length) { + query = '?' + query; + } + + var ipv6 = this.hostname.indexOf(':') !== -1; + return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query; + }; + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + /** + * Module dependencies. + */ + + var parser = __webpack_require__(9); + var Emitter = __webpack_require__(19); + + /** + * Module exports. + */ + + module.exports = Transport; + + /** + * Transport abstract constructor. + * + * @param {Object} options. + * @api private + */ + + function Transport(opts) { + this.path = opts.path; + this.hostname = opts.hostname; + this.port = opts.port; + this.secure = opts.secure; + this.query = opts.query; + this.timestampParam = opts.timestampParam; + this.timestampRequests = opts.timestampRequests; + this.readyState = ''; + this.agent = opts.agent || false; + this.socket = opts.socket; + this.enablesXDR = opts.enablesXDR; + + // SSL options for Node.js client + this.pfx = opts.pfx; + this.key = opts.key; + this.passphrase = opts.passphrase; + this.cert = opts.cert; + this.ca = opts.ca; + this.ciphers = opts.ciphers; + this.rejectUnauthorized = opts.rejectUnauthorized; + this.forceNode = opts.forceNode; + + // other options for Node.js client + this.extraHeaders = opts.extraHeaders; + this.localAddress = opts.localAddress; + } + + /** + * Mix in `Emitter`. + */ + + Emitter(Transport.prototype); + + /** + * Emits an error. + * + * @param {String} str + * @return {Transport} for chaining + * @api public + */ + + Transport.prototype.onError = function (msg, desc) { + var err = new Error(msg); + err.type = 'TransportError'; + err.description = desc; + this.emit('error', err); + return this; + }; + + /** + * Opens the transport. + * + * @api public + */ + + Transport.prototype.open = function () { + if ('closed' === this.readyState || '' === this.readyState) { + this.readyState = 'opening'; + this.doOpen(); + } + + return this; + }; + + /** + * Closes the transport. + * + * @api private + */ + + Transport.prototype.close = function () { + if ('opening' === this.readyState || 'open' === this.readyState) { + this.doClose(); + this.onClose(); + } + + return this; + }; + + /** + * Sends multiple packets. + * + * @param {Array} packets + * @api private + */ + + Transport.prototype.send = function (packets) { + if ('open' === this.readyState) { + this.write(packets); + } else { + throw new Error('Transport not open'); + } + }; + + /** + * Called upon open + * + * @api private + */ + + Transport.prototype.onOpen = function () { + this.readyState = 'open'; + this.writable = true; + this.emit('open'); + }; + + /** + * Called with data. + * + * @param {String} data + * @api private + */ + + Transport.prototype.onData = function (data) { + var packet = parser.decodePacket(data, this.socket.binaryType); + this.onPacket(packet); + }; + + /** + * Called with a decoded packet. + */ + + Transport.prototype.onPacket = function (packet) { + this.emit('packet', packet); + }; + + /** + * Called upon close. + * + * @api private + */ + + Transport.prototype.onClose = function () { + this.readyState = 'closed'; + this.emit('close'); + }; + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {/** + * Module dependencies. + */ + + var keys = __webpack_require__(10); + var hasBinary = __webpack_require__(11); + var sliceBuffer = __webpack_require__(13); + var after = __webpack_require__(14); + var utf8 = __webpack_require__(15); + + var base64encoder; + if (global && global.ArrayBuffer) { + base64encoder = __webpack_require__(17); + } + + /** + * Check if we are running an android browser. That requires us to use + * ArrayBuffer with polling transports... + * + * http://ghinda.net/jpeg-blob-ajax-android/ + */ + + var isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent); + + /** + * Check if we are running in PhantomJS. + * Uploading a Blob with PhantomJS does not work correctly, as reported here: + * https://github.com/ariya/phantomjs/issues/11395 + * @type boolean + */ + var isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent); + + /** + * When true, avoids using Blobs to encode payloads. + * @type boolean + */ + var dontSendBlobs = isAndroid || isPhantomJS; + + /** + * Current protocol version. + */ + + exports.protocol = 3; + + /** + * Packet types. + */ + + var packets = exports.packets = { + open: 0 // non-ws + , close: 1 // non-ws + , ping: 2 + , pong: 3 + , message: 4 + , upgrade: 5 + , noop: 6 + }; + + var packetslist = keys(packets); + + /** + * Premade error packet. + */ + + var err = { type: 'error', data: 'parser error' }; + + /** + * Create a blob api even for blob builder when vendor prefixes exist + */ + + var Blob = __webpack_require__(18); + + /** + * Encodes a packet. + * + * [ ] + * + * Example: + * + * 5hello world + * 3 + * 4 + * + * Binary is encoded in an identical principle + * + * @api private + */ + + exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) { + if (typeof supportsBinary === 'function') { + callback = supportsBinary; + supportsBinary = false; + } + + if (typeof utf8encode === 'function') { + callback = utf8encode; + utf8encode = null; + } + + var data = (packet.data === undefined) + ? undefined + : packet.data.buffer || packet.data; + + if (global.ArrayBuffer && data instanceof ArrayBuffer) { + return encodeArrayBuffer(packet, supportsBinary, callback); + } else if (Blob && data instanceof global.Blob) { + return encodeBlob(packet, supportsBinary, callback); + } + + // might be an object with { base64: true, data: dataAsBase64String } + if (data && data.base64) { + return encodeBase64Object(packet, callback); + } + + // Sending data as a utf-8 string + var encoded = packets[packet.type]; + + // data fragment is optional + if (undefined !== packet.data) { + encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data); + } + + return callback('' + encoded); + + }; + + function encodeBase64Object(packet, callback) { + // packet data is an object { base64: true, data: dataAsBase64String } + var message = 'b' + exports.packets[packet.type] + packet.data.data; + return callback(message); + } + + /** + * Encode packet helpers for binary types + */ + + function encodeArrayBuffer(packet, supportsBinary, callback) { + if (!supportsBinary) { + return exports.encodeBase64Packet(packet, callback); + } + + var data = packet.data; + var contentArray = new Uint8Array(data); + var resultBuffer = new Uint8Array(1 + data.byteLength); + + resultBuffer[0] = packets[packet.type]; + for (var i = 0; i < contentArray.length; i++) { + resultBuffer[i+1] = contentArray[i]; + } + + return callback(resultBuffer.buffer); + } + + function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) { + if (!supportsBinary) { + return exports.encodeBase64Packet(packet, callback); + } + + var fr = new FileReader(); + fr.onload = function() { + packet.data = fr.result; + exports.encodePacket(packet, supportsBinary, true, callback); + }; + return fr.readAsArrayBuffer(packet.data); + } + + function encodeBlob(packet, supportsBinary, callback) { + if (!supportsBinary) { + return exports.encodeBase64Packet(packet, callback); + } + + if (dontSendBlobs) { + return encodeBlobAsArrayBuffer(packet, supportsBinary, callback); + } + + var length = new Uint8Array(1); + length[0] = packets[packet.type]; + var blob = new Blob([length.buffer, packet.data]); + + return callback(blob); + } + + /** + * Encodes a packet with binary data in a base64 string + * + * @param {Object} packet, has `type` and `data` + * @return {String} base64 encoded message + */ + + exports.encodeBase64Packet = function(packet, callback) { + var message = 'b' + exports.packets[packet.type]; + if (Blob && packet.data instanceof global.Blob) { + var fr = new FileReader(); + fr.onload = function() { + var b64 = fr.result.split(',')[1]; + callback(message + b64); + }; + return fr.readAsDataURL(packet.data); + } + + var b64data; + try { + b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data)); + } catch (e) { + // iPhone Safari doesn't let you apply with typed arrays + var typed = new Uint8Array(packet.data); + var basic = new Array(typed.length); + for (var i = 0; i < typed.length; i++) { + basic[i] = typed[i]; + } + b64data = String.fromCharCode.apply(null, basic); + } + message += global.btoa(b64data); + return callback(message); + }; + + /** + * Decodes a packet. Changes format to Blob if requested. + * + * @return {Object} with `type` and `data` (if any) + * @api private + */ + + exports.decodePacket = function (data, binaryType, utf8decode) { + if (data === undefined) { + return err; + } + // String data + if (typeof data === 'string') { + if (data.charAt(0) === 'b') { + return exports.decodeBase64Packet(data.substr(1), binaryType); + } + + if (utf8decode) { + data = tryDecode(data); + if (data === false) { + return err; + } + } + var type = data.charAt(0); + + if (Number(type) != type || !packetslist[type]) { + return err; + } + + if (data.length > 1) { + return { type: packetslist[type], data: data.substring(1) }; + } else { + return { type: packetslist[type] }; + } + } + + var asArray = new Uint8Array(data); + var type = asArray[0]; + var rest = sliceBuffer(data, 1); + if (Blob && binaryType === 'blob') { + rest = new Blob([rest]); + } + return { type: packetslist[type], data: rest }; + }; + + function tryDecode(data) { + try { + data = utf8.decode(data, { strict: false }); + } catch (e) { + return false; + } + return data; + } + + /** + * Decodes a packet encoded in a base64 string + * + * @param {String} base64 encoded message + * @return {Object} with `type` and `data` (if any) + */ + + exports.decodeBase64Packet = function(msg, binaryType) { + var type = packetslist[msg.charAt(0)]; + if (!base64encoder) { + return { type: type, data: { base64: true, data: msg.substr(1) } }; + } + + var data = base64encoder.decode(msg.substr(1)); + + if (binaryType === 'blob' && Blob) { + data = new Blob([data]); + } + + return { type: type, data: data }; + }; + + /** + * Encodes multiple messages (payload). + * + * :data + * + * Example: + * + * 11:hello world2:hi + * + * If any contents are binary, they will be encoded as base64 strings. Base64 + * encoded strings are marked with a b before the length specifier + * + * @param {Array} packets + * @api private + */ + + exports.encodePayload = function (packets, supportsBinary, callback) { + if (typeof supportsBinary === 'function') { + callback = supportsBinary; + supportsBinary = null; + } + + var isBinary = hasBinary(packets); + + if (supportsBinary && isBinary) { + if (Blob && !dontSendBlobs) { + return exports.encodePayloadAsBlob(packets, callback); + } + + return exports.encodePayloadAsArrayBuffer(packets, callback); + } + + if (!packets.length) { + return callback('0:'); + } + + function setLengthHeader(message) { + return message.length + ':' + message; + } + + function encodeOne(packet, doneCallback) { + exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) { + doneCallback(null, setLengthHeader(message)); + }); + } + + map(packets, encodeOne, function(err, results) { + return callback(results.join('')); + }); + }; + + /** + * Async array map using after + */ + + function map(ary, each, done) { + var result = new Array(ary.length); + var next = after(ary.length, done); + + var eachWithIndex = function(i, el, cb) { + each(el, function(error, msg) { + result[i] = msg; + cb(error, result); + }); + }; + + for (var i = 0; i < ary.length; i++) { + eachWithIndex(i, ary[i], next); + } + } + + /* + * Decodes data when a payload is maybe expected. Possible binary contents are + * decoded from their base64 representation + * + * @param {String} data, callback method + * @api public + */ + + exports.decodePayload = function (data, binaryType, callback) { + if (typeof data !== 'string') { + return exports.decodePayloadAsBinary(data, binaryType, callback); + } + + if (typeof binaryType === 'function') { + callback = binaryType; + binaryType = null; + } + + var packet; + if (data === '') { + // parser error - ignoring payload + return callback(err, 0, 1); + } + + var length = '', n, msg; + + for (var i = 0, l = data.length; i < l; i++) { + var chr = data.charAt(i); + + if (chr !== ':') { + length += chr; + continue; + } + + if (length === '' || (length != (n = Number(length)))) { + // parser error - ignoring payload + return callback(err, 0, 1); + } + + msg = data.substr(i + 1, n); + + if (length != msg.length) { + // parser error - ignoring payload + return callback(err, 0, 1); + } + + if (msg.length) { + packet = exports.decodePacket(msg, binaryType, false); + + if (err.type === packet.type && err.data === packet.data) { + // parser error in individual packet - ignoring payload + return callback(err, 0, 1); + } + + var ret = callback(packet, i + n, l); + if (false === ret) return; + } + + // advance cursor + i += n; + length = ''; + } + + if (length !== '') { + // parser error - ignoring payload + return callback(err, 0, 1); + } + + }; + + /** + * Encodes multiple messages (payload) as binary. + * + * <1 = binary, 0 = string>[...] + * + * Example: + * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers + * + * @param {Array} packets + * @return {ArrayBuffer} encoded payload + * @api private + */ + + exports.encodePayloadAsArrayBuffer = function(packets, callback) { + if (!packets.length) { + return callback(new ArrayBuffer(0)); + } + + function encodeOne(packet, doneCallback) { + exports.encodePacket(packet, true, true, function(data) { + return doneCallback(null, data); + }); + } + + map(packets, encodeOne, function(err, encodedPackets) { + var totalLength = encodedPackets.reduce(function(acc, p) { + var len; + if (typeof p === 'string'){ + len = p.length; + } else { + len = p.byteLength; + } + return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2 + }, 0); + + var resultArray = new Uint8Array(totalLength); + + var bufferIndex = 0; + encodedPackets.forEach(function(p) { + var isString = typeof p === 'string'; + var ab = p; + if (isString) { + var view = new Uint8Array(p.length); + for (var i = 0; i < p.length; i++) { + view[i] = p.charCodeAt(i); + } + ab = view.buffer; + } + + if (isString) { // not true binary + resultArray[bufferIndex++] = 0; + } else { // true binary + resultArray[bufferIndex++] = 1; + } + + var lenStr = ab.byteLength.toString(); + for (var i = 0; i < lenStr.length; i++) { + resultArray[bufferIndex++] = parseInt(lenStr[i]); + } + resultArray[bufferIndex++] = 255; + + var view = new Uint8Array(ab); + for (var i = 0; i < view.length; i++) { + resultArray[bufferIndex++] = view[i]; + } + }); + + return callback(resultArray.buffer); + }); + }; + + /** + * Encode as Blob + */ + + exports.encodePayloadAsBlob = function(packets, callback) { + function encodeOne(packet, doneCallback) { + exports.encodePacket(packet, true, true, function(encoded) { + var binaryIdentifier = new Uint8Array(1); + binaryIdentifier[0] = 1; + if (typeof encoded === 'string') { + var view = new Uint8Array(encoded.length); + for (var i = 0; i < encoded.length; i++) { + view[i] = encoded.charCodeAt(i); + } + encoded = view.buffer; + binaryIdentifier[0] = 0; + } + + var len = (encoded instanceof ArrayBuffer) + ? encoded.byteLength + : encoded.size; + + var lenStr = len.toString(); + var lengthAry = new Uint8Array(lenStr.length + 1); + for (var i = 0; i < lenStr.length; i++) { + lengthAry[i] = parseInt(lenStr[i]); + } + lengthAry[lenStr.length] = 255; + + if (Blob) { + var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]); + doneCallback(null, blob); + } + }); + } + + map(packets, encodeOne, function(err, results) { + return callback(new Blob(results)); + }); + }; + + /* + * Decodes data when a payload is maybe expected. Strings are decoded by + * interpreting each byte as a key code for entries marked to start with 0. See + * description of encodePayloadAsBinary + * + * @param {ArrayBuffer} data, callback method + * @api public + */ + + exports.decodePayloadAsBinary = function (data, binaryType, callback) { + if (typeof binaryType === 'function') { + callback = binaryType; + binaryType = null; + } + + var bufferTail = data; + var buffers = []; + + while (bufferTail.byteLength > 0) { + var tailArray = new Uint8Array(bufferTail); + var isString = tailArray[0] === 0; + var msgLength = ''; + + for (var i = 1; ; i++) { + if (tailArray[i] === 255) break; + + // 310 = char length of Number.MAX_VALUE + if (msgLength.length > 310) { + return callback(err, 0, 1); + } + + msgLength += tailArray[i]; + } + + bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length); + msgLength = parseInt(msgLength); + + var msg = sliceBuffer(bufferTail, 0, msgLength); + if (isString) { + try { + msg = String.fromCharCode.apply(null, new Uint8Array(msg)); + } catch (e) { + // iPhone Safari doesn't let you apply to typed arrays + var typed = new Uint8Array(msg); + msg = ''; + for (var i = 0; i < typed.length; i++) { + msg += String.fromCharCode(typed[i]); + } + } + } + + buffers.push(msg); + bufferTail = sliceBuffer(bufferTail, msgLength); + } + + var total = buffers.length; + buffers.forEach(function(buffer, i) { + callback(exports.decodePacket(buffer, binaryType, true), i, total); + }); + }; + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 10 */ +/***/ function(module, exports) { + + + /** + * Gets the keys for an object. + * + * @return {Array} keys + * @api private + */ + + module.exports = Object.keys || function keys (obj){ + var arr = []; + var has = Object.prototype.hasOwnProperty; + + for (var i in obj) { + if (has.call(obj, i)) { + arr.push(i); + } + } + return arr; + }; + + +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {/* global Blob File */ + + /* + * Module requirements. + */ + + var isArray = __webpack_require__(12); + + var toString = Object.prototype.toString; + var withNativeBlob = typeof global.Blob === 'function' || toString.call(global.Blob) === '[object BlobConstructor]'; + var withNativeFile = typeof global.File === 'function' || toString.call(global.File) === '[object FileConstructor]'; + + /** + * Module exports. + */ + + module.exports = hasBinary; + + /** + * Checks for binary data. + * + * Supports Buffer, ArrayBuffer, Blob and File. + * + * @param {Object} anything + * @api public + */ + + function hasBinary (obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + if (isArray(obj)) { + for (var i = 0, l = obj.length; i < l; i++) { + if (hasBinary(obj[i])) { + return true; + } + } + return false; + } + + if ((typeof global.Buffer === 'function' && global.Buffer.isBuffer && global.Buffer.isBuffer(obj)) || + (typeof global.ArrayBuffer === 'function' && obj instanceof ArrayBuffer) || + (withNativeBlob && obj instanceof Blob) || + (withNativeFile && obj instanceof File) + ) { + return true; + } + + // see: https://github.com/Automattic/has-binary/pull/4 + if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) { + return hasBinary(obj.toJSON(), true); + } + + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) { + return true; + } + } + + return false; + } + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 12 */ +/***/ function(module, exports) { + + var toString = {}.toString; + + module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; + }; + + +/***/ }, +/* 13 */ +/***/ function(module, exports) { + + /** + * An abstraction for slicing an arraybuffer even when + * ArrayBuffer.prototype.slice is not supported + * + * @api public + */ + + module.exports = function(arraybuffer, start, end) { + var bytes = arraybuffer.byteLength; + start = start || 0; + end = end || bytes; + + if (arraybuffer.slice) { return arraybuffer.slice(start, end); } + + if (start < 0) { start += bytes; } + if (end < 0) { end += bytes; } + if (end > bytes) { end = bytes; } + + if (start >= bytes || start >= end || bytes === 0) { + return new ArrayBuffer(0); + } + + var abv = new Uint8Array(arraybuffer); + var result = new Uint8Array(end - start); + for (var i = start, ii = 0; i < end; i++, ii++) { + result[ii] = abv[i]; + } + return result.buffer; + }; + + +/***/ }, +/* 14 */ +/***/ function(module, exports) { + + module.exports = after + + function after(count, callback, err_cb) { + var bail = false + err_cb = err_cb || noop + proxy.count = count + + return (count === 0) ? callback() : proxy + + function proxy(err, result) { + if (proxy.count <= 0) { + throw new Error('after called too many times') + } + --proxy.count + + // after first error, rest are passed to err_cb + if (err) { + bail = true + callback(err) + // future error callbacks will go to error handler + callback = err_cb + } else if (proxy.count === 0 && !bail) { + callback(null, result) + } + } + } + + function noop() {} + + +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/utf8js v2.1.2 by @mathias */ + ;(function(root) { + + // Detect free variables `exports` + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module` + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root` + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + // Taken from https://mths.be/punycode + function ucs2decode(string) { + var output = []; + var counter = 0; + var length = string.length; + var value; + var 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; + } + + // Taken from https://mths.be/punycode + function ucs2encode(array) { + var length = array.length; + var index = -1; + var value; + var output = ''; + while (++index < length) { + value = array[index]; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + } + return output; + } + + function checkScalarValue(codePoint, strict) { + if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { + if (strict) { + throw Error( + 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + + ' is not a scalar value' + ); + } + return false; + } + return true; + } + /*--------------------------------------------------------------------------*/ + + function createByte(codePoint, shift) { + return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); + } + + function encodeCodePoint(codePoint, strict) { + if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence + return stringFromCharCode(codePoint); + } + var symbol = ''; + if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence + symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); + } + else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence + if (!checkScalarValue(codePoint, strict)) { + codePoint = 0xFFFD; + } + symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); + symbol += createByte(codePoint, 6); + } + else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence + symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); + symbol += createByte(codePoint, 12); + symbol += createByte(codePoint, 6); + } + symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); + return symbol; + } + + function utf8encode(string, opts) { + opts = opts || {}; + var strict = false !== opts.strict; + + var codePoints = ucs2decode(string); + var length = codePoints.length; + var index = -1; + var codePoint; + var byteString = ''; + while (++index < length) { + codePoint = codePoints[index]; + byteString += encodeCodePoint(codePoint, strict); + } + return byteString; + } + + /*--------------------------------------------------------------------------*/ + + function readContinuationByte() { + if (byteIndex >= byteCount) { + throw Error('Invalid byte index'); + } + + var continuationByte = byteArray[byteIndex] & 0xFF; + byteIndex++; + + if ((continuationByte & 0xC0) == 0x80) { + return continuationByte & 0x3F; + } + + // If we end up here, it’s not a continuation byte + throw Error('Invalid continuation byte'); + } + + function decodeSymbol(strict) { + var byte1; + var byte2; + var byte3; + var byte4; + var codePoint; + + if (byteIndex > byteCount) { + throw Error('Invalid byte index'); + } + + if (byteIndex == byteCount) { + return false; + } + + // Read first byte + byte1 = byteArray[byteIndex] & 0xFF; + byteIndex++; + + // 1-byte sequence (no continuation bytes) + if ((byte1 & 0x80) == 0) { + return byte1; + } + + // 2-byte sequence + if ((byte1 & 0xE0) == 0xC0) { + byte2 = readContinuationByte(); + codePoint = ((byte1 & 0x1F) << 6) | byte2; + if (codePoint >= 0x80) { + return codePoint; + } else { + throw Error('Invalid continuation byte'); + } + } + + // 3-byte sequence (may include unpaired surrogates) + if ((byte1 & 0xF0) == 0xE0) { + byte2 = readContinuationByte(); + byte3 = readContinuationByte(); + codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; + if (codePoint >= 0x0800) { + return checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD; + } else { + throw Error('Invalid continuation byte'); + } + } + + // 4-byte sequence + if ((byte1 & 0xF8) == 0xF0) { + byte2 = readContinuationByte(); + byte3 = readContinuationByte(); + byte4 = readContinuationByte(); + codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) | + (byte3 << 0x06) | byte4; + if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { + return codePoint; + } + } + + throw Error('Invalid UTF-8 detected'); + } + + var byteArray; + var byteCount; + var byteIndex; + function utf8decode(byteString, opts) { + opts = opts || {}; + var strict = false !== opts.strict; + + byteArray = ucs2decode(byteString); + byteCount = byteArray.length; + byteIndex = 0; + var codePoints = []; + var tmp; + while ((tmp = decodeSymbol(strict)) !== false) { + codePoints.push(tmp); + } + return ucs2encode(codePoints); + } + + /*--------------------------------------------------------------------------*/ + + var utf8 = { + 'version': '2.1.2', + 'encode': utf8encode, + 'decode': utf8decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + true + ) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + return utf8; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = utf8; + } else { // in Narwhal or RingoJS v0.7.0- + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + for (var key in utf8) { + hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); + } + } + } else { // in Rhino or a web browser + root.utf8 = utf8; + } + + }(this)); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(16)(module), (function() { return this; }()))) + +/***/ }, +/* 16 */ +/***/ function(module, exports) { + + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } + + +/***/ }, +/* 17 */ +/***/ function(module, exports) { + + /* + * base64-arraybuffer + * https://github.com/niklasvh/base64-arraybuffer + * + * Copyright (c) 2012 Niklas von Hertzen + * Licensed under the MIT license. + */ + (function(){ + "use strict"; + + var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + // Use a lookup table to find the index. + var lookup = new Uint8Array(256); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + + exports.encode = function(arraybuffer) { + var bytes = new Uint8Array(arraybuffer), + i, len = bytes.length, base64 = ""; + + for (i = 0; i < len; i+=3) { + base64 += chars[bytes[i] >> 2]; + base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; + base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)]; + base64 += chars[bytes[i + 2] & 63]; + } + + if ((len % 3) === 2) { + base64 = base64.substring(0, base64.length - 1) + "="; + } else if (len % 3 === 1) { + base64 = base64.substring(0, base64.length - 2) + "=="; + } + + return base64; + }; + + exports.decode = function(base64) { + var bufferLength = base64.length * 0.75, + len = base64.length, i, p = 0, + encoded1, encoded2, encoded3, encoded4; + + if (base64[base64.length - 1] === "=") { + bufferLength--; + if (base64[base64.length - 2] === "=") { + bufferLength--; + } + } + + var arraybuffer = new ArrayBuffer(bufferLength), + bytes = new Uint8Array(arraybuffer); + + for (i = 0; i < len; i+=4) { + encoded1 = lookup[base64.charCodeAt(i)]; + encoded2 = lookup[base64.charCodeAt(i+1)]; + encoded3 = lookup[base64.charCodeAt(i+2)]; + encoded4 = lookup[base64.charCodeAt(i+3)]; + + bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); + bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); + } + + return arraybuffer; + }; + })(); + + +/***/ }, +/* 18 */ +/***/ function(module, exports) { + + /* WEBPACK VAR INJECTION */(function(global) {/** + * Create a blob builder even when vendor prefixes exist + */ + + var BlobBuilder = global.BlobBuilder + || global.WebKitBlobBuilder + || global.MSBlobBuilder + || global.MozBlobBuilder; + + /** + * Check if Blob constructor is supported + */ + + var blobSupported = (function() { + try { + var a = new Blob(['hi']); + return a.size === 2; + } catch(e) { + return false; + } + })(); + + /** + * Check if Blob constructor supports ArrayBufferViews + * Fails in Safari 6, so we need to map to ArrayBuffers there. + */ + + var blobSupportsArrayBufferView = blobSupported && (function() { + try { + var b = new Blob([new Uint8Array([1,2])]); + return b.size === 2; + } catch(e) { + return false; + } + })(); + + /** + * Check if BlobBuilder is supported + */ + + var blobBuilderSupported = BlobBuilder + && BlobBuilder.prototype.append + && BlobBuilder.prototype.getBlob; + + /** + * Helper function that maps ArrayBufferViews to ArrayBuffers + * Used by BlobBuilder constructor and old browsers that didn't + * support it in the Blob constructor. + */ + + function mapArrayBufferViews(ary) { + for (var i = 0; i < ary.length; i++) { + var chunk = ary[i]; + if (chunk.buffer instanceof ArrayBuffer) { + var buf = chunk.buffer; + + // if this is a subarray, make a copy so we only + // include the subarray region from the underlying buffer + if (chunk.byteLength !== buf.byteLength) { + var copy = new Uint8Array(chunk.byteLength); + copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength)); + buf = copy.buffer; + } + + ary[i] = buf; + } + } + } + + function BlobBuilderConstructor(ary, options) { + options = options || {}; + + var bb = new BlobBuilder(); + mapArrayBufferViews(ary); + + for (var i = 0; i < ary.length; i++) { + bb.append(ary[i]); + } + + return (options.type) ? bb.getBlob(options.type) : bb.getBlob(); + }; + + function BlobConstructor(ary, options) { + mapArrayBufferViews(ary); + return new Blob(ary, options || {}); + }; + + module.exports = (function() { + if (blobSupported) { + return blobSupportsArrayBufferView ? global.Blob : BlobConstructor; + } else if (blobBuilderSupported) { + return BlobBuilderConstructor; + } else { + return undefined; + } + })(); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) + +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + + /** + * Expose `Emitter`. + */ + + if (true) { + module.exports = Emitter; + } + + /** + * Initialize a new `Emitter`. + * + * @api public + */ + + function Emitter(obj) { + if (obj) return mixin(obj); + }; + + /** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + + function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + return obj; + } + + /** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.on = + Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []) + .push(fn); + return this; + }; + + /** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.once = function(event, fn){ + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; + }; + + /** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.off = + Emitter.prototype.removeListener = + Emitter.prototype.removeAllListeners = + Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; + + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } + + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + return this; + }; + + /** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + + Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks['$' + event]; + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; + }; + + /** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + + Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; + }; + + /** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + + Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; + }; + + +/***/ }, +/* 20 */ +/***/ function(module, exports) { + + /** + * Compiles a querystring + * Returns string representation of the object + * + * @param {Object} + * @api private + */ + + exports.encode = function (obj) { + var str = ''; + + for (var i in obj) { + if (obj.hasOwnProperty(i)) { + if (str.length) str += '&'; + str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]); + } + } + + return str; + }; + + /** + * Parses a simple querystring into an object + * + * @param {String} qs + * @api private + */ + + exports.decode = function(qs){ + var qry = {}; + var pairs = qs.split('&'); + for (var i = 0, l = pairs.length; i < l; i++) { + var pair = pairs[i].split('='); + qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); + } + return qry; + }; + + +/***/ }, +/* 21 */ +/***/ function(module, exports) { + + + module.exports = function(a, b){ + var fn = function(){}; + fn.prototype = b.prototype; + a.prototype = new fn; + a.prototype.constructor = a; + }; + +/***/ }, +/* 22 */ +/***/ function(module, exports) { + + 'use strict'; + + var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('') + , length = 64 + , map = {} + , seed = 0 + , i = 0 + , prev; + + /** + * Return a string representing the specified number. + * + * @param {Number} num The number to convert. + * @returns {String} The string representation of the number. + * @api public + */ + function encode(num) { + var encoded = ''; + + do { + encoded = alphabet[num % length] + encoded; + num = Math.floor(num / length); + } while (num > 0); + + return encoded; + } + + /** + * Return the integer value specified by the given string. + * + * @param {String} str The string to convert. + * @returns {Number} The integer value represented by the string. + * @api public + */ + function decode(str) { + var decoded = 0; + + for (i = 0; i < str.length; i++) { + decoded = decoded * length + map[str.charAt(i)]; + } + + return decoded; + } + + /** + * Yeast: A tiny growing id generator. + * + * @returns {String} A unique id. + * @api public + */ + function yeast() { + var now = encode(+new Date()); + + if (now !== prev) return seed = 0, prev = now; + return now +'.'+ encode(seed++); + } + + // + // Map each character to its index. + // + for (; i < length; i++) map[alphabet[i]] = i; + + // + // Expose the `yeast`, `encode` and `decode` functions. + // + yeast.encode = encode; + yeast.decode = decode; + module.exports = yeast; + + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + + exports = module.exports = __webpack_require__(25); + exports.log = log; + exports.formatArgs = formatArgs; + exports.save = save; + exports.load = load; + exports.useColors = useColors; + exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + + /** + * Colors. + */ + + exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' + ]; + + /** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + + function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); + } + + /** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + + exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } + }; + + + /** + * Colorize log arguments if enabled. + * + * @api public + */ + + function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); + } + + /** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + + function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); + } + + /** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} + } + + /** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; + } + + /** + * Enable namespaces listed in `localStorage.debug` initially. + */ + + exports.enable(load()); + + /** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + function localstorage() { + try { + return window.localStorage; + } catch (e) {} + } + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(24))) + +/***/ }, +/* 24 */ +/***/ function(module, exports) { + + // shim for using process in browser + var process = module.exports = {}; + + // cached from whatever global is present so that test runners that stub it + // don't break things. But we need to wrap it in a try catch in case it is + // wrapped in strict mode code which doesn't define any globals. It's inside a + // function because try/catches deoptimize in certain engines. + + var cachedSetTimeout; + var cachedClearTimeout; + + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); + } + (function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } + } ()) + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + + } + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + + } + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } + }; + + // v8 likes predictible objects + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + process.versions = {}; + + function noop() {} + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + process.prependListener = noop; + process.prependOnceListener = noop; + + process.listeners = function (name) { return [] } + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { return '/' }; + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + process.umask = function() { return 0; }; + + +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { + + + /** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + + exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; + exports.coerce = coerce; + exports.disable = disable; + exports.enable = enable; + exports.enabled = enabled; + exports.humanize = __webpack_require__(26); + + /** + * The currently active debug mode names, and names to skip. + */ + + exports.names = []; + exports.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + exports.formatters = {}; + + /** + * Previous log timestamp. + */ + + var prevTime; + + /** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + + function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; + } + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + + function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + + /** + * Disable debug output. + * + * @api public + */ + + function disable() { + exports.enable(''); + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + + function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + + function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; + } + + +/***/ }, +/* 26 */ +/***/ function(module, exports) { + + /** + * 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] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); + }; + + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|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 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } + } + + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtShort(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 fmtLong(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'; + } + + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(global) {'use strict'; + + /** + * Module requirements. + */ + + var Polling = __webpack_require__(7); + var inherit = __webpack_require__(21); + + /** + * Module exports. + */ + + module.exports = JSONPPolling; + + /** + * Cached regular expressions. + */ + + var rNewline = /\n/g; + var rEscapedNewline = /\\n/g; + + /** + * Global JSONP callbacks. + */ + + var callbacks; + + /** + * Noop. + */ + + function empty() {} + + /** + * JSONP Polling constructor. + * + * @param {Object} opts. + * @api public + */ + + function JSONPPolling(opts) { + Polling.call(this, opts); + + this.query = this.query || {}; + + // define global callbacks array if not present + // we do this here (lazily) to avoid unneeded global pollution + if (!callbacks) { + // we need to consider multiple engines in the same page + if (!global.___eio) global.___eio = []; + callbacks = global.___eio; + } + + // callback identifier + this.index = callbacks.length; + + // add callback to jsonp global + var self = this; + callbacks.push(function (msg) { + self.onData(msg); + }); + + // append to query string + this.query.j = this.index; + + // prevent spurious errors from being emitted when the window is unloaded + if (global.document && global.addEventListener) { + global.addEventListener('beforeunload', function () { + if (self.script) self.script.onerror = empty; + }, false); + } + } + + /** + * Inherits from Polling. + */ + + inherit(JSONPPolling, Polling); + + /* + * JSONP only supports binary as base64 encoded strings + */ + + JSONPPolling.prototype.supportsBinary = false; + + /** + * Closes the socket. + * + * @api private + */ + + JSONPPolling.prototype.doClose = function () { + if (this.script) { + this.script.parentNode.removeChild(this.script); + this.script = null; + } + + if (this.form) { + this.form.parentNode.removeChild(this.form); + this.form = null; + this.iframe = null; + } + + Polling.prototype.doClose.call(this); + }; + + /** + * Starts a poll cycle. + * + * @api private + */ + + JSONPPolling.prototype.doPoll = function () { + var self = this; + var script = document.createElement('script'); + + if (this.script) { + this.script.parentNode.removeChild(this.script); + this.script = null; + } + + script.async = true; + script.src = this.uri(); + script.onerror = function (e) { + self.onError('jsonp poll error', e); + }; + + var insertAt = document.getElementsByTagName('script')[0]; + if (insertAt) { + insertAt.parentNode.insertBefore(script, insertAt); + } else { + (document.head || document.body).appendChild(script); + } + this.script = script; + + var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent); + + if (isUAgecko) { + setTimeout(function () { + var iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + document.body.removeChild(iframe); + }, 100); + } + }; + + /** + * Writes with a hidden iframe. + * + * @param {String} data to send + * @param {Function} called upon flush. + * @api private + */ + + JSONPPolling.prototype.doWrite = function (data, fn) { + var self = this; + + if (!this.form) { + var form = document.createElement('form'); + var area = document.createElement('textarea'); + var id = this.iframeId = 'eio_iframe_' + this.index; + var iframe; + + form.className = 'socketio'; + form.style.position = 'absolute'; + form.style.top = '-1000px'; + form.style.left = '-1000px'; + form.target = id; + form.method = 'POST'; + form.setAttribute('accept-charset', 'utf-8'); + area.name = 'd'; + form.appendChild(area); + document.body.appendChild(form); + + this.form = form; + this.area = area; + } + + this.form.action = this.uri(); + + function complete() { + initIframe(); + fn(); + } + + function initIframe() { + if (self.iframe) { + try { + self.form.removeChild(self.iframe); + } catch (e) { + self.onError('jsonp polling iframe removal error', e); + } + } + + try { + // ie6 dynamic iframes with target="" support (thanks Chris Lambacher) + var html = '

    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�d_b{7K>G${4PxJ?7R%HjzDayk2(#7y`V)! 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-x64-node-0.10/deasync.node b/node_modules/deasync/bin/win32-x64-node-0.10/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..3b030a9299201bffdb185f789339377d7a8124f9 GIT binary patch literal 82432 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-x64-node-0.11/deasync.node b/node_modules/deasync/bin/win32-x64-node-0.11/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..faa7b2def33c4fef0dc37fec8e3c19160b8a6d37 GIT binary patch literal 107008 zcmeFadwi2swl|(D4Q<0yE`f5B0L7_Rv|7-1Vl@vW`UFx1MP(GEPPK!AT4^GnfUQr9 z4cj=K8J*EHj^btJ=r|Y8=s>|+(qb=^O97Q4qZaUtPYjO5OItvBe&4lsk_Kdc=e+OV zFCWtEz1F_(wbx#2?X`ExZf-P~4F-b+A6+*Xn($5k-2CtV@W*H{44brdnBn!IJ0~|8 z{W~WwSbAr*vuee?KU;Cz-Oh^J?z!jQfb*w!I9CMkao%~4({t_h&b#lu{f-Om_RPFQ z(dVxkarHf8*NjSj@|CAYSrE@xUKn);|Nh;mtMDDH>lt-7zF+(2=26S>eb3mnqs;i8 zd(Ts&?&aSb`FF+K|4hW6=ik@eS+SJL{&zi@=QS8^Uq8ffL$dgWnuTgNc78LphR)Ov$ew#s#F&Z#3LffK025hRZ2) zkCFZx3|&UUyi5Wl{`DFSFJ>4FHTw*P;w0=W-_BV^LsdGw%V6k5d;i_P3j=qo3J{X| zOiiZmL_ZMX|C|Ox`GqTPzb$Z^!SMOt0YaIEP58WxPuf2>$mc?l%#d3OL?b$qi|+t+ zXz-ugV2E5;B@*&JqOS%FyW!Cvq;p@mqIyLIP<%}25B25Av!%OZ`MpR;V`RWs8Ep9e zj~}F)1?d0#hY@Ht7aJJ8o`3e5Fa$OB4fOKfo;#pjG6I!{XAdY0dC?W;EiK4cgN#T>$*h`0Nmz?O4vv_@hAR5Bk0Z%p z_A{f8q4Tm{vnuP&;83NaSz(^&m=+&vN5Xeg2@^%2f5$FLAD=Ti2>c#_7vuH6=CIU56L-+spmbU{#{7@n{V?I z3dC_5g<+&}(kE2(&%^d6rqt)J@QEqCHf-_9dI!zyDu)tw97eH~jeuZ2H6=8B^*8e1 zgx&@gcgBPw%U^j*hVyh*t(4N7*+aDVDW1xR&_g^V=cYAKX)_TWDXdulmGEik9ZW7v zOAY#Ea&bDKVZJ*(xp^@~R;JB2jYkv41H+xW zx;Jf1%A~W6$t$9m$MKcOlo+0KDEXPgv*QeQu_HA6wC3 zr*&Jb?+*YJ3l>!I@&$aoDr^=}dy>&5*Yg=rCA2)xc_Z;C_PN525tq742`vJb0h=mT zDprH%eBuuU^4v=Fh($3U(08wzkT#!+8pnF-)E#j&LEpXlOJY&Q3PTC*zIQqQx@JII zVW+9RYQWE^AhtYDAwG3$i|%+G*?2;o{ir&Lkc)!d4k`TBV&sHJWEM_Kz=*0Uj)rXkrvEjV!t_Uy8%6d?$hQ(slc=X z5Vmx2x=hWt?il;VS!z(2NlE8XY3c7fYx?l4Ro=QtFhdDHTtkc@ z!yoeJIcd+rG#yaF{=7nOQAe96&#BWt$4-c4e&)$rs<0d&_{`r47^c&G3w1!W$IpNo zs<02yH?h%-^HoF?wjer2cdVxLA#-Z*e5^xvcnJ8z;oRY8L(5QxoZ78?e7C|@H4Zsw z{vTdwrScLzQ5eQ^mM(2lvT6=x)EqYjt%#3l!Ibb7;HUl1txKDgEcH+Zi>f`AkSQ#m zdif-}7qkL5n3mHQ8!l~X&NE+b445yWX`My=QG;JosY-OfsSa4B#}kDUJ+h(Frf6Dv z-hZCnHwIf!^te+!o|Xgc{h!J={~wp1mg6ktQ{S7QY8fi0wl@(?RJz)wUnaV6mh@XG zO?sxHNTq9gB1hQrKCoC87Qr_YafKz~O(esoaoiNWD$M6p%-favz3a}y(p3s(=PM+u zXRjNF&BOj9ta)N97AS-Yo9z^GjS`ycq{LhT;`5m-kBH4z(WS8345*W!v@S_^NR&B^ z(!~7uN#xR3~ZzNC{FeFni)Eyu3c&_ePAaed<8s-V(F%Q{J zV-zp)gbN7a&vW}3Sp9r}bjLwLgdLwgLlcZH?xVQ6t&npMTF>^U7*P7OW+3E%{ip z&m2)e_K*G=)FN%2mir5%!B{==rW-NKKK2!a;jdr3b%~F)v;cXs(P%J958nvMsxO)m zxU?^73}kJvWcu{>2BV@!`=X|RRLKBPHB%)xks3AiMJ)ll09iQ1QpVbS(U?`LKLAxi zM9hIvSSXpqyws@8r*{N1$bfh_?yS&>+3heEQjf zOdDp@iPhNS56#!0VP*CbbO3V)GOtn99bF;g*56bXz>?B1RZ4rDy8$}-gstZBffj2^L$8Z$&_;Z znK?>rv<3wOUITa|6|s>Juc9dcZUpdE0!9ef1xN&tE`szBq&N6yDiTe7NXn0j>MVhA zDftOVUKejK2>45+lmd2N*kVI=Q?E2!>7_I@veG2CL52YA3;S)zl%0vLn5E%E1y1O{ z7|KTeX~e>NILsFwty`bDeQ@n5dPj2k@wKO@F;m+5<7*EvOKSZk)?QE^Tz6^=5)iFn zOo(xC-GMi>w4}|aub>^vk5*x9?RUD~NK*+hc0pz@Dxe9@#a!kP)aGZSL~$}y$>G8G zX?o+2iMh3c!}2a*dXX`QriV}OcoD-CvnZcoOxti26)h`hNlxxk={#fHjv@E(dCZZ{ z8_Fqx=BG!gjV0!{3KLgOhN4T zO^Nm<_>&Z{VHRofvd}OZFK}qF4{s%FS9ngY_IEDGxAU!S%U{5DL)H9%Jj2d z#9!m_#Z(9D_PJW6hkuJUC~Ux2aLONk$mUaZoAmG_L_$z74sofy*XL@hzF{lb85LKv zBF*Yj%w3ABYsGL%^DWw5bWi~k9v3$u5Wdl=xIS3nBisS%SA8UKxf0dQN_YaaBkW=O z{|sozT8O6j*bd#%#^b=xwdszn0-42;|DY1J%`m8vunR58tw1GGNNJi!qaZJlZS zw;wWpF1JJZShsq@7+kA`MjH&Y%M?Xomti~7-gk(&)(AvArX89_d$lB*zVv0ILF>du zfj%y(LwF_6y*fiXhf;THS>q`8s!7`06L?@W8sY*epoT2nIvH7FJ1_y-y;bF{y**?-sTvI>j`u^@+pXHaU_I4V!?sP7lA~RQeA?g8MC};&)V2N=(k)grU@^mxn2^3>_PLRux(0cq0=97=Z5Bi_7&TW zH_4=v&-1Zf_Mx90yZ=B^O9qP>)}m3JZ$`7??^ zZ6_j$+LEdCuKI%kt9sHLyew5{Ez*L3JErbt$4RpcOhC>^B4j8CHi>|!X*e_ln75oc#HsN z*7XIqK!rByE%f&k|NA}v`yKy#lK(xy{~qUm2U=2d9kzad5&9Ok&%zSJg8J2+;D=#r zLm|cNYbh48t{1>J1h7#6R}0{U7xR48BIXpO1VwBP&tSb*#Ga;#Le@J)?0$i(Knx?A z)SC{#PX4mNu!YDuWF591E25SvV4d1qlMM#7^h7;S!Azb&s|0GxP>Vru?AU`yfhplS z1<18{%NUfRz4I)s{6NMQvPABLDbW5|4T}BOcq-Nd+7DTG)l#P^jCnx(R*Ez0X8HDy?yM(kGI#_gery=Xb@MS;9rTG%;79Yv8MU3$LFdMmP09c|Wm z2vI9M>>xYfVa>H)-xIiFxrc3+**>|p_s)Cn@YQ~G^&R&FndZrA314mWWHrmuaf4KDSd)c>79=zR-$ZN6rLCDltzsubmORoS zsZr9_BSWhxsR>Cx00Wl+8C5;6&012K9H1hE=#Y|7%C;r!F9gYxK zEX;sy&cLWP>-TpU4OWinN9aO?h;KT{D2S~ukXOhBhMXlWf`*~saY_n18s5al4O`Na zf8Yc-o>b3b=$ZuA9UB0p&C&w1LKpGhG0;+3B4cn+HZQEcH85> zru6`W~Z!b@ob8o4GSM2`Q}r zDB+18--Rz%XCPan^G+o+@r%0wAmcCJ;8J`B<9ib92V=4n9K>4`*+TXwIXus(ZAR4? z@1ng$9iH$kW9&agJi(vT(*J;&&%h1@VAinz9ARzy3_iOynyhsMxcCB8jq?VY->|&} zU)nGff(>jA;@3g}*8b9ml^u3GE0V0DB#h`vEnT(|NduFR@TUlAcZGD;{*c)H9LmIWe{y7iu>RN6oy@eb!%-j5a{S-)5W(sM0~%1k_r9@+C$%;U5am_ z!q~+)nih5@GR6<`8)p%S34+9NrQiVj7SxrYL}BD{ZC9kLKO#aJt+0%Q_^0TtirQvV zTwkw%8K1@F# zwt$Qbu}jdQ9f|O0>@39hu|~MO?jZ^DCJ5{|Bt&+%mn0Vti}Ac#AEu~LE!{-STdK>z z*tJ>znc(D}hM5NutUoB#e@Jt}>>6xCSg+4hq*p=FgGp$r{Dn*A{u^AD+!bdP@}iLFCd9AYR32?8a%hn%GL?iEf6mQA+w#D9VTjg>yB5^76^@G+QS5| z!UVgy-mq9+#O-`sN5DD6SnWeBx;6uZbb~gg0IgBmX@kpefqsdeJ&9_H_7VW*HkArZ z%Ay#)r69zrTqU&1$wg5o6e0GN!eX+zOUEKm*ar&Q)KQ93i5W(M=ayJ6LV@?61LD3J z0(+Qg;O{Q`H~`rJS-SdT+4XU7+nLnK+DQ3Ph)QLMdO{XHOZ{x-p0#K$TEUw@l~gpJ|Gw_@z9%~Vohwy$fr84>`-@R4@BJb) zBH8;101h?*hUe4Q=9x`6vkj-MsWNt(t&ElU*iVYf3cl-;EtO^Ln4iw=Vp9Fbm}HsV zr$BvZhbGbGDw0$%V*@*-n04kkX#wF%5C0LV5V282{T(9env*#Osg5)O1hb8SF+gYY zgC8Gz-)G(isXnr5?YcniT0=$k-95p4FwHB-A`>_V#61%str*+@8|$!y!5b8M4#3QR zGDqfW5-(_nR(m<=;8(fXf|EHOR)z)V$;$^I-)DZ$&))U1oqRQezMny%DpKpMv6zJhOJA;j5k#oWO>oz$}xs}Z1HRaf$!`K zkQke%ZkPMJJX0f{tSAJi;Q+#a1A70@AoLJp&)mY7ZUdry)?h!-`33g;ubIq$|yTT-ULz!K>|0JwWASd%uj^0t63u9KfQzy5mt0 z0~YZZ?LTQZr4xx+fUtILGvcHRC*-9;p3gTE+DFvmJuBC|15zW|L6N-2!CFdDEMh^Y zWA9 zwglWJRUXw4Kex8z@1{W*$}z-8)Rw$XuuM@e+HGLJqW1D#5eqNGdlAp1L1I1&AWDdj zNvs=NYl;X?mxG#!iMiT?8LT~)$CF{tp&2-j#uR&bPKvIXuNWA(R<*h;0?I zg(CJR5nC!^&xlx+h&77XDiM2_$5;(|AOQCXz(xXutzZ8YU#@mk_Y=V1u>%ST{;jFp z>dA1BiPqsXp0ZBp)rSVhAkUH|ByAHE8HZ?2WNbvHRkZrEkwaT2vcD0b?Dcw}fV6_e zv~{^kzk=EYT_kKhj(`HGW|(@V0S;kE@j?k|6(wANvS=Z0gYZGCN?5L12JHvTe%nH$ zK|QVqrjT83nD#f+%OCln8}>rxc!u_`6Cjj>Y`5-sn&84Do6=nd+mMi$!`8CDAX%t(Bg#_Y!__8F0NEJY zYTNObLQS*rr!rJ~J0keH%Y@`%>t=9vX4K38Qynk_WJ+Q*am^s0pE)f2!im^3l? z?{IV|Iej=fU{)7&VkM+TkV9dNzO<#6rKW2w@(SjMktSgfem)jl0@E{VpR=pyZTx?{?3NPEW=LPI@; zBVOr=C_m}X2SrRf3IKN_NXds)kWW|P@TJ_DP&#Ul(qJf|+hO~FwHJ0QCx+#ng$T0! zp76cxBtuW+9c$;JhqvfcqN1^o%h4$GaEJDnB4lYK7W*vCT*$f>^?E|nulOZKz-mCT zSZUQIm2I-kfJ3>Vx+ip7cFk?YH5=sOyoVa(Vqi)#GXb6FX}Ha=n0M2ng_>ZUfr8?1 z@}qLyaV-X|(o^zc9*JF2-7NG?VRd;RL99}20B|V9v3!+<{I1}GRp>MKk%Hrv-ywHm zPf4*y@)y5>LqJFw7aUi2=;o2yhq;Ibia7}78s zeoAxUWfa-U4>f*?uIsb2^)}M%e0r-G9JLj?0){4Dmu!l!t&J#C)y-0PCyi)Dzq0J( zg^GFNtM}2;;dMZuiHH{FNN>-!Nn5oH)EA@qXq|1V4PVWz)@tQ@b|CZ^@4t#4{yZQ=u@Zl%NZJ%p2TZ}CRHWMOj%TX_=3u6X+0N`wGekG^Cq6lm z8hC%m1yZSn!i0Gv6ON_V6IwMvbUAiDS|TX>HxPJ=BL48xc@Z=iqNWpKCPe863(Hsq zM9ze`iRGWBql8f zB#!PCA46}}w$c((e}q*FdxO3!*z^Noi^dq5V<68-br!0n=lmSB8nkLBX)_6z<`bnf zSpXvsvi+^rakRR1hZ`~l>}AIvqiHJr+r2alI8mr^8G<;8|AY+2iXYAT7U*drWcdS>c6Prag6x*2e%1@l1c%g859A zi^il%g)|9GiEPlNHnfC}sJ?^I3*I?q(xR~y&Li!6A^2P&7;TC#rRmLS=a+%J@-lV^ zCquG&E@+7CFLIj^y+#-J1~UBcS-@}>eNp3@5*%I>ssF;gX$suF6upIM@yld=2<_e( z8_W$Eiryw|Dk8)#tpbc6y%=!@9!PG}t^XqUS9i@RXJ82a4h_CQWejb-S~tLoq<0qe zVPK^?(i>}BP8#N+@Rh@&KE~m#fR|CFzR;D_Hd(jiZKVbmb;K!|9<6aL3ZRTB!I^d2 zgA<_xW7*F())Y@6m%HwG7EMxpA9}%h_r&5kIA}+4Ls~Nyp$lj+w1cA?%yp4~A4U(` z<w|z7(~S@i@Q?ZSI`JkL{fki5 z!QceiEB=mAxx5sourOtGYIprNT7jb>b2s%a_)n;f{8(J6XxE18Y6Zw%<0=hT83Pw8760NxPR5Q3${OPKzQukLRNe>o(eA^E3t0T^d@)wE zqEcEdn^EX%B-Nq3tgnzyo%RBvSh7EY;q4bpSeJx^oIV(wl%XK~2#wSB(lSw}jYHTF zbI{PLVDzN!@a2bd&`)!@$%yk9=M4%wiq-A}11p3!qo{Y}8k9FKdH$2>Phlx3u9o1v zO1KQ3V=JH$D9j56;RT<09dbR3C>K+B9$~^|&Sbn8aprX@(HZLg!SJKt-$&Rib5b++`@$vFvhd3S2}Wa>y86xlDDW&un4K{ zWy~(<8T)l1+_lse6GBD7zEtR_*oX?c>AO(bbJEX1_@3}wBP`kg7g66UiEx1U{_s~4Um46TFEdKnc74HyW- z&O=PhDF|sf$QlG*P6WObU3bH{MzqaYvK#D2cNlr@HwLJG@a~((t$I`rY9r=&2~Bu0 zDj+XDu-%110YRwTPvQjxo1zXhmKO^@2g-&a=e2P=r2G0CX#)_o{feVsquQ`^P+vK( zZrR#Zr+HrH0Rc!z&)0RyDo{lP2g6f;m%Fs$^`DlG~5V*gY1fOXA1nKgvX{y7S$fz z@eX>%363C1orzf+k*ermePs1T$k~FNn3qDdcwi2459hWw*hIS2fd{}(118oIvMxpz zNQTe0B=w`j`AFE#o~Nzz2^zz&;~7N6IfU-`55_^i<)BU!{}hVHTDWUHSwGeYY&~I% ztm_Cx`>AyS$KEQiD+RVZg}s7f-2!{3z|Klx^Eq~kz%CQmycBi>$65q-vA_;VVZXyM zv+nrk2HxhI1XlAUTlG(lZ5P=20=qqh?c&%!3hZ2g{Zk6Nm17?jSg*i7mcqWsvG)k< z)dE|U!al~a^8{8F*y~c*RUCVXz`6u>Mhg2=jvXbiGX-{Z3hU?Cz7X&4MFKmZB>Q_Q z$95C8$a;vtVaNHDh|iIeW4DUDMI!H;sl1sS`?SC&>U}1K{RRiRI5!j6%S7Iq6!v3| zEf?5}1@@;YY&*x!I;~z$3i~&X%@f$^BJa5=?28;bL|`WgtSyCI$FW)iAC2Jx`}x($ z(Wv6s?E-5S*c~bC%^dqDf&KP5K4gDMVLcrCn85Z6Y-0+0A;(q;>@k5|k;3M3>~#Wr zL|_-BuqKY3A+R3_?4>E}QJfOvTuESe3v6x*OK0V}W8e|qSR;YMj_s6)&u@fdKNQ#_ zR{Re0k8YVlZJFUMO3-xKGtl*LwRS(s7o&^HoSlnh)*!*I0(qq1SeQ#rYBDeWA z_8D?;=8da13hp$bbU4Brb+}M*b}M}7e$MyVhA!IWkiw$xi5s+EYp|4YJZvHFL$=W! zBVnAxI6qy<$C=;Vp=RRp364>>``8}Mjv~^ydD6DxWw|(}#f=wPJu)Eo87%M@4UCkT z+g66=_jmivdm#Gxr|$7pw9H|na&Vg=hbcD2JlEDIo25WDuGpE?o?hiizq#FCgsM9D zB*ljB5vF@+acTZe1$)R3c9gWq_+!iP;I(i+hY0NjEO^xSMor?MZ)?Kw>D14{mf_QM z$zUiQz@L@v7$C)kjPI0%vrQx%sc<}>8uit;1m2@-OXDLrB*f*(#Qwq#w91g<>i0_Z z52O2#&85W;N{q)mz_zAueds8h=D7p~6{r zksMYs+ZKRt21cQQC$m3E$%bmj$5Aq9{cLUy;}*4-Ou^A`E(!5S>+D=(JOl2-UrP_c zeJ5!rRF9IY&?=H03Jr9kgjf}w3Tswsmby(r%A>_{Sbjs^`Uz%Qu5S*^k=5gsL7bl> ztp^6wa-m7yVgvEdLDF|P5Gi>ILQ=6ysn|eSlzc&0lKEVAP;Pt%I_p9DtS+ z%+|geVKBTgnp!cDjv&7b&(88RNFX+-zbnUT9}#*A(4kyyEQlAmWB)RdyN%G+lbO? z9x_dT+lcHzsCLs8^C@`mZA8@5aOKuJ@XcEKyT^6Z9O|iwu4>4JvEdpc%wpQS>AWl~ zbE%FlR`efCB&upa(TX`H1E>&X(Z3pAgRg!F>5o*2hy97y;)TiU4O+iCXx!5<1}K@m z+uw~psY)dP;e)t0Sz7Ny>fs*s^8+X@I39U09!TMv+5%VGvhknFwV$5CpvO_u#en;n zj=xa#tlkDGj{6$qj=&mv(JHK^4K}$!Dyu(7THgSGFVS8J-VE!eqg?lfoxZ6NDtez* zDVv)s)q#@x&6Vcnh74a+vlM)cqAS&RzgxY#vi^%z%9%OT0o(mWO88oRgYkl^Uiu`6 zkr}QO?25yGd3Rvc2IJ)=!Hk;bA2$q-+uf$t24j2(ux`V}s67`tqPzh{lHJ;t^UzfD zNmAUx^9#Mjl27vJa{ou;B6&TQDzpUlI`b(d8k#Lp``>PJD*Z7fdLn~(bX2<%JX#K0MnG9dk#{!d(iw-j-RBy> zB_;Lv?Q1SnnzHu4P*s|_{{_kj-WWXruKmNj%bK4~%b2;QKxz6J{PO9asL^!xTz$wT zo3=Mdo`!3USVf*40_~!;SZUb3}W_dgVS4NynCXe)58NoD(0p z=7g1YFN^sqdbRC1OCalmwG8%*Y;6hHtyrAnVbAH4u5DE#L&4)+y(>p+vj{l_ZNbu9 z2W}E8#tN!=lUsm6R)5NC1THY6=%BjRFkO1Q#S4|m{7HSEEIr%iC94Q_a?Oa1%SVP( z7XEnpqUHbWUTL7H-5t`V*`eZC|3td8zkO_OjzK;6E1;OxcVtP z=eV1I-NTz=ExR8?A$x(B!TEB4BPc!>Z=ZsVOcD z+~{FmoWr%R&XD`NTW1@m%j&@GYsNQCs*lf?`?cr^D{GEwlgwR)>rI$nk2!(_nMgo0 z%M+MV3Czoy`;fq6m~H8^2A9HQ5g1idQW%t!@O-1(1R{j*_I5hHse${5;or?LEThX{ z8Lh@){DWzh(I40{a>4rPoZNl=4NzKZkJ56+hIL0NHmoAJXM@S(YA5{X!LVg^>@8xu zqq;@-)Z75&+Jw}VY8{;Lxj;Sf?b~x#M7#LR+QPEl@u;uuf(DkD(f_I=W`n2R=U^#oySi?No$eXXq-hWI6PX3&jxc-W(PB;R-# zbYq%iw9AdsvG`lDb751Z?eJXgw(Unhigsv!$DKu`b{n;A$*qf_IiHQ@xjjT?Ke2Gn zp9R=tIl*`PSWNGPgO|3Sj@^jlvHb)`Ys<3}BoC^7X$YvA8i(1b!Z{=P{y5NaqRxs= z>bJSA5}vw+1_Ft_1KRvri{T+BF|EA4C^~#CHv0WU-P#N^xHSXx+ZNAID!jOfJ^*K_ zbvSI;t%O$^wQnFSar5mip4>|P1Hq%LG-{XFVoUwO)wBAEW~vPE{AiKc#~xR&RMw3d z!m8S(y+Q?5bi&O?tg2nwmNs4YSF|J!)^}-l=D~zPB@`#9t}ww@&ak?O)5LiY0?7E1 zqAm3(#?hMXN)cB1SqY2ZxGW^X`u+KWuyVAlEKXQ{h!*VK_%gDN$CFf*!>OupkgDLM zk~aee8dy>aJ?2&rRv}mksA;!0=0}56G>xbzf{79d1qnf(PEe22pdCsOPB{_InpO;t zx^0!9n#6j6hgj{=8kB*K75zBXF|lF>Ks_>xabB3dVmh@Qv@wBlMrxO2a#mOk0fV)~ zqEr&dO7p;i<$=SczKbslq8eI5;R!hKK0(6%eykq8HazTIVu@Fro9NgOLwp_j@6qAO z(t#@;GAzbMFH~oALXVKEzSz64Aqu_x%0uq`fZOYPy;#3Q^ z>|=!6$#JWK7BaK)dNz=zk&?O^vS>KW4I?*nC1>+kFGX!2 zc7hW;4MuGlI6kLyFu?!B6epDwD2HVQ?eYf0>;{X`hx;ku;EKK-&f>TWHLPK{b_r!9 zc_98S4w$y14t3gdI39xEu!g}QM6ZX!cnC`dl}gJ3D4$t1<@PM$@XDDa}9}@i|$x*KW%=U zWQ*o*sboADLv!X%JLyqzPDj>Y&__bu%R~1t)MN)J{((U75H&fWzrhY5-0nVI&iPBm z7Bqa&?QRTiroipas9g&kZ41SaF+a8#CpKwxrc_{^mmZyo=`tTw)XP7?C3fv)l!L*t zg_Ysjo-P`s>`w-X4R)Gs=o+Wh)6b-w?@;4GxKE=z_NBs#NCO!r9N=BL1L19;v1Cq4FExYdj8L!qE?gv4o@FGrLf^`Jg{M^P3s)G*B=980K+qLy6zI zB_BP|vfral(_w5-(h5KyNf*9&=@x7X2JH=uX(M)do;f%YhX%qOK!pj%7rOl8_z*3B zKTl#WM7Ln~4q_SoHqirmi$)cm#fddf=hDK*3r9TRiHp##@VY!2xL}@w6SS~n%K{_R z+=vp+u7Ov5ID0#TZf=jIHzJZ=}|2kT7>b+ z7ap1SPb0PmM_Up78KUU?M76XEPBF&ds4d@7x83+7oFy+si0G+h2k!rW6o%}v7tC08 z*#aZ89Eq`Idti{Wd`S}Q0G?Um{#CIEj204=twrElMW7E5&&AZm4Lwp3Sv zuo9mBcVOgqMnOu4YS9kQ9vpeeY`->bD%#&cIt00|fG(&A;R{e1nz;qb+Q&Z79rv#Q zD+@pL8LAnJ0^UIZ1{JM1%=b`t!|QoPm<=tDgidf&Flpoj{o_=TyHue3`>6a!`K%E)jlC(jDa|Xm zDY)n|Y}(aHZD$Fz$K;VMFG0Hi8whRkAac5PBYulmT zn75%=2CrZl#Ic1(aBd0$9^7+5Y~$0?si}0KV$DQ|@Wf@bguurwN_b%o6oQK|?qowu zS)mj4?Ze_v)^}O59AN?WhaGQ$$Z5Sad%|;Uv}P{So6F2mv1F#N_#!NSp$-gRIiv|H zo1vvP>cIpyk#46RA0|szMQK6F%+s8DBn&V3U5=r{n<9R56oxtXD6h16A#59wTs$e_ zg+zW1o0si(?Ol-xBd>Y8A6_TJ;8l(U`CeD&io?l=h-l-%zriu#a$xDvXV4vVcLv&k z-cL~qupf{tu04#V(SS(Iod+elzf0{gitDmzLjpZ6x~1%9xR;gK0{k7S3gvPrjzy8$ z5_)Phn7uU%WKvl&KNr$8?X}Dfu+-|Uj=fDlny#K&g45x;~EuIme-{33$AmZyq{2_`j)7oJW zNjQ;nH|b?qSA*`@{tD~0^#()9Pb`6v{Iv=!sAvxq$!7TUt=bX9pGrR2duGC5}N` zZj|558Hy1(nYFS=mR|Tr^>jb`%S+Tbe%!DAfxMH_ z@WVZ1sb$tj5H`2F_N=`?so2iQ4Z$+Z`J~{@v0L}GYfDpZ-B{hBIcowB|^ZslKSqV&iGpgC%$q)tJ|AL30#2C04o;*g}4hIrdzW+G0k zO{je0Mp9wgjRz3Zw_x*RhtF3_hu?{5!8Ql2QrDtp?D*D`WZpsj*mQ|c@UsVZLM?*l zZq;XK<+KAR0wZ%OIHJwE9bw9V{y-v&JJgfk2XS-swG?34Id{TQZ8bIlL}g30-ATLhGGa zTU%iHz;juV%CBF6y!YnCAmV~k8!VF=$cc$0u&b`IVsDH@hKi@(=4O3sXcCYbyg2!(N<4(l~aeb(SHBG zaGSui!35p$Lw2==>lLKV(^*SCl!PjD9Wr>rMNH_yt~|`x?RjnkGAQgfG&)F)E4kh( z?(#rcX_LblObZ-d;GLokO#U}n>fyF193@h@O%c$Q0op!$vI&9sa^XV$TWHge zkDnzN5iU$46Mu$XFEESDL*sk(ESz(NturnnW}3JvVAZ~br5MC>1<8P+M|fWNZSfcs zL%5=IQWQ0u_bqKa2ce|Qb!r!Eql{2X2d@GQ+76RG*;P*dZc8CME~~qBEt_|!SIgy0 z;u)$9``Kt1Ry?fNHQOT99mMc&$;V`A-$Cwy1WMj@Ali1o6}DcquQPm;1=Fxb!iBZr zMkz<(?`KLmZYRB-iFhI2)5J43Za3n1^G2D6INri>mm^+|*LMJ_0;reX{=#zGe0o6& zb32ug>?9xDeKJHz;!_?rfOgb7csm}Wc3>mWrW@g{KNN3}F%I&%c0t>I9>!=T#CzAP zoBP(2@@$got;pJEeH~UYqf|ct*xMv(p!mb^uWMwpEg@^qJm_$pJmq^@Me;16*F(?3tU5XRGRz-Yw90n&XGre!|zDAnvqwB$90KjLn_Z zP-kp>oF_O0=HaZ>iOScGhV%7?y0OH8D8h07!`#FG! z-fhE1hWp)i0MI)$edVN8St9?Iy4+9%kuAYEWuf_AFx zT8N%84@S%%o<{HCvVX~ZclNPuCB;%*F}f+6zl8WzsD5uTm|Z7U~|g#Zq+xeDaQf&n?4ePxZ!;xo7T3U&u^ySv%s zF1{oPrZs!qmQyIL#%4<**<4F)>_zO9keFhYfK!dxq5I)x68Zj3!5Cc&@hA>23F{RU z$U$H_1#l*3oqzzYi}0p~9<;^Hp=!9*KbS3TZsi*lcBvRuS2FVfcx_7cFGCO`pH@4^MEDJcMQN7Fe6XhnHc?%$@L&kc%%4xOv}yO#P&c>3OD&s{B&=HiIgNo$o=H8xuddy&c1%ToX=< zEVxPtk6;-r5psWlqMq!z|1E0jMSy6h;MkiqmLvp+)O|)FYUOCerpdt4HaF|9nfeq%|OYvex)wMf&T3^v;j~ zcd}3f zh=@)l4J%w*O8!anhp9c<4H_&fij^iFmWB)BQpQHvoR-(kwyC3N01E5;ksYLUShdIZn^<+7zLgx zXoj(&qMOt=GhR^|h4WMN9Wyy{wKZI=$IamfjjmJcI*Xx**|=tTWr2iH8*_W z2;1SsjWl6E^%ps6oM4+@1-$7`xI^ zsYad9tVe`rr2x%N9~dOw+YDq@qVra~KO4X{*zA!ucX(h~KkdnOn(Ng2bf7a^Z5@C z^y)a0tnJ2NkS=cKl2Wa9dbH>CC~f+w#9=vKZXzB88`4W8x|huBr5_l`p_2p@hf7JT zG=8o)4@S`>D1r-5?Li1ywU{bwz%{rFepdT9NU~NOlE6nO5?BqAcz~ojS2S=pB#UIb zZ&Qm6!9@yVqU9Zd(P{~qqd&%bs(?}n+VlLqCf37SpGxs&T8c*}(Bv{IRC_TE{v;2p z$$no=mCZsz5qF}dHE?~Ko4AJ=_O2uei5vJZlm|Y3;A6!_Vb$6=1}jr-bCL%4H?XfWS1IwS*fU578wuSfhJ6sPEp_O<9wS8d z6vg01mk}#GMKZ~F50cZ2CF9A#6Y+GaS%H3Ws>x1J4JE;4L?RnVM1pJ*FhMullXT-T zHqdy%MwECvNxP4W^WDro3W8li*T_xj8pE{t9RFklt&10kOR48W8*fy?j9?0LyaFQD z&gJ25k>EI4$&>oRcbjQ&6V7^And$bf6GY&%X(p~v*jRFnxLCY$ul*Xj0jV#OX`lEr zi6pqyf|EyU87&!Cw~#Zxqg2T^^gLN?L<#4VoI`|G0b#UHb2G9K6SNrd+9QjXj#^vR}R}nsdSYG1`019QB zVN!yv76*ppCnMET1NH{?Q2*UYf3eeOQAIU*F+jb`(sqcZEvFvby_XL zFyAEYAWm)A zJD@#)3q{h_Ww{c{#1lqJcy1vN!Q}U|Mf?CP>FfESdVJK{k(B4EGxN+zoms=o%>(tY={*!>T<0LOjB_is7^|lrY@D@| zOLvVJgzSatp+N%}wEe{CKMwfOVLJaOQxo2e2;?O%byX=9@N_Hd(f+wl*M%Bcy;xy4 z^r%}!m7`&K>EWgywp*)5jfA8+A5IMXDj2IV>gdG7#PX$0mg3kpG_YpvfPuC@Z*Q^{ zZLzli2c#$2p8^l-SHd^+$k9`Hcy`k+O#!b*VIw^a!5nwP+TpF<5eEL)U_4jTz@4BJ z(>db#_zQGSt9LkW4}QhKO&CA!lCfDZNd1x)A&f})i+LimloM$R%~U@C`D9?_-L8PU z9+@Mq!3@$-*e0(tfM@>8CP#a0S%z@$X#%pXORt!xH&j<&(Mrk{4fd(AvCenLl~w~*DS z8{ggd^zhe}@&0vaelI=)!S48Pkb(XsfA6SLk?v`(l*%J``8qHfb{#Ag1y4w$lpLj? z{hF}H&`WKL#xeqz#Ep%3ahM(~9(>gr4_M2Ix2*AUwcLeI4?ey8{pE*5Rtx;)6Th#7 z{8TjW6?!iPhTt7zkFA%wbov@VIL07|2F;={(cpj ze*!=}E*hHub!h&{1oE5Ee7rFln%|ei^(PPmv~Ja-x!_UoHi6=)$m$^pOj5cD*9i{y z%5*=WLznj*s>Ivnl~N#DDeaHQQ=`~c@k&fO5OaN0dJ_(M&9OhAy=v*bqllEk&me-k z4fweVD%yuaS-W)8-smA)R(qv%Pjs+~ucWGW{KU$=&6TngKxI`25ZjML_qHS;`@7_+ zd*rDd!3(9gwgXO|7M~e!1N$X!6vBQECCp5w?m%{OKHAHo{oPZedi&Ha8WR^T!oNceUMLfw!TeiD=*rm>qKB zhX-W`?7KeZ!}|k!Ntnsi9y_AzN#~yJAK~<)CH8ZS2+1%w3Fb-x|6#+j(AqsFH+(Ld|A0G zYYnxMS^r}MwrF8UTZNMh((kc@z^u{b!*Ogjd1_$a;BJRlzu<@5#E(DuWW#qt?#7i& zuDZ2o&FB=l3E*Ih3?@hqN&ODE)9Xg$X9-8MLW(8?~R`?xeZFOROnZ!}j6nJvyG~5sWom zTIo*F9f(V~Y5G5P=j+KBA<_Q*c)~FN5$*q|2MZHDn0ICmuK68Jk+=|%>2HJ5K$SzlQ z?FnRUrQd6;^q8CDd2*Bf5XN=_%usensYB(-vn=vtQ+(l8Vh$6l6TI~utIn6%h}mJwP_{i9o8)0YwZoeq$(rcLIZ+FaxI0#VNXaX` zS+H$DhpzO7ZicrBd_iv@f(tLtiw-(a=V80&ROkH>U3CeSeTJ zUV2jyetO=1{1le=Gi=crNb?z<+8kaP@_woPJs+I(?XsaENqVO&1JXuT=vwUHI2hj* zy4t4Q)y+*wla$a(h#0Ulm;HzcX!mb90g)L41hg1h2oW-9IN|xAP5F@aUM@Stu6u>T zLKeoNr=Kta#~DWJdnkGMO|0~UhHDL<403^O2Z#%R^FXY|rSRd9`|-;kbhK~`xq?G5 zFvH_JeXvhRn+=t-LKb6L*lnr=f92kPF-nv}iL^_oRL&?~g8$#2X)O60ZJhc1uo338 zMqHWJh=iXZ)i(Rz)JA>S_HnYdcTn3lm=&VZX6)M$v~6$j8>JvhZZdj1pHtqBqJw3i zDU1dGvp48OzKdvh#?bJLAf&Z2G&Zi$KuthME2lcJj_8KN)0my)I3<6N<+vW4P*%{* zM+R**Cr9QYABHa$&xe!(tB@rZ#~i@j!bc6iuCP5|rLFr@s?h@6_%gbhc8?BUF!($M zvnoT2=AV+ov*yJcsTCiBPxEn&k->`eFVHxCfXTGZt{yiBM>DGvGGKf%v*zMEWFJAX zk=hH$mheXC+0X6aTsG%-15$?*^T1QDvZpwZ;%CS4WGvJC?6B^5w+si9So*zMMl&id zDSh)YdhxGU905UXeD8H6z>$K%MyJ^8kX-m(1*hwdcEr?yo22?42z*HU64G*t)g3pa z5=wQ=9P4-wcbpRSG|Zv=4r&`28S6ka8lu$${GxIA@s) z2)%-OF5eeoUxH*PiXG10z_UDz1bjD%?E?Q$4UDTux293{Sh_>wMz!g)+BOkd{s`Nk$*33Be)K)-N1! zH_FURR5wF+^v^{tNOK5?bF-O8%oUsMVtj&%5?V_%*qn*#i{Os# zwXwzJMLOP@@iK_qH_#=t^F8$RKYnU-yStd2qjm7_y}@1?ZuF333!3$IS4()IagB*} zdsuK4>!%lJae89(uqsRc?`kmOF!Q3p9 z8(q~w`J_uf$eRiw(`#yC@}$9308=o-C>xF=Q$Mo!7=;}FZtND$?Sb?2N|#`dTA-a zDu&&d8tAQ$1ukV}Rb<;62dL|q^m9m5AUE$)5K(?AJBlKC!>QGy7*5X^ij~P@6ucXP zp;!vP#7mPyaSI|r8VaAQW97``Fk~uC$)V(<(PB-E1|6Z|vE;fZkfY6<7?C^vL?Z%; z49~D8N2DbO)P>(MIT*M*y>Za%F&yM;@hNm=a>fi?&b(D$yU6RmOs)Wiw3 zjl@>OUM0HX=MjZ;bny~Jsrd+RL>NJ*_5zHD5I&bCM7Q$Ob@y9x;6Vw$^dn>dI&BTQ zX$``zF8+5k^K+Oo_zEJO0CezNie6^^F-0#@8oj_u_X#I1T1NbL zJ+QNsnIl>dPW>PvFoNW=N|BN7C`S81MGikJEB8PZBlihB0(|FHAP=~~rjf@ws4QGO z1IOB_75?)7j~WuT;uJlU)5S|p4sLOBr7eV=KQX054sNV_Ol=`RPht$Qm}$<502&d+ z#Q;9<7eU^{y#G*SPjg-?hd%;j1rm20+OJ_*Ob7$}c5`7MZf5cXE)j5@J6}D13dacd z@N{tQGsI^>%DB*Fx8Y&G>T?zH2zShwN;^}Op1Z@VcgnJkg$lDYOK*E@Hnqo%H*7CT zW!ILY8W@gMm;)1XAlZP?7+CosYsTJ09o!!lgKnkMLudc&T!R}1Ww`!#YBJ^yN4_^h zWTxK^N*n}|>G!nt<-{+|lDGE({8*(acxAtwOSU@jxRQd^xV*7$x;B8JQrPv_vf5DI zVU*`;3rcKuZe3)xr1pFt!Y?>wsB?3jcoLj0?W+|w1FdyBh7Q4~H>in1#zxtO7Q0?_m1|-(9GKRw^H-e2mbV09Jf(mg zcyHkLzFE0y;8yf|W{i76S!IsR9_W*SD3aAv#^4C;b@WAcy&IUSw}Nu>;^S#yjz$u= zfoZ=HNLliH&o>L^_#P&9)NlgD{uIUHak2aHmv=%N3wI_eRq~u7T27gZaZX!~2}*cA zlJK1RH)!tyUBR?ED$h@IQC5Vj5jcwW7j%_Lv-aKLXA`E;Mo{M3S3SB?u00IfSNOL$ z@6+X0GeLvB_>r+ZKWSa4iGG+EWFgg&1(VC^L?_IbiyujRdNc$ht7iWLO(A|X(`Emq zfSmk2hvWm&ARsXTf#aBcoq+5YkYYdr0`jhaxBd^at(}+MWAwU9EKv* zS~&S&7>4ky^g@NbT0p*ekq-l85&NA2a#%nX0`jbYbO}f~AWsO$+XUgY@p113e;usP zXVacZl&U=;0=e3wBH+|i5y;mb5P?GNJ|4)@?i2vGRxSdHc9RIq)26c%C*Zy zV5wFl0>#?-B2cAG7J*e-E)Vb_)v`sHMp83~Fb$yg%?s3jMvPL^M0g{G{~^LJQMgNl zU#0Li5vF}sYZBoIh5sbN?G)Z9!d(=8T!gzR+#td|6ka338ilJwxR=7Wi|_!27m6@Z zwdNOLVojP`gy{f5n<2uv6wVi6Cxs`7a6W}|M3`ha%_73k?+n_&^StkF3Lh0=g~B}| zJdeWfiSSYiw~KHUh2Iq6RTO?zglj1Lq6jxo_(>6Nr0}C6Tu$K{5#C7QfC#@t;iV${ zDuow`a1({+iExC%9uaP*aIpwKN#P4bxQoJ05$>k&C=u?VuuX(D3V-(;?|UzWdqsGF z!k>z;0UTQE7GWEOcZhHfg(D)IOX1f=nEcALmqeKRZ$2%;g#>RD;bIEciLjf(t3+6# z@NyBJN8xf2UP$2uB3w>kMTD19_;L{@$6l>agjZ2GPlRhIoGZc&6wVgmMhY85_(=+X zvyqR(Mha^p{1S!#A;PaxxJ!haD7=lrNj`JhK3a$k>sq5WvK_lmc!^o;R`2Fxx2jMo z;L>gVFN77A4P~?=;OCoCjuyk=6g|2;gum^Yr=A?O=3*pWpG=CQQQgr4qaF0i`vmZq z=H~6O-bQgXuh)RLI)5Ryr1c#_u1dLAVjCi#N*tHoKtCnNpJpt_DV_&H6b|ypL^=*8 zJ=|O?HDLNz!r9Z?Gk8wAI=)(*x#7soO-F9;V_kB|4d@Qh!TI^Y9f&cqlZqazS7}Oec1Lxy??&Z&@KM zJQQxiT+w7gxaW4Z?vVE=zIwyeMsGNf_i3$ejNoUK&w~>_YbjY&ufeg_+=`#l zT=P|IGc;f5I$CIP?;BVKhS(nnz`UB5Z6n`qw4{ewKN$w&+1dy$+p~Dc+pb5RlBd3B zZuT&o@@$jw>_4y|DEOudH>;&UWiI6ohZpLys$Q3#om2A{ay8*C$!*L z*zb&R&WH~!SrpbF^qP0U2YJm`@fFOAv^$c8cPtr@I75&^|)GjVw~4Mp(zC) ztj15TdH;b1i`MPynKc!vzP zcnQhg4ErF97FgfLw`*YSsKiiWq{V11fB@k-F8%ysjBP<#gw_sTG{T^248I6c*85Z$ zo~OWdoT=|&IcYSaxbet4{k;{AcLPmM8o_;s3!<z_Xrp?bD!V%2`o)>R$RK zx{v|ZRSS;(`~@Ee(X036@Pj6AxEjAHy&bZ>um3=qt9gwBOhJhrHq8lJHZZ?c3;7*d z+&U`+g76o#uKou`1W(=k1LJ8-&Om#jF~_Z*f^J_$l=KlCoyBq)h2W@JWIbS1f-bVJg`_NO)jNO zn_HwzP3=EKyY}_?Dmo^6!kATR6Q9+wXPwp6Jz%a@JqsR_Z_#*TLi7mDM{*d_nu`_C zE${oxQ=rNH`!O4+OH9X3J{|kdn2x^S!LkY*HMC(S{@2sc!aj+O2h(QOWoVO!ITogx zmTXaXVgOHqO3)l?i|fRi2Z;Qnt#@mau$<9EHh`{BM>yHwdhS$CIn-2Y=e|P;%JCQU z5!rOg;dLflJ@)nEcXp4jfv&kfK`#%d=*1FR^cEJ-sns8OnDsp{T=uco+#J6bu~x*S ztw9aPO8Y$KHdJ1q;hYDR8-T@Z2PU(>XU?3N zIdkSbGxN;M)189vaEB9Z%{X!uGgc>PPImVWwG6xh8+NiWCxo|)*W#UN^n*U?yaFE2 z4r;e&{Nq2;ZZ9A8|Liu|?c09W$8MjNqU`nz`2Wvt(-ZmsLc4tgFLyCll>DD(x1YtP zFxc%w@YEyaKg(_}LcU^l`wXD}&35}I*oifu-TnpwhG(~5xpsJVI}^vfMc=StX8&U> zUD$``1O{Vnyo*$wZA^uSw`1uQV8RrI^2b6>bg~so|5kp|cu3$qJ39IE}GP`$=RpoH}a1 znTD2K#b69_@!m>Mt8ER zddl@b8s47Y@JWjKMjK_3-fnd5(na5zs&063LyGuj1k10pb!}HPNc@XsDO-+H21b%3 z8oPfj6KwoAHMFVgOQ1sMx4TLuoqG_P`bIbOZ1MIBFK+ex3`>3nf>E_rp^tKE~Vzq}MTyUmDVzWF;~7YqGs*H;yL#T;X++X|cU8W%5#$72u+ zP0ZXf`6l~^%SK$6Y)v@QWdE>e?lJ2_nJ5EPlG@5d^TC&~B&+4qmS?-(#YoNC`z%6; zDrZXQeRP~3#dzU$eCRuJCAI@B-q^A&5yz_965p}!dMlh{ORU|rc;k)uF}K#oxi{Z@ z1M%7M`GIb{BH!%-$ZtKby%%2NI~5oEW*yZjdx?V zp|ct*Mw>StthOzD13#a}y0kxHNM@?GE`8eExCyD^7Y6nl$@m=p9J#EvFMZ5>W0Ay< zE?0Q#Xs~-6#px=b7jgN*$q0CQr&5}fI;Zr2h ziWEsSYVl=B;iSb=LifS!Vi<9^^)OzL<6B+pVCG)B-h)MKSZlBiH55p}TmlB7m{-bA z{J5pVd~l@s;279!^WC^@vb8Qs!5M)x2k>4n*-FO}348N=B{e$FWkj{zbaj%gW#f%l zWPt5i?eJaX&H0?24+A&yxyPNIz zqF@KBX?f^T`S&UcuXkekR9nlZ)gK+lfaQCMdlQNKgRnA*P_g@ME$a^Q?|YO+LuZZzrz8G7SY!AEGWR6tA8oPU3oiDj zo9#!sC*ZW$-$98Uo!WN#(GjAdcYCw_C^e2<@8Gq5i~Xqi;JQa!ijK5wdlKs0eI8C) zRqa?-Z};q$XVJ9fVo5m4`;G&=MKX{PT^%*CR;?Ra7zJiVL&%XjD%AiZwY6B2P&Lm~pZ<)k^{QTLYu-$Jz7EarS0sg__K)aQ z<5Byk%ELOwPnTCW7k#s}E}iyECg(O?o6w!ul!t|+SpG8)dZZ4%!eUPIu5M%n8!FAV zqmb|EM07MS(Ufg#sv6OCIV?V^<5%WgPlDR9<2-=B~PSrywcw z!Iz->T`0%8_b|WL@)%b7+cB|vq$~4CBn98tLm^v}@~w{$?}Emz3RJ+~K<)a=BV^Gw zw->n|%fRZk5u^Y1FlG+I2d%B!dlTD_e4Jr3KYFaW=-bwheq-M0gO!G`>&Jro#h)VC zkA6eE$U^KaK^Ugfx?9%$1&tK81J?T!%sZ^RyAWMVX~8Fh1k1=_wF_DoHDd`<18{Tr zMcD2!u-z-kb|>ezhDSEr&1Ac=W(!W*?(mD&xsNy7N0|?GS5sAbweY$!7d{^NnQIACgww zw)EMpiQDJ!_59^Xy?!F+V*aEGW0AwK`wGdO7Ah*Qc3o7c!DImJ|&!H zTU?zK9${O2M(Af&e6G56-K+TglC9-kEJ7%UEu2-@8it&HM`rwVyfD8$r7#ie1W=D7 z;b6&s4NKmVfaeelxtz>B5=^vXlBpR7RKEoKZ8Ke#WS`qz(D+nBLF2o)`M2$l!J@s0 zRIGD9rE>@DiGSSHyL~rI(d(#}SGCn{M;pVgK$K7_1sc!O*DtffaL;eq_FHQUddtdg zx3#vgTs$902dCRWb~nn|y#U~~YFk>-ZOH219Lj! zX8zl1|7k}2HlYx9w3#oCO)g05jfw0lkj`dQXxJZ&~dN}jo_JR z+psN+06zvY)ZOV_vT<0^i)o}6lVJFaxp6i9vMqf9-D3Q*9_F6SGh0U?*1KJ~6b#*; zrdz^zY6)Y|5>m;Iyw^2b5@2LX>C;>r_jSX5adV?7P?!+f_5L?Rtuv z!AthUHrai7DcTI|i7!wyz&ng}su|dg&A^3HzffP^vhj}imY^DdHSxEy0klEm;~PK( z-67ck)~N=712ibB&32{!*lncMf87A;k9RYq{+~$oFKDr|`Y(>DKXqA@`djhv8B+i4 zQT>;_2%8k)Y>me@lzHKBTO(KqEQpw|3!?04!~c0$f$zI$jQ*?7{l zmhiji+}c`;|86s{>A{u{*nzGu&^F|QFY!aFy2wo0>yg%$_Fm#kMKCOHA)no7X|ON# z3#=c#W;Z`@3@z^ZGbqke$KHlvf?0x5vd?|_*gF)Fg0XLjqqSa-gH^7@XK-Gn!PZw^ zL0)KQ2TXW7CD%2x*eWtG;~?8UzeL%M-T57xG#s z&wN+l=w2rbA1X#+I0>L z9YkflDFJ_%op;?;-RahbC5ywOtxqLn<5uC)SA*}+pOJ`#=g(BTm|{EoWoyIRiJ0(t z%+^$rXlrt2CRyc+hDp?wJl(Cjl9+L(u4EfMS7{yiMk@}S+4wlvXNOam_4~y7ZuRm{ zS$K5Z&@(`XFF)PZba^6_0sT0fm)~_h-nPd!ycE&_DUox2h@CEdZ%!KMX2L)>|AsYX zvR|8t7yBugKI6lHKW^;(BAgMa{wYm(q0=S0zJ)*NVK(i8zx2Y7GqD_Uo7|rBdj645 zN8rqq8R&L3cH#@bJ!J(gNq;auQkb36_=YL80o&W=rQ=)7boWDBHcmC3i(BP5dP#0< zNS;P3PU(xncj6Zg`oltJ4Amw^>apAyJ5Jt&r}EJFY%e0-j)*OfW99hM(SS%Yih;$G zY5`v(oe@k2`^f$}mrEZ*Wx)n>`s_#5YjpfzW@G}GG+MBhDax$ttFokZ;ic2ZQz>!Q z2Hqfjnt!AhrJSAfu`Ffb<`Y!P&sLzAIkK25vApo&(W;oAt@zNEgL00=X|Xs17a{Aw zv*kqhDKb4(n#eb?ZWl@8%{vI5fP`9(c2A8os=JYH_)ItlE8e(tw2_^^Zz_*2l4Z2S zjY)nwtL;xX_%wGadhVBD#|teQZW&SY8;F|*C%dvSzd;X+mJ?DAm`!xzYt(od-0}fE z*=Y5@7c)wAvawGL_~`w@zI8fr(!ISf8^s4qyUgO z7KD#}rf_ql%zl$IJ%`T2EVC!PW$pOP+G?BCyUet80tWFPb?i5V(;~MZ37q?v(tW%2 zLtA=^C6vAp4<8&3mk{|a@T1f7_7Y=gwH@OJTz95g~KUB*ff?1xORL%dw`t;qK1BLyvm>DbN@o(xJl$9U)K zc$DKr0c>Zn?|jR=^J&1|iB}@Hpyi8Z8_q**GaqcP#xENjy8oDdO2)77`Ixj2f7vnAwr1zKLW z&izB;aob|gtP1n)?_-Qkht2{yLs(4>LD^gFCY)yJNk^qUj#sXvL>47mB&1TLw73#8 zng8R+Gd?g;VKVQ25kGserNDd;<;VIepZtLdO4h;2=7VN@N&wTBC{{JJ)@C)|iut#r z37R4&QUDE<(a`S>hj7R<1{|SNOb5DY!MS5FKBPczVj?(^)@dtFbOLyl4G_n`?EXE%kSCd4 zlyLXo@!XYFV7?(2Px-E2Qh38>SorW~Y{)~IWC`<8@ROHt0s6NnV&fADIN2&SY_4ve zWNmyBbBHvLh@GNv)%c_{!5treL50QfEdOd@SE18Kh5ZM#X0XEcAk0wMZ@(Wa?0Hn! z4us3{)j*}JQf1}#f!3l1eElOWVvBa=713_V_M>Mvx;p?-`#$HH*Q{zn=L(n=9`~~ z%F{zlmK&zVy7YDP4PT)CyY5AZ)Gw)NcC2dR?IgVuUq-bNQ`!g6@>JJtpv3nuB-571 zyP5!Ft+1;e5NBup9Sd^1{)*1JY*~0Rog(wjPo~^Zsx{&&pl2Zj8=LsQ|Ix|R}!x~XYIuU9GypcjvG6VJP)bP_M=sMYCFk<$YF5g zy)7Tz+1s0Tw0osopt>Z|K^y3?co?JkoWe;Q9Q!&>EaP!(~WboE}>mA zq14D-VbC{L;jDnFOms@(Hh;)IRX%m9)S^v%pX5c_;DWB<*W1v2m=IYI%ZCs7K&R#m z3u8S`Pf?mDKyxk;Z++(SQv#R z&B7211EZ-JlE^_Aw*I%#KrK2b12t~Jo@1ysdX}|$TM~mR!(U|yR$7Fttc~btO6dq z*wuRkRM>ewGedtFS7u3W07IW4R}DP$zO(3eW3W5Uw>152ticOz%CADd?7UNuFKpGX*&;BkVX7CvG+IuVuzW2laAMLRg_@Dr_uM@QLYgQW?PA8Dg~f3%-(Vq~5o zi+m#*vm2)l)XiU-o=rJF3;X);#^VaifE)Mq9it&$+lRIciA z^4lmC7FN@CMQl@~?TQV~l$6iavo==A7+6B_20I_M7!x%G*osaYH$SGmdgIB&j{i5p?CWiMH?(=0*^cdcO!NF4u=DO=H z{G>4k9t?j)yHBrp6PY08937dQK>15wt?u;VU_&w--LusRC)7*9z!e{kQ3JZ(i9bt~ zy_DC?2Qd(UaOtze(q8nL!{Hf@1-C1Wy&b;Nqplq&8r0vlbozX3cBbRsVly1)t;c>Y zX;noC~0q)t|zyP-9f{IBB?bF?eBSV@za8l)swMc>go`@ShsF2gZn+%;YFR zWIgtdbDJ%eh9x>*!`+Iik1_6F1`gB+LSMoJ#-o4XbvE>Ij#0Tg4;@0n;nbxcho^s- zTY*n7Mbbeo*92knd_+*(rH|taE-ywtK(1v|*^D}c5@4!nK4hq-nh-umhU4%hESSI) z#+x(If{T$H>|%TV=9kKzvW-o_0SuwhC~guJ2F(zIA#Jm%+3?<8>Tsb$7CH?-QbPEi zbU{XBy$9#)Rb_sJL=Xp`y}>89>C4z?Z}hEB*eF!~rJc}$Rx3K(Crn%L1+OD`xd{r` z6MPe!6anAXbmH_T^|4esN2H!Q15Y1@5OQs*Z@r7+G>=FoR*m>n_H(_n7ofnsvzOs7 zb*6IHftw}2{Xs6-cwp) z@$zahEqr=M4(3DJ@YPLuxT1yjEorGVZo|1(^jVl^zBY6*evI%~wEU_f)CL~u6EDNy z4KqW}M2=v>wZ9x-Bvl5x+;I$)w#&*ajt_v5;usgi1+<|0Bz@_}#+%zF( zsLO0c{u-u7V;PrS2NiG}`~IIpVsst8fifz@3%iux#{L2J?__^B``56475nSix3NEu z{Tb|Mu%E>KiJdB)ci8_O`_Hg{AN%{+x9w2$rR+P|-@^WG_J6?seeAch{}%fnu%E!? z&1C;<_H)@^&weHQUiPnH|0eeDWdEn^zr_Aq?0>@k1X?SK>umOI>|e=#9s9f4-^c#L z?Ei-S1eQlC`!m>I!2U(-7qWjD`%d=j*x$px%oOE|gsV=P3WLRmv|74NRYNtGd7FDANx@XG~}P zmM2OHqfa4L!0lOK5__^$d36{WhY4`6AnX+m0~D}t@~Zf~O79@!I>r=-t|rDl1;t** zKW2P@@mKobwTw0Yzhi2Vu6CyXpb!2>AB>TSymb5v80-8vVY}(l>C=lGx{fn{Y^{=4 z4`aWABIOUNyv2-lc}a$JSvdSm1*7yNN4j)=%nC;3!^w$Uj*saxdFk}8?SoHcT*ma& zFQrT4Mg@hA|7VtuP9M*IdHFd$y*Z|OVoADWp za~bC|E@M20v7d1c<0i&y81H4gg7E>yHpXp?^B8w9zL;@@@e;--7#A?kcte%ve8v{W z7c$Ofyp(Z1enzs~FcY-o$thqdohRUwf)a!d^XdUG1l$f&seu_ zt>5%InJ#V5bbH^+^!joF8%yDO+j&-!?!c;Vcg6( z<VRy!7*HCgU;=4=}D_ypwSg<0i&?88eJ}epjH@9SpjC zUW?P^b-T2^t9E-_7FV4+7*Z|5>$3#IRW%^m;;w=bq;RjJ)@2F#d=`(-tL=~qxA+2< zfGg+=2dZ3_%5bn=xP2B^AmG#46;5}+RTc6D>MdSh$l|K?hg8dOd$%||Zl}c&*c7gH zd3Ey>l)m2qZZe}P4^#-9FPUGY8s*C+tPXptLR30RCK&eneSr`a67f8~s?8S17Khv8 zsPt&NE_37cg*Vk$YF)L+AM=TpChUzyv4oI)$0mmxMyx8}3kF#_7LVJj?XV95cE}7= zIlNUaj}|bAt=8eKw@}7|7LX}R7^{!+xcYE7oybD4-0dw72a#Egk>B!YhLBf%zuHmj z_SBbCu%Xn*r_bw!;31K6hbQ22IO~a}Kj7O$?1iXwILj$ZNIh5;aQjh3QUbF zjnBStdqdE(uwPa(IIupI_ths|c+RKJwm`jv}_*3Wf~ECVC%PwD_tmPG7BThtMC3 zQGWj_}yIonEqNE1M9nmRmg&(#oCV{-XQIP4C8?9LFXF; zvG(Aqb5(^yr1_R=U!c|jTPe+`ER(dokOZoX+KHvFQlVsSSdoys+U+8PT=eY3kfTi^FJq zS+*A4URdu@PjT%cDhwUow+OJ)s$D4a5B;}P)wn%Q5_y%hSSmkc&&le-*GU`I%WywR zubTvlW^7-UUjaCk|HaRo!9ca#YF2T<1l8-1=6GE34Z zg>?9Yw1nB>KCCNqe7Y!$^K@~@Fu)em^=W$m_b+UL|TU;K}0Q5@2 z+}V*0PTEaULTREc(r%X5)cbup1Dp?h`b^H_W$!mhAL~=4Un_#5O87)TxbSbDa0(Cp z36bXu*z4S(Vy)dH@O~hTd69?lOk0uxf1?j>1&)rZru!gm010>>FA$u3fm?0hswa{G|a0Kc% z)VRDlV{2WZaKH;H2s3)b;19^*aKtl2E|y-GqBc--Zf> zi1AERSVf>*C`?sk3||*?1vqU*x*FpbnJN4!2tv2q&VB)fc|{I?G}Sn{pdQg9EKmj$ z`6+c*ZO-$By`l3LNxGHjMjK?ZqCVf@b$VFUAcsN1m7M-spzMZgZgzII&Ln(2UT^rT z3fFDDlQFe1x^n-f!u9;aKE`@}r-!kgzbSr4(T`Kn#R10S8H;ySxE_yIFxK-i9gMNy zP+pcEMX%?B_Au7-72-V=uE*QOjP>|-4`U1St9W10>-n?}#(MnS_JIo5^Cxrup|Bpm z&o@j%~snKQR3c;dfAk zf$2^_VlRHteHF(EyXTagI2ob&=S2DI7%p)1f!iigBl-G~W)skny^n>)A%1U+OmMO(FC&p3p`&aZO2+mH)+k(GdnQymD+byn7aH1Y9@<Hfa-ukrnntW2l;(*RKue^2F@Bmcz;Iud)TCt5hb+fwIiC zGLQXrCuZLkqVG$!LeGdS>#&$BB?3)kd37nwbC-w zBg`o!LAfINkjSsqNgCB(Qe;mTfKj4g5W*EeF!|LU(nW)A|*&uM|%5C$1y~(q`3nFj`afyxb(YWl0Ju$rkVr z;GS;(u_wMwtU>BlNOv{p`ahdUi&l$^2Mi;l@!@vFAZ-nZQ=#vvqFAC$`0D_NCE%d0WvDTt(;=!JR2sw)Gdl>~ioX}h2=gH0 zdH6*NX2+HFQEJPHH>N8OqZXr z9{blZ#{7W1ni%W%eR~*>|?)V?AEj&sa#~&vcPhfsxf|8ehf1AQszyHl(tj8;vjP-cM!dQ=2 z<}lXdm2Ad(ypqFMzfaC(tj90;jP>}Xn6ZWPTgLcQ#ube9_@##N=^XB7Jd1H1;i z80Rq7?K+q78V=8AtnENCn7dox|%Go7ey}Fiv2+hjAj~ zeT}NcYaRcL181G@6$#@^*$&3#$p2E0|@l?hg zjHfZ~WIUa5591k(#Uxd}nT#_STNqmypUOC!@o9{68K2I$nDH#e6^v&y_A@?%aRcKs z8Si0y7UO-4&t`mp@m$7jjL%`*!8nU?gz>qIPcUAc5Phq@|@f5}f7*A*1&iEY0#~CkW+{5@H#$u`}e;(ru#+w<>VQk_K zRSx4M#`%m#GA?60ig69&RK|6TM>B3>JcaRI#@Ns)uLF!XGj3yS;tpB|<0QtNj7Ku= zVLXbln5N2`$~c4ZXvP-CQy6D6UdlL^v57l)#f*~}S1=yQ*w1(r;|9j5jQ21e&3GT< zDU1&=Udp(gv57m3#~F`e9ATWw_ypt8j8mqo@=sx$$#^N_Y{n+;Q06io#kiPpD&q>q zQyBXhFJ;`s*kn=lxtH-M#`_tkGCri^Gj7-MXQ}wdb$rGV9iQ?_ioQv@1o4!3i7 z6Ne`;p2OjKT$982Mh@5W0D7JvpTk)Vg`OAC^9E%c{#}k=!}zO=>lo{CQxoHRIeahU zpD@W{y&p5*Pr;JZ9ewuO0X-eL= zFwSIrnDHFOPcqJ7d>`X{#=mA<#<+uV4dY7~*D-Em+{E~0#(JJ*6yv=devI*c#=mEL zi1Dk8+ZjK@_&DSH8Ali&VSIw|D~wZ4SMs=vaVF!RF`mQtb;dc2zs5M9aVO(4#t$*B zVf+H)I>v7>Zesjf#(Nq6f$@IEuQ5Kv_$kJE9^`b!?HsPh(R$uO&wCu_a1Yb(<@T)S zQ6d~(qtj#kOJ#h5!wVVfd5w9DQ)Vf71{v#lvNXn-9DXa~IgG#0IEV4i8Rs)DVqC`f z0me0qAJ*YKF4yxabsXNr;T8_p^E6EyuICxrxxAy9elLgXc@I5rqvwJ4b9jj9=de7v z+anHf_}v`d&REZT=y}3)4nNM}YZ&imesdT{IQ%Nc6&ya3@d*xhFxK;qV;HB*R`tV= zS)u14%^aS|;a_Jwhw-J1BP^c`#yK3W=XdqIR~Coob9jKUp4XbsxQxT=G(WDNC5&r0 z{01GL(;v&Yg6Wqtu4DRU#!ZY%80&eo1&sG{cs=7iEYI1D_jC9r#!VbPi}4{2uV&oN z_$!Rtn0_wf;~ZYgIKsG*aWR+YLdGXJ{L74UIeaPOlrvO)?qnR{^s*Uea`?9x&tbfk zaSr1!<9x>J80&fGag572{2PpG7?(1xV|*K9!TA}_xQWAC8E0~N&S$)r!>?zY!tp0C z-p}Fd8E0_#M8=0Wd;{Zl#(NnbXS|zngz>i-pJ2S7aVGOWg>lN6O5SCREgU{c({uQj z80&e_WsK)=_%6mdjDM)<8E;`+#`sRg*__^F#x)#%IpaDGKTTr}cQS5b{0QT{j2~yb zpYZ|4hZrAX+|Kw}#>W{SWt_w5PhlM4@GBVWe)}I8pWyJv7-!5;^8F>_IgEe6IG6D^ zHRklDGA`rr+Zop|-pE+6zAa>2$Kls#dJfNJ+{EEGG1l|sIgIymcmv~Xj=z}keh%Nk zIG^)7jqxE4zmjn~V=v=krk~FEIER-r&fxUUV;te|>loK?d<)|f9A3$|jKgOzPB}}- zzd~c?zld=rhyNGjY{u6z-pBmTWSr08ZpLMdeT-`uCo-;M{3hcj#(Nm=W&9n+`x*a& z@gc@PX57wrCFA3a{fy~-GF_E;^GX-JU8hUG$IQnYVY;gD29+*aRi%8@!=iP(bkRF( zpqmPEG@l}rHj@c&_(Z2>7w_gba|OCz4fJw)^aFc(bKzPy6Am0 zU9|Fxt{^xl|7!M?C83oPbkTc!x@eUMU2c?!t}w@=RcdqvqvcZRdGPL?E?S8|S2gFC z)>hF~!|#k8kQ`ku&Q~q-bsz>^n>ik>6rqdOZ_q{S!Rgw}^qZMq5bwO{3Nv3?YeN^U z2BeGD|ItOOt(33wPw&g=s*TD;h1c@^ObH%Tmr^hhGK#zxy-ick8H1s$*wz(snJ zg;O9dR#56omawyyC_SO~-=12NW<+U+A={3nSR(~X~6+%CsNzW-gEnk-`pFNsB>3tS*x1RZt{u9>n zqjo^)>HJW8$O83hrl)p6>2eWW7Gmjg)JeI- z@HJBIF-+~vNKfsK^i0c@+8^nWt~Y9jR1Tf*T3ODbXgO(Zl~FIKy;AQALCcPwAj?v44R_HV>w2ja16AG%y*7mVSxvi@WI z$zB-4gMIjs{h)GdepRxZ7t3>DsEWz180%5lml#K7XGr6eMtMjwE4XH8 zm6Wj_Yh^vHj>=itrvjnJXUe|hMcWHKm#E%Xu>R3{GD=PNUzI&s5v><`9+Cah?M>N- zSh!d6Guj8DFE;22$*%-=;`Lj#>zExgwu3xrd)4zz=~=A(D?M8gmA6rEjPbPG?8rM^ zN-p-O{;B7AezZL)Ia#CmR&ugN?Us^LtUW3@)r!gNY|FLrFd=;~VRlW+N z?MCIRB$`i^uR=pUsQzN&9}~%t}kV8R~YhHi@rsy<*M{;QT_i{%ZMYd#mVIMfs`pN~3zD=&jLuRrH01 z{E!}87G1Ze=yhw;?d=jnIMEkJ?TDh!i$3QSf2*PVB(HVRcA>&o^od{GC;ZZ=eklIh zYLYyNUrF@2t#H0U4=8-K;ki$^I9mQ#|6e`nNiXP9&sAC-uP&8O2hua*N<5v7*vY+D zEhiU`HZ*pl7i6TrihIX8d^7igHTIyFW~8T8!$wTHYQ(f!+K8|26HZS#V>msfj9B+l zbo%v%^3u~vS@SA`9aneMUk}1H2O3{wA@`cU>QC#@7xk}6Z)lCMx|BVs1cxjj329SmHwt^ z{V7}%)fSCON}FFubIZwAJ?-8G~TBEx*j#Fc?FWU=BJ*IG5yh4+aZPNujWtBPft`IRd{Vw z-l`uP%b)6J$J(VDchVjMb*b@#F`W2QyVc=@^(+OA`>Fi&SBF!3r8V*DQsX#1J3;dl zq+fd0M9rJfUI$%1)o<0aDQZ3?3q2n_&!fgao1*ek3)Vx+ zPmOOjNA0*87wXv&nkS)gqn;WTd0sSzeSNPpF(#wEsZ)!t&^ zglnVvr^aveS6ymcuV<6g{E|_BR6k$OI#D>KZ=@&wF?*oKVX^$Ec>+C4Me{SH@3fyl zT?*4*b?JVwwip`g7O$~xk!qen&w8nOuPkua`lH5avHYlhc&z;>94n8)^jBSKUP8~F zsrj!g=$y6})PJKVj^?1T=0KSG*~W0f#&D9T&XMj9#xTu;&<+iqAKiXP%V};(kB?&a zjn6~XZw*531JSGd@${shI&~^9VVzsTG+w9E3Uq!b4@9A!+-jU1lQ-?+G3u|Hx6!kX zG(ShBkLiz^$I-Kq6i)gQt4}p=Lwi=#rRI73(dV}s2dckD`55mT%d6&PwjdYkQu8OV z{HXpO*%M`vV_0dd#yY;jHPQSiO#8XirEoB69~2HnpPy>JCYC-&6Zl2}uH|{`Kkll- zK0e=8;qk#D`!>zb24T?cm1eKX7nFX;p|Ar1#K(aE=_5e<3-BX&bwCz|$cTi3t6XlW zSk)e%Jn5?1Q7Plr`kZpY*5jlc2vJ_80;&-}JgWnIzdl=(*UyLZ3Y-JAN%yzPy*Qx6 zQH{f>aOOeSD~fP{Q)$>GHn^Okv?h%67u=%65uz}s11g1Z>4PRnKS1YIzbG~A&#DOr zWB`66uB4^=;1LcmT7~kgbXAHXM?hHp0r>S|71CZ6_6Tcu6V6`ni#1gtvD&vq*j%b- zfjBthqMqUf~)o_%W>b1i?d5D1NldId%_hn17(pUDS)_R4aUXQ&WO?q?c=89jRQaAqVP< z*>Im~R`DnMp?0&WbjZHwJ0QZP(v9^aRQj=gjY?lzL6x7_XiMjZ`prrqRKC=HVCtPw zS?E&v^vNC@-BbBh`&DC9I{)$a_3Uvma;vW*{5}^lb>eS5*CmC~9r|~Uuz*7SvqbL@ zrJ~Nq$a)E$S+oa{cFyXnX})^@x0n5W>>psijr|VxJK67H|1|5B+W`7C$ z%h=CnznJ|}_RHA6g8d5io$S}J?`Quy_8ZvW$$k_2yV>8v{;llqW&ck0_pyH$`}^7d zDf_5zY8~abN-_HJX?02yL3j4>|{~i0C?7zi+g#Ev=-^2a~?4MviWucOL zCi@olv)RvQzl?o9`+L|wz1OkNsur z=d)kNehvFg?C)p4gZ&fiTh3SfirM$GznA?s_Iud3T%hQ+{^c?*W5165J?tM~zr4KC zfx{i==yp`+-x0(?J+b@2kP}$nC@&AyxQT#ol$TdKf*~W`BF_QUcfi*Z zU{GG}a#V5$6zPNlI9R8=94Ck25Fk9psasKx72FHh;W6K8LR zT;f9fzUU$$mMs(5ku1c8xN$1nhvZ$tWHO@RN)Y+aKJ?@DyXgqOw027m}Ad5DG&QPIu7n!NIX~m@H0Q_3LuFYAh$o zijsSbE+#8WEK3!!@FBBQQRVa34<K`Rf~g`NlYk3LKh>)3BT;6KY?& z0fkEG#pK#gaxv-0(P{bjk+YE+^v-%Oj>fIRVSxI;xB#83Y0-M2!*RG6&fzntzmW=j zqRKO5a#6ZrWsb_-PmU+yAJ^VP^5{B4vlo_9*awR(dYCU4Q&?6|^Uw1*aB6WZ)Zz$P zl!-TnTLS?{JxAmy`8ZINMhW$X$dba6hlAS4(puJ3UWKM=p%c|&<^^v!=ndFfKKsvx z_aTK+!;94Ux+{EiI3F&Yr)I@5#amn(++Lg+O1KaY4t1~C=MVG57VguzZYnXuX={p$ z+A0fAKMPh}b`q7~Vf4 zhZ{ufUjoj@8_qu+-||1Z@@47!*Q>7oIej#vKPBDyH)w!qNA#a*n3t|W@^3K3{w0`( z_fN+kxJ>`d-IO8qU#By;KgeD`~Ieg6kP-2bB=|Kz7X`}y4m?)k;N z_uc=%!9x!oe(2#}KJsYWk;fi?;>o9uwm<#Mv(G*M!iycpUV8bJU;X;kGkprSvbA_pSIn3656A&>Ek0n2DSPjM-*a03%`kY6T9br;Z_Y zb#Rb%EjqF|)3~a}<(voF0Oo|}&ATEPsJa3Neh2HlRr9L!duF~N4vbUhUhT`^^RLD- z=KCFtvrkv|`}zq;hptYJALTP%(HFDdH@q*OhKcd~i%((9K6e9EV*kd!DSOmBNne(0 zOKc_E%5EF+#%b#>-gn0IHy*XVe+e1Tl}oO`Jh)#A^oq(b4ynIlEk?oUXY0H3{7(IT z;A@CO?w`F(NhXoB0_TP$Cy3+)3E8KPNDw1J$s}j-K3ry=NzQA;VWvTyi8tXiO&n$# z)Vp{RPSeC;O*0-ea8ViqHl-$s)Y4HRbwP5)si!21Q{GAusiBc##G+(@x)is<9gum1 zh9E5do`}bs9_n0F!s+yk*p!+eQUl4^GTlXEMCvb+{qo-06~ z{U$F;5tA28>>1xVwk>16qMLV`5FfzpJF04BEb(5DoUOyt(a;vb-N)ghrX-6gi^hs6 zx17>B!9Tu2(^)Yol#cnH-+*o`O%~yz^i88oVpJu396~a|nJgxhjt~=YAkKtw8UC@; zQpGf=e;iqUTs^0CCw|jBnZ~M2X(&^wFt0_KrjHiWLuq2VGgVB7-c3inPG2CowwZAFRQjS( zB7H$}u}Ri_I_iG3m|U8M`iC9_CUz>l!3l=}=nW3LN(m(S6Dtz3N2QxY`U;gVs=L{% zgg77WR^%%O{wQvTx_++4y)YcnYG1a|wF%iOk7JR?4CK*_JdP35Z&4+mJT+O2HjNb{ z{7Dsw#R=JWf`=bGRQ--a{f>oBpq_7u>BQvB5n|MvI))Gwrvh;%Pfr$O-XGbiL!!J4 z^(E~Gba3*yqr{BRLt=*Wu$ZyvK{3PhfXFCTy!MUII+_Yy83kQ|&a8#5WF(6WwB-!c zea3>(ox1F2T!FfV`zhDixnvP%z3n)8 zEx0jH1K^T2;4Rd@(GIMg*rW5%TO-5+m~+BIPiV*-8SWg|UhQ+{RJ2u<;!vH;7Rb??xMj zJCo%$9lw7Dw?@m6WP|6QX-t9`vmiBltjzx?@?Vb z8Dbg^N6P3K(>b~$wJpUzvLcz~wKqz0DrhnXq&Yyc8H;*^-5a|gy)(_98hu{PybtR~ z;cn-$jGdSwCN4@76Bmr_F?Ujni_s?EFT`TFdvv*#UKUS2KTXVD6il3Ls!1FukJ;Fu zIu?ihnenWlXOWiU+((2s53XJFLq1KJsUj0?AroyO6Kx@L+=Nbg7Rq*Gus<@NA>n{A#{89}(i`aGjd3wEt%4#Tc|PJO|MBCf_o#b1<3wDabqd z$V&(ElnY!;7_JyJ9VjQ!W9%e45ncg0K|b6*&~!i_Do7TS|&QfL)Hn@#&H^V&w_b0e4%Z0x zGq_H;q{~fWHry(>&2Zm^Ylr(A+^JXKK3ouPFWi%GJ#dpYn#5wb3b-%B{TS|9xOd^k zU1<_a;jVZ9;HLXgXK**by#jZ|)sQXR0k}8e zCIw8w3g?Eq4eklJzrjrjqK@FMfZGnY5AIiRpTJEGL7(AngnJ0C2hJQei5xf|+)v>C z1UF-gNtD60!o3XlG2B^OQCDzZfqN9L8xBuLksuO9k{BV9#YmBYuWF@=G%*?{&ZDO! zG6ed0V!W6jCW=$gs4>D4Q^Zs;4POqMA!Z7TI8~e`PRE?lY^-BA6K{IX!WxIUShJ9Y z^VHA9cOmBETQ>{wJ&^P8<(mu8$6bsSQcJPM;Xxc=oY>w~IT(o#I>Kzr?r2KJgv#UGY6} zm-xQ;f%u`=FMcF`EPf(>Dt;z@F76fw#698{;$Cr|xL-UV4vItKL2+0-Bpw#O6px5U zMVmMx9utp?C&ZKDDRES^i>JjiLQkW4eNLBHzC7EiX5V~)T>0))eS0f+OHOX?rFN?| z*J@v}9uwEOxt9%txJ(k|$=N%6^2(80BEQQ@?^*GIsX&Y?6XJV~Sn3cQIAuj+$7G?G zzWJNy^H#ezh1G{0W1RAl%VPTqo66tGsAD{70@50+a=T09Vw1J}1;tziCI12{|4CyM z;2m--JCv33OJbQBB$@a~@oDI+tak_9cpDw#t*U}+f=Wuv2c?c@`cIWIo|xXg4Zv3R8SnLb!4B(aiprT&q#r*Wi3NwH3cC;?4NAvAia^$DaMD~@OY-_Rr z^P@T}MQV)9Reln+9bSy61`a?zkWLLi7Oy5o6*(z!U!5{U7^<2LWP?<*6yYLk6@72j z7bwAEJ6d$Ew3B3Pg&JhfXRD^vaM9p37mKkV-ViR5wldl@2jogCQTkZZlhCbqyS5I= za|OQU=yG_6L!(xi3`q%#I=J~&S?ybF8Ko{XBwK0tb-Np=#6)n?qJn7XT0_Id;yssB z*L7@V(2%*a*HvK~0G=l&p;Fd$SVRLgmzd_n>)J|>&k$nRlyYP@1RtePLn_70}e#Q}O}i`8#K ziUCwxPS&Ea_^sBBzQ$0xxz@4upDq7d7e2!3ADSzAe;$0mId|YJ^tFPz!NVE`Ljiot z9bMR=GOc>S!yxI`Q65NhhxbrJ1FqVovqsYlHBOT>R_9gN-f69+Pg$?2)?;Fpw98rKs`UlxbNdbk z%U6}Jq9OW<`jD&8<=qsj$sM9Eyuw<33Dt0(BN$RM6;gdlpc!&VNuE*-HA@nsGxYw4 zO&#qR4;_O?0tPcSG<{s3`=q4mVK6kA7WOcN(XZ1xH0OR@-;M2s@;;CIp^5uG^iNJbe6^I1?N}$^Sxy`FwfWGo*Cr$WQPTGTQG{t48O>hn57iqVaV6H}*7eJ0(Ka1V?s|h#X-0?McJB{QxIss|mEdI4vA$Pyamr=D5F!oYsuDl%5W zrFQDoSl16ii8)rPa!7Dsg1)sqG&@NRmPl~JBD=TB=fpT5m*;VjMuC%GF+_WG`JDQY zwRKW4XaV=1rd5U4;nBjb#)y22tKT#W$w0onkolwOOPRD{o4dXrJ=X@wH0f{6|9(mMXGOBQiHGeotNC_4MSBE`lehyDqbrYxt z%U8=Zf}FpB1J`-6+rf?9&jUtYRU(J1Gz4}8Xo}qGbOtbsn_C*F&vWPjmTE90A6A0Z zm@+j^i?WT-0y75nvl8X2sX&*8-Bp|Wl?vkEQgL{{qV=N~sC+S^5?3g<-;lB_zNYEz zk)gI_TW6J^oPx!G&A+SwY|4m2cHrY1UexLi)X67}EHk9oU%w>Bm}z3U_Pt>oI7psU zE~81yDl>0hO5 zliM2$#j~m38$;QANzA0LFek3^fWy1VRUUL-OZfe#{f=xsj1~Vz~X3`HsH%d2D)jkh0EQfc47F2?Aj#jL@6t}I}=++LA8 z$o#GvMiH;}<@r3}S}$#T%{5M~>fk~c24%HQm{ob!;)E9eT9 z58Z6blm#Zj;kQLtEcJ$+qW!aSMP%8N(s73`+`ch~E#bZqhc9Mh%pgtFaswXRP9X-& ziR=mnec=FRb^BTnSv}Ft+W;m^_w`iQMsX=Ov>c=1)n;*cnUl6xc1A+Jki%0RwM#== zq&~#uu__x*Jbz7n(2eneY6nA_zAz4r8D^$%vdbn~xezGlYTy5+hVE<0`ce8&D`&Y5Qo_!np^Vpxkeg^wV?4Q`F z(s_sd-?9G;`}eWGpM4vZ30EomPWHF3znlFZuzw%>?d-qB{s-(QaCtM?Kb!qr_Sdst z$-bBUYuLYu{X5zJDf=(6{}%h7us@+u<^OEuF>=&|s8T(H5>)7AJz7#6{oXv8XqUF?}^80J{53|3U{j=FWv0c$U!T#;+uV;S( z`;qGv-81Y5*q_G!!`oDN68jHdr*ISdOW1$^T6O;g_U~dp#Qs(6m$9GEem48MycZ|Z z8nkkpQW(ZFQMV|pV^0ikDR(<@j}AV;d4`1fEFYX(=<|zL=nicS6)&4GveBob!dNF|63I2*p=KGzmyk z6_Wo5)ABs@`9i$#D_4!9Vk_q^8M1Pt0zm~EDq19+glpc=Ttdn?|IsaE2dgyoo$*!s^+sIjigo|XGKcX%A%Sa6ab;H~n1(mNhC{P^tY;b=i&IZN3(Hz7IHK|nMS_h>w_)y%CzHwGy z!y?Sk`(1%hy)}f_=#^nCnvyo)1m0KqJRY2CgqL9#I|7wB@G5Rvh;t?v&WbG9ADkc+ zMYj}-lHGuT;!bo2xRs3G0Q5G2Mhx2tV#YtZE72N;Fz5Ak<;&DK$FX z$sP#M$$J}2BsiuP9ttgz&ok9N>~uubU38a7ct%U$`BfD5gxvK0vDCN0?R4eU;2hlF zj?h0#ebI1XO_ZHh%unFtKKXlPz=hvA^0$1|DKbYuX$`shkxmiwXB1nAqjaYvm*$o zb_MD&m4oBSP&HL9*}`zPZU)hF?XZ+kJ-?TH>(PO(Ep>xKQ04@`#5@YIdvPM3&r8SP zDN`DR6u)Ppat{>rGpf-%ho9<6zK^I2iHGRkdUdXzs%-4_8L`e=1HJLMQ1iSB5D7!K zu{Ve$IB4*tiLp*b9~oJ(%)#%*Y!+rzMfr#lkIUs3=KiG?-Vvp)K&>0=QK3vyxv=wS zM5!mJs!-fOzfpK;UPL1yWJ#eNgk-hX5@(}^K{98d&7cr{GA6|L6AN9AEv|m|-yN|5 z_3R><3wMm4u1|3Mabls*f%a92gVXAz4u{bukQcWzj~XM4iTE+KL~CBL5Us>xjlGC| zKPcO0F)52!E;V$mOBL{&iG_JZw6Ktt@*s`R6W4@8{%}aPzUbZOh*#|S3A(+em7Z|0 zhH|H-pn^CVLRkSX-Xyvx)ej69!a?hpNA+pY_cX%9gAECqzIaE;foA)_X9IR@9KQMdM$1dpuk`j( zZ<+Sq{HG5Qo8mtk z-j}{FJ{kYM^nG#P`2SNe$pzawqirFPe<#7m_D}2*!?_%A$#A3KM#7DTOJSex5vJxs zVQFwWjQCPq^38D6)-vGe9&J6v7EbBt{;6paZVNhh8wS2#XeHbIj|4Z;G zZ4ckCg>QlL!%c(3<3#44%0c;QfTKL`VE+dARF+0K3f~Dw`S~i`S#bZw_&e|^e|N!A zdOw6Cx`S|3rWfES{8cy#&xBA&K3Zn@`QN-U2E7zx%b?ePGvWWt=!2ifrt&-Zfm;8W z<@vYeYEU(yCWvcLHL=Lx|Lgz!|4T7U2}xvD#a%Ga6*tu1a4Of&4_;S4zVm(M@A!7- zXY?!g`UdIm2mO)n{pNcX72NOdjxW@$T=wrDCcTyE9{~M}-+k-5Q^cSCS9@mz=2Ug& z@z6z^TGYq`H3%!Wd^k})Cctb7Fhi~|K)|s^0gW)!jLv9i2M7*ezyUIXHkGe{gQjZf zz4^RJZa#GVNbLv_1`N**8Vg;sC>Q~4T+mHd_i0cl`+sv!DEQH?yW6L`&*OQXcYg1C za_-4_&wcN?xtW>wcnjY7U)}#2v3$g>xS`y7_(z91)m?{we0b~^+aJsw&7Vfzx;4tk zgvT$=qt>r-#0^UQ-!r>6v#(*cn%PJjQZ9X%J($`3n2po|?_#oBbiNW zJ(U_}(|wIfEwkChrK)E(-9M=`F#B4?RLx;F-2@zRfx zV;sq-XRKi~FxE2ijP;Br#s)?+;~Yi{qm|LdxQwx#vC{u~W^ZKdWE2>aj48$p;~~Zz zW1g|ds2-{KO>;~|%WRHO$EasCF!GEhMl++8(az{(^e`qF(~LRBJY#{e$XH^;*IiB; zqnc5}sAc3Bb&PsO1EY!2%4lb-^zUT0n^9m)GG-Waj77%Yqm^;>Vbn6}87+*({z^ON z4u$2(#*fOpSM2{PrKc|L=kv$?tzIX8{+v&F-p^LF~z z7r$S{?sefHD~s~y55B;r&+Hc-a=}Yqs#1HBZ^}0_@XZYT_h;ab?0dJ1dnm3|>=J!# zhVpOBK7S!QEA1VA<@(RQ^uNQkthBR!53zo~E|F>#`EXRK%6eE?|L&fojI)^$iFj1K z&YU|(-+Rz!J05ZlpQ)W-2Rx_GXY|3JgRn_}h9Z26$4{kXF5xSx>QnW3oqxK|dELC{ z%JcfLPx@AL=i{F5RdlXv=Kw|Ty=(u#%{8QpANIU9aQDF<@?3Gp^Y#%^Z0|1?^4SGv zhrf5t=354wT*ohc{LSrCuefB>^@$z)>0LtohaG*lbUgGcepl^pgRh^PIoPrLAirc^ ze&Ywu{WD&AOuDh_;h)T{ny~2)_I&%4t|Oa|p8myWC)Y%7ohrV+;&{)$Uthhxac6l=kjyM-L?0@PB?$K}EX6+un9R8{f^c?6>%4f!NE;K-H%$1GRB_{Q&z*(-;xpD}QTyf^fbkq^GGur+bX%i|w8X&hJAHD%R% zzwO-h&%ZP7K701HruA1n&=WmjtZtb9?#`#*cb z@X(AWQmV6WPI}vAQ4f5kaQuLy zbZ7dG!-0o_-si_2vpsuN=(boyg${@X)Q`-tS|d zP3Rf$yF-+I`hefVLt+E!wO}=b&IR(ctL8Di8Qg;h$9A;o27BS5v344Avw_3#eE2l# zd9VPl7T?*VIXz;AM)6IVm1jT3yF=^pUt2%OUyhzIb}kxCma z7-xDH`0Y_jy&AMZ8ZaKB2%%%Uz+16_TLJGi2iyc9zue%JdZZ>dVgA8KnZ6OcdpLT$=4 zD7qGW5<+8s8vM}MOK!FM3kJ`eVusEmO)jOluC0di+&s6BWPLg(cW`08Y|pN?}4 zZs8G2(B0rGH{!boyjM49pMv(NcYv)^5gX8n{{pc>e;d5H9f|iSuS*Jm|j>d=TP+-VXj8LhnVnh=0ZOE^zQo%6sX- zCm<=b_ketZQcrA#xEhdC5j+Ml<9$znoo1D)g!aTux2aU!(B0rqXXA4KbQk!+9AzF( zfiKThsrupAH2BHw*!K_m8F1SjxZY=BY~b6FE*yITyvL%{JHTfkWq-l`cPeA!z`pZv zoui*YUSp>g`bcOc|@9vn7b>4zAFP@K!)!bYrDXx|DRfY5m_fFl+t$2Nlh zbQk6wZF;~{kn*_$Ct8(0Yr#ec)vKCtt|2+JPlCtq!FmP#6xgp>X+zu!A>TW}AuY;y zhJlydhcy$|lp5R(840}`RR0)$Q9bxVD?T?tPk|d2DP!IUUbk2o4-Ym&(r9A`U62fP zH@Fqj16=?`NEW&u9KA%jX7%9R5b~uN{1|cwZLD_0IYc!RYtB;qdGYq2@)rSx@ z>WkoQ%ak$90Z%cVIB2=jC$R%U*W-Hdd8X@DU_1~V`pJTt2XJjb*Mi$1<+%dicOXVl z&#lBByANVcpf`Z-cKmHHbmIKg$`~5K5o<7R)QO%Mgw|E!v)h#V z=fK9t5Hn~)9N(!@Nze`8T1X1I6Wjx#dF}?kvt7~qfV-c>bxrl)DnZfP!6OpZ)0=R8 zfvJDQxr0vJ@*H9Vx*J^jJoapdz6@-68Se|-1|EaZb$tSywG%OkdMjA93%QS>>%dvB zV7-9e0G@yh!dgV!yc=^3-3|8Mqs*Hg+ykMx>IVDo#rlIb9Jmrf_sw?DxDRVG>Ur=} z2#w(kIPO(t&TGIq5IQf!Ef87*X|D^~&qBa>h_q(~=|tLVf^;J7>p(h@_H-bfNc%F7 zPNcmNNGH->0HhQ5GoAAKQ?7ohCsK}m(utIhopd7QVkezQ`PE4$QtoupiIl6HbRy*< zC!LsKI+1dJQ$6uC(^cP;|Hm_cbrYk9I4^dBa^hkQ`I7qY^v3mq*Q|Nu7w&cOQDoH` z9gAAAX(^IsE?HbxHD7xu)w43hY=BCyqi(BfdR<^WN87E(U zSuJ+X#E$l@D>-zqxUH@VJGV}3!xl@6n%YKTgVFn!v@N-J*(fB!oY>U1X!MFPRoH!Y z@xptt;qL7hz8kvYxLRz&+qR7Uz>D=Zj^hgSEsw4HzP!k4F&{|63kH?*v1Y2{k!XI)iO+swr)mLM}{6}Nn$k_WJ^>fWZ- zww5Zc`g}jN)nENCwbd7mskZvOb2z-Vx-xGtzIZymSd+z?i}O}O(q6TX^XYtgpTTGL zS$tMs#+UOId?laSul4Kv2EWN~@!R|kzsv9OOa7EUv>{!{5Hf`< zAzR21a)mr0DU=FjLb*^OR0^pjt)!C-l1Z{i4#_2XBuPq187U_fq>`i#Ys0#*A#4g; z!nUv@>XBy0&s!jTp(Ln9t*8?XqDi!f zHqjxvM2{$mDKR7F#DZ87)n2Vv=QVguUW?b}b$DG~k5}@hycur}zqc=W)jln*4TH~w zE5qh<_*_1ZPx7U{)-}Qf^Z`C#4p;;BfHU9@2!UiE9modqfg+M+Yl2)*ALN7PpfzX@ zIuQXvFd0lElJdbKQfX^KTu2|{L*|e*WDhw*?vM~lhSH&IC?6^!(Y8k7B)!B-X2~kq zC8y+;1Su({rL2^fib%t)33Fk6m=Bx7*04S747u_=q`T zjo2g3h&v)gl96;I8_7qCNa3xCa#4MhkD8;_s6Fb8x}!og8BIsC(R{Rs1m7B&ll3w$ zn`NtPmz}a(7UZOyma}qRE+YN6CdS3|F+OIFS!4E?GvnY&;(?B6YYX!6ozwK4DH+6ZV8N;Z6vNWFno&Ci015LZ!iH zMO;GI>_OlJy}%1*!7A7Vr{ER@At|JVtdJLqf=bkgoTwLh(JWd;yXX|%q97*4w3rq1 zViC#9HD1oE_wrt|*Xp%UliO6*$ zb_GOl67icx1ZNS$c|>s$ajZ(H;ei%D=-`C`ewg5i1-{tejRXF;;E@MDN$@HKzcTPF z2j2?t4sotm-b*E@;h`2j>fogTewyH^1-{zgtponL;IRijOYk}czccVW2j2_uz6Af( zm;o*3K!;f{U>;1E2@B@JhS_jnJ}`$o_8kDoa$$Zvm?5b=M;Xjg4)avNOqDQKYRr}v zR|^`u@tGNG*O$F_`hTzzC$SQzu@+~s8t1Vd7qKF%WHq8qi+Ix^;tYs66Qa(7xU(Vh z9Ed#^qR)f)lMsO^#9#(dm_r;E5Q(L7ENT&rI>e&^5otn9S`d{s#H9m~=|XIJ5ShIUW#jRhVAFiXgNNGUdZu} v&&;@^7I9Bi`PF_6?yFq+&dTH7YR28wiu|1%MPo_}9=XT?$~```6sp4VWwef$uvENDb6fYw!yFs zkW6$E|F%01rz&8idVB(+2P>!S`Q}XMFaRJ%nHyZ9KKzNnWa5-h} zHqw8Cq0?xXmq~!czaFFE#SDX?X1~EuoP?d_+d0ccM^TUEE8zus#k#`>xWa6@L!p4W zJ)bfbMU;?H3CXrZK}y(KapePpc^F&-EQ0m(QS!l#InnFc)4yqjGA^q6&^h~x5 zO5(mAEpjUCU~iKtFxOup_bZ__d4+Sr*-=?F z&x}5X&dYkus;oDILzRjqg?XZ5ntiMd3Exd6Oca6s9lt1je9q_~@OuSbjMx97zt184 z|IpuA!_U^=rO24-?<7j{!~RM+CNxAEo}?PIZ@6e5%{-<(Buf8{M1&eK`7Qc81X57FMIcq$`85Al$ko7O<3)kJipuqFXi!h_H|nOvBb z8uZKL;&ed6e0O?ur?gof1UR$*i_`nxp6vg5=*(BsFmmKKgt-2k{8x9~4i~r<5}%M;h+S`AW)}<@`z-E{kNCk3j{d))P9fupPSN=$nJO zE!Ou30Ez_*s(ASVzFrkJi>N)x=#uOC45$)Xp69%gcoh3wVaJI}-KB&Ufy;nR6)P31 z!E-+KhXQ$SC3@7Nm=EfER!vBoPeqMmJ$2}gIGUjES^XuksA7eo1b6SdoPS-@udT4t z)Lzx^XH*bdo~IC>y0uw%ypC)dABJ^v|&iVwsfDSgPC8ay9s*Bu@L{%|;V`q|Jjlp&{fD<9vjuvLvi4x0am z7h0*jL{Aik@tmbgo0Y7Z!x=RvOhGH+W12A~d%coyH zh3*BdzzwA3^u>lto15~?mm34-OK4hWQGe9n*Ho$!?RTpER_XCX;Y5#YsI)nnmY(;Y zr}vG)78E_ztTqGcBq*&@(j5|IPNOt2 zKYkK$|Y%knVU4 z+7tHZF}wr*JjKI0&^UBCpZe|89si943Im2@>V>-FV;;}d9ScOxUrfV1VLav`+aN~q zB2T!05dJ*3pMllS2S|4uB1G8nk7sCt(Z&4~SGN~(?m_F>{uBdBpVkBfpJMzOkRKG6 zeQ&kV5FD;VqdAp*Q7l^1*Ud__Jtr2-N@W;G?`H@7Y@bi<&ym(|1$ik2d#fcMYx0>R z3dsJ^UxQktZPRjpVKf-4N8WTJX4%KSf-wB`i?=TEvF2tVPi-_BOwz+QLbB?OW&|$n zjT!@48!VYVy{*Bh=+WM&DIirc094IX2~MO&O}$Y|z%D=*4zZN6HeWPmmFf>dl@Jkg zU=$WgCNVEHYV+ys!5*L5ol#Z~e$DHigrORh>1TW6<}$V)ThOi}x;~rL)w(Ad3_f#I z@2*3j0iR#t^DI8E%=t z1h<$fTq%or=J~3ZQ_nN+zrH6Q%APo)B8_lPmEy%QC zMx9uV-Tu&g4H{Nv4?+7e#{l*K*dKfkb3G~c)%Us%@^nh;4}&~=qf&5~lmnVjqd6d_ zocKg3C!1oHSg+WO;b4=_t={Uz33P##!!Y77z(tzk@v zabVqnH#9e=&8M%R4a<*KVQlSpy1tR75@PIv%pO!g6P$~=%ps`F&qj&jWT=wEgYVPy z#vc=NYXyhpUBL7rV-8IZpWg8zhAC!IKEs%{;V3FvR?wWB+@;ca#<(3r?&0&8Bb_&t zQv%ITw^AER%x@JYuAC6_2;mmGp09fe!-g( z?M?6}DPY4a(&S~KVKiRg&|)9nM%J$IoLueiT##?$Tie#ZfbE8?BVGYp4_VFhg+0p} zo}C*XqNr01kcz~9&i7gcx(3wnHF>%60{KRnwqB>79oANYyJPh29e<=<_HLBvXFZ6& z#^Z~r4%X#!wMY;D7Hv>izpvo5Km3r*r|LH8;YWyspkN&4QhSfj)mnYSHnKA+t|mpA z)v1^}6<6nq;gsfEw7uw%0wz2zZbBe@qf>Exu);^UgVeA3NZ@iMs+*PY1ZYRt!w&oz z(2%tdP4Tgvx}%lHfuC#B9oqyliz7dx616QbsFJV?Ey=AwB~nOfnn$A`FOhGR7hyor z?R+hM8iGY%*Z4?Z7tBK3f<MPip>JJQ~Fh`6>9hwSU2Ss;!1?nEvL+C@%2F2S3(t%CR&R*c#-P!H$>gC*73NZMhY%>ELk zokVF_2S#yp(LQY`4E4HW(w__lh>a?yFFsmpA7(Jb_G2p4lV*%qyJi@Pa|&(`Jdf5@F1ng`lfY&YH{ zlTJR*$9mX@es-MCZfIU3Ixdw=?0gu5L{qm9`NOkywcofBLZx+Sly^Ij$@c4=5aT>~ z&iZ|UF@Dy<_7m}bgRLe37E}LA4+X61DRc0$RH3y<3j%JRx`&-0%`z|nIU|XjImu*bEw7lhVtGUq_HwIq* zjQn3M6j$(7MUB|}&_4S1`HJ@XrtS}D3Y*uDeDmvi16M22&vOtiLHMFXcrwCc1UR#< zH@Folv{7%Szo+@%@A=>F_}^3f?@9jm1pnLLoSN&f_4|v^x3GN{mKYY)ukHjt3|kut zDP~_wv5y;H>Q7q|+)&mvHnB-ef| z2Lnsx+T(ZJ6S&ixb+Gn$gU%sLYsS617M zo{;r?1mhWi5pQ;bw8zV}hYeDXB-frWNacn#Sx9I>LL=~vw6}dC6&nmDnf`3DG4>cdM15MsJ^h(ItFm!f34Qx2!X}I z4A|-njB2%he}~av<(NK%E<}jEq-B|Z5E zPJrV{^(=<2NpRh<0Z`g3Eifx|68}xJSFwZIU$HBY!Qpx&<20Sn`%$m`rsrw5J@I>L z$;1)pC&UYELVl2Pvvfqc7Ue(sJFKp6hRk zTsQMv_TP$J^kvYl60nC5(SFP`O?!Y4DE2P#-JvV4Q-KkRTKe*HKm=?G+oMT58#;9< zZ@T^2$7mT?8<2vUZRh(e%2*FLT55lU@Eq|z<{XHiKv+lLV>Gai9w}-wcLXOPr4;}r zJn@se@a5_VWNUQZse~qeaW?>D{N)>5iqBwtPl5elOqPO!c#9%i$^ImV=NYvvs2by4 zw6Cb$6P{&^{ild0_>)@tA29P7*uenI8up(ftnHY=XV*rPwT=K6Ux2D{-azvkwm0KT z8-_x#fz3huS}4HUUwW~!!;WV~l2w$15nZXJ%QhitU=kAk6d~9ldP2_*RFA?-x)q!5=|;==-xv@l8}1 zyBJ5)!p=m-_yK<7ECMk>kT{_f9Aw{ux-yg~j6AL#igfkIL`b6*mXQ$u6um`JTWyN# z>lHBL)A(bxKqeq_J1SYy%=sA?PiTWZNyc5*j_NTOBv_g_5u5bAM8S&d(-pBnQ@C?0 z$jA`81RdI$2#?0jLVO=a`CVj&#U!fiZ-gHn~8Z#br~4D zR_i|#oZQne^ALjdhot%sX-=43gKY@w^?8c)C@8v+%Wc@E2;0Q5%Q+S&Z;)5~?4Q(% zd_Ptt;@DKaM6=d_Ww=hSxS!_dQc7Kt5j4e*66~i6gLUvcUPKq+M^iAAp+iWs-^I(% z7D&Xe8npUd{ei81c9c2~cJwuULr_Z8EWVxb-+jh{ffieNw=&kP!NMekdFusTe&uz7`b%J#Z#LGa)Y?o$-i5lO!<5jc;LL-^>Fu|)Z z!EUZMES48>J0I5(a1Jq6`w)w+)c_&gpp7X&Yt%N{;PRWHU!rGEqMD+81c13sr9zXk zD28t-2(cJ2kcH1uKbyICEt-o~@Fq~@RVY7E zc^<~miHZ+nEwP#ZiIj=zcMnv}hb(D(?R)qjFXmf3v@ z)Q2``5}mFhNd+@Du+xfJXP#3Q5U%v_ACU?X8%5OLA)>B1m1B_VNE1LX+ZY%FbT&Wu z@v--P=IxN`BdgY~3)HSPR8-&H9n1&Qyn-w;fpb9IGZE5?!40sn4oeukL80dW%>1Wv zWUeOhf_7@Pmy-^Dm76U%mE&P$Sa6=ad;s!&=J)*UT_4-US2O7Q85F7_wcZk&iESC0 z&P%A!$L@2=Y_;Mm_$C%Yob6G}?ab3bJzKFF0qRwCRj=3L40vFShVE1Bg(1ZpnZ-QK z7RA-G!bu^pxSs0KNS`yS#M7J;%tA1mg4r-^=uwYr$BH)m30^`;NRUPPz_j=n2yf_# z9J&f-a^(0gW0`rotas|IY^3X?^zhwiDeta747J|JZYlJ!WyL;LjquSy>yuf}U2KHJ z*fe#A+}G)u8u4UBAwUfW5dIs``+o+ZhZuY2R=#u_5bd=dUj&gVaGsE{Z+V;#dB#?f z&32t9#(5hQVYeJsOj--Hf~_Q7Y5o(sj%5vAZGY+kDj(bXW!x4Zc);TT7VXm=kAfJm zh{tIENxLbXNX!C+wP{-rCtWxpFAeZ~zM0TIqMqnpx#k^^8p#fd2yMsAo{L0Kjj4JEDkEl(CR|WrmDWSL9Y(vP7s)XY_V_E>Ff^o< zyJuk87Z! zw-~d#kyPxRXY9>jhU|oPBgU8?g9^(+0|r518#kdjIIAxy3FIi@ha(h&H5bPXD~=`O zuC{6m@Gye6W0<76Ymn2=WE)KXQk{$l%!byW-5>JVh*gQ$MiE;jVh{5et3eM0;64G^M1ZjM>%Zd5)rRVR0{A<2Kq0}uHI-XE z84fbhI-JH+)(JiO(BK&4S+azrZGs}>5Y35<82 zU9QrvpmsqQ30qGfpg^h_re0})Ll{!LP=Z=T2^XL&T8P^re9)>AmaFCg`vJ4xw$Nx$ zPw0UuWS1MJ{S7rUyB|QX5t!88Mx09cHHkocVF|fe8%vGiHo2fJtmJ5Wzose@9&DV? z@Tt%pjZadECvU<|+OJ*Di=*`xyc(80ZsF6e>Z7a#3|zwOok$4-pXL!Y14yPlFj1^} z56a?(y^uMcq5bP52;~slqdT4^xG>44beDlPBqZjrwd^lQ7OLHZvQ+qRwaODfHip*P zHvFYf<81t?4AtI_2)^zzA$i!k1)LqZ_#~>&RauZ`D^0NW$z(pgDq(u`1aK=RO$`1! z934tdAC3-~)dihc38@j}P#B{xZRusH=~|1tg85;jNf=Cw^?Z!2_T3cDOmD@$Jrs61 ztrKSGkoEZ+F@61d;A%dUTd5aX@3*P(EM)c?q@eNq2I(=F=Rjt}e13xY)E(da8WobE zG-MX+GeaAS60rIbJQVvGvtL1VfJCyjRVYKXPe+_fqA@4BNPC{{nDQIa-Z6#HP*3BC zS9&7KPx|vg5z~$Vz}*N^@?jO^(^WWpDR(B6j@n~17)t1N*gjzGg&oU@VR>gEg6x1N zd~X}c&=Yyb+PLW9E&2yh(OAgkXcT(5Q~OI1vTP(4`z*~|$hsEwdP38$_$5ZbYCy4A zY1Ji_t+LI4L%E^4Cv;nO&27as8|31=hZ^K!U`jGG0iEY*xXrJa_t2t+nqZxQg5q!T zqjKGGEe5U9Q}SXSiCt3NEc8ubb$K8`tWs6HNcn5A=|Z|DE8Z)fjQyj5?G*U0QU4@TVS4^O`i#mX*y?Mj6WgV&)+!FF~3 ze7SdsF)$Z@ZNW_4am^E)f?P_)9-Mc$9`Kb7l_*oy%~E(5jc7%mvh0(E zih1Iz_tDbfbwHqrh!*BZZ_l<#+q4YS7o+)TnQf~LU(K!7YV_Mih$?!$E_raw(*U81 z4xPYuAoLjTzltCJJRn4|5`U;j+8j~)O~Ij5q}t|=XRH0@V5W%K&g@SUL^t#&J~@#Z zcz?(RQmKW)gn1(qj-|&FS~Wp*Id(o;A}ISe5O|6r{_xXz5i}U0rW0Z&MCk_$%UA_O z&V;y$<)5abi+wFz`o}7x;cYkaDQps15iV20Dp7WPqWWOAA&^Oft~+kWP>^{+ZC;op zj;Ijvd$0>;`)MC zOMR&zOUG7>5dE8^xQCI{9mw~+UGIkgz zL$Z1T~feV$2fAJwFV@CyL4RL$lVm}Eg?}Phj_u<3^EdF-B7%N&( zDXo?*DD*Xw>QG+RSIDPMdjU}_*&o61_6sJgOF}|U9}G^)P>_Cv#%cR#nW)poA#8{_ zXlPY1dQx}z^20gkKXSRri1Qfd4GKGk)$RlXD}*+qsCVQVls7JU{?qACVJRuD=HR_b zxD1|SE1(f5%nJtL1)q5xay^SE7gKm1VZvq3WV{%0=5;F3ZYRJwN)f_EUVKNBD;?>l zB2qL^iz0cV*th>&M!jEz_1_1r!1@P@LLgb(%!L#%#yaAb)z_U{}t`Zlu!xo&MFo=8_=Ccg9pWT|P2c9Ght%J~d85Ic)7zo79 zLrlym2x&RU8U$WW1ilnqcf+_ww9Q$v8|+7S74|o{5%Kb7kUJfU1a^^TPLz5k+7XTPg~~`G=^cvGl+T_&)3DeMT2wFvBDfgO^Yp6jCb07bc1H@^$+3SF*tr7xrxbP@$37~sUV(iqg?*7@?-AIm z1-2@MeT-x039Kxz*QKzlIQ9~ObqVZ@6!xbaJ4#?@3hd|<*3YrMA>QAM1h!vE_V-eb z?ILWE^)P|Mj`JxIpCc#7ZWDQnMBX=3c{4foX@O1D`%DV^4Gwg1ZYHpoiM%x_>?a&s zF0dC1>`znJHjbS&s9sMB`!|lw6WHk@@3|@LiyS*dU?&NzErngjv04Kkjo||O`PIqM zsN&ci0&5o7ohj_i9Q!AM{q{LNWPeFvJskU(!1f93#uWBKj;#{d;{v-Ph0W#I>jd_w zz%EE(O&mKzU_TbvOHoplECf}*xVGB&dPO1|0BGyMgoT&J17yK-w4NkD6mJb z0yboQolc#FN=-iMccb8hZcnVd5>fInYU4?OUp#;Zucsrf0%{71r!tUW6h*;zxNo}? zN4XE403ci%z*ii01~csd@GDCm3F0V{m=toSpCuyS^&+4Df0GZktECMKaKs6wSzE%7 z6Bekeb1lJZnCzVHwEk)=)TfoQf=g;tJyhR$76^o6ahpwH^NYzzkNNWTeH-Hwxy^TD zuOSC#-neR`;7%h-hakL}g$C?buUCv7WUmWyLr+<1}Iqy2KP!2*BLz(|?7 zZDnYFUzgv!7owkk>Rw+(^BguR2e%n=m||1Rb8Wq{Sqfz1ik(^Q?opofo7?@VzKiwrrgexFqT zFuJeF#~`(YW}_1uBQ&BRoE|qc^3YtIt2lml9k#I1tfmd1dh0td#072I#vf5isBqTZ zB!`vEwgupufl+AS$?Q*3vZ30Eag+>NKbxDwxJB(HQ*bn#OF}%-GCS88&w%^z*V039 z-$~jD)nnu;w2EYhLIa&BAy!4F!kU$urEXV{@>sDPmfw)KeTtcu>ze{|Wc5U45a;Je z>wy8aTxgQF*g*Vqkn|l6L`t55kW}naDmIXz*@hz7R1M0kAr61G^fFS(wAWBQYA0u+ zGi1&5Gd)OZ&;=jQdkJO1&kv@BM){pWL}Ydl&VTZox*1_<%a__R7&Yin>yRud2chKz zv$gL=7z}TWrdCX(Bgikqv$H%65{M1z@5-^-$Aq2&bSPIF3*trY*uP9wz?yT_X+=E^G3_RkhjsWRPYZbgcEfOqLRc5prVTa4Hlehd zhfLGoHX?fvs@-(Od>Y<+n-KLhT)FKIe6!}hu5s-(hr4T{s~WOlY`De$ zT&kms6@7;iiK-eB@4K}$!Dyu(7THgSGFVS8J-VE!eqg?lfUB0OiDtf0<6e*2+`mR6v``>PNDt$2}dNPA}bX2<%JX#K0MnG9dk#{!b(iw-j&FAXJ zB_;L5?Q1Sn8nX_(P*s|F;04ME-WWXzuKmNj%bK1}%b2;QKxzCL{PO9asL^!xT)oI8 zn|3rvo`!3USVf*40_~!;SZUb3}W_dgVS4NynCXe)58NoD(0p z=7g0tFN^sqdbAxlOCalmwG8%*Y;6hHtyrAnVbAH6u5D2xL&4)+Ju63Rvj{l_ZNbu9 z2W}E8#tN!=lUsm6R)5Od2wY%B(IIuMVY>8qvll9p`P2GdS$ekBOI8u=#s&-*QLYY_HbA@$nXtfxCtL!naP?Do z(Bo0w0_pK6F8V43r+mZ%Scfk>>I%@z2bvkwfdyOtHd+TWp~+kSMZnx*hE>g*Q&U_R zxY5JBIEQOnogw#iwahk7m(~8;*NktRR3D!&_i53SR@M~NCYd`8*PAfE9&-c%A!@rwhSVot@ zGFpwp_y^N0qd%}^sj_Yl6#CN_AP4yJNbPno+fcstdyE!)H^xhX9aB@(9dOe7FfgttqOQqvW0v-l ziLaoO)5o(S#4(=mRYst|?R%wXF&C}e>IuTu7Go`g`&wHv4Dn0o%%BVH@UTboNWSqf z=*Be3XqOwMWAV3O=fb8++u^y~ZQGB26z$ahjysD=?RIM0l3N!;b3Pl*b9;!)eq!OC zKMSzQa)R&jv6$Wg2QTda9lH_9WBUn?)|O`{NFG%E(hyKJH4d{=g>y#o{c)h6%jRCsX{y&uj} z>u}hxM+vVqYTrOu;^y1kJh_$n2ZBdgY1A&U#g_U*t7r8Q%~ToS`Oz%1Pdu(3sjLe# zgjKa$dxZ+B=zyD#SXH~Vt*yH5uV_vjtnb$D%!3JoN+?cHU15T+oMCklr-}0*1d#D1 zMO*4IjH5N%l_IS2vl14+aal-&_51S$VdZF9S)8!^5G~ld@nvKkk0+@rhf`JI09CnhWI-4-=o8m zr$>4^s`h`k#^ri+v14D3Fkzq!dL1#{%oLO8eEkVUua zooMA)AFB~UM$QJ)kK6DNjNZHrD-m_Nx^Af?=qe+R&cwiBidkMuH;Z!oL-aGXnjlj64QAp+Joi zjjh5+iv@;*^c;e@wLFj&TJPrWLb%ZTZ~FNh&Z4Eav$U8KN5TDf1SB*|+MJ~g#iTE;fW0+?yO4}S$_>V zSNauQbsx}u$r?G)iVYZku(~6A65BF2R!4-W6oW*e$YFNW??GnmJ z@<9Au95C%b9qP2_a7qT>BYrn1<%@ZP5`IY`SB%3$e}f%BxZV9@Ip;4K zThZ_Vx4SX8nF6;vqjoKHw5=3F#{Ae~oY`R3ekp?(keb8nMIKaDf#|r`A zv7cpiQ9q_a7j4GXs9nMLkm+7(1e=Q^P&{s>x{Sdgx}%!X^E7*cM@18Gh)|s7LY_QJ zUXzythEFR1JyJ{OL*+NX*LWPhgrgq}V+lvUXLh4<^C5qD<~K9oX`o*I3C!c%h7!MZ zYd(6QWxq$Aro-5vq!oZZk}iDl(yiDO4B8tQ(~a2WdFJ3q92y9B02L-2U+D5r;zP9j z13Zbn5Z!{^JBVfU+e8oOEgDsL7AMv`ol6TJFC6iNCoV#}!t3&A;DUJyPSC=RtqY7$ zb0bPPy9QqM;p`o}LM4=?NvJb9M!OOy{>>jZ5@JA;hc)uq(`-EXc5LM zUwCBRKaJQP9BoDPXNaQn6V=ixIK>!)qqcrW-FD-TaF)CjA)=?|ow)!1aTv14J}_h1 zWebeZn|x{{ho10K`^T&}M)n(o%@KMd16 z8xVLiJ`Iwmb1(9vlIotqEQYT!Yb~HOv{$N|m;n480JPYymcD%hS}fIBfT-1}*-~8v z!b*7h-+__e83idFszn<-dvN3>vjf_+sc3&Y=@8_;0=l3ggfBp4Xy#TdYajbScig`M ztStP{XQ*Z@3U~(vkZ;Rw?Z3e!DffBEO>r6J;ldyKfBF4zjNYvk5+GdmCUR}1YQx#G z%m*6&Ccc6eWpBSy0H$$3n~H=~(l=-}5pRaY{+WJtSl)CIApXKiWs&w zdKIVi8&tI72;W294X@`FVK%fp5<0uxVE(wVfr<9+OA5yaeq6Y#_ABgUIRHjR1~08_;w%;1^JIQ`tr44+$jft+R>W zVBUse8N7mJ5XTlC!MQ02cwo;3v5iklr>4?{iZv4I*Ja)brgA9lP2BB%AzgI75cD zdOt-ezLnY=u2X^{>Qp}eSa($LiO_@ zfzkSoz)bC8aQVbVm3#UjaJ#`8o&z^P^Zo;0F`OC_w|GW?euJ<0gNUye@rNkBOlyNd zB;iEP-K3XcT@AQn`zx&1)*B2ZKd}Tx^4BV`prYMSB%9#Vw?ZQ^Hx;e6QZf^1Pxs-< z#T9WUDjO;)GvSMSyHh{$9^2i-CHnEqfRW$H?nO)CaT3gw!`GU%UF}#HP-SdzmpBe> zd87Ph&QOfVsjQVnvh>17)zkg#FE3H&_;J7b2MPmi!xj1UuObNXY-uYGJ(@t2F#FHz zzz_G5rIuMALD<~p+Pn4wrD6x)bJlM{O2{*9HiO=TYno1GzZHq%`{@|y0yNhb8iFR# zP4;V`s8D5g_G_w)b;$aGxRrmQiP9q%faa)~k~#$;e~32~8Kn9Vh(nTE8scq>nTa^D zHlgx~8%c#}Hy%Jt--6AP9X?+z9eyXK1=}37N?nVZvEy4$k$DI8W78!*!OtGt3AG5G zyH%f|mD3KQ2#n0>;D}c14umNK`U8n9?odyCAH>bk*HYk#0K*4qjC$(3AP$HibIe^dwU4? zK7N*9M7S`GO#B&ky}&Fo4~_59vvAH8w$8YSm}%mwfK~ezmSPak6(j?O9^rZ6x5Z;n z4B?8-Nm0~r-nX>z9DcGU^`6uWLG))yDf$6gskq-wQSy@9xazM ziD#%b>}R84Sn;qP*KCVacL>A3H6N3ueFwP*5-54sfoR(RSJ-;dzK-xs7EHq$2^ZFe z8>JkDzn>}PxSjNRCgO#7PZQ7FxZQ~3%^PJN;&=FXwuG$R^Pt1cwuP*R5Wv+PS|>`# zdYHhlep4sdyCi)U^&o~^1=dbUF2X^J0V2MAw#lDN~_kw~(^Gd6ct zL!EKs<2=D(Fb`*~PE@{jG@P$D)Qu$$L@72sffTKAxc1r$3*n{TrsJBoQE#K(+0Ow) z^lm#gGTiUB1AyM4`6EGh@d8{N2%d`}dH(`R_zC$ecW6%{t+oV?(_%-DTZ=H!xVnn9 zz*X|(gE#aV=t6LO>=j%#gj}&4kCD>(sCf9t4H7*%4PzoK@K8oS)IPc2np9~E z9Nzlx5G;}ee&T~p@}}!Z0FPp}aMqDa<`WuT?XF?qLl1)6zee-qDZ$7}>;J%0Eyz39 zT^z_eH&Eg(USSNtAN&C$II79xYF#;zECg_n%~c>b7WB*E>?><*7N5D*SFk6D+ucnj zckv}bFs<3+ww^|5H8xuk$>v&WV=rQ-gv1oH1e|Kj4&4tolgRgP3dZPKh(~dFNm#F- zKn?=aDS$IM>jVUFU4%C^^q?(n4pqag{=sZ%OAFtquuH|Lx{{d>z-v>ge;I-p`LvQ+ zG^pFvAY1ls8Mt+hKRm%r@(`B6TVQPlA6|wnGk3s8LN2~I;O2e*G4-1^6OSvhGS7=E z^Rgh%>M`)`_nKQ}n`c}uCGeULAkF>V$svgN)Tph@+~+I!GWaJ9va0JQ1}TSM;wOQ z_qDbpqCz0LID!c24Za5ne;_!jQ;%RCnn>Hp@~ z+^O!Bkd*8$Hw-KD@RAu`e!Pr&h6OuaEiLk+@8r?bq1}mr0kDHi{eNrC$i|q&|45M` zA|g7KG^}uKDfuVOAEx$L7ih4oC{jk6?Co$~Ao)O>@e@>8yPa^Pw&0(5KaG4!absjb zUakk}a(t~(C)|$WwnUnZ1BvU<9+COqosBtRj4aaMK8j>m4%ht}_7ck#a^nq%!zl1n zK@*G(6WTzfhwzUGHMS$g1XHSW{D>5v63T`pMB&D-D2~Fs=46{ zN7xQ8ZlnnVs=vrl;{@CMDsX;L#21>a;nR&z7mkG*P%Mom9g@@_3~-yQ?~6~@f~Z_r zTv=NpA^RXbDHi~BN3fj6ViEZv2e@bOJXpyR`ZGHS!+Bt~zu?2!(w6Lz@VbF}#MqUV zN;T?)W<4T2D+OqB`oJLZ-ew@P5}mi={n-Gv!6uKirQHL|`k*JpZg%%=of96+;G`$Uf&gVZo z(4*r>vbGC@LAtn^OG>rc;Ar>YC~f+w#9=vKZX_NA8`4W8x|huBp&uB?p_2p@hf7JT zG=8o)4@S`>D1r-5Z9xcHwU{bwz%{rFepdT9NU~NOlE6nO5?BqAcz~ojS2S=pB#UIb zZ&Qm6!9@yVqUG&@(P{~qqd&oWs(?}n+VlLqCf3bcpGxs&T8c*}(Bv{IRC_TE{v;2p z$$no=mCZsz5qF|3!E?~Ko4AJ=_O2uei5vJZlm|Y3;A6!_VbxkW1}jr-b&>}6H?XfWS1IwS*fU578wuSfhJ6sPEw$@C9wS8d z6vg01mk}#GMKZ~FHx1J4JE;4L?RnVM1pJ*FhMsvl62!S zHqdy%MwECvNxP4W^Ign73W8li*T_xj8pE{t9RFklt&10kOR48W8{epe8Nn3hcm+hP zoy)^rBEbo=k|*_r@3zq3CY<%KGSlr{CyBsk(@b2Uu(9MCaj|&iUi&q415#fm(?0QM z5=n5Y1t*WzGFmdOE+J=rN2!u;#-$m-2I^qe%i&yGbm$!@>fpS=46ZT8tq}kGtx823 zznBxUjzJ>L^ae`9`;-V{B7%9?ykK?_Q$A>+ulYU>a<#f zVZKS)L7dz!Xn&n|{NM^V2B8>YE(T%c4BA>6U-={dcRpS=R{B1NI~9ziJK)U)SF9a) zc0hXo7mB29%W@@@i6@Md@Z3Tkg30e^i}(Rp(%17t^~9*PBPq{SXXcrc%2OorfPGEo zP1>;nK7H2TLl(q}Tv;G(yAL%L>_}@D_YWJ~sM!1eq`qRr^l6{pLXDuR?b5atxf1G+ zZ6DiDmib=+BD-0H>sP-_-e|o3(3cmOi4WNOM8=*uPv^xk&bFR=vg&(64HZZmH zwb?`s6$gVP)!&4rk6tXqqxHDVOTC8?>Nq3pJUaYVi zy47u>%F(dAbaT@W+oRQ^MnY1Z4<`nG6^zvwb#&rkV)@c$OL1&F8d$To-$2`+w+ZVJiB?frhwO@u#ujIV2-^@>E^F1^fK~3Z9TgDLG0( z+cja2p@-TQjb#Kbi5oZK#bJ7|c;HoQJYX#+-m=Ea)p933-T3tI_m>|MSuOCFPyD_T z@>9{gSLnSI7=m|a|(%><~Y3q`D@!I;|9{|r@~@JZ`GhUIu@{)x)a{O=p)!#*6E|84v${QW94 z|0IBTTr@QQ>(KmD3FJ4S`FLYAG`}~A>q{W|Y2B*Fa>1kEZ34wpk=4Tzn51+Qt`i*T zk?DRyyDslPT#2{KE2TiRQaTWkr$(`@;+2?mAm;j*^d=ninqq%Id)3l=M-eH7pFsq7 z8}M@#RJ0F;vNq|aebK|VthP$&p6EaoUrAMM_=%N!n<`}~fXb>4B6a|Y?rly$4s^;> z_sUb-gBMC~?EsuU%|0{U2KGzdD1`kSN|>2U-HzRmKE~-sbL{6B5t3n!%B;y-AMrGdl%;DUFs?s| z$D~(gYqwCADM%FWfX&6&VlE_cWt^vYc)%vTP0J~6I-l zTy<;Kn$Rh76Trb18BCBK$|ulpztR2$?#$Y_gKk|HT!2m(A*bVaSVqRJz0F3rf6&Gh z&**J71+f)l2QE*zQ7%lmQTpL(3KLAuGiX!oc4|Mr-AQwUmsnG-hHb;sdvqevBN%Hs zwbEUpI}n#})AWDp&exMMLZbZ#@PuOkBHI5^4;ChRFz?JBT=P4cB5@%i*%Pk+#>&C< zIjup3y?F?h6@Iw@C&|r?26R{E_cJPGToI`BOzmQ(O7GMtobz$V;SCH%4YcDDQisZuXIbRQruf2b#zdN;LwHj*dN?cEoh3(O z4*c|iC#&6))#1f2CV1=HSDi1j5wpXVp=?JqHp#<)YJ)dFk~PwgbD|a;aksDjkdjw= zvtZkR4qfRD-3)IN_=4U*1Q%YO7aee*&ck-ksm}W&y6O@t`wUw-K4pDAe#1rU!$3$| zy!56Z{Peti_$e&!XV{`MkmfTywK=>pr`oVw5O{5^0xEshm-~1pmK3(^&F1+Boz1VI$0G zjkq$c5eYv-s%`easg3%u{gY&E@1VBrFe^l*E!ejsXxqNvH%dX2++_4NKBv4LMTg2j zQy2^WXJ62Xd>7I1jG^HfK}c(5Xlz`gftrAjR!((b9nlSkr!hOpaZ3Ik%LzR=p{$^b zj||#sPL9k)J`7(ho)0MnRv}9+jyZt4g^wD3U13MSN?Z3os74EL~SU-z3#{L*PT&myniItnRoW zl~Af{;#kM?z+w;39WN7(#MGAw!SG`YpHi{HbZZAbEbVm&@1o%k;Uz5V0!|~-w zyzb}uSEcYnINqJae@gg})c`2jE}W=qd9pR*lZm#8MEl{Vir)`H1Su!dn;f`JfpeC* zfY2+b=kk3a_9aM$qS)c=4Lr-kNWgcK*nZ#u4w1(zj@&Agl9}}g2X4miGEpVWem|ke z>|KU9J=Fsn!sXPo%kZ=-zRo8uUnp}s1!+meq^ddP@ceHvUb6lHl4SIfnh+c!ZTrFz zccaYAM0GQCN8eo3f;8vhUMwu+2u(tQ<2YKU_Kd_kz=;H8IS^^^UM!hrRoTG&h@h#9Xo2F2*OQD514PgH4&Jz6kE< zUK?9nUZmrl883s#eFI%WJKsZ3|Kq1dcesnmIa&w*-WTkV;YJThwxCIGb2Wz-8rPUu zmxl#cu|9f%7N;jh5392D{jLTh4l^$rJboXJM4=bvt4AQ^cFvOT08W6t^G}q@nP++E>m@4nwBWm>fzz8qLYPt7XN^*OwO2r%bB+d4MaDJJ#06}sK~Cy{L8+&aK~O3^OuipQy$ zAYTUZWgy@19XUxyA#BfRl`UoCsp7YexRGZbWCeJ(Yd>p7VdAz5Eo2;Ibf8skfEqcW zwvyP2*sDZW{5+zNjxJuJC^aA9O$a0C)Lww`5W?rugy>d2Sa-iA2OgC0OFv2mph0WU zO=}R=ok45xij3qM#BvG32hPh*l(B9P`+U%PT3nS_M7WGfYY1zJmQnxJXdlrVUq+vx zg}B$0oc)LJ`s~WH(@S#cT>S57=I1bF@D)Tl0qEel6ur#+V~Sp+G|O(TzWP+7Qm z29C8$EBxjEA2lRw#VL9yr;C@I9NgmMN?Qm!e_~3B9Nbvsp2QepG1HtA0c=DR z7X$dbUj%s*^ZrATJ-@}E0xS7clxJ1Bp?tJycX&fWm z!_&dJ&k&ylDdR$y-G+z#s?Sx(Biu1#D(y^BdhQOd-YLu47b?usB)#pi+0|_|Z$J};jE%AlG3*fB z$27UlX%*zA9*xIsx8p^M*t<9nFcQNu|T`%@H)$Hnf)U)~9AEZmu>RLOIiXgOsr#yM>{CMeCq63teX7~G==!lOqcza z0&?p29Fh-6gMh>Y1de0&bpmogK#Bng2*|qv;s)d{0eMY86hO)ac$}{B@u{ zpG|uvQL6TY2;^#yihxs7MIc{$Km-c4`*2-5+AHbaDSDV#6DP6|&D;d~0`h%m`;nni@6-x;+2=Xu}V6h0=x3Wd8x zcpin{6XB&4ZWG}u3co4Bt0?@c2-i^fMG!;Z6!WMYxN?qeQry!Zs1sDE!@Xyze~}?h)aB z3jafd4dBpPmk8S^yi#;tTnfJ~!sJ(`y(GfifAeV(E+qIy5iX{1od~-ryh?-> z3NIJoc@!=e;e`}lAj0JoRz!Fyg)bLja_rR#MR*m3^F+9Y!nq>cK;di=-bi7C2tP^T zZ#MC9*hFDXgkPfYM* z>EY&DsR7f!63(99?tydC)$!Hh%ne6wZaQ*%AM27!eh@iExEq4SI9Mxb@&4F=do{** z7GlLM-VzAE@HOyuhWzTk2tnvfXL1o}XHnREurj#^! z7ml#d4hA&;#Pl)i2PZ)hWW)FNOIzej*p7$d`SO0=J~?_gC*u90HJ#Szc7-D}Q0P|{Iww-*t(UNXv{d5?NXKN$4Y|r8$Z<`)@N}l?j zxyi$D%ClX@vmXUb9{g5q#fP()|96@vT$L3#5k{iLQ@Jp zSdE`v^L~T|i`MP$o;4Xoi*|MTTpz5Rh*hMOu@-+p6SVhV;8zl(-6rkYBV>Fi>!LbL zcnQhg1p6S17FgfLx2u2csKiiWq{V11fB@k-A^rSfjBP<#gw_sTG{T^248I6c*7H;u zo~OWdoT=|&IcYSaxbet4{k;{Acm0h{8o~WX3Zk$r%6+iWz_Xrp?$@Aa%2`o)>OT4< zx{v|ZRSS;(`~{x`(X036@Pj6AxEjAHy#unnukT=)t7(k`OhJhrG0h2EHZZ?c3;7*d z+&U`+g76o#to{fif~Rgi!gv~!Gtic3%n7TfpvzYgW&U~%GkZ`{Nv@F5aGKe@=`$;z zb!L~#ERr^}L^d?DcrS*}?B|%-KVxQb?SqiRswIr{lmG)6p9|R91nbhE~kP|9Tpl*{8AbVA{;O3~ll-$HG+8 zk}c{=4B#nH37SJ~ah+WA0Fj@x?QU%nmNS~j`q35Y2qzm{&z;IChnh<5+9PMvqVoNsavCKcx{_A;0I?2K z4)>EzPrn$%-)Rr9gPHyc!%M@CXdC!&#P)>HlNzT>#=N zuDsKynSs=t2I$uB}NV2iP{>qt!Qn#h*h*!JG^ zb7tnune)udGc!+53ckY~PPDb)$W_c(9iutf8@8)u;FZ|0lY==Syj{E!?@Xf~^ik&( z@OXAeyM5x{|1ItI@-hFM z{}f9X_TV{z!I&HGB2{M_Q{mxlSUS;C{B1g*y`ZJ|ZuF&ZDQa8yMor7c8}aR51hv}m zZQPC5*;@aIo@MLbFmH|-#wn2vk4C4DZ+?*Gb-N!OjaNPR5=3LJW$V;J^CP0*A%O+d zc%ln@tM{?sD6C5AdDD7*2K=T^N11O-MeoqO;~fxSMF!3HHQ}eV4?mXZA8#PCywk!z zcHV|aRyjJ{mxH$v$l!H2ogkdkGX|Wkb3Xv{C7q$a^~`GgZ1J`etxca#4URjb)1LUM zwRu8u;t^1&94zU)`uA-sezW(>(Co&~^3C5|h9nz5vtKi|@g1ji$r1B)SpTf{Ja-pj zinMs{LHUi6?qvXm^m|UCbSyHRbVE8liPpqeO0UydoY7;RmSlu?%7wSx?_+|tZN&@A zQnpT%hj}Q*NUQrd2oBrB?W?oYTe&c9MuiT2dtB=*bdh7 zlYZRHI~q_DDFO426Y&$wLci|rRq>aln7?ruZVno$@w2(1(;Gj_4o##uO|eY-Nn|vf zI&8m@hL+tWU?FdiI(4t0RNl#embSrDgGE zPqM0d%JttH-! z3_^%1cUtH}betc>c;O9v=sWUtYzJ7pvGwXi9II+ee9yk~?QoJUv2N4ijo0DF+&UlU z-hAV=#Ao}L`+D$-{00|5LEG6KeejyztHiL;ykj};HQ-AsXHURxQ?R3e#T&nk)h;a? zAC(j{LGdVZ*@$Ig+rSM+-!(m1W6>J?uvTeWU{33b6fC$(z;dh?TI{dTva1&$qZe?9YX%Wn=RVnDKVsg$BGtUV7(44W z-iz6Wt{SWuZP~cL#0{>W ziY0z@xx!n=g54n$r@N41;Ki1u#-8}(Cw6RW?AsQexOn5C@VLbr9}SN|nV;&OEs5I0 zCrF|dDUxW+;)|2QNsFh2?uXgMFydb8LwG@sZ*{GMnS1dX4;Haut-;l(p+E}e5-&jl{iDtM$H8Ws@5ODCt!+^X&IqJAfDeMnRyvkQ*jwf+snK~ZqiXD?%ad%a z8?VD618mQFFTpnkO1a8Alpmn#{=l-@33%~4%Um0Xk%R>*#zn4*XgA>cA+FL)b`Q#`T1R|BkY&*jDhG0=~J~AZYX4=+#-HQY$%yx0%f??K z!eOk-LW&Pk{q$?5?`{zodp)&`AGZFviSY!A&GWP`NA8obY z2QK!fTI>gVCgHT$-$98Uo!)-R;ZdToZ(ED~Fg1>y@8Pw6tNpNf|GGz8ix0M5{RGsx z=WLv`s@k!v-kv$F&!B0`#gcL!MwY$D9Bb|m!$9B#vi9epG&=MKX{PTE%*CR;ZGU_ZJiVL&%XjD%AiZxwKZ%7J< z?Vr%A#>4i{m4|hVpD(XzDZaI>KArYUCg(L@nb4EioR5X1SpG8)dZZ4%!eUPI&K_h1 z8!FAV!;tSOM07Ym(UfCrt{&BW2`oOU<2UA=Pk`zXxJD37$9x&i!v^Qmt>%ZiP7Iuk zxBN*sso+HHdV7dg{Y8%cjAnVwJFW%jzLL0rdaiXlz2IpNpNzQSVvh8|cOkX5i%y8# zCF6wVc2|O)l9)?mr!v`#n(S)DdgmHY9iT?voS)cp5>wp|DwTuvOm-f~p3F~7#@to+ z4Jk;i!8*BQiNeTt*3R}U(iTlJ7B#(!@R?~dyCMuloos{NU)3?R=comQ45wJ zH3GMUUx4i%2iv`pYJ#RstI6J4mp*513gVab*KEe0Ghat$ z{b6avZA+ioIuYDRcR)hVq3*9yJk0E$jCTIa&a2-KPlcX^C&@*wNa+J6TPn$(3Qv+` z*QA8gY>R7>!lP`9PYwOliqBQIt$PKZU$V8nk3|R-u!XaW+QN|2@5qdwf*0o3q!cA$ zodD`_G#o7XZ(+$>6Yv~@A(xZ62ZM=rOft3Lfa(`vzipN7uYTRy zir%ua+wH9{z-;4*0~`DdTW$L*Ep`kGFhW4AZBNU;brjyP3AsKPwb@TYvxR_@ljY%f^m^Rt3ViDld$H-*=9@Xn-+fZU!WT4|+~f%xXS)eR?~x(PNDo_xG)>FXNR%%euc{kNY?Q{P|4ZxcCIaxBKx2>6k3Q?jZtWzyPntkgdvhQL`>`=|X zw)07D1~1wZ+hzCV#b`6ICq7Tj0Pir?sb*j|HUk$*{d_}3>&DyTTY_o;*2LFk189fF z$2Wiox0M@F1@_TwO*7`EKB~Nm<aNYxsS1Zf$KPf3um_^kT~g>_GQdXdCjum-sPNU1S#R^+;<^`ylbfVi=aUkgYTifgm z>a#9=i!{3{coNxdyxpO9Tx9RjBMl~^n~SA~=wpxpJI` z^Z9L)=mbS*{{?MH=O8g~!gFQ}B{%nTl$;b7BCx-IFp_C&c72$XV{J|-PJ9XFxh4f7 z?LHHR4x+MNpMby1&c5oho^)&DlEvY%)+ZBkaI0wPE5Y~Z&uGNL^JltUOtYQwlC|-j zL`?WRW@|1@v^6_3ldSSZ!xZXDp5j(rNz6D?SF)X+tF#V$qZJ3vY&-<^IpGv${UNcw zSH1jG79Jfp^bFA9D@eCBUy=xAKtB%W<#(Thx9zbFFGX}fO61JDvD2mh%_)Q3Oc?Cu zU$Lf4_G>foVm}4bXM7m&r%iodg)<^G_t1nFI$fgsd-#JMX7f(?OV9f>6U!m5mfLgQ zC^-1}D4dycBD!5oUHAfUZ+T&B(jUx^6y>Bey=e+G&2i-Tl~>gHw&?;#LKY zUXmLdl4sD0Q~ILt9r%TV{;<#)L$%3~1}rzmj+3|GsXR12(}#$+A!6$xtQ>zT8W2fF zF|c@2E#PaSGlJ=0AK72$a_M8JEZAU9pZ%zQm5v|Gj7$QPCJWXwMVWPfOO~`gymaP7 zDkaX^z#F8`3l8?7lyh=Fm8C4&e2hx@#R?QNR~B<6mKRx*O?%&xBc6@y4a2jqLn=Q+afe zETbiEOmffc_CMj^)4b{ExnGPOFSKa5byV$Z5H}4@cIIGygB}*G$D|xEo9M*XsPQtm z^&@(+(dvIMW|U|{lO^)^|AZB4u|zh?+{n?uZCH7R+;kTb5iOd;M;j)egt0)u!B0n# z0zl$e5I*+lqRo+V`}NNBTsjZ4+@A2Zwet&Wn{9UAGSk*c7{q_lxz`j5E_K!QD?es)V@zB^(1_x%Qh;d(Y)hy z+>ZG0f{!){Ix+9q4vAyo?c(jZXoOh0jFlkR51C$%czNcVk?pYu3tNlQv7IA46_j+2 z@s2m}D94Ec*v?|#@wR!#Q-FPwzmDL-)~{M@I1jbmyuYIczie>m{$u(n85Z0 z7Ti+@2v7+;J+LiLMZDO&gopm3LdbdU;ljixvE#sG{^osTSFlRj#u0D?@^0u479p8; zyh>p>1a1b7ID-i2#V%1swrT>pjeVXd4DFh+(Lx?9@x@we+A``<6Ko4##OC=d8Z*gt zKH%3k`BcaOB_%o0oTnD(X&+;BjT9H@O~jaTFD2OUUmE zw7y}T`-jA%w#A;=mF63MgfTiDIt%0sVKp@bWpA^aaGIqj9hG(nuUtuqEK0UWNTo<= zaV2Il|3k<#J}^;fGT-n5e)eHYfq6g5kM&hP`2!P_tb|>q2C=2;gDwxI6^1M6NX!rCPYp(l3?36B`NcXX{xzTV#Xv`h$eOP zOMDPwbP?7SzUCv`Nk;_RBumu z-{hV07Z)AzA)P#I8rk_cR34`CWAl!0;8)XEqs%)!)CztMW5|}{9Qm1t7 zLyLVL=OUhFy*_DnVc+A+Qp0J@Q>=YYKxMEc8vmO|)6ean_D#gW*v}WV?WDL^sbWKY zDmh^}k*slK1`0$qTOup9pzS*{9q6V7=Z?YnkOIAhiQq(9r>!{A3EKpX>e!|xG> zJjv{$gg5*R&s|vs=4maqT?KYj@ppnr=ZHa(tzldV$2 z=9-o%)}|*ghe-2?*eMEEgHJjW-2UlTR9GC(^3N7_6*_%X*uO(-hAM0?!VHDI^TSwS z&!)n5B3zcQ7Aj?xDl4}Sv=ukv>mRYIJ1f3mW6{^7V--*$9GeP9XX_E%{uzA-D1hV7 z?Trg@oSwaLZU?PxgYmcu8#N9-*!?A5g1~I7gSOznw1qDo!J3o~T~DeO-^2_*8s6aPtz}Z0!X! z-}oFT z4}l}^ZTaMmzP_}>JuBq`)g_Tm+CY!ROUEMX(UqfZCGR|oymv$n;}MQe7mos)9-NbP zA?=b0rAF=wgTAR6X9ZMeqEiyL`9t=p3aC@17H#7DBrnhg7jzB3(~j=Lq{xC;K77ar zIyI*vA95Y7d6_vXv6Qrf|V16cYC6;RT{Fc(m<)xf7_sN%Gzs1}mIQ}Fh zaI*YrX3eha@!8DO@R=|&ILU;*n)#kOA|x?93wxJCW)+T&lJcaJ4`B8VO>b{H+IMId zjvz@0ovXf|nHs(XUmeAE0$XZIxClS7kHD6i5k3z;vHQZ7ni-yl27puBo(eyQV@76i zBB9%L{OJgmXREx2;L$xz1f#BX?Dzt6M}he%?1xmT%RU?S#(C(24k4U^K--XMFNw9u zf>&9UN%SWL2Dp>HC)xe*>O9mEW*X_t8T-Q5(VL+Dep|KaLo43-*jocBG}xlyRXavl z7=lV!h=D zGzxp%+Ohz0oJ|Y*`fyy5oRPCHeVoFcC30xXXq<;nu?kv~W-ojSla?5$&A>qID2?xq zGUdgR(w>M&t5Psu&^GBD^>zefw&^q~L^hs8E-160kXa-CI3)m!l4qpamcB;pUX_`$ zw@e#prV10^)urlt!MyWXGXG6iq=@hmI}Q!P@dzlH9kT1nz!?c|WzdM4T+0Mo>p^4! z+x9T@PQ(&WoK~V4SzFhp@XNTJFNJgMt*MF^9)<@|11N$V>r!-@WJxd7$jrUX_P;5f|g2QMJJ;1Ea)CX`faPTXPM9%x! zyLjl+cik}`gR>4l(Q0^fltVUHnh^PsHrn?``}rnE z<|(qsccU?TaOyz){H5tRl=IWEuMclLF2xMEabMpN8sfEoY|B8-@tPN5E-<sE1riP#-i5!K%w6k-F>XafAU!(c*nHI15jv z9pTC52a?f&l5fene~L$>`2oB+$L52`9PH7Pw~^q*^4xPAA(&ay7;zUmB| zlW)atMGVNk)81B!gKD2dcOy%#yziUrf`DW+NNGYr^>&I{urv}l&z8Hz6gs!{R=Ux1 zo??JiwBP{-57DfL5Z}Jo+?s1V-XgQdXP-m0ba8z`^FO#Cj@E!~fo?GF9icvd^ko8==vuA zG*$LeUN!H>Kmfv}&k{>}(QgiiXE+wzrZo08_)3qux1(rKf7jBP^Rd~Pj(>~IaGbp! z`?;iDk@GlTMdxwOg<95p4!c5)QO)C|;noG6~1(fJzgR#bnAasM)Kphgh-8YVCv{R^+Np^tNn$=h+@01^(TF8wq- z^W(fqe1a*G4sy9B2%G04g5oYcgfFJ&d4_y}i`oLWeALGJd3l z@IC3mjL3Qq&e^NZ`~-<04nBK>Pj1tfvC-b>Tb-~`sQin%paX4IbhwY1w%`k12k~+f z6tE}wCN?PozOCuR=}qcmsdSD=19b+TdI&BQ@k@c6zKHj?A*5a(lI`1Hintn~>I4@AH zF^YT(3Naut`N;y6*UJ$e%Z1$eqXNp~1Jb}VVjGOv!uDKzF8Mp{14`7I{y0i3Z^JTY zv8>|d)oNP!)b?D=hqU9XoAPi)3+-FdQfayx=U&lgVV?f>@WuEE!eh}2s*6z@c%)Ch z7=t&=3_Tq=hzZw$a)6Ok8SHk)F;LnrE3+g%07i;qoEsO=it3Z}WuF>z(poH=;l}Rs z;%=iZa}@cjm>!K~Ty`B)z)|e`e-??+_4KurQ6c`YQ~90jx3hl_`**N^J^NR%U&DSG z`{%Pik9`aKlh{vT|EnD;y?5Dvjs3^jKfr$3c17o8Kg9kw*uR7Q2iSj{{iE!E#C{T& za{~KW>@Q)zg#8-!1MFYJ{`KtN#{NC*|BC&$*#C(AR9Yj7Yc~5!*e_$>%YHNacd);Y z{b$*Khy4jGk7?}BV}AwvtJ%Ml{ma-7v5zlJ$o%YKUjqDD!tyyo%ZdFzV_gwlPqTjq z`%BnQVgKcAitZ=u*RVgE{bSdt@YmSCmi;r?fA(q>K8gKjuTpq7`>WVbVE+$Ss_^^S z-@*PB?ANki&VC;IvM|O!8T1}fhz#w|P}oR9zdKG+_jhM0|J`ckmxTtW&%IgQUv!x1 zhoCd2leqAAWrWeE5F6ljtuTpQIjWpGjEuu1xCp``90n+0-{e*KdzIdP#`TOT4qeTR zeF}=*jDNy-ALDQK!)qC9{(r;NB3&I!|4~2u_kI{76M5++He>9TP6X$nT^Nse^s{FoJt%7>E^c^n_pXY$hNU)c|z z#JHU4sb5N$#!U(e9skcPADup)|MK#4e0pEwFvvcy&^fS3adYL|tampL2 zKCO&1882s?!}x5*C5)#s_A|CKZf0D}cn{;1j1MqAmvJZK6B+k1zKF5tQu$lNIFs=t z#yN~nWt_*jfN?qFEXIDuxs00`uVK8K@e0QK7~2@PGtOt+$@l`s5yndxA7fm|IO9!K zo^u#m7@x;Dhw)Oz1&kLnu4G)qxSsJs#?6em`lDVA|JuXhPR8wwU5q;!U(Ptfcr;`2 zmdd|wf0>N6zUMIJ<{|PJ*K+)F#umo4j4xwc&v+B#U5qy~-pAO(xP$Qo#=5=MG4A4U zZ4b4*JDtO|z0>wU{85!pw|{NlFtaSLOb$Pl@ou({S&X&)()J>Y>9zgOV|)hFmowJw z-OpIJZ>`_-I+-qQ&vbj=&Gh5}jWxR!Pgz;9!;%y}# zj0xqH!5BjFxK|HoH0%O)0M*Z>M8|=pTqU@p_#F^cgRzJYNG|AYJIu?)HtL?B4 z0(Qs@R6D%YE{_&4iLK7zZLm!~a*fZvaC<}0v#?)QGB~h4RrJ>4vI5xQ|g6=D% zs%ZVMpa=&2_qsw`eSystPTy8pp&CQFQV1INFOt_+Q5CMKaRn-*nnORSQbN9Jp9h(s z`jX3289LSmJo8+xttZgu&%fm->tr| z$5~NDtp{1+y0R#J>)*;^;clu#wL0nS+w|SEKXmY zY=_Vvi&1|FOWV*-pXol=sT6Egz_;1uwfNm!{+Rw+9E0n-g;mIcqQ%;eA>I(}fehoI z?Lp@o1hMwus&`d~L!|kZ8egE!0b41}s4SDTy^sW|jM|B%zfz%OZdj3!yT*n;%8*HM>2`&vE@|rA zL5ss^d|9>@-CkJlQBQI0A}S0W-oFU2)2dx4^AG*ERM)yaP7-;wv{))XWY5X!!q-U~ z)yr@{O0Sy)ie_wImS70hrjBwZpI?JL|LFN<)Uw!fNM{SpEKVQ_$J!}lnH1%Suu=C3 z8x40<{PF4*vx63jA)g*0vVAf7cuukVvK?D=J4UrYMVxpbDEUN%!%yufj%O$65rSv3 zM?J_a!G>VSMPmvrJ;_o&X;pf@>gq5(Q4k*XpyjI88*q3@iE#x(q<54E`Ugaj>DT%I9%cOLek%Tw7co z(g5^I!ra-B4NlrkQbK8>Ez)jQ)He8iIs=>!eELkz1Vu7LL2*kD06SR7uFA7P#GT?I2 z{R>>7^;8R*uGEMNz3z}3J;y6t`2qZ@c6drvH^;6jRS4p=JD8g5a4!2^JVvj>q?~&De{52E2!(wSLb>&1Ca+q((( zkiHES3K8R(sIZDaxlov@$QZsZ=n8P!igY!`FEUg3Qy7G9xt#+7it>vc{%ERkazQ?Xj?N@} zJzj5oSB2}g-o=>O7+raPRpEO6VGm-m$c zzbmZAZv~9?d`d0jFPQ%h#(j);FBwa*@)?9* zgl40lpSEsv}1~nP~p!M)`-4Czq&4ow<;+ zkj#|@r41v8RLAjLsUEBG6tjRXASDxsOF{FG)#u>+YZ2dpG>77&C9L_y>W}!5j7feL z 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 BmgfKf literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-x64-node-4/deasync.node b/node_modules/deasync/bin/win32-x64-node-4/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..c95b42bf7b1c95458075a0a743df46448f5f6db5 GIT binary patch literal 120832 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-x64-node-5/deasync.node b/node_modules/deasync/bin/win32-x64-node-5/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..f2b310b655982fdd5e53879f12e8602cc5c1d635 GIT binary patch literal 120320 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-x64-node-6/deasync.node b/node_modules/deasync/bin/win32-x64-node-6/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..da0ed004feee748e09dc3387b4bd509bdc5431c9 GIT binary patch literal 117248 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 X0Cln@(nk#cU+N{u#6SPuRSEoWsGVt2 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-x64-node-7/deasync.node b/node_modules/deasync/bin/win32-x64-node-7/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..e14ea565ada720fb893e6a1b74157134285f5605 GIT binary patch literal 89600 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 literal 0 HcmV?d00001 diff --git a/node_modules/deasync/bin/win32-x64-node-8/deasync.node b/node_modules/deasync/bin/win32-x64-node-8/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..6f4c454273f9010e4571f35455598493b31fafbd GIT binary patch literal 90112 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 mL|I@!l#Ph9iIZK6urd)=CC2LKbAI=0.1.7 <0.2.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/deasync-promise" + ] + ], + "_from": "deasync@>=0.1.7 <0.2.0", + "_id": "deasync@0.1.10", + "_inCache": true, + "_location": "/deasync", + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/deasync-0.1.10.tgz_1496718199973_0.8247249452397227" + }, + "_npmUser": { + "name": "abbr", + "email": "wenfred@gmail.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "deasync@^0.1.7", + "scope": null, + "escapedName": "deasync", + "name": "deasync", + "rawSpec": "^0.1.7", + "spec": ">=0.1.7 <0.2.0", + "type": "range" + }, + "_requiredBy": [ + "/deasync-promise" + ], + "_resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.10.tgz", + "_shasum": "4e4a6836fbe0477bd5f908308bd2a96557d5d7fe", + "_shrinkwrap": null, + "_spec": "deasync@^0.1.7", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/deasync-promise", + "author": { + "name": "Vladimir Kurchatkin", + "email": "vladimir.kurchatkin@gmail.com" + }, + "bugs": { + "url": "https://github.com/abbr/deasync/issues" + }, + "contributors": [ + { + "name": "Fred Wen", + "email": "wenfred@gmail.com", + "url": "https://github.com/abbr" + } + ], + "dependencies": { + "bindings": "~1.2.1", + "nan": "^2.0.7" + }, + "description": "Turns async function into sync via JavaScript wrapper of Node event loop", + "devDependencies": {}, + "directories": {}, + "dist": { + "shasum": "4e4a6836fbe0477bd5f908308bd2a96557d5d7fe", + "tarball": "https://registry.npmjs.org/deasync/-/deasync-0.1.10.tgz" + }, + "engines": { + "node": ">=0.11.0" + }, + "gitHead": "f8b8656d313db590ed570d1509a860222f050669", + "homepage": "https://github.com/abbr/deasync", + "keywords": [ + "async", + "sync", + "sleep", + "async wrapper" + ], + "license": "MIT", + "main": "index.js", + "maintainers": [ + { + "name": "abbr", + "email": "wenfred@gmail.com" + } + ], + "name": "deasync", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/abbr/deasync.git" + }, + "scripts": { + "install": "node ./build.js" + }, + "version": "0.1.10" +} diff --git a/node_modules/deasync/quick-test.js b/node_modules/deasync/quick-test.js new file mode 100644 index 0000000..11e6c92 --- /dev/null +++ b/node_modules/deasync/quick-test.js @@ -0,0 +1,7 @@ +var ret, deasync = require('./index.js'); +setTimeout(function () { + ret = 'pass'; +}, 100); + +while(ret === undefined) deasync.sleep(10); +process.stdout.write(ret); diff --git a/node_modules/deasync/src/deasync.cc b/node_modules/deasync/src/deasync.cc new file mode 100644 index 0000000..ccb37c6 --- /dev/null +++ b/node_modules/deasync/src/deasync.cc @@ -0,0 +1,17 @@ +#include +#include +#include + +using namespace v8; + +NAN_METHOD(Run) { + Nan::HandleScope scope; + uv_run(uv_default_loop(), UV_RUN_ONCE); + info.GetReturnValue().Set(Nan::Undefined()); +} + +static NAN_MODULE_INIT(init) { + Nan::Set(target, Nan::New("run").ToLocalChecked(), Nan::GetFunction(Nan::New(Run)).ToLocalChecked()); +} + +NODE_MODULE(deasync, init) diff --git a/node_modules/deasync/test.js b/node_modules/deasync/test.js new file mode 100644 index 0000000..fa4ca1c --- /dev/null +++ b/node_modules/deasync/test.js @@ -0,0 +1,31 @@ +var deasync = require('./index.js'); +var cp = require('child_process'); +var http = require('http'); + +var exec = deasync(cp.exec); + +var sleep = deasync(function (timeout, done) { + setTimeout(done, timeout); +}); + +var request = deasync(function (url, done) { + http.get(url, function (res) { + res.on('error', done); + + res.setEncoding('utf8'); + + var result = '' + + res.on('data', function (data) { result += data; }); + res.on('end', function () { done(null, result); }); + }).on('error', done); +}); + + +setTimeout(function () { + console.log('async'); +}, 1000); + +console.log(exec('ls -la')); +sleep(2000); +console.log(request('http://nodejs.org')); diff --git a/node_modules/debug/.coveralls.yml b/node_modules/debug/.coveralls.yml new file mode 100644 index 0000000..20a7068 --- /dev/null +++ b/node_modules/debug/.coveralls.yml @@ -0,0 +1 @@ +repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve diff --git a/node_modules/debug/.eslintrc b/node_modules/debug/.eslintrc new file mode 100644 index 0000000..8a37ae2 --- /dev/null +++ b/node_modules/debug/.eslintrc @@ -0,0 +1,11 @@ +{ + "env": { + "browser": true, + "node": true + }, + "rules": { + "no-console": 0, + "no-empty": [1, { "allowEmptyCatch": true }] + }, + "extends": "eslint:recommended" +} diff --git a/node_modules/debug/.npmignore b/node_modules/debug/.npmignore new file mode 100644 index 0000000..5f60eec --- /dev/null +++ b/node_modules/debug/.npmignore @@ -0,0 +1,9 @@ +support +test +examples +example +*.sock +dist +yarn.lock +coverage +bower.json diff --git a/node_modules/debug/.travis.yml b/node_modules/debug/.travis.yml new file mode 100644 index 0000000..6c6090c --- /dev/null +++ b/node_modules/debug/.travis.yml @@ -0,0 +1,14 @@ + +language: node_js +node_js: + - "6" + - "5" + - "4" + +install: + - make node_modules + +script: + - make lint + - make test + - make coveralls diff --git a/node_modules/debug/CHANGELOG.md b/node_modules/debug/CHANGELOG.md new file mode 100644 index 0000000..189dbc8 --- /dev/null +++ b/node_modules/debug/CHANGELOG.md @@ -0,0 +1,352 @@ + +2.6.7 / 2017-05-16 +================== + + * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) + * Fix: Inline extend function in node implementation (#452, @dougwilson) + * Docs: Fix typo (#455, @msasad) + +2.6.5 / 2017-04-27 +================== + + * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) + * Misc: clean up browser reference checks (#447, @thebigredgeek) + * Misc: add npm-debug.log to .gitignore (@thebigredgeek) + + +2.6.4 / 2017-04-20 +================== + + * Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) + * Chore: ignore bower.json in npm installations. (#437, @joaovieira) + * Misc: update "ms" to v0.7.3 (@tootallnate) + +2.6.3 / 2017-03-13 +================== + + * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) + * Docs: Changelog fix (@thebigredgeek) + +2.6.2 / 2017-03-10 +================== + + * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) + * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) + * Docs: Add Slackin invite badge (@tootallnate) + +2.6.1 / 2017-02-10 +================== + + * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error + * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) + * Fix: IE8 "Expected identifier" error (#414, @vgoma) + * Fix: Namespaces would not disable once enabled (#409, @musikov) + +2.6.0 / 2016-12-28 +================== + + * Fix: added better null pointer checks for browser useColors (@thebigredgeek) + * Improvement: removed explicit `window.debug` export (#404, @tootallnate) + * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) + +2.5.2 / 2016-12-25 +================== + + * Fix: reference error on window within webworkers (#393, @KlausTrainer) + * Docs: fixed README typo (#391, @lurch) + * Docs: added notice about v3 api discussion (@thebigredgeek) + +2.5.1 / 2016-12-20 +================== + + * Fix: babel-core compatibility + +2.5.0 / 2016-12-20 +================== + + * Fix: wrong reference in bower file (@thebigredgeek) + * Fix: webworker compatibility (@thebigredgeek) + * Fix: output formatting issue (#388, @kribblo) + * Fix: babel-loader compatibility (#383, @escwald) + * Misc: removed built asset from repo and publications (@thebigredgeek) + * Misc: moved source files to /src (#378, @yamikuronue) + * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) + * Test: coveralls integration (#378, @yamikuronue) + * Docs: simplified language in the opening paragraph (#373, @yamikuronue) + +2.4.5 / 2016-12-17 +================== + + * Fix: `navigator` undefined in Rhino (#376, @jochenberger) + * Fix: custom log function (#379, @hsiliev) + * Improvement: bit of cleanup + linting fixes (@thebigredgeek) + * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) + * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) + +2.4.4 / 2016-12-14 +================== + + * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) + +2.4.3 / 2016-12-14 +================== + + * Fix: navigation.userAgent error for react native (#364, @escwald) + +2.4.2 / 2016-12-14 +================== + + * Fix: browser colors (#367, @tootallnate) + * Misc: travis ci integration (@thebigredgeek) + * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) + +2.4.1 / 2016-12-13 +================== + + * Fix: typo that broke the package (#356) + +2.4.0 / 2016-12-13 +================== + + * Fix: bower.json references unbuilt src entry point (#342, @justmatt) + * Fix: revert "handle regex special characters" (@tootallnate) + * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) + * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) + * Improvement: allow colors in workers (#335, @botverse) + * Improvement: use same color for same namespace. (#338, @lchenay) + +2.3.3 / 2016-11-09 +================== + + * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) + * Fix: Returning `localStorage` saved values (#331, Levi Thomason) + * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) + +2.3.2 / 2016-11-09 +================== + + * Fix: be super-safe in index.js as well (@TooTallNate) + * Fix: should check whether process exists (Tom Newby) + +2.3.1 / 2016-11-09 +================== + + * Fix: Added electron compatibility (#324, @paulcbetts) + * Improvement: Added performance optimizations (@tootallnate) + * Readme: Corrected PowerShell environment variable example (#252, @gimre) + * Misc: Removed yarn lock file from source control (#321, @fengmk2) + +2.3.0 / 2016-11-07 +================== + + * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) + * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) + * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) + * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) + * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) + * Package: Update "ms" to 0.7.2 (#315, @DevSide) + * Package: removed superfluous version property from bower.json (#207 @kkirsche) + * Readme: fix USE_COLORS to DEBUG_COLORS + * Readme: Doc fixes for format string sugar (#269, @mlucool) + * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) + * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) + * Readme: better docs for browser support (#224, @matthewmueller) + * Tooling: Added yarn integration for development (#317, @thebigredgeek) + * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) + * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) + * Misc: Updated contributors (@thebigredgeek) + +2.2.0 / 2015-05-09 +================== + + * package: update "ms" to v0.7.1 (#202, @dougwilson) + * README: add logging to file example (#193, @DanielOchoa) + * README: fixed a typo (#191, @amir-s) + * browser: expose `storage` (#190, @stephenmathieson) + * Makefile: add a `distclean` target (#189, @stephenmathieson) + +2.1.3 / 2015-03-13 +================== + + * Updated stdout/stderr example (#186) + * Updated example/stdout.js to match debug current behaviour + * Renamed example/stderr.js to stdout.js + * Update Readme.md (#184) + * replace high intensity foreground color for bold (#182, #183) + +2.1.2 / 2015-03-01 +================== + + * dist: recompile + * update "ms" to v0.7.0 + * package: update "browserify" to v9.0.3 + * component: fix "ms.js" repo location + * changed bower package name + * updated documentation about using debug in a browser + * fix: security error on safari (#167, #168, @yields) + +2.1.1 / 2014-12-29 +================== + + * browser: use `typeof` to check for `console` existence + * browser: check for `console.log` truthiness (fix IE 8/9) + * browser: add support for Chrome apps + * Readme: added Windows usage remarks + * Add `bower.json` to properly support bower install + +2.1.0 / 2014-10-15 +================== + + * node: implement `DEBUG_FD` env variable support + * package: update "browserify" to v6.1.0 + * package: add "license" field to package.json (#135, @panuhorsmalahti) + +2.0.0 / 2014-09-01 +================== + + * package: update "browserify" to v5.11.0 + * node: use stderr rather than stdout for logging (#29, @stephenmathieson) + +1.0.4 / 2014-07-15 +================== + + * dist: recompile + * example: remove `console.info()` log usage + * example: add "Content-Type" UTF-8 header to browser example + * browser: place %c marker after the space character + * browser: reset the "content" color via `color: inherit` + * browser: add colors support for Firefox >= v31 + * debug: prefer an instance `log()` function over the global one (#119) + * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) + +1.0.3 / 2014-07-09 +================== + + * Add support for multiple wildcards in namespaces (#122, @seegno) + * browser: fix lint + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/debug/LICENSE b/node_modules/debug/LICENSE new file mode 100644 index 0000000..658c933 --- /dev/null +++ b/node_modules/debug/LICENSE @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 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/debug/Makefile b/node_modules/debug/Makefile new file mode 100644 index 0000000..584da8b --- /dev/null +++ b/node_modules/debug/Makefile @@ -0,0 +1,50 @@ +# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 +THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) + +# BIN directory +BIN := $(THIS_DIR)/node_modules/.bin + +# Path +PATH := node_modules/.bin:$(PATH) +SHELL := /bin/bash + +# applications +NODE ?= $(shell which node) +YARN ?= $(shell which yarn) +PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) +BROWSERIFY ?= $(NODE) $(BIN)/browserify + +.FORCE: + +install: node_modules + +node_modules: package.json + @NODE_ENV= $(PKG) install + @touch node_modules + +lint: .FORCE + eslint browser.js debug.js index.js node.js + +test-node: .FORCE + istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + +test-browser: .FORCE + mkdir -p dist + + @$(BROWSERIFY) \ + --standalone debug \ + . > dist/debug.js + + karma start --single-run + rimraf dist + +test: .FORCE + concurrently \ + "make test-node" \ + "make test-browser" + +coveralls: + cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js + +.PHONY: all install clean distclean diff --git a/node_modules/debug/README.md b/node_modules/debug/README.md new file mode 100644 index 0000000..f67be6b --- /dev/null +++ b/node_modules/debug/README.md @@ -0,0 +1,312 @@ +# debug +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny node.js debugging utility modelled after node core's debugging technique. + +**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)** + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +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) + +#### Windows note + + On Windows the environment variable is set using the `set` command. + + ```cmd + set DEBUG=*,-not_this + ``` + + Note that PowerShell uses different syntax to set environment variables. + + ```cmd + $env:DEBUG = "*,-not_this" + ``` + +Then, run the program to be debugged as usual. + +## 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 stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: + + ![](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:". + +## Environment Variables + + When running through Node.js, you can set a few environment variables that will + change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + + __Note:__ The environment variables beginning with `DEBUG_` end up being + converted into an Options object that gets used with `%o`/`%O` formatters. + See the Node.js documentation for + [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) + for the complete list. + +## Formatters + + + Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + +### Custom formatters + + You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + +## Browser support + You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), + or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), + if you don't want to build it yourself. + + Debug's enable state is currently persisted by `localStorage`. + Consider the situation shown below where you have `worker:a` and `worker:b`, + and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + +#### Web Inspector Colors + + Colors are also enabled on "Web Inspectors" that understand the `%c` formatting + option. These are WebKit web inspectors, Firefox ([since version + 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) + and the Firebug plugin for Firefox (any version). + + Colored output looks something like: + + ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example _stdout.js_: + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2016 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/debug/component.json b/node_modules/debug/component.json new file mode 100644 index 0000000..d7118d2 --- /dev/null +++ b/node_modules/debug/component.json @@ -0,0 +1,19 @@ +{ + "name": "debug", + "repo": "visionmedia/debug", + "description": "small debugging utility", + "version": "2.6.7", + "keywords": [ + "debug", + "log", + "debugger" + ], + "main": "src/browser.js", + "scripts": [ + "src/browser.js", + "src/debug.js" + ], + "dependencies": { + "rauchg/ms.js": "0.7.1" + } +} diff --git a/node_modules/debug/karma.conf.js b/node_modules/debug/karma.conf.js new file mode 100644 index 0000000..103a82d --- /dev/null +++ b/node_modules/debug/karma.conf.js @@ -0,0 +1,70 @@ +// Karma configuration +// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC) + +module.exports = function(config) { + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['mocha', 'chai', 'sinon'], + + + // list of files / patterns to load in the browser + files: [ + 'dist/debug.js', + 'test/*spec.js' + ], + + + // list of files to exclude + exclude: [ + 'src/node.js' + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['PhantomJS'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }) +} diff --git a/node_modules/debug/node.js b/node_modules/debug/node.js new file mode 100644 index 0000000..7fc36fe --- /dev/null +++ b/node_modules/debug/node.js @@ -0,0 +1 @@ +module.exports = require('./src/node'); diff --git a/node_modules/debug/package.json b/node_modules/debug/package.json new file mode 100644 index 0000000..d4d87f6 --- /dev/null +++ b/node_modules/debug/package.json @@ -0,0 +1,126 @@ +{ + "_args": [ + [ + { + "raw": "debug@2.6.7", + "scope": null, + "escapedName": "debug", + "name": "debug", + "rawSpec": "2.6.7", + "spec": "2.6.7", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express" + ] + ], + "_from": "debug@2.6.7", + "_id": "debug@2.6.7", + "_inCache": true, + "_location": "/debug", + "_nodeVersion": "6.9.5", + "_npmOperationalInternal": { + "host": "packages-18-east.internal.npmjs.com", + "tmp": "tmp/debug-2.6.7.tgz_1494995629479_0.5576471360400319" + }, + "_npmUser": { + "name": "thebigredgeek", + "email": "rhyneandrew@gmail.com" + }, + "_npmVersion": "3.10.10", + "_phantomChildren": {}, + "_requested": { + "raw": "debug@2.6.7", + "scope": null, + "escapedName": "debug", + "name": "debug", + "rawSpec": "2.6.7", + "spec": "2.6.7", + "type": "version" + }, + "_requiredBy": [ + "/express", + "/finalhandler", + "/send" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "_shasum": "92bad1f6d05bbb6bba22cca88bcd0ec894c2861e", + "_shrinkwrap": null, + "_spec": "debug@2.6.7", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "component": { + "scripts": { + "debug/index.js": "browser.js", + "debug/debug.js": "debug.js" + } + }, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "2.0.0" + }, + "description": "small debugging utility", + "devDependencies": { + "browserify": "9.0.3", + "chai": "^3.5.0", + "concurrently": "^3.1.0", + "coveralls": "^2.11.15", + "eslint": "^3.12.1", + "istanbul": "^0.4.5", + "karma": "^1.3.0", + "karma-chai": "^0.1.0", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "karma-sinon": "^1.0.5", + "mocha": "^3.2.0", + "mocha-lcov-reporter": "^1.2.0", + "rimraf": "^2.5.4", + "sinon": "^1.17.6", + "sinon-chai": "^2.8.0" + }, + "directories": {}, + "dist": { + "shasum": "92bad1f6d05bbb6bba22cca88bcd0ec894c2861e", + "tarball": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz" + }, + "gitHead": "6bb07f7e1bafa33631d8f36a779f17eb8abf5fea", + "homepage": "https://github.com/visionmedia/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "maintainers": [ + { + "name": "thebigredgeek", + "email": "rhyneandrew@gmail.com" + } + ], + "name": "debug", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "scripts": {}, + "version": "2.6.7" +} diff --git a/node_modules/debug/src/browser.js b/node_modules/debug/src/browser.js new file mode 100644 index 0000000..7978ce7 --- /dev/null +++ b/node_modules/debug/src/browser.js @@ -0,0 +1,185 @@ +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (window && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (document && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (window && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} diff --git a/node_modules/debug/src/debug.js b/node_modules/debug/src/debug.js new file mode 100644 index 0000000..6a5e3fc --- /dev/null +++ b/node_modules/debug/src/debug.js @@ -0,0 +1,202 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require('ms'); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} diff --git a/node_modules/debug/src/index.js b/node_modules/debug/src/index.js new file mode 100644 index 0000000..e12cf4d --- /dev/null +++ b/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process !== 'undefined' && process.type === 'renderer') { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/node_modules/debug/src/node.js b/node_modules/debug/src/node.js new file mode 100644 index 0000000..af61297 --- /dev/null +++ b/node_modules/debug/src/node.js @@ -0,0 +1,246 @@ +/** + * Module dependencies. + */ + +var tty = require('tty'); +var util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * The file descriptor to write the `debug()` calls to. + * Set the `DEBUG_FD` env variable to override with another value. i.e.: + * + * $ DEBUG_FD=3 node script.js 3>debug.log + */ + +var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + +if (1 !== fd && 2 !== fd) { + util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() +} + +var stream = 1 === fd ? process.stdout : + 2 === fd ? process.stderr : + createWritableStdioStream(fd); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .replace(/\s*\n\s*/g, ' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = new Date().toUTCString() + + ' ' + name + ' ' + args[0]; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to `stream`. + */ + +function log() { + return stream.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Copied from `node/src/node.js`. + * + * XXX: It's lame that node doesn't expose this API out-of-the-box. It also + * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. + */ + +function createWritableStdioStream (fd) { + var stream; + var tty_wrap = process.binding('tty_wrap'); + + // Note stream._type is used for test-module-load-list.js + + switch (tty_wrap.guessHandleType(fd)) { + case 'TTY': + stream = new tty.WriteStream(fd); + stream._type = 'tty'; + + // Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + case 'FILE': + var fs = require('fs'); + stream = new fs.SyncWriteStream(fd, { autoClose: false }); + stream._type = 'fs'; + break; + + case 'PIPE': + case 'TCP': + var net = require('net'); + stream = new net.Socket({ + fd: fd, + readable: false, + writable: true + }); + + // FIXME Should probably have an option in net.Socket to create a + // stream from an existing fd which is writable only. But for now + // we'll just add this hack and set the `readable` member to false. + // Test: ./node test/fixtures/echo.js < /etc/passwd + stream.readable = false; + stream.read = null; + stream._type = 'pipe'; + + // FIXME Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + default: + // Probably an error on in uv_guess_handle() + throw new Error('Implement me. Unknown stream file type!'); + } + + // For supporting legacy API we put the FD here. + stream.fd = fd; + + stream._isStdio = true; + + return stream; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = {}; + + var keys = Object.keys(exports.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); diff --git a/node_modules/depd/History.md b/node_modules/depd/History.md new file mode 100644 index 0000000..ace1171 --- /dev/null +++ b/node_modules/depd/History.md @@ -0,0 +1,84 @@ +1.1.0 / 2015-09-14 +================== + + * Enable strict mode in more places + * Support io.js 3.x + * Support io.js 2.x + * Support web browser loading + - Requires bundler like Browserify or webpack + +1.0.1 / 2015-04-07 +================== + + * Fix `TypeError`s when under `'use strict'` code + * Fix useless type name on auto-generated messages + * Support io.js 1.x + * Support Node.js 0.12 + +1.0.0 / 2014-09-17 +================== + + * No changes + +0.4.5 / 2014-09-09 +================== + + * Improve call speed to functions using the function wrapper + * Support Node.js 0.6 + +0.4.4 / 2014-07-27 +================== + + * Work-around v8 generating empty stack traces + +0.4.3 / 2014-07-26 +================== + + * Fix exception when global `Error.stackTraceLimit` is too low + +0.4.2 / 2014-07-19 +================== + + * Correct call site for wrapped functions and properties + +0.4.1 / 2014-07-19 +================== + + * Improve automatic message generation for function properties + +0.4.0 / 2014-07-19 +================== + + * Add `TRACE_DEPRECATION` environment variable + * Remove non-standard grey color from color output + * Support `--no-deprecation` argument + * Support `--trace-deprecation` argument + * Support `deprecate.property(fn, prop, message)` + +0.3.0 / 2014-06-16 +================== + + * Add `NO_DEPRECATION` environment variable + +0.2.0 / 2014-06-15 +================== + + * Add `deprecate.property(obj, prop, message)` + * Remove `supports-color` dependency for node.js 0.8 + +0.1.0 / 2014-06-15 +================== + + * Add `deprecate.function(fn, message)` + * Add `process.on('deprecation', fn)` emitter + * Automatically generate message when omitted from `deprecate()` + +0.0.1 / 2014-06-15 +================== + + * Fix warning for dynamic calls at singe call site + +0.0.0 / 2014-06-15 +================== + + * Initial implementation diff --git a/node_modules/depd/LICENSE b/node_modules/depd/LICENSE new file mode 100644 index 0000000..142ede3 --- /dev/null +++ b/node_modules/depd/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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/depd/Readme.md b/node_modules/depd/Readme.md new file mode 100644 index 0000000..09bb979 --- /dev/null +++ b/node_modules/depd/Readme.md @@ -0,0 +1,281 @@ +# depd + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Linux Build][travis-image]][travis-url] +[![Windows Build][appveyor-image]][appveyor-url] +[![Coverage Status][coveralls-image]][coveralls-url] +[![Gratipay][gratipay-image]][gratipay-url] + +Deprecate all the things + +> With great modules comes great responsibility; mark things deprecated! + +## Install + +This module is installed directly using `npm`: + +```sh +$ npm install depd +``` + +This module can also be bundled with systems like +[Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/), +though by default this module will alter it's API to no longer display or +track deprecations. + +## API + +```js +var deprecate = require('depd')('my-module') +``` + +This library allows you to display deprecation messages to your users. +This library goes above and beyond with deprecation warnings by +introspection of the call stack (but only the bits that it is interested +in). + +Instead of just warning on the first invocation of a deprecated +function and never again, this module will warn on the first invocation +of a deprecated function per unique call site, making it ideal to alert +users of all deprecated uses across the code base, rather than just +whatever happens to execute first. + +The deprecation warnings from this module also include the file and line +information for the call into the module that the deprecated function was +in. + +**NOTE** this library has a similar interface to the `debug` module, and +this module uses the calling file to get the boundary for the call stacks, +so you should always create a new `deprecate` object in each file and not +within some central file. + +### depd(namespace) + +Create a new deprecate function that uses the given namespace name in the +messages and will display the call site prior to the stack entering the +file this function was called from. It is highly suggested you use the +name of your module as the namespace. + +### deprecate(message) + +Call this function from deprecated code to display a deprecation message. +This message will appear once per unique caller site. Caller site is the +first call site in the stack in a different file from the caller of this +function. + +If the message is omitted, a message is generated for you based on the site +of the `deprecate()` call and will display the name of the function called, +similar to the name displayed in a stack trace. + +### deprecate.function(fn, message) + +Call this function to wrap a given function in a deprecation message on any +call to the function. An optional message can be supplied to provide a custom +message. + +### deprecate.property(obj, prop, message) + +Call this function to wrap a given property on object in a deprecation message +on any accessing or setting of the property. An optional message can be supplied +to provide a custom message. + +The method must be called on the object where the property belongs (not +inherited from the prototype). + +If the property is a data descriptor, it will be converted to an accessor +descriptor in order to display the deprecation message. + +### process.on('deprecation', fn) + +This module will allow easy capturing of deprecation errors by emitting the +errors as the type "deprecation" on the global `process`. If there are no +listeners for this type, the errors are written to STDERR as normal, but if +there are any listeners, nothing will be written to STDERR and instead only +emitted. From there, you can write the errors in a different format or to a +logging source. + +The error represents the deprecation and is emitted only once with the same +rules as writing to STDERR. The error has the following properties: + + - `message` - This is the message given by the library + - `name` - This is always `'DeprecationError'` + - `namespace` - This is the namespace the deprecation came from + - `stack` - This is the stack of the call to the deprecated thing + +Example `error.stack` output: + +``` +DeprecationError: my-cool-module deprecated oldfunction + at Object. ([eval]-wrapper:6:22) + at Module._compile (module.js:456:26) + at evalScript (node.js:532:25) + at startup (node.js:80:7) + at node.js:902:3 +``` + +### process.env.NO_DEPRECATION + +As a user of modules that are deprecated, the environment variable `NO_DEPRECATION` +is provided as a quick solution to silencing deprecation warnings from being +output. The format of this is similar to that of `DEBUG`: + +```sh +$ NO_DEPRECATION=my-module,othermod node app.js +``` + +This will suppress deprecations from being output for "my-module" and "othermod". +The value is a list of comma-separated namespaces. To suppress every warning +across all namespaces, use the value `*` for a namespace. + +Providing the argument `--no-deprecation` to the `node` executable will suppress +all deprecations (only available in Node.js 0.8 or higher). + +**NOTE** This will not suppress the deperecations given to any "deprecation" +event listeners, just the output to STDERR. + +### process.env.TRACE_DEPRECATION + +As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION` +is provided as a solution to getting more detailed location information in deprecation +warnings by including the entire stack trace. The format of this is the same as +`NO_DEPRECATION`: + +```sh +$ TRACE_DEPRECATION=my-module,othermod node app.js +``` + +This will include stack traces for deprecations being output for "my-module" and +"othermod". The value is a list of comma-separated namespaces. To trace every +warning across all namespaces, use the value `*` for a namespace. + +Providing the argument `--trace-deprecation` to the `node` executable will trace +all deprecations (only available in Node.js 0.8 or higher). + +**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`. + +## Display + +![message](files/message.png) + +When a user calls a function in your library that you mark deprecated, they +will see the following written to STDERR (in the given colors, similar colors +and layout to the `debug` module): + +``` +bright cyan bright yellow +| | reset cyan +| | | | +▼ ▼ ▼ ▼ +my-cool-module deprecated oldfunction [eval]-wrapper:6:22 +▲ ▲ ▲ ▲ +| | | | +namespace | | location of mycoolmod.oldfunction() call + | deprecation message + the word "deprecated" +``` + +If the user redirects their STDERR to a file or somewhere that does not support +colors, they see (similar layout to the `debug` module): + +``` +Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22 +▲ ▲ ▲ ▲ ▲ +| | | | | +timestamp of message namespace | | location of mycoolmod.oldfunction() call + | deprecation message + the word "deprecated" +``` + +## Examples + +### Deprecating all calls to a function + +This will display a deprecated message about "oldfunction" being deprecated +from "my-module" on STDERR. + +```js +var deprecate = require('depd')('my-cool-module') + +// message automatically derived from function name +// Object.oldfunction +exports.oldfunction = deprecate.function(function oldfunction() { + // all calls to function are deprecated +}) + +// specific message +exports.oldfunction = deprecate.function(function () { + // all calls to function are deprecated +}, 'oldfunction') +``` + +### Conditionally deprecating a function call + +This will display a deprecated message about "weirdfunction" being deprecated +from "my-module" on STDERR when called with less than 2 arguments. + +```js +var deprecate = require('depd')('my-cool-module') + +exports.weirdfunction = function () { + if (arguments.length < 2) { + // calls with 0 or 1 args are deprecated + deprecate('weirdfunction args < 2') + } +} +``` + +When calling `deprecate` as a function, the warning is counted per call site +within your own module, so you can display different deprecations depending +on different situations and the users will still get all the warnings: + +```js +var deprecate = require('depd')('my-cool-module') + +exports.weirdfunction = function () { + if (arguments.length < 2) { + // calls with 0 or 1 args are deprecated + deprecate('weirdfunction args < 2') + } else if (typeof arguments[0] !== 'string') { + // calls with non-string first argument are deprecated + deprecate('weirdfunction non-string first arg') + } +} +``` + +### Deprecating property access + +This will display a deprecated message about "oldprop" being deprecated +from "my-module" on STDERR when accessed. A deprecation will be displayed +when setting the value and when getting the value. + +```js +var deprecate = require('depd')('my-cool-module') + +exports.oldprop = 'something' + +// message automatically derives from property name +deprecate.property(exports, 'oldprop') + +// explicit message +deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') +``` + +## License + +[MIT](LICENSE) + +[npm-version-image]: https://img.shields.io/npm/v/depd.svg +[npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg +[npm-url]: https://npmjs.org/package/depd +[travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux +[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd +[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows +[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd +[coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg +[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master +[node-image]: https://img.shields.io/node/v/depd.svg +[node-url]: http://nodejs.org/download/ +[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg +[gratipay-url]: https://www.gratipay.com/dougwilson/ diff --git a/node_modules/depd/index.js b/node_modules/depd/index.js new file mode 100644 index 0000000..fddcae8 --- /dev/null +++ b/node_modules/depd/index.js @@ -0,0 +1,521 @@ +/*! + * depd + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var callSiteToString = require('./lib/compat').callSiteToString +var eventListenerCount = require('./lib/compat').eventListenerCount +var relative = require('path').relative + +/** + * Module exports. + */ + +module.exports = depd + +/** + * Get the path to base files on. + */ + +var basePath = process.cwd() + +/** + * Determine if namespace is contained in the string. + */ + +function containsNamespace(str, namespace) { + var val = str.split(/[ ,]+/) + + namespace = String(namespace).toLowerCase() + + for (var i = 0 ; i < val.length; i++) { + if (!(str = val[i])) continue; + + // namespace contained + if (str === '*' || str.toLowerCase() === namespace) { + return true + } + } + + return false +} + +/** + * Convert a data descriptor to accessor descriptor. + */ + +function convertDataDescriptorToAccessor(obj, prop, message) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + var value = descriptor.value + + descriptor.get = function getter() { return value } + + if (descriptor.writable) { + descriptor.set = function setter(val) { return value = val } + } + + delete descriptor.value + delete descriptor.writable + + Object.defineProperty(obj, prop, descriptor) + + return descriptor +} + +/** + * Create arguments string to keep arity. + */ + +function createArgumentsString(arity) { + var str = '' + + for (var i = 0; i < arity; i++) { + str += ', arg' + i + } + + return str.substr(2) +} + +/** + * Create stack string from stack. + */ + +function createStackString(stack) { + var str = this.name + ': ' + this.namespace + + if (this.message) { + str += ' deprecated ' + this.message + } + + for (var i = 0; i < stack.length; i++) { + str += '\n at ' + callSiteToString(stack[i]) + } + + return str +} + +/** + * Create deprecate for namespace in caller. + */ + +function depd(namespace) { + if (!namespace) { + throw new TypeError('argument namespace is required') + } + + var stack = getStack() + var site = callSiteLocation(stack[1]) + var file = site[0] + + function deprecate(message) { + // call to self as log + log.call(deprecate, message) + } + + deprecate._file = file + deprecate._ignored = isignored(namespace) + deprecate._namespace = namespace + deprecate._traced = istraced(namespace) + deprecate._warned = Object.create(null) + + deprecate.function = wrapfunction + deprecate.property = wrapproperty + + return deprecate +} + +/** + * Determine if namespace is ignored. + */ + +function isignored(namespace) { + /* istanbul ignore next: tested in a child processs */ + if (process.noDeprecation) { + // --no-deprecation support + return true + } + + var str = process.env.NO_DEPRECATION || '' + + // namespace ignored + return containsNamespace(str, namespace) +} + +/** + * Determine if namespace is traced. + */ + +function istraced(namespace) { + /* istanbul ignore next: tested in a child processs */ + if (process.traceDeprecation) { + // --trace-deprecation support + return true + } + + var str = process.env.TRACE_DEPRECATION || '' + + // namespace traced + return containsNamespace(str, namespace) +} + +/** + * Display deprecation message. + */ + +function log(message, site) { + var haslisteners = eventListenerCount(process, 'deprecation') !== 0 + + // abort early if no destination + if (!haslisteners && this._ignored) { + return + } + + var caller + var callFile + var callSite + var i = 0 + var seen = false + var stack = getStack() + var file = this._file + + if (site) { + // provided site + callSite = callSiteLocation(stack[1]) + callSite.name = site.name + file = callSite[0] + } else { + // get call site + i = 2 + site = callSiteLocation(stack[i]) + callSite = site + } + + // get caller of deprecated thing in relation to file + for (; i < stack.length; i++) { + caller = callSiteLocation(stack[i]) + callFile = caller[0] + + if (callFile === file) { + seen = true + } else if (callFile === this._file) { + file = this._file + } else if (seen) { + break + } + } + + var key = caller + ? site.join(':') + '__' + caller.join(':') + : undefined + + if (key !== undefined && key in this._warned) { + // already warned + return + } + + this._warned[key] = true + + // generate automatic message from call site + if (!message) { + message = callSite === site || !callSite.name + ? defaultMessage(site) + : defaultMessage(callSite) + } + + // emit deprecation if listeners exist + if (haslisteners) { + var err = DeprecationError(this._namespace, message, stack.slice(i)) + process.emit('deprecation', err) + return + } + + // format and write message + var format = process.stderr.isTTY + ? formatColor + : formatPlain + var msg = format.call(this, message, caller, stack.slice(i)) + process.stderr.write(msg + '\n', 'utf8') + + return +} + +/** + * Get call site location as array. + */ + +function callSiteLocation(callSite) { + var file = callSite.getFileName() || '' + var line = callSite.getLineNumber() + var colm = callSite.getColumnNumber() + + if (callSite.isEval()) { + file = callSite.getEvalOrigin() + ', ' + file + } + + var site = [file, line, colm] + + site.callSite = callSite + site.name = callSite.getFunctionName() + + return site +} + +/** + * Generate a default message from the site. + */ + +function defaultMessage(site) { + var callSite = site.callSite + var funcName = site.name + + // make useful anonymous name + if (!funcName) { + funcName = '' + } + + var context = callSite.getThis() + var typeName = context && callSite.getTypeName() + + // ignore useless type name + if (typeName === 'Object') { + typeName = undefined + } + + // make useful type name + if (typeName === 'Function') { + typeName = context.name || typeName + } + + return typeName && callSite.getMethodName() + ? typeName + '.' + funcName + : funcName +} + +/** + * Format deprecation message without color. + */ + +function formatPlain(msg, caller, stack) { + var timestamp = new Date().toUTCString() + + var formatted = timestamp + + ' ' + this._namespace + + ' deprecated ' + msg + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n at ' + callSiteToString(stack[i]) + } + + return formatted + } + + if (caller) { + formatted += ' at ' + formatLocation(caller) + } + + return formatted +} + +/** + * Format deprecation message with color. + */ + +function formatColor(msg, caller, stack) { + var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' // bold cyan + + ' \x1b[33;1mdeprecated\x1b[22;39m' // bold yellow + + ' \x1b[0m' + msg + '\x1b[39m' // reset + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan + } + + return formatted + } + + if (caller) { + formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan + } + + return formatted +} + +/** + * Format call site location. + */ + +function formatLocation(callSite) { + return relative(basePath, callSite[0]) + + ':' + callSite[1] + + ':' + callSite[2] +} + +/** + * Get the stack as array of call sites. + */ + +function getStack() { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = Math.max(10, limit) + + // capture the stack + Error.captureStackTrace(obj) + + // slice this function off the top + var stack = obj.stack.slice(1) + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack +} + +/** + * Capture call site stack from v8. + */ + +function prepareObjectStackTrace(obj, stack) { + return stack +} + +/** + * Return a wrapped function in a deprecation message. + */ + +function wrapfunction(fn, message) { + if (typeof fn !== 'function') { + throw new TypeError('argument fn must be a function') + } + + var args = createArgumentsString(fn.length) + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + var deprecatedfn = eval('(function (' + args + ') {\n' + + '"use strict"\n' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '})') + + return deprecatedfn +} + +/** + * Wrap property in a deprecation message. + */ + +function wrapproperty(obj, prop, message) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new TypeError('argument obj must be object') + } + + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + + if (!descriptor) { + throw new TypeError('must call property on owner object') + } + + if (!descriptor.configurable) { + throw new TypeError('property must be configurable') + } + + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + // set site name + site.name = prop + + // convert data descriptor + if ('value' in descriptor) { + descriptor = convertDataDescriptorToAccessor(obj, prop, message) + } + + var get = descriptor.get + var set = descriptor.set + + // wrap getter + if (typeof get === 'function') { + descriptor.get = function getter() { + log.call(deprecate, message, site) + return get.apply(this, arguments) + } + } + + // wrap setter + if (typeof set === 'function') { + descriptor.set = function setter() { + log.call(deprecate, message, site) + return set.apply(this, arguments) + } + } + + Object.defineProperty(obj, prop, descriptor) +} + +/** + * Create DeprecationError for deprecation + */ + +function DeprecationError(namespace, message, stack) { + var error = new Error() + var stackString + + Object.defineProperty(error, 'constructor', { + value: DeprecationError + }) + + Object.defineProperty(error, 'message', { + configurable: true, + enumerable: false, + value: message, + writable: true + }) + + Object.defineProperty(error, 'name', { + enumerable: false, + configurable: true, + value: 'DeprecationError', + writable: true + }) + + Object.defineProperty(error, 'namespace', { + configurable: true, + enumerable: false, + value: namespace, + writable: true + }) + + Object.defineProperty(error, 'stack', { + configurable: true, + enumerable: false, + get: function () { + if (stackString !== undefined) { + return stackString + } + + // prepare stack trace + return stackString = createStackString.call(this, stack) + }, + set: function setter(val) { + stackString = val + } + }) + + return error +} diff --git a/node_modules/depd/lib/browser/index.js b/node_modules/depd/lib/browser/index.js new file mode 100644 index 0000000..f464e05 --- /dev/null +++ b/node_modules/depd/lib/browser/index.js @@ -0,0 +1,79 @@ +/*! + * depd + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = depd + +/** + * Create deprecate for namespace in caller. + */ + +function depd(namespace) { + if (!namespace) { + throw new TypeError('argument namespace is required') + } + + function deprecate(message) { + // no-op in browser + } + + deprecate._file = undefined + deprecate._ignored = true + deprecate._namespace = namespace + deprecate._traced = false + deprecate._warned = Object.create(null) + + deprecate.function = wrapfunction + deprecate.property = wrapproperty + + return deprecate +} + +/** + * Return a wrapped function in a deprecation message. + * + * This is a no-op version of the wrapper, which does nothing but call + * validation. + */ + +function wrapfunction(fn, message) { + if (typeof fn !== 'function') { + throw new TypeError('argument fn must be a function') + } + + return fn +} + +/** + * Wrap property in a deprecation message. + * + * This is a no-op version of the wrapper, which does nothing but call + * validation. + */ + +function wrapproperty(obj, prop, message) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new TypeError('argument obj must be object') + } + + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + + if (!descriptor) { + throw new TypeError('must call property on owner object') + } + + if (!descriptor.configurable) { + throw new TypeError('property must be configurable') + } + + return +} diff --git a/node_modules/depd/lib/compat/buffer-concat.js b/node_modules/depd/lib/compat/buffer-concat.js new file mode 100644 index 0000000..4b73381 --- /dev/null +++ b/node_modules/depd/lib/compat/buffer-concat.js @@ -0,0 +1,35 @@ +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + */ + +module.exports = bufferConcat + +/** + * Concatenate an array of Buffers. + */ + +function bufferConcat(bufs) { + var length = 0 + + for (var i = 0, len = bufs.length; i < len; i++) { + length += bufs[i].length + } + + var buf = new Buffer(length) + var pos = 0 + + for (var i = 0, len = bufs.length; i < len; i++) { + bufs[i].copy(buf, pos) + pos += bufs[i].length + } + + return buf +} diff --git a/node_modules/depd/lib/compat/callsite-tostring.js b/node_modules/depd/lib/compat/callsite-tostring.js new file mode 100644 index 0000000..9ecef34 --- /dev/null +++ b/node_modules/depd/lib/compat/callsite-tostring.js @@ -0,0 +1,103 @@ +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + */ + +module.exports = callSiteToString + +/** + * Format a CallSite file location to a string. + */ + +function callSiteFileLocation(callSite) { + var fileName + var fileLocation = '' + + if (callSite.isNative()) { + fileLocation = 'native' + } else if (callSite.isEval()) { + fileName = callSite.getScriptNameOrSourceURL() + if (!fileName) { + fileLocation = callSite.getEvalOrigin() + } + } else { + fileName = callSite.getFileName() + } + + if (fileName) { + fileLocation += fileName + + var lineNumber = callSite.getLineNumber() + if (lineNumber != null) { + fileLocation += ':' + lineNumber + + var columnNumber = callSite.getColumnNumber() + if (columnNumber) { + fileLocation += ':' + columnNumber + } + } + } + + return fileLocation || 'unknown source' +} + +/** + * Format a CallSite to a string. + */ + +function callSiteToString(callSite) { + var addSuffix = true + var fileLocation = callSiteFileLocation(callSite) + var functionName = callSite.getFunctionName() + var isConstructor = callSite.isConstructor() + var isMethodCall = !(callSite.isToplevel() || isConstructor) + var line = '' + + if (isMethodCall) { + var methodName = callSite.getMethodName() + var typeName = getConstructorName(callSite) + + if (functionName) { + if (typeName && functionName.indexOf(typeName) !== 0) { + line += typeName + '.' + } + + line += functionName + + if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) { + line += ' [as ' + methodName + ']' + } + } else { + line += typeName + '.' + (methodName || '') + } + } else if (isConstructor) { + line += 'new ' + (functionName || '') + } else if (functionName) { + line += functionName + } else { + addSuffix = false + line += fileLocation + } + + if (addSuffix) { + line += ' (' + fileLocation + ')' + } + + return line +} + +/** + * Get constructor name of reviver. + */ + +function getConstructorName(obj) { + var receiver = obj.receiver + return (receiver.constructor && receiver.constructor.name) || null +} diff --git a/node_modules/depd/lib/compat/event-listener-count.js b/node_modules/depd/lib/compat/event-listener-count.js new file mode 100644 index 0000000..a05fceb --- /dev/null +++ b/node_modules/depd/lib/compat/event-listener-count.js @@ -0,0 +1,22 @@ +/*! + * depd + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = eventListenerCount + +/** + * Get the count of listeners on an event emitter of a specific type. + */ + +function eventListenerCount(emitter, type) { + return emitter.listeners(type).length +} diff --git a/node_modules/depd/lib/compat/index.js b/node_modules/depd/lib/compat/index.js new file mode 100644 index 0000000..aa3c1de --- /dev/null +++ b/node_modules/depd/lib/compat/index.js @@ -0,0 +1,84 @@ +/*! + * depd + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var Buffer = require('buffer') +var EventEmitter = require('events').EventEmitter + +/** + * Module exports. + * @public + */ + +lazyProperty(module.exports, 'bufferConcat', function bufferConcat() { + return Buffer.concat || require('./buffer-concat') +}) + +lazyProperty(module.exports, 'callSiteToString', function callSiteToString() { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + function prepareObjectStackTrace(obj, stack) { + return stack + } + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = 2 + + // capture the stack + Error.captureStackTrace(obj) + + // slice the stack + var stack = obj.stack.slice() + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack[0].toString ? toString : require('./callsite-tostring') +}) + +lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount() { + return EventEmitter.listenerCount || require('./event-listener-count') +}) + +/** + * Define a lazy property. + */ + +function lazyProperty(obj, prop, getter) { + function get() { + var val = getter() + + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + value: val + }) + + return val + } + + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + get: get + }) +} + +/** + * Call toString() on the obj + */ + +function toString(obj) { + return obj.toString() +} diff --git a/node_modules/depd/package.json b/node_modules/depd/package.json new file mode 100644 index 0000000..5313043 --- /dev/null +++ b/node_modules/depd/package.json @@ -0,0 +1,103 @@ +{ + "_args": [ + [ + { + "raw": "depd@~1.1.0", + "scope": null, + "escapedName": "depd", + "name": "depd", + "rawSpec": "~1.1.0", + "spec": ">=1.1.0 <1.2.0", + "type": "range" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express" + ] + ], + "_from": "depd@>=1.1.0 <1.2.0", + "_id": "depd@1.1.0", + "_inCache": true, + "_location": "/depd", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "depd@~1.1.0", + "scope": null, + "escapedName": "depd", + "name": "depd", + "rawSpec": "~1.1.0", + "spec": ">=1.1.0 <1.2.0", + "type": "range" + }, + "_requiredBy": [ + "/express", + "/http-errors", + "/send" + ], + "_resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "_shasum": "e1bd82c6aab6ced965b97b88b17ed3e528ca18c3", + "_shrinkwrap": null, + "_spec": "depd@~1.1.0", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/express", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "browser": "lib/browser/index.js", + "bugs": { + "url": "https://github.com/dougwilson/nodejs-depd/issues" + }, + "dependencies": {}, + "description": "Deprecate all the things", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "1.0.0", + "istanbul": "0.3.5", + "mocha": "~1.21.5" + }, + "directories": {}, + "dist": { + "shasum": "e1bd82c6aab6ced965b97b88b17ed3e528ca18c3", + "tarball": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "lib/", + "History.md", + "LICENSE", + "index.js", + "Readme.md" + ], + "gitHead": "78c659de20283e3a6bee92bda455e6daff01686a", + "homepage": "https://github.com/dougwilson/nodejs-depd", + "keywords": [ + "deprecate", + "deprecated" + ], + "license": "MIT", + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "depd", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/dougwilson/nodejs-depd.git" + }, + "scripts": { + "bench": "node benchmark/index.js", + "test": "mocha --reporter spec --bail test/", + "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --no-exit test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/" + }, + "version": "1.1.0" +} diff --git a/node_modules/destroy/README.md b/node_modules/destroy/README.md new file mode 100644 index 0000000..665acb7 --- /dev/null +++ b/node_modules/destroy/README.md @@ -0,0 +1,38 @@ +# Destroy + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] +[![Gittip][gittip-image]][gittip-url] + +Destroy a stream. + +## API + +```js +var destroy = require('destroy') + +var fs = require('fs') +var stream = fs.createReadStream('package.json') +destroy(stream) +``` + +[npm-image]: https://img.shields.io/npm/v/destroy.svg?style=flat-square +[npm-url]: https://npmjs.org/package/destroy +[github-tag]: http://img.shields.io/github/tag/stream-utils/destroy.svg?style=flat-square +[github-url]: https://github.com/stream-utils/destroy/tags +[travis-image]: https://img.shields.io/travis/stream-utils/destroy.svg?style=flat-square +[travis-url]: https://travis-ci.org/stream-utils/destroy +[coveralls-image]: https://img.shields.io/coveralls/stream-utils/destroy.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master +[david-image]: http://img.shields.io/david/stream-utils/destroy.svg?style=flat-square +[david-url]: https://david-dm.org/stream-utils/destroy +[license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square +[license-url]: LICENSE.md +[downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/destroy +[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square +[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/node_modules/destroy/index.js b/node_modules/destroy/index.js new file mode 100644 index 0000000..b455217 --- /dev/null +++ b/node_modules/destroy/index.js @@ -0,0 +1,36 @@ +var ReadStream = require('fs').ReadStream +var Stream = require('stream') + +module.exports = function destroy(stream) { + if (stream instanceof ReadStream) { + return destroyReadStream(stream) + } + + if (!(stream instanceof Stream)) { + return stream + } + + if (typeof stream.destroy === 'function') { + stream.destroy() + } + + return stream +} + +function destroyReadStream(stream) { + stream.destroy() + + if (typeof stream.close === 'function') { + // node.js core bug work-around + stream.on('open', onopenClose) + } + + return stream +} + +function onopenClose() { + if (typeof this.fd === 'number') { + // actually close down the fd + this.close() + } +} diff --git a/node_modules/destroy/package.json b/node_modules/destroy/package.json new file mode 100644 index 0000000..6896907 --- /dev/null +++ b/node_modules/destroy/package.json @@ -0,0 +1,101 @@ +{ + "_args": [ + [ + { + "raw": "destroy@1.0.3", + "scope": null, + "escapedName": "destroy", + "name": "destroy", + "rawSpec": "1.0.3", + "spec": "1.0.3", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/send" + ] + ], + "_from": "destroy@1.0.3", + "_id": "destroy@1.0.3", + "_inCache": true, + "_location": "/destroy", + "_npmUser": { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + "_npmVersion": "1.4.21", + "_phantomChildren": {}, + "_requested": { + "raw": "destroy@1.0.3", + "scope": null, + "escapedName": "destroy", + "name": "destroy", + "rawSpec": "1.0.3", + "spec": "1.0.3", + "type": "version" + }, + "_requiredBy": [ + "/send" + ], + "_resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz", + "_shasum": "b433b4724e71fd8551d9885174851c5fc377e2c9", + "_shrinkwrap": null, + "_spec": "destroy@1.0.3", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs copie/node_modules/send", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "bugs": { + "url": "https://github.com/stream-utils/destroy/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "dependencies": {}, + "description": "destroy a stream if possible", + "devDependencies": { + "istanbul": "0", + "mocha": "1" + }, + "directories": {}, + "dist": { + "shasum": "b433b4724e71fd8551d9885174851c5fc377e2c9", + "tarball": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz" + }, + "files": [ + "index.js" + ], + "gitHead": "50af95ece4a70202f9301bc3edc8f9fdbbad0f26", + "homepage": "https://github.com/stream-utils/destroy", + "keywords": [ + "stream", + "streams", + "destroy", + "cleanup", + "leak", + "fd" + ], + "license": "MIT", + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + } + ], + "name": "destroy", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/stream-utils/destroy.git" + }, + "scripts": { + "test": "mocha --reporter spec", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" + }, + "version": "1.0.3" +} diff --git a/node_modules/ee-first/LICENSE b/node_modules/ee-first/LICENSE new file mode 100644 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/ee-first/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 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/ee-first/README.md b/node_modules/ee-first/README.md new file mode 100644 index 0000000..cbd2478 --- /dev/null +++ b/node_modules/ee-first/README.md @@ -0,0 +1,80 @@ +# EE First + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] +[![Gittip][gittip-image]][gittip-url] + +Get the first event in a set of event emitters and event pairs, +then clean up after itself. + +## Install + +```sh +$ npm install ee-first +``` + +## API + +```js +var first = require('ee-first') +``` + +### first(arr, listener) + +Invoke `listener` on the first event from the list specified in `arr`. `arr` is +an array of arrays, with each array in the format `[ee, ...event]`. `listener` +will be called only once, the first time any of the given events are emitted. If +`error` is one of the listened events, then if that fires first, the `listener` +will be given the `err` argument. + +The `listener` is invoked as `listener(err, ee, event, args)`, where `err` is the +first argument emitted from an `error` event, if applicable; `ee` is the event +emitter that fired; `event` is the string event name that fired; and `args` is an +array of the arguments that were emitted on the event. + +```js +var ee1 = new EventEmitter() +var ee2 = new EventEmitter() + +first([ + [ee1, 'close', 'end', 'error'], + [ee2, 'error'] +], function (err, ee, event, args) { + // listener invoked +}) +``` + +#### .cancel() + +The group of listeners can be cancelled before being invoked and have all the event +listeners removed from the underlying event emitters. + +```js +var thunk = first([ + [ee1, 'close', 'end', 'error'], + [ee2, 'error'] +], function (err, ee, event, args) { + // listener invoked +}) + +// cancel and clean up +thunk.cancel() +``` + +[npm-image]: https://img.shields.io/npm/v/ee-first.svg?style=flat-square +[npm-url]: https://npmjs.org/package/ee-first +[github-tag]: http://img.shields.io/github/tag/jonathanong/ee-first.svg?style=flat-square +[github-url]: https://github.com/jonathanong/ee-first/tags +[travis-image]: https://img.shields.io/travis/jonathanong/ee-first.svg?style=flat-square +[travis-url]: https://travis-ci.org/jonathanong/ee-first +[coveralls-image]: https://img.shields.io/coveralls/jonathanong/ee-first.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/jonathanong/ee-first?branch=master +[license-image]: http://img.shields.io/npm/l/ee-first.svg?style=flat-square +[license-url]: LICENSE.md +[downloads-image]: http://img.shields.io/npm/dm/ee-first.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/ee-first +[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square +[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/node_modules/ee-first/index.js b/node_modules/ee-first/index.js new file mode 100644 index 0000000..501287c --- /dev/null +++ b/node_modules/ee-first/index.js @@ -0,0 +1,95 @@ +/*! + * ee-first + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = first + +/** + * Get the first event in a set of event emitters and event pairs. + * + * @param {array} stuff + * @param {function} done + * @public + */ + +function first(stuff, done) { + if (!Array.isArray(stuff)) + throw new TypeError('arg must be an array of [ee, events...] arrays') + + var cleanups = [] + + for (var i = 0; i < stuff.length; i++) { + var arr = stuff[i] + + if (!Array.isArray(arr) || arr.length < 2) + throw new TypeError('each array member must be [ee, events...]') + + var ee = arr[0] + + for (var j = 1; j < arr.length; j++) { + var event = arr[j] + var fn = listener(event, callback) + + // listen to the event + ee.on(event, fn) + // push this listener to the list of cleanups + cleanups.push({ + ee: ee, + event: event, + fn: fn, + }) + } + } + + function callback() { + cleanup() + done.apply(null, arguments) + } + + function cleanup() { + var x + for (var i = 0; i < cleanups.length; i++) { + x = cleanups[i] + x.ee.removeListener(x.event, x.fn) + } + } + + function thunk(fn) { + done = fn + } + + thunk.cancel = cleanup + + return thunk +} + +/** + * Create the event listener. + * @private + */ + +function listener(event, done) { + return function onevent(arg1) { + var args = new Array(arguments.length) + var ee = this + var err = event === 'error' + ? arg1 + : null + + // copy args to prevent arguments escaping scope + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + + done(err, ee, event, args) + } +} diff --git a/node_modules/ee-first/package.json b/node_modules/ee-first/package.json new file mode 100644 index 0000000..721b537 --- /dev/null +++ b/node_modules/ee-first/package.json @@ -0,0 +1,98 @@ +{ + "_args": [ + [ + { + "raw": "ee-first@1.1.1", + "scope": null, + "escapedName": "ee-first", + "name": "ee-first", + "rawSpec": "1.1.1", + "spec": "1.1.1", + "type": "version" + }, + "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/on-finished" + ] + ], + "_from": "ee-first@1.1.1", + "_id": "ee-first@1.1.1", + "_inCache": true, + "_location": "/ee-first", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "ee-first@1.1.1", + "scope": null, + "escapedName": "ee-first", + "name": "ee-first", + "rawSpec": "1.1.1", + "spec": "1.1.1", + "type": "version" + }, + "_requiredBy": [ + "/on-finished" + ], + "_resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "_shasum": "590c61156b0ae2f4f0255732a158b266bc56b21d", + "_shrinkwrap": null, + "_spec": "ee-first@1.1.1", + "_where": "/Users/macbookpro/Documents/Courses/NodeJs/node_modules/on-finished", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "bugs": { + "url": "https://github.com/jonathanong/ee-first/issues" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "dependencies": {}, + "description": "return the first event in a set of ee/event pairs", + "devDependencies": { + "istanbul": "0.3.9", + "mocha": "2.2.5" + }, + "directories": {}, + "dist": { + "shasum": "590c61156b0ae2f4f0255732a158b266bc56b21d", + "tarball": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + }, + "files": [ + "index.js", + "LICENSE" + ], + "gitHead": "512e0ce4cc3643f603708f965a97b61b1a9c0441", + "homepage": "https://github.com/jonathanong/ee-first", + "license": "MIT", + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "name": "ee-first", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/jonathanong/ee-first.git" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "version": "1.1.1" +} diff --git a/node_modules/ejs/Jakefile b/node_modules/ejs/Jakefile new file mode 100644 index 0000000..ec3defd --- /dev/null +++ b/node_modules/ejs/Jakefile @@ -0,0 +1,71 @@ +var fs = require('fs'); +var execSync = require('child_process').execSync; +var exec = function (cmd) { + execSync(cmd, {stdio: 'inherit'}); +}; + +/* global jake, task, desc, publishTask */ + +task('build', ['lint', 'clean', 'browserify', 'minify'], function () { + console.log('Build completed.'); +}); + +desc('Cleans browerified/minified files and package files'); +task('clean', ['clobber'], function () { + jake.rmRf('./ejs.js'); + jake.rmRf('./ejs.min.js'); + console.log('Cleaned up compiled files.'); +}); + +desc('Lints the source code'); +task('lint', function () { + exec('./node_modules/.bin/eslint \"**/*.js\" Jakefile'); + console.log('Linting completed.'); +}); + +task('browserify', function () { + exec('./node_modules/browserify/bin/cmd.js --standalone ejs lib/ejs.js > ejs.js'); + console.log('Browserification completed.'); +}); + +task('minify', function () { + exec('./node_modules/uglify-js/bin/uglifyjs ejs.js > ejs.min.js'); + console.log('Minification completed.'); +}); + +task('doc', function (dev) { + jake.rmRf('out'); + var p = dev ? '-p' : ''; + exec('./node_modules/.bin/jsdoc ' + p + ' -c jsdoc.json lib/* docs/jsdoc/*'); + console.log('Documentation generated.'); +}); + +task('docPublish', ['doc'], function () { + fs.writeFileSync('out/CNAME', 'api.ejs.co'); + console.log('Pushing docs to gh-pages...'); + exec('./node_modules/.bin/git-directory-deploy --directory out/'); + console.log('Docs published to gh-pages.'); +}); + +task('test', ['lint'], function () { + exec('./node_modules/.bin/mocha'); +}); + +publishTask('ejs', ['build'], function () { + this.packageFiles.include([ + 'Jakefile', + 'README.md', + 'LICENSE', + 'package.json', + 'ejs.js', + 'ejs.min.js', + 'lib/**', + 'test/**' + ]); +}); + +jake.Task.publish.on('complete', function () { + console.log('Updating hosted docs...'); + console.log('If this fails, run jake docPublish to re-try.'); + jake.Task.docPublish.invoke(); +}); diff --git a/node_modules/ejs/LICENSE b/node_modules/ejs/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/node_modules/ejs/LICENSE @@ -0,0 +1,202 @@ + + 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 [yyyy] [name of copyright owner] + + 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/ejs/README.md b/node_modules/ejs/README.md new file mode 100644 index 0000000..1f3b9c7 --- /dev/null +++ b/node_modules/ejs/README.md @@ -0,0 +1,256 @@ +# EJS + +Embedded JavaScript templates + +[![Build Status](https://img.shields.io/travis/mde/ejs/master.svg?style=flat)](https://travis-ci.org/mde/ejs) +[![Developing Dependencies](https://img.shields.io/david/dev/mde/ejs.svg?style=flat)](https://david-dm.org/mde/ejs?type=dev) + +## Installation + +```bash +$ npm install ejs +``` + +## Features + + * Control flow with `<% %>` + * Escaped output with `<%= %>` (escape function configurable) + * Unescaped raw output with `<%- %>` + * Newline-trim mode ('newline slurping') with `-%>` ending tag + * Whitespace-trim mode (slurp all whitespace) for control flow with `<%_ _%>` + * Custom delimiters (e.g., use `` instead of `<% %>`) + * Includes + * Client-side support + * Static caching of intermediate JavaScript + * Static caching of templates + * Complies with the [Express](http://expressjs.com) view system + +## Example + +```html +<% if (user) { %> +