From 867de3a4b69ec93a44bf529975548ca545226579 Mon Sep 17 00:00:00 2001 From: Christopher Buecheler Date: Tue, 18 Feb 2014 10:38:23 -0500 Subject: [PATCH] latest NPM updates caused a Mongoskin error. Fixed. --- app.js | 8 +- .../node_modules/commander/package.json | 6 +- .../node_modules/cookie-signature/.npmignore | 4 + .../node_modules/cookie-signature/History.md | 11 + .../node_modules/cookie-signature/Makefile | 7 + .../node_modules/cookie-signature/Readme.md | 42 + .../node_modules/cookie-signature/index.js | 42 + .../cookie-signature/package.json | 28 + .../connect/node_modules/fresh/.npmignore | 1 + .../connect/node_modules/fresh/History.md | 5 + .../connect/node_modules/fresh/Makefile | 7 + .../connect/node_modules/fresh/Readme.md | 57 + .../connect/node_modules/fresh/index.js | 53 + .../connect/node_modules/fresh/package.json | 32 + .../node_modules/debuglog/package.json | 6 +- .../connect/node_modules/send/.npmignore | 4 + .../connect/node_modules/send/History.md | 40 + .../connect/node_modules/send/Makefile | 8 + .../connect/node_modules/send/Readme.md | 128 ++ .../connect/node_modules/send/index.js | 2 + .../connect/node_modules/send/lib/send.js | 474 +++++ .../connect/node_modules/send/lib/utils.js | 47 + .../send/node_modules/debug/Readme.md | 115 ++ .../send/node_modules/debug/debug.js | 137 ++ .../send/node_modules/debug/index.js | 5 + .../send/node_modules/debug/lib/debug.js | 147 ++ .../send/node_modules/debug/package.json | 46 + .../send/node_modules/fresh/.npmignore | 1 + .../send/node_modules/fresh/History.md | 5 + .../send/node_modules/fresh/Makefile | 7 + .../send/node_modules/fresh/Readme.md | 57 + .../send/node_modules/fresh/index.js | 53 + .../send/node_modules/fresh/package.json | 33 + .../send/node_modules/mime/LICENSE} | 4 +- .../send/node_modules/mime/README.md | 66 + .../send/node_modules/mime/mime.js | 114 ++ .../send/node_modules/mime/package.json | 36 + .../send/node_modules/mime/test.js | 84 + .../send/node_modules/mime/types/mime.types | 1588 +++++++++++++++++ .../send/node_modules/mime/types/node.types | 77 + .../send/node_modules/range-parser/.npmignore | 1 + .../send/node_modules/range-parser/History.md | 15 + .../send/node_modules/range-parser/Makefile | 7 + .../send/node_modules/range-parser/Readme.md | 28 + .../send/node_modules/range-parser/index.js | 49 + .../node_modules/range-parser/package.json | 25 + .../connect/node_modules/send/package.json | 46 + .../cookie-signature/package.json | 6 +- .../express/node_modules/fresh/package.json | 6 +- .../merge-descriptors/package.json | 6 +- .../node_modules/range-parser/package.json | 6 +- .../express/node_modules/send/package.json | 6 +- .../node_modules/optimist/package.json | 2 +- .../node_modules/source-map/CHANGELOG.md | 11 +- .../lib/source-map/source-map-consumer.js | 1 + .../lib/source-map/source-map-generator.js | 2 +- .../node_modules/source-map/package.json | 18 +- .../node_modules/source-map/test/run-tests.js | 19 +- .../uglify-to-browserify/index.js | 3 + .../uglify-to-browserify/package.json | 10 +- .../node_modules/event-stream/.npmignore | 3 - .../node_modules/event-stream/.travis.yml | 4 - .../node_modules/event-stream/LICENCE | 22 - .../event-stream/examples/pretty.js | 25 - .../node_modules/event-stream/index.js | 341 ---- .../node_modules/duplexer/.npmignore | 3 - .../node_modules/duplexer/.travis.yml | 3 - .../node_modules/duplexer/Makefile | 4 - .../node_modules/duplexer/README.md | 36 - .../node_modules/duplexer/index.js | 87 - .../node_modules/duplexer/package.json | 41 - .../node_modules/duplexer/test.js | 27 - .../node_modules/from/LICENSE.APACHE2 | 15 - .../node_modules/from/LICENSE.MIT | 24 - .../event-stream/node_modules/from/index.js | 62 - .../node_modules/from/package.json | 33 - .../node_modules/from/readme.markdown | 6 - .../node_modules/from/test/index.js | 141 -- .../node_modules/map-stream/.npmignore | 3 - .../node_modules/map-stream/.travis.yml | 4 - .../node_modules/map-stream/LICENCE | 22 - .../map-stream/examples/pretty.js | 25 - .../node_modules/map-stream/index.js | 105 -- .../node_modules/map-stream/package.json | 30 - .../node_modules/map-stream/readme.markdown | 35 - .../map-stream/test/simple-map.asynct.js | 295 --- .../node_modules/optimist/.npmignore | 4 - .../node_modules/optimist/LICENSE | 21 - .../node_modules/optimist/README.markdown | 474 ----- .../node_modules/optimist/examples/bool.js | 10 - .../optimist/examples/boolean_double.js | 7 - .../optimist/examples/boolean_single.js | 7 - .../optimist/examples/default_hash.js | 8 - .../optimist/examples/default_singles.js | 7 - .../node_modules/optimist/examples/divide.js | 8 - .../optimist/examples/line_count.js | 20 - .../optimist/examples/line_count_options.js | 29 - .../optimist/examples/line_count_wrap.js | 29 - .../node_modules/optimist/examples/nonopt.js | 4 - .../node_modules/optimist/examples/reflect.js | 2 - .../node_modules/optimist/examples/short.js | 3 - .../node_modules/optimist/examples/string.js | 11 - .../optimist/examples/usage-options.js | 19 - .../node_modules/optimist/examples/xup.js | 10 - .../node_modules/optimist/index.js | 457 ----- .../optimist/node_modules/wordwrap/.npmignore | 1 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../optimist/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 40 - .../node_modules/wordwrap/test/break.js | 30 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 31 - .../node_modules/optimist/package.json | 46 - .../node_modules/optimist/test/_.js | 66 - .../node_modules/optimist/test/_/argv.js | 2 - .../node_modules/optimist/test/_/bin.js | 3 - .../node_modules/optimist/test/parse.js | 304 ---- .../node_modules/optimist/test/usage.js | 256 --- .../node_modules/pause-stream/.npmignore | 3 - .../node_modules/pause-stream/index.js | 76 - .../node_modules/pause-stream/package.json | 38 - .../node_modules/pause-stream/readme.markdown | 24 - .../node_modules/pause-stream/test/index.js | 17 - .../pause-stream/test/pause-end.js | 33 - .../node_modules/split/.npmignore | 3 - .../node_modules/split/.travis.yml | 4 - .../event-stream/node_modules/split/LICENCE | 22 - .../node_modules/split/examples/pretty.js | 25 - .../event-stream/node_modules/split/index.js | 35 - .../split/node_modules/through/.travis.yml | 4 - .../node_modules/through/LICENSE.APACHE2 | 15 - .../split/node_modules/through/LICENSE.MIT | 24 - .../split/node_modules/through/index.js | 65 - .../split/node_modules/through/package.json | 29 - .../node_modules/through/readme.markdown | 26 - .../split/node_modules/through/test/index.js | 113 -- .../node_modules/split/package.json | 35 - .../node_modules/split/readme.markdown | 20 - .../node_modules/split/test/split.asynct.js | 47 - .../node_modules/through/.travis.yml | 4 - .../node_modules/through/LICENSE.APACHE2 | 15 - .../node_modules/through/LICENSE.MIT | 24 - .../node_modules/through/index.js | 100 -- .../node_modules/through/package.json | 34 - .../node_modules/through/readme.markdown | 44 - .../node_modules/through/test/buffering.js | 37 - .../node_modules/through/test/end.js | 27 - .../node_modules/through/test/index.js | 113 -- .../node_modules/event-stream/package.json | 40 - .../node_modules/event-stream/readme.markdown | 286 --- .../event-stream/test/connect.asynct.js | 82 - .../event-stream/test/merge.asynct.js | 20 - .../event-stream/test/pause.asynct.js | 38 - .../event-stream/test/pipeline.asynct.js | 51 - .../event-stream/test/readArray.asynct.js | 88 - .../event-stream/test/readable.asynct.js | 167 -- .../event-stream/test/replace.asynct.js | 50 - .../event-stream/test/simple-map.asynct.js | 342 ---- .../event-stream/test/spec.asynct.js | 85 - .../event-stream/test/split.asynct.js | 46 - .../event-stream/test/stringify.js | 14 - .../event-stream/test/writeArray.asynct.js | 30 - .../node_modules/tap-stream/.npmignore | 1 - .../node_modules/tap-stream/.travis.yml | 5 - .../node_modules/tap-stream/README.md | 98 - .../tap-stream/examples/tap-nested-objects.js | 38 - .../examples/node_modules/tap-stream/index.js | 56 - .../node_modules/through/.travis.yml | 4 - .../node_modules/through/LICENSE.APACHE2 | 15 - .../node_modules/through/LICENSE.MIT | 24 - .../tap-stream/node_modules/through/index.js | 100 -- .../node_modules/through/package.json | 34 - .../node_modules/through/readme.markdown | 44 - .../node_modules/through/test/buffering.js | 37 - .../node_modules/through/test/end.js | 27 - .../node_modules/through/test/index.js | 113 -- .../node_modules/tap-stream/package.json | 38 - .../tap-stream/test/tap-stream.js | 104 -- .../node_modules/readdirp/package.json | 6 +- .../css/node_modules/css-parse/package.json | 2 +- .../node_modules/css-stringify/package.json | 6 +- .../node_modules/source-map/CHANGELOG.md | 11 +- .../lib/source-map/source-map-consumer.js | 1 + .../lib/source-map/source-map-generator.js | 2 +- .../node_modules/amdefine/package.json | 3 +- .../node_modules/source-map/package.json | 18 +- .../node_modules/source-map/test/run-tests.js | 19 +- .../node_modules/transformers/package.json | 2 +- .../node_modules/source-map/CHANGELOG.md | 11 +- .../lib/source-map/source-map-consumer.js | 1 + .../lib/source-map/source-map-generator.js | 2 +- .../node_modules/amdefine/package.json | 3 +- .../node_modules/source-map/package.json | 18 +- .../node_modules/source-map/test/run-tests.js | 19 +- .../uglify-to-browserify/.npmignore | 28 +- .../uglify-to-browserify/index.js | 3 + .../uglify-to-browserify/package.json | 10 +- .../with/node_modules/uglify-js/package.json | 2 +- .../jade/node_modules/with/package.json | 6 +- .../node_modules/bson/build/Release/bson.exp | Bin 25868 -> 25880 bytes .../node_modules/bson/build/Release/bson.lib | Bin 42016 -> 42016 bytes .../node_modules/bson/build/Release/bson.node | Bin 133632 -> 133632 bytes .../node_modules/bson/build/Release/bson.pdb | Bin 1518592 -> 1518592 bytes .../build/Release/obj/bson/CL.read.1.tlog | Bin 27466 -> 27658 bytes .../build/Release/obj/bson/CL.write.1.tlog | Bin 506 -> 542 bytes .../Release/obj/bson/bson.lastbuildstate | 2 +- .../bson/build/Release/obj/bson/bson.obj | Bin 845292 -> 845338 bytes .../build/Release/obj/bson/bson.write.1.tlog | 6 +- .../build/Release/obj/bson/cl.command.1.tlog | Bin 1334 -> 1358 bytes .../Release/obj/bson/link.command.1.tlog | Bin 1484 -> 1520 bytes .../build/Release/obj/bson/link.read.1.tlog | Bin 3352 -> 3388 bytes .../build/Release/obj/bson/link.write.1.tlog | Bin 736 -> 784 bytes .../build/Release/obj/bson/mt.command.1.tlog | Bin 588 -> 612 bytes .../build/Release/obj/bson/mt.read.1.tlog | Bin 852 -> 876 bytes .../build/Release/obj/bson/mt.write.1.tlog | Bin 394 -> 418 bytes .../bson/build/Release/obj/bson/vc100.pdb | Bin 348160 -> 348160 bytes .../node_modules/bson/build/binding.sln | 10 +- .../node_modules/bson/build/bson.vcxproj | 14 +- .../node_modules/bson/build/config.gypi | 7 +- .../mongodb/node_modules/bson/package.json | 2 +- node_modules/mongoskin/.travis.yml | 5 +- node_modules/mongoskin/Makefile | 48 +- node_modules/mongoskin/Readme.md | 751 ++------ node_modules/mongoskin/examples/admin.js | 2 +- node_modules/mongoskin/examples/config.js | 6 +- node_modules/mongoskin/examples/gridfs.js | 14 +- node_modules/mongoskin/examples/replset.js | 19 +- node_modules/mongoskin/index.js | 2 +- .../integration/integration_tests.js | 203 --- .../mongoskin/integration/longlive.js | 28 - node_modules/mongoskin/lib/admin.js | 26 + .../lib/{mongoskin => }/collection.js | 164 +- .../mongoskin/lib/{mongoskin => }/constant.js | 0 node_modules/mongoskin/lib/cursor.js | 33 + node_modules/mongoskin/lib/db.js | 96 + node_modules/mongoskin/lib/grid.js | 16 + node_modules/mongoskin/lib/grid_store.js | 34 + node_modules/mongoskin/lib/helper.js | 18 + node_modules/mongoskin/lib/index.js | 36 + node_modules/mongoskin/lib/mongo_client.js | 15 + node_modules/mongoskin/lib/mongoskin/admin.js | 67 - .../mongoskin/lib/mongoskin/cursor.js | 87 - node_modules/mongoskin/lib/mongoskin/db.js | 254 --- .../mongoskin/lib/mongoskin/gridfs.js | 67 - node_modules/mongoskin/lib/mongoskin/index.js | 200 --- .../mongoskin/lib/mongoskin/router.js | 49 - .../mongoskin/lib/mongoskin/server.js | 54 - node_modules/mongoskin/lib/mongoskin/utils.js | 82 - node_modules/mongoskin/lib/utils.js | 170 ++ .../node_modules/mongodb/.travis.yml | 3 +- .../node_modules/mongodb/CONTRIBUTING.md | 6 +- .../mongoskin/node_modules/mongodb/Readme.md | 111 +- .../node_modules/mongodb/lib/mongodb/admin.js | 2 +- .../mongodb/lib/mongodb/aggregation_cursor.js | 257 +++ .../mongodb/lib/mongodb/auth/mongodb_cr.js | 5 + .../mongodb/lib/mongodb/auth/mongodb_x509.js | 62 + .../mongodb/lib/mongodb/collection.js | 1247 +------------ .../lib/mongodb/collection/aggregation.js | 320 ++++ .../lib/mongodb/collection/commands.js | 136 ++ .../mongodb/lib/mongodb/collection/core.js | 727 ++++++++ .../mongodb/lib/mongodb/collection/geo.js | 78 + .../mongodb/lib/mongodb/collection/index.js | 72 + .../mongodb/lib/mongodb/collection/query.js | 153 ++ .../mongodb/lib/mongodb/collection/shared.js | 120 ++ .../mongodb/lib/mongodb/command_cursor.js | 309 ++++ .../lib/mongodb/commands/db_command.js | 10 +- .../lib/mongodb/commands/delete_command.js | 2 +- .../lib/mongodb/commands/query_command.js | 5 +- .../mongodb/lib/mongodb/connection/base.js | 344 ++-- .../lib/mongodb/connection/connection.js | 40 +- .../mongodb/lib/mongodb/connection/mongos.js | 13 + .../lib/mongodb/connection/repl_set/ha.js | 9 +- .../mongodb/connection/repl_set/repl_set.js | 40 +- .../connection/repl_set/repl_set_state.js | 6 +- .../repl_set/strategies/ping_strategy.js | 14 +- .../mongodb/lib/mongodb/connection/server.js | 45 +- .../mongodb/connection/server_capabilities.js | 48 + .../lib/mongodb/connection/url_parser.js | 5 +- .../mongodb/lib/mongodb/cursor.js | 64 +- .../node_modules/mongodb/lib/mongodb/db.js | 428 +++-- .../mongodb/lib/mongodb/gridfs/gridstore.js | 18 +- .../mongodb/lib/mongodb/gridfs/readstream.js | 13 +- .../mongodb/lib/mongodb/mongo_client.js | 26 +- .../node_modules/mongodb/lib/mongodb/scope.js | 199 +++ .../node_modules/mongodb/lib/mongodb/utils.js | 47 +- .../mongodb/node_modules/bson/binding.gyp | 3 +- .../node_modules/bson/browser_build/bson.js | 2 +- .../node_modules/bson/build/Release/bson.exp | Bin 25914 -> 25926 bytes .../node_modules/bson/build/Release/bson.lib | Bin 42016 -> 42016 bytes .../node_modules/bson/build/Release/bson.node | Bin 130560 -> 136704 bytes .../node_modules/bson/build/Release/bson.pdb | Bin 1502208 -> 1518592 bytes .../build/Release/obj/bson/CL.read.1.tlog | Bin 27422 -> 27666 bytes .../build/Release/obj/bson/CL.write.1.tlog | Bin 644 -> 680 bytes .../Release/obj/bson/bson.lastbuildstate | 2 +- .../bson/build/Release/obj/bson/bson.obj | Bin 779644 -> 843704 bytes .../build/Release/obj/bson/bson.write.1.tlog | 6 +- .../build/Release/obj/bson/cl.command.1.tlog | Bin 1426 -> 1660 bytes .../Release/obj/bson/link.command.1.tlog | Bin 1622 -> 1658 bytes .../build/Release/obj/bson/link.read.1.tlog | Bin 3490 -> 3526 bytes .../build/Release/obj/bson/link.write.1.tlog | Bin 920 -> 968 bytes .../build/Release/obj/bson/mt.command.1.tlog | Bin 680 -> 704 bytes .../build/Release/obj/bson/mt.read.1.tlog | Bin 944 -> 968 bytes .../build/Release/obj/bson/mt.write.1.tlog | Bin 486 -> 510 bytes .../bson/build/Release/obj/bson/vc100.pdb | Bin 331776 -> 339968 bytes .../node_modules/bson/build/binding.sln | 10 +- .../node_modules/bson/build/bson.vcxproj | 14 +- .../node_modules/bson/build/config.gypi | 7 +- .../mongodb/node_modules/bson/ext/bson.cc | 354 ++-- .../mongodb/node_modules/bson/ext/bson.h | 19 +- .../mongodb/node_modules/bson/ext/index.js | 19 +- .../node_modules/bson/lib/bson/bson.js | 6 +- .../node_modules/bson/lib/bson/objectid.js | 26 +- .../bson/node_modules/nan/.index.js | 1 + .../bson/node_modules/nan/LICENSE | 43 + .../bson/node_modules/nan/README.md | 735 ++++++++ .../node_modules/bson/node_modules/nan/nan.h | 978 ++++++++++ .../bson/node_modules/nan/package.json | 40 + .../mongodb/node_modules/bson/package.json | 14 +- .../kerberos/build/Release/kerberos.exp | Bin 25942 -> 25954 bytes .../kerberos/build/Release/kerberos.lib | Bin 42568 -> 42568 bytes .../kerberos/build/Release/kerberos.node | Bin 113152 -> 113152 bytes .../kerberos/build/Release/kerberos.pdb | Bin 1395712 -> 1395712 bytes ...11524.read.1.tlog => CL.17064.read.1.tlog} | 0 ...524.write.1.tlog => CL.17064.write.1.tlog} | 0 ...11820.read.1.tlog => CL.17288.read.1.tlog} | 0 ...820.write.1.tlog => CL.17288.write.1.tlog} | 0 ...13448.read.1.tlog => CL.17880.read.1.tlog} | 0 ...448.write.1.tlog => CL.17880.write.1.tlog} | 0 ...15984.read.1.tlog => CL.21324.read.1.tlog} | 0 ...984.write.1.tlog => CL.21324.write.1.tlog} | 0 ...17228.read.1.tlog => CL.21692.read.1.tlog} | 0 ...228.write.1.tlog => CL.21692.write.1.tlog} | 0 ...L.2476.read.1.tlog => CL.2800.read.1.tlog} | 0 ...2476.write.1.tlog => CL.2800.write.1.tlog} | 0 ...L.4768.read.1.tlog => CL.5900.read.1.tlog} | 0 ...4768.write.1.tlog => CL.5900.write.1.tlog} | 0 ...L.7700.read.1.tlog => CL.7212.read.1.tlog} | 0 ...7700.write.1.tlog => CL.7212.write.1.tlog} | 0 .../build/Release/obj/kerberos/CL.read.1.tlog | Bin 153704 -> 154076 bytes .../Release/obj/kerberos/CL.write.1.tlog | Bin 7798 -> 8182 bytes .../build/Release/obj/kerberos/base64.obj | Bin 9461 -> 9489 bytes .../Release/obj/kerberos/cl.command.1.tlog | Bin 12290 -> 12482 bytes .../obj/kerberos/kerberos.lastbuildstate | 2 +- .../build/Release/obj/kerberos/kerberos.obj | Bin 175408 -> 175478 bytes .../obj/kerberos/kerberos.write.1.tlog | 6 +- .../Release/obj/kerberos/kerberos_sspi.obj | Bin 49561 -> 49589 bytes .../Release/obj/kerberos/link.command.1.tlog | Bin 4120 -> 4240 bytes .../Release/obj/kerberos/link.read.1.tlog | Bin 7224 -> 7428 bytes .../Release/obj/kerberos/link.write.1.tlog | Bin 2828 -> 2960 bytes .../Release/obj/kerberos/mt.command.1.tlog | Bin 736 -> 760 bytes .../build/Release/obj/kerberos/mt.read.1.tlog | Bin 984 -> 1008 bytes .../Release/obj/kerberos/mt.write.1.tlog | Bin 526 -> 550 bytes .../Release/obj/kerberos/security_buffer.obj | Bin 583651 -> 583679 bytes .../kerberos/security_buffer_descriptor.obj | Bin 595098 -> 595132 bytes .../Release/obj/kerberos/security_context.obj | Bin 699355 -> 699413 bytes .../obj/kerberos/security_credentials.obj | Bin 622403 -> 622443 bytes .../build/Release/obj/kerberos/vc100.pdb | Bin 339968 -> 339968 bytes .../build/Release/obj/kerberos/worker.obj | Bin 152896 -> 152924 bytes .../node_modules/kerberos/build/binding.sln | 10 +- .../node_modules/kerberos/build/config.gypi | 7 +- .../kerberos/build/kerberos.vcxproj | 14 +- .../node_modules/kerberos/package.json | 2 +- .../node_modules/mongodb/package.json | 19 +- .../mongoskin/node_modules/mongodb/t.js | 242 +-- node_modules/mongoskin/package.json | 33 +- 367 files changed, 10151 insertions(+), 10721 deletions(-) create mode 100644 node_modules/express/node_modules/connect/node_modules/cookie-signature/.npmignore create mode 100644 node_modules/express/node_modules/connect/node_modules/cookie-signature/History.md create mode 100644 node_modules/express/node_modules/connect/node_modules/cookie-signature/Makefile create mode 100644 node_modules/express/node_modules/connect/node_modules/cookie-signature/Readme.md create mode 100644 node_modules/express/node_modules/connect/node_modules/cookie-signature/index.js create mode 100644 node_modules/express/node_modules/connect/node_modules/cookie-signature/package.json create mode 100644 node_modules/express/node_modules/connect/node_modules/fresh/.npmignore create mode 100644 node_modules/express/node_modules/connect/node_modules/fresh/History.md create mode 100644 node_modules/express/node_modules/connect/node_modules/fresh/Makefile create mode 100644 node_modules/express/node_modules/connect/node_modules/fresh/Readme.md create mode 100644 node_modules/express/node_modules/connect/node_modules/fresh/index.js create mode 100644 node_modules/express/node_modules/connect/node_modules/fresh/package.json create mode 100644 node_modules/express/node_modules/connect/node_modules/send/.npmignore create mode 100644 node_modules/express/node_modules/connect/node_modules/send/History.md create mode 100644 node_modules/express/node_modules/connect/node_modules/send/Makefile create mode 100644 node_modules/express/node_modules/connect/node_modules/send/Readme.md create mode 100644 node_modules/express/node_modules/connect/node_modules/send/index.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/lib/send.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/lib/utils.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/Readme.md create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/debug.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/index.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/lib/debug.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/package.json create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/.npmignore create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/History.md create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/Makefile create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/Readme.md create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/index.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/package.json rename node_modules/{jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/LICENCE => express/node_modules/connect/node_modules/send/node_modules/mime/LICENSE} (93%) create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/README.md create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/mime.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/package.json create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/test.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/types/mime.types create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/types/node.types create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/.npmignore create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/History.md create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/Makefile create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/Readme.md create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/index.js create mode 100644 node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/package.json create mode 100644 node_modules/express/node_modules/connect/node_modules/send/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/LICENCE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/examples/pretty.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/Makefile delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/README.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/test.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.MIT delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/LICENCE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/examples/pretty.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/LICENSE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/README.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/bool.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_double.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_single.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_hash.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_singles.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/divide.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_options.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_wrap.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/nonopt.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/reflect.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/short.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/string.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/usage-options.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/xup.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/README.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/center.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/meat.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/break.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/idleness.txt delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/wrap.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/argv.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/bin.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/parse.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/usage.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/LICENCE delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/examples/pretty.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.MIT delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/test/split.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.MIT delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/buffering.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/end.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/connect.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/merge.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pause.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pipeline.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readArray.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readable.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/replace.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/simple-map.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/spec.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/split.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/stringify.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/writeArray.asynct.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.npmignore delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/README.md delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/examples/tap-nested-objects.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/.travis.yml delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.MIT delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/readme.markdown delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/buffering.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/end.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/index.js delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/package.json delete mode 100644 node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/test/tap-stream.js delete mode 100644 node_modules/mongoskin/integration/integration_tests.js delete mode 100644 node_modules/mongoskin/integration/longlive.js create mode 100644 node_modules/mongoskin/lib/admin.js rename node_modules/mongoskin/lib/{mongoskin => }/collection.js (50%) rename node_modules/mongoskin/lib/{mongoskin => }/constant.js (100%) 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.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 delete mode 100644 node_modules/mongoskin/lib/mongoskin/admin.js delete mode 100644 node_modules/mongoskin/lib/mongoskin/cursor.js delete mode 100644 node_modules/mongoskin/lib/mongoskin/db.js delete mode 100644 node_modules/mongoskin/lib/mongoskin/gridfs.js delete mode 100644 node_modules/mongoskin/lib/mongoskin/index.js delete mode 100644 node_modules/mongoskin/lib/mongoskin/router.js delete mode 100644 node_modules/mongoskin/lib/mongoskin/server.js delete mode 100644 node_modules/mongoskin/lib/mongoskin/utils.js create mode 100644 node_modules/mongoskin/lib/utils.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/aggregation_cursor.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/auth/mongodb_x509.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/aggregation.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/commands.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/core.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/geo.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/index.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/query.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/shared.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/command_cursor.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/server_capabilities.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/lib/mongodb/scope.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/.index.js create mode 100644 node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/LICENSE create mode 100644 node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/README.md create mode 100644 node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/nan.h create mode 100644 node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/package.json rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.11524.read.1.tlog => CL.17064.read.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.11524.write.1.tlog => CL.17064.write.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.11820.read.1.tlog => CL.17288.read.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.11820.write.1.tlog => CL.17288.write.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.13448.read.1.tlog => CL.17880.read.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.13448.write.1.tlog => CL.17880.write.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.15984.read.1.tlog => CL.21324.read.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.15984.write.1.tlog => CL.21324.write.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.17228.read.1.tlog => CL.21692.read.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.17228.write.1.tlog => CL.21692.write.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.2476.read.1.tlog => CL.2800.read.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.2476.write.1.tlog => CL.2800.write.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.4768.read.1.tlog => CL.5900.read.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.4768.write.1.tlog => CL.5900.write.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.7700.read.1.tlog => CL.7212.read.1.tlog} (100%) rename node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/{CL.7700.write.1.tlog => CL.7212.write.1.tlog} (100%) diff --git a/app.js b/app.js index a72b07e..693e08d 100644 --- a/app.js +++ b/app.js @@ -10,13 +10,7 @@ var http = require('http'); var path = require('path'); // Database var mongo = require('mongoskin'); -var db = mongo.db([ - 'localhost:27017/?auto_reconnect' - ], { - database: 'nodetest2', - safe: true - } -); +var db = mongo.db("mongodb://localhost:27017/nodetest2", {native_parser:true}); var app = express(); diff --git a/node_modules/express/node_modules/commander/package.json b/node_modules/express/node_modules/commander/package.json index 664ebc8..0c8b13f 100644 --- a/node_modules/express/node_modules/commander/package.json +++ b/node_modules/express/node_modules/commander/package.json @@ -37,5 +37,9 @@ }, "homepage": "https://github.com/visionmedia/commander.js", "_id": "commander@1.3.2", - "_from": "commander@1.3.2" + "dist": { + "shasum": "528989ecd4d3dd88cd9bb939ced7be3ac589b033" + }, + "_from": "commander@1.3.2", + "_resolved": "https://registry.npmjs.org/commander/-/commander-1.3.2.tgz" } diff --git a/node_modules/express/node_modules/connect/node_modules/cookie-signature/.npmignore b/node_modules/express/node_modules/connect/node_modules/cookie-signature/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/cookie-signature/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/node_modules/express/node_modules/connect/node_modules/cookie-signature/History.md b/node_modules/express/node_modules/connect/node_modules/cookie-signature/History.md new file mode 100644 index 0000000..9e30179 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/cookie-signature/History.md @@ -0,0 +1,11 @@ + +1.0.1 / 2013-04-15 +================== + + * Revert "Changed underlying HMAC algo. to sha512." + * Revert "Fix for timing attacks on MAC verification." + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/express/node_modules/connect/node_modules/cookie-signature/Makefile b/node_modules/express/node_modules/connect/node_modules/cookie-signature/Makefile new file mode 100644 index 0000000..4e9c8d3 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/cookie-signature/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/express/node_modules/connect/node_modules/cookie-signature/Readme.md b/node_modules/express/node_modules/connect/node_modules/cookie-signature/Readme.md new file mode 100644 index 0000000..2559e84 --- /dev/null +++ b/node_modules/express/node_modules/connect/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/express/node_modules/connect/node_modules/cookie-signature/index.js b/node_modules/express/node_modules/connect/node_modules/cookie-signature/index.js new file mode 100644 index 0000000..ed62814 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/cookie-signature/index.js @@ -0,0 +1,42 @@ + +/** + * Module dependencies. + */ + +var crypto = require('crypto'); + +/** + * Sign the given `val` with `secret`. + * + * @param {String} val + * @param {String} secret + * @return {String} + * @api private + */ + +exports.sign = function(val, secret){ + if ('string' != typeof val) throw new TypeError('cookie required'); + if ('string' != typeof secret) throw new TypeError('secret required'); + return val + '.' + crypto + .createHmac('sha256', secret) + .update(val) + .digest('base64') + .replace(/\=+$/, ''); +}; + +/** + * Unsign and decode the given `val` with `secret`, + * returning `false` if the signature is invalid. + * + * @param {String} val + * @param {String} secret + * @return {String|Boolean} + * @api private + */ + +exports.unsign = function(val, secret){ + if ('string' != typeof val) throw new TypeError('cookie required'); + if ('string' != typeof secret) throw new TypeError('secret required'); + var str = val.slice(0, val.lastIndexOf('.')); + return exports.sign(str, secret) == val ? str : false; +}; diff --git a/node_modules/express/node_modules/connect/node_modules/cookie-signature/package.json b/node_modules/express/node_modules/connect/node_modules/cookie-signature/package.json new file mode 100644 index 0000000..1b160d1 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/cookie-signature/package.json @@ -0,0 +1,28 @@ +{ + "name": "cookie-signature", + "version": "1.0.1", + "description": "Sign and unsign cookies", + "keywords": [ + "cookie", + "sign", + "unsign" + ], + "author": { + "name": "TJ Holowaychuk", + "email": "tj@learnboost.com" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "main": "index", + "readme": "\n# cookie-signature\n\n Sign and unsign cookies.\n\n## Example\n\n```js\nvar cookie = require('cookie-signature');\n\nvar val = cookie.sign('hello', 'tobiiscool');\nval.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI');\n\nvar val = cookie.sign('hello', 'tobiiscool');\ncookie.unsign(val, 'tobiiscool').should.equal('hello');\ncookie.unsign(val, 'luna').should.be.false;\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 LearnBoost <tj@learnboost.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "Readme.md", + "_id": "cookie-signature@1.0.1", + "dist": { + "shasum": "5ea27b06fe136e2aaf2ec9b9a0fec680c787daac" + }, + "_from": "cookie-signature@1.0.1", + "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.1.tgz" +} diff --git a/node_modules/express/node_modules/connect/node_modules/fresh/.npmignore b/node_modules/express/node_modules/connect/node_modules/fresh/.npmignore new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/fresh/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/express/node_modules/connect/node_modules/fresh/History.md b/node_modules/express/node_modules/connect/node_modules/fresh/History.md new file mode 100644 index 0000000..60a2903 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/fresh/History.md @@ -0,0 +1,5 @@ + +0.2.0 / 2013-08-11 +================== + + * fix: return false for no-cache diff --git a/node_modules/express/node_modules/connect/node_modules/fresh/Makefile b/node_modules/express/node_modules/connect/node_modules/fresh/Makefile new file mode 100644 index 0000000..8e8640f --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/fresh/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --reporter spec \ + --require should + +.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/fresh/Readme.md b/node_modules/express/node_modules/connect/node_modules/fresh/Readme.md new file mode 100644 index 0000000..61366c5 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/fresh/Readme.md @@ -0,0 +1,57 @@ + +# node-fresh + + HTTP response freshness testing + +## fresh(req, res) + + Check freshness of `req` and `res` headers. + + When the cache is "fresh" __true__ is returned, + otherwise __false__ is returned to indicate that + the cache is now stale. + +## Example: + +```js +var req = { 'if-none-match': 'tobi' }; +var res = { 'etag': 'luna' }; +fresh(req, res); +// => false + +var req = { 'if-none-match': 'tobi' }; +var res = { 'etag': 'tobi' }; +fresh(req, res); +// => true +``` + +## Installation + +``` +$ npm install fresh +``` + +## License + +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/fresh/index.js b/node_modules/express/node_modules/connect/node_modules/fresh/index.js new file mode 100644 index 0000000..9c3f47d --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/fresh/index.js @@ -0,0 +1,53 @@ + +/** + * Expose `fresh()`. + */ + +module.exports = fresh; + +/** + * Check freshness of `req` and `res` headers. + * + * When the cache is "fresh" __true__ is returned, + * otherwise __false__ is returned to indicate that + * the cache is now stale. + * + * @param {Object} req + * @param {Object} res + * @return {Boolean} + * @api public + */ + +function fresh(req, res) { + // defaults + var etagMatches = true; + var notModified = true; + + // fields + var modifiedSince = req['if-modified-since']; + var noneMatch = req['if-none-match']; + var lastModified = res['last-modified']; + var etag = res['etag']; + var cc = req['cache-control']; + + // unconditional request + if (!modifiedSince && !noneMatch) return false; + + // check for no-cache cache request directive + if (cc && cc.indexOf('no-cache') !== -1) return false; + + // parse if-none-match + if (noneMatch) noneMatch = noneMatch.split(/ *, */); + + // if-none-match + if (noneMatch) etagMatches = ~noneMatch.indexOf(etag) || '*' == noneMatch[0]; + + // if-modified-since + if (modifiedSince) { + modifiedSince = new Date(modifiedSince); + lastModified = new Date(lastModified); + notModified = lastModified <= modifiedSince; + } + + return !! (etagMatches && notModified); +} \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/fresh/package.json b/node_modules/express/node_modules/connect/node_modules/fresh/package.json new file mode 100644 index 0000000..4c93abb --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/fresh/package.json @@ -0,0 +1,32 @@ +{ + "name": "fresh", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "description": "HTTP response freshness testing", + "version": "0.2.0", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/node-fresh.git" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "readme": "\n# node-fresh\n\n HTTP response freshness testing\n\n## fresh(req, res)\n\n Check freshness of `req` and `res` headers.\n\n When the cache is \"fresh\" __true__ is returned,\n otherwise __false__ is returned to indicate that\n the cache is now stale.\n\n## Example:\n\n```js\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'luna' };\nfresh(req, res);\n// => false\n\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'tobi' };\nfresh(req, res);\n// => true\n```\n\n## Installation\n\n```\n$ npm install fresh\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/node-fresh/issues" + }, + "homepage": "https://github.com/visionmedia/node-fresh", + "_id": "fresh@0.2.0", + "dist": { + "shasum": "129869ce4b069a25a531126de6745be67c382115" + }, + "_from": "fresh@0.2.0", + "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz" +} diff --git a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/package.json b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/package.json index 5ca511c..3715d4b 100644 --- a/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/package.json +++ b/node_modules/express/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/node_modules/debuglog/package.json @@ -22,5 +22,9 @@ }, "homepage": "https://github.com/sam-github/node-debuglog", "_id": "debuglog@0.0.2", - "_from": "debuglog@0.0.2" + "dist": { + "shasum": "e80a31fa7555f37e752f7947e94e3a042131fb53" + }, + "_from": "debuglog@0.0.2", + "_resolved": "https://registry.npmjs.org/debuglog/-/debuglog-0.0.2.tgz" } diff --git a/node_modules/express/node_modules/connect/node_modules/send/.npmignore b/node_modules/express/node_modules/connect/node_modules/send/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/node_modules/express/node_modules/connect/node_modules/send/History.md b/node_modules/express/node_modules/connect/node_modules/send/History.md new file mode 100644 index 0000000..55c4af7 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/History.md @@ -0,0 +1,40 @@ + +0.1.4 / 2013-08-11 +================== + + * update fresh + +0.1.3 / 2013-07-08 +================== + + * Revert "Fix fd leak" + +0.1.2 / 2013-07-03 +================== + + * Fix fd leak + +0.1.0 / 2012-08-25 +================== + + * add options parameter to send() that is passed to fs.createReadStream() [kanongil] + +0.0.4 / 2012-08-16 +================== + + * allow custom "Accept-Ranges" definition + +0.0.3 / 2012-07-16 +================== + + * fix normalization of the root directory. Closes #3 + +0.0.2 / 2012-07-09 +================== + + * add passing of req explicitly for now (YUCK) + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/express/node_modules/connect/node_modules/send/Makefile b/node_modules/express/node_modules/connect/node_modules/send/Makefile new file mode 100644 index 0000000..a9dcfd5 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/Makefile @@ -0,0 +1,8 @@ + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter spec \ + --bail + +.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/Readme.md b/node_modules/express/node_modules/connect/node_modules/send/Readme.md new file mode 100644 index 0000000..ea7b234 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/Readme.md @@ -0,0 +1,128 @@ +# send + + Send is Connect's `static()` extracted for generalized use, a streaming static file + server supporting partial responses (Ranges), conditional-GET negotiation, high test coverage, and granular events which may be leveraged to take appropriate actions in your application or framework. + +## Installation + + $ npm install send + +## Examples + + Small: + +```js +var http = require('http'); +var send = require('send'); + +var app = http.createServer(function(req, res){ + send(req, req.url).pipe(res); +}).listen(3000); +``` + + Serving from a root directory with custom error-handling: + +```js +var http = require('http'); +var send = require('send'); +var url = require('url'); + +var app = http.createServer(function(req, res){ + // your custom error-handling logic: + function error(err) { + res.statusCode = err.status || 500; + res.end(err.message); + } + + // your custom directory handling logic: + function redirect() { + res.statusCode = 301; + res.setHeader('Location', req.url + '/'); + res.end('Redirecting to ' + req.url + '/'); + } + + // transfer arbitrary files from within + // /www/example.com/public/* + send(req, url.parse(req.url).pathname) + .root('/www/example.com/public') + .on('error', error) + .on('directory', redirect) + .pipe(res); +}).listen(3000); +``` + +## API + +### Events + + - `error` an error occurred `(err)` + - `directory` a directory was requested + - `file` a file was requested `(path, stat)` + - `stream` file streaming has started `(stream)` + - `end` streaming has completed + +### .root(dir) + + Serve files relative to `path`. Aliased as `.from(dir)`. + +### .index(path) + + By default send supports "index.html" files, to disable this + invoke `.index(false)` or to supply a new index pass a string. + +### .maxage(ms) + + Provide a max-age in milliseconds for http caching, defaults to 0. + +### .hidden(bool) + + Enable or disable transfer of hidden files, defaults to false. + +## Error-handling + + By default when no `error` listeners are present an automatic response will be made, otherwise you have full control over the response, aka you may show a 5xx page etc. + +## Caching + + It does _not_ perform internal caching, you should use a reverse proxy cache such + as Varnish for this, or those fancy things called CDNs. If your application is small enough that it would benefit from single-node memory caching, it's small enough that it does not need caching at all ;). + +## Debugging + + To enable `debug()` instrumentation output export __DEBUG__: + +``` +$ DEBUG=send node app +``` + +## Running tests + +``` +$ npm install +$ make test +``` + +## License + +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express/node_modules/connect/node_modules/send/index.js b/node_modules/express/node_modules/connect/node_modules/send/index.js new file mode 100644 index 0000000..f17158d --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/index.js @@ -0,0 +1,2 @@ + +module.exports = require('./lib/send'); \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/lib/send.js b/node_modules/express/node_modules/connect/node_modules/send/lib/send.js new file mode 100644 index 0000000..a3d94a6 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/lib/send.js @@ -0,0 +1,474 @@ + +/** + * Module dependencies. + */ + +var debug = require('debug')('send') + , parseRange = require('range-parser') + , Stream = require('stream') + , mime = require('mime') + , fresh = require('fresh') + , path = require('path') + , http = require('http') + , fs = require('fs') + , basename = path.basename + , normalize = path.normalize + , join = path.join + , utils = require('./utils'); + +/** + * Expose `send`. + */ + +exports = module.exports = send; + +/** + * Expose mime module. + */ + +exports.mime = mime; + +/** + * Return a `SendStream` for `req` and `path`. + * + * @param {Request} req + * @param {String} path + * @param {Object} options + * @return {SendStream} + * @api public + */ + +function send(req, path, options) { + return new SendStream(req, path, options); +} + +/** + * Initialize a `SendStream` with the given `path`. + * + * Events: + * + * - `error` an error occurred + * - `stream` file streaming has started + * - `end` streaming has completed + * - `directory` a directory was requested + * + * @param {Request} req + * @param {String} path + * @param {Object} options + * @api private + */ + +function SendStream(req, path, options) { + var self = this; + this.req = req; + this.path = path; + this.options = options || {}; + this.maxage(0); + this.hidden(false); + this.index('index.html'); +} + +/** + * Inherits from `Stream.prototype`. + */ + +SendStream.prototype.__proto__ = Stream.prototype; + +/** + * Enable or disable "hidden" (dot) files. + * + * @param {Boolean} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.hidden = function(val){ + debug('hidden %s', val); + this._hidden = val; + return this; +}; + +/** + * Set index `path`, set to a falsy + * value to disable index support. + * + * @param {String|Boolean} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.index = function(path){ + debug('index %s', path); + this._index = path; + return this; +}; + +/** + * Set root `path`. + * + * @param {String} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.root = +SendStream.prototype.from = function(path){ + this._root = normalize(path); + return this; +}; + +/** + * Set max-age to `ms`. + * + * @param {Number} ms + * @return {SendStream} + * @api public + */ + +SendStream.prototype.maxage = function(ms){ + if (Infinity == ms) ms = 60 * 60 * 24 * 365 * 1000; + debug('max-age %d', ms); + this._maxage = ms; + return this; +}; + +/** + * Emit error with `status`. + * + * @param {Number} status + * @api private + */ + +SendStream.prototype.error = function(status, err){ + var res = this.res; + var msg = http.STATUS_CODES[status]; + err = err || new Error(msg); + err.status = status; + if (this.listeners('error').length) return this.emit('error', err); + res.statusCode = err.status; + res.end(msg); +}; + +/** + * Check if the pathname is potentially malicious. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isMalicious = function(){ + return !this._root && ~this.path.indexOf('..'); +}; + +/** + * Check if the pathname ends with "/". + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.hasTrailingSlash = function(){ + return '/' == this.path[this.path.length - 1]; +}; + +/** + * Check if the basename leads with ".". + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.hasLeadingDot = function(){ + return '.' == basename(this.path)[0]; +}; + +/** + * Check if this is a conditional GET request. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isConditionalGET = function(){ + return this.req.headers['if-none-match'] + || this.req.headers['if-modified-since']; +}; + +/** + * Strip content-* header fields. + * + * @api private + */ + +SendStream.prototype.removeContentHeaderFields = function(){ + var res = this.res; + Object.keys(res._headers).forEach(function(field){ + if (0 == field.indexOf('content')) { + res.removeHeader(field); + } + }); +}; + +/** + * Respond with 304 not modified. + * + * @api private + */ + +SendStream.prototype.notModified = function(){ + var res = this.res; + debug('not modified'); + this.removeContentHeaderFields(); + res.statusCode = 304; + res.end(); +}; + +/** + * Check if the request is cacheable, aka + * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}). + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isCachable = function(){ + var res = this.res; + return (res.statusCode >= 200 && res.statusCode < 300) || 304 == res.statusCode; +}; + +/** + * Handle stat() error. + * + * @param {Error} err + * @api private + */ + +SendStream.prototype.onStatError = function(err){ + var notfound = ['ENOENT', 'ENAMETOOLONG', 'ENOTDIR']; + if (~notfound.indexOf(err.code)) return this.error(404, err); + this.error(500, err); +}; + +/** + * Check if the cache is fresh. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isFresh = function(){ + return fresh(this.req.headers, this.res._headers); +}; + +/** + * Redirect to `path`. + * + * @param {String} path + * @api private + */ + +SendStream.prototype.redirect = function(path){ + if (this.listeners('directory').length) return this.emit('directory'); + var res = this.res; + path += '/'; + res.statusCode = 301; + res.setHeader('Location', path); + res.end('Redirecting to ' + utils.escape(path)); +}; + +/** + * Pipe to `res. + * + * @param {Stream} res + * @return {Stream} res + * @api public + */ + +SendStream.prototype.pipe = function(res){ + var self = this + , args = arguments + , path = this.path + , root = this._root; + + // references + this.res = res; + + // invalid request uri + path = utils.decode(path); + if (-1 == path) return this.error(400); + + // null byte(s) + if (~path.indexOf('\0')) return this.error(400); + + // join / normalize from optional root dir + if (root) path = normalize(join(this._root, path)); + + // ".." is malicious without "root" + if (this.isMalicious()) return this.error(403); + + // malicious path + if (root && 0 != path.indexOf(root)) return this.error(403); + + // hidden file support + if (!this._hidden && this.hasLeadingDot()) return this.error(404); + + // index file support + if (this._index && this.hasTrailingSlash()) path += this._index; + + debug('stat "%s"', path); + fs.stat(path, function(err, stat){ + if (err) return self.onStatError(err); + if (stat.isDirectory()) return self.redirect(self.path); + self.emit('file', path, stat); + self.send(path, stat); + }); + + return res; +}; + +/** + * Transfer `path`. + * + * @param {String} path + * @api public + */ + +SendStream.prototype.send = function(path, stat){ + var options = this.options; + var len = stat.size; + var res = this.res; + var req = this.req; + var ranges = req.headers.range; + var offset = options.start || 0; + + // set header fields + this.setHeader(stat); + + // set content-type + this.type(path); + + // conditional GET support + if (this.isConditionalGET() + && this.isCachable() + && this.isFresh()) { + return this.notModified(); + } + + // adjust len to start/end options + len = Math.max(0, len - offset); + if (options.end !== undefined) { + var bytes = options.end - offset + 1; + if (len > bytes) len = bytes; + } + + // Range support + if (ranges) { + ranges = parseRange(len, ranges); + + // unsatisfiable + if (-1 == ranges) { + res.setHeader('Content-Range', 'bytes */' + stat.size); + return this.error(416); + } + + // valid (syntactically invalid ranges are treated as a regular response) + if (-2 != ranges) { + options.start = offset + ranges[0].start; + options.end = offset + ranges[0].end; + + // Content-Range + res.statusCode = 206; + res.setHeader('Content-Range', 'bytes ' + + ranges[0].start + + '-' + + ranges[0].end + + '/' + + len); + len = options.end - options.start + 1; + } + } + + // content-length + res.setHeader('Content-Length', len); + + // HEAD support + if ('HEAD' == req.method) return res.end(); + + this.stream(path, options); +}; + +/** + * Stream `path` to the response. + * + * @param {String} path + * @param {Object} options + * @api private + */ + +SendStream.prototype.stream = function(path, options){ + // TODO: this is all lame, refactor meeee + var self = this; + var res = this.res; + var req = this.req; + + // pipe + var stream = fs.createReadStream(path, options); + this.emit('stream', stream); + stream.pipe(res); + + // socket closed, done with the fd + req.on('close', stream.destroy.bind(stream)); + + // error handling code-smell + stream.on('error', function(err){ + // no hope in responding + if (res._header) { + console.error(err.stack); + req.destroy(); + return; + } + + // 500 + err.status = 500; + self.emit('error', err); + }); + + // end + stream.on('end', function(){ + self.emit('end'); + }); +}; + +/** + * Set content-type based on `path` + * if it hasn't been explicitly set. + * + * @param {String} path + * @api private + */ + +SendStream.prototype.type = function(path){ + var res = this.res; + if (res.getHeader('Content-Type')) return; + var type = mime.lookup(path); + var charset = mime.charsets.lookup(type); + debug('content-type %s', type); + res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : '')); +}; + +/** + * Set reaponse header fields, most + * fields may be pre-defined. + * + * @param {Object} stat + * @api private + */ + +SendStream.prototype.setHeader = function(stat){ + var res = this.res; + if (!res.getHeader('Accept-Ranges')) res.setHeader('Accept-Ranges', 'bytes'); + if (!res.getHeader('ETag')) res.setHeader('ETag', utils.etag(stat)); + if (!res.getHeader('Date')) res.setHeader('Date', new Date().toUTCString()); + if (!res.getHeader('Cache-Control')) res.setHeader('Cache-Control', 'public, max-age=' + (this._maxage / 1000)); + if (!res.getHeader('Last-Modified')) res.setHeader('Last-Modified', stat.mtime.toUTCString()); +}; diff --git a/node_modules/express/node_modules/connect/node_modules/send/lib/utils.js b/node_modules/express/node_modules/connect/node_modules/send/lib/utils.js new file mode 100644 index 0000000..950e5a2 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/lib/utils.js @@ -0,0 +1,47 @@ + +/** + * Return an ETag in the form of `"-"` + * from the given `stat`. + * + * @param {Object} stat + * @return {String} + * @api private + */ + +exports.etag = function(stat) { + return '"' + stat.size + '-' + Number(stat.mtime) + '"'; +}; + +/** + * decodeURIComponent. + * + * Allows V8 to only deoptimize this fn instead of all + * of send(). + * + * @param {String} path + * @api private + */ + +exports.decode = function(path){ + try { + return decodeURIComponent(path); + } catch (err) { + return -1; + } +}; + +/** + * Escape the given string of `html`. + * + * @param {String} html + * @return {String} + * @api private + */ + +exports.escape = function(html){ + return String(html) + .replace(/&(?!\w+;)/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); +}; \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/Readme.md b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/Readme.md new file mode 100644 index 0000000..c5a34e8 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/Readme.md @@ -0,0 +1,115 @@ +# debug + + tiny node.js debugging utility modelled after node core's debugging technique. + +## Installation + +``` +$ npm install debug +``` + +## Usage + + With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility. + +Example _app.js_: + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %s', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example _worker.js_: + +```js +var debug = require('debug')('worker'); + +setInterval(function(){ + debug('doing some work'); +}, 1000); +``` + + The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: + + ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) + + ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) + +## Millisecond diff + + When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) + + When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: + _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_ + + ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) + +## Conventions + + If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". + +## Wildcards + + The "*" character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + + You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with "connect:". + +## Browser support + + Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + a('doing some work'); +}, 1200); +``` + +## License + +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/debug.js b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/debug.js new file mode 100644 index 0000000..509dc0d --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/debug.js @@ -0,0 +1,137 @@ + +/** + * Expose `debug()` as the module. + */ + +module.exports = debug; + +/** + * Create a debugger with the given `name`. + * + * @param {String} name + * @return {Type} + * @api public + */ + +function debug(name) { + if (!debug.enabled(name)) return function(){}; + + return function(fmt){ + fmt = coerce(fmt); + + var curr = new Date; + var ms = curr - (debug[name] || curr); + debug[name] = curr; + + fmt = name + + ' ' + + fmt + + ' +' + debug.humanize(ms); + + // This hackery is required for IE8 + // where `console.log` doesn't have 'apply' + window.console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); + } +} + +/** + * The currently active debug mode names. + */ + +debug.names = []; +debug.skips = []; + +/** + * Enables a debug mode by name. This can include modes + * separated by a colon and wildcards. + * + * @param {String} name + * @api public + */ + +debug.enable = function(name) { + try { + localStorage.debug = name; + } catch(e){} + + var split = (name || '').split(/[\s,]+/) + , len = split.length; + + for (var i = 0; i < len; i++) { + name = split[i].replace('*', '.*?'); + if (name[0] === '-') { + debug.skips.push(new RegExp('^' + name.substr(1) + '$')); + } + else { + debug.names.push(new RegExp('^' + name + '$')); + } + } +}; + +/** + * Disable debug output. + * + * @api public + */ + +debug.disable = function(){ + debug.enable(''); +}; + +/** + * Humanize the given `ms`. + * + * @param {Number} m + * @return {String} + * @api private + */ + +debug.humanize = function(ms) { + var sec = 1000 + , min = 60 * 1000 + , hour = 60 * min; + + if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; + if (ms >= min) return (ms / min).toFixed(1) + 'm'; + if (ms >= sec) return (ms / sec | 0) + 's'; + return ms + 'ms'; +}; + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +debug.enabled = function(name) { + for (var i = 0, len = debug.skips.length; i < len; i++) { + if (debug.skips[i].test(name)) { + return false; + } + } + for (var i = 0, len = debug.names.length; i < len; i++) { + if (debug.names[i].test(name)) { + return true; + } + } + return false; +}; + +/** + * Coerce `val`. + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + +// persist + +try { + if (window.localStorage) debug.enable(localStorage.debug); +} catch(e){} diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/index.js b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/index.js new file mode 100644 index 0000000..e02c13b --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/index.js @@ -0,0 +1,5 @@ +if ('undefined' == typeof window) { + module.exports = require('./lib/debug'); +} else { + module.exports = require('./debug'); +} diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/lib/debug.js b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/lib/debug.js new file mode 100644 index 0000000..3b0a918 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/lib/debug.js @@ -0,0 +1,147 @@ +/** + * Module dependencies. + */ + +var tty = require('tty'); + +/** + * Expose `debug()` as the module. + */ + +module.exports = debug; + +/** + * Enabled debuggers. + */ + +var names = [] + , skips = []; + +(process.env.DEBUG || '') + .split(/[\s,]+/) + .forEach(function(name){ + name = name.replace('*', '.*?'); + if (name[0] === '-') { + skips.push(new RegExp('^' + name.substr(1) + '$')); + } else { + names.push(new RegExp('^' + name + '$')); + } + }); + +/** + * Colors. + */ + +var colors = [6, 2, 3, 4, 5, 1]; + +/** + * Previous debug() call. + */ + +var prev = {}; + +/** + * Previously assigned color. + */ + +var prevColor = 0; + +/** + * Is stdout a TTY? Colored output is disabled when `true`. + */ + +var isatty = tty.isatty(2); + +/** + * Select a color. + * + * @return {Number} + * @api private + */ + +function color() { + return colors[prevColor++ % colors.length]; +} + +/** + * Humanize the given `ms`. + * + * @param {Number} m + * @return {String} + * @api private + */ + +function humanize(ms) { + var sec = 1000 + , min = 60 * 1000 + , hour = 60 * min; + + if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; + if (ms >= min) return (ms / min).toFixed(1) + 'm'; + if (ms >= sec) return (ms / sec | 0) + 's'; + return ms + 'ms'; +} + +/** + * Create a debugger with the given `name`. + * + * @param {String} name + * @return {Type} + * @api public + */ + +function debug(name) { + function disabled(){} + disabled.enabled = false; + + var match = skips.some(function(re){ + return re.test(name); + }); + + if (match) return disabled; + + match = names.some(function(re){ + return re.test(name); + }); + + if (!match) return disabled; + var c = color(); + + function colored(fmt) { + fmt = coerce(fmt); + + var curr = new Date; + var ms = curr - (prev[name] || curr); + prev[name] = curr; + + fmt = ' \u001b[9' + c + 'm' + name + ' ' + + '\u001b[3' + c + 'm\u001b[90m' + + fmt + '\u001b[3' + c + 'm' + + ' +' + humanize(ms) + '\u001b[0m'; + + console.error.apply(this, arguments); + } + + function plain(fmt) { + fmt = coerce(fmt); + + fmt = new Date().toUTCString() + + ' ' + name + ' ' + fmt; + console.error.apply(this, arguments); + } + + colored.enabled = plain.enabled = true; + + return isatty || process.env.DEBUG_COLORS + ? colored + : plain; +} + +/** + * Coerce `val`. + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/package.json b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/package.json new file mode 100644 index 0000000..f44874e --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/debug/package.json @@ -0,0 +1,46 @@ +{ + "name": "debug", + "version": "0.7.4", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "description": "small debugging utility", + "keywords": [ + "debug", + "log", + "debugger" + ], + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "*" + }, + "main": "lib/debug.js", + "browser": "./debug.js", + "engines": { + "node": "*" + }, + "files": [ + "lib/debug.js", + "debug.js", + "index.js" + ], + "component": { + "scripts": { + "debug/index.js": "index.js", + "debug/debug.js": "debug.js" + } + }, + "readme": "# debug\n\n tiny node.js debugging utility modelled after node core's debugging technique.\n\n## Installation\n\n```\n$ npm install debug\n```\n\n## Usage\n\n With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.\n \nExample _app.js_:\n\n```js\nvar debug = require('debug')('http')\n , http = require('http')\n , name = 'My App';\n\n// fake app\n\ndebug('booting %s', name);\n\nhttp.createServer(function(req, res){\n debug(req.method + ' ' + req.url);\n res.end('hello\\n');\n}).listen(3000, function(){\n debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample _worker.js_:\n\n```js\nvar debug = require('debug')('worker');\n\nsetInterval(function(){\n debug('doing some work');\n}, 1000);\n```\n\n The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:\n\n ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)\n\n ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)\n\n## Millisecond diff\n\n When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)\n\n When stderr is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:\n _(NOTE: Debug now uses stderr instead of stdout, so the correct shell command for this example is actually `DEBUG=* node example/worker 2> out &`)_\n \n ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)\n \n## Conventions\n\n If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\". \n\n## Wildcards\n\n The \"*\" character may be used as a wildcard. Suppose for example your library has debuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\n You can also exclude specific debuggers by prefixing them with a \"-\" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with \"connect:\".\n\n## Browser support\n\n Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. \n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n a('doing some work');\n}, 1200);\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "homepage": "https://github.com/visionmedia/debug", + "_id": "debug@0.7.4", + "_from": "debug@*" +} diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/.npmignore b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/.npmignore new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/History.md b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/History.md new file mode 100644 index 0000000..60a2903 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/History.md @@ -0,0 +1,5 @@ + +0.2.0 / 2013-08-11 +================== + + * fix: return false for no-cache diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/Makefile b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/Makefile new file mode 100644 index 0000000..8e8640f --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --reporter spec \ + --require should + +.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/Readme.md b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/Readme.md new file mode 100644 index 0000000..61366c5 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/Readme.md @@ -0,0 +1,57 @@ + +# node-fresh + + HTTP response freshness testing + +## fresh(req, res) + + Check freshness of `req` and `res` headers. + + When the cache is "fresh" __true__ is returned, + otherwise __false__ is returned to indicate that + the cache is now stale. + +## Example: + +```js +var req = { 'if-none-match': 'tobi' }; +var res = { 'etag': 'luna' }; +fresh(req, res); +// => false + +var req = { 'if-none-match': 'tobi' }; +var res = { 'etag': 'tobi' }; +fresh(req, res); +// => true +``` + +## Installation + +``` +$ npm install fresh +``` + +## License + +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/index.js b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/index.js new file mode 100644 index 0000000..9c3f47d --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/index.js @@ -0,0 +1,53 @@ + +/** + * Expose `fresh()`. + */ + +module.exports = fresh; + +/** + * Check freshness of `req` and `res` headers. + * + * When the cache is "fresh" __true__ is returned, + * otherwise __false__ is returned to indicate that + * the cache is now stale. + * + * @param {Object} req + * @param {Object} res + * @return {Boolean} + * @api public + */ + +function fresh(req, res) { + // defaults + var etagMatches = true; + var notModified = true; + + // fields + var modifiedSince = req['if-modified-since']; + var noneMatch = req['if-none-match']; + var lastModified = res['last-modified']; + var etag = res['etag']; + var cc = req['cache-control']; + + // unconditional request + if (!modifiedSince && !noneMatch) return false; + + // check for no-cache cache request directive + if (cc && cc.indexOf('no-cache') !== -1) return false; + + // parse if-none-match + if (noneMatch) noneMatch = noneMatch.split(/ *, */); + + // if-none-match + if (noneMatch) etagMatches = ~noneMatch.indexOf(etag) || '*' == noneMatch[0]; + + // if-modified-since + if (modifiedSince) { + modifiedSince = new Date(modifiedSince); + lastModified = new Date(lastModified); + notModified = lastModified <= modifiedSince; + } + + return !! (etagMatches && notModified); +} \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/package.json b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/package.json new file mode 100644 index 0000000..5f52650 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/fresh/package.json @@ -0,0 +1,33 @@ +{ + "name": "fresh", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "description": "HTTP response freshness testing", + "version": "0.2.0", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/node-fresh.git" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "readme": "\n# node-fresh\n\n HTTP response freshness testing\n\n## fresh(req, res)\n\n Check freshness of `req` and `res` headers.\n\n When the cache is \"fresh\" __true__ is returned,\n otherwise __false__ is returned to indicate that\n the cache is now stale.\n\n## Example:\n\n```js\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'luna' };\nfresh(req, res);\n// => false\n\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'tobi' };\nfresh(req, res);\n// => true\n```\n\n## Installation\n\n```\n$ npm install fresh\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/node-fresh/issues" + }, + "homepage": "https://github.com/visionmedia/node-fresh", + "_id": "fresh@0.2.0", + "dist": { + "shasum": "129869ce4b069a25a531126de6745be67c382115" + }, + "_from": "fresh@0.2.0", + "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz", + "scripts": {} +} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/LICENCE b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/LICENSE similarity index 93% rename from node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/LICENCE rename to node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/LICENSE index a23e08a..451fc45 100644 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/LICENCE +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2012 Raynos. +Copyright (c) 2010 Benjamin Thomas, Robert Kieffer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 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 +THE SOFTWARE. diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/README.md b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/README.md new file mode 100644 index 0000000..6ca19bd --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/README.md @@ -0,0 +1,66 @@ +# mime + +Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community. + +## Install + +Install with [npm](http://github.com/isaacs/npm): + + npm install mime + +## API - Queries + +### mime.lookup(path) +Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. + + var mime = require('mime'); + + mime.lookup('/path/to/file.txt'); // => 'text/plain' + mime.lookup('file.txt'); // => 'text/plain' + mime.lookup('.TXT'); // => 'text/plain' + mime.lookup('htm'); // => 'text/html' + +### mime.default_type +Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) + +### mime.extension(type) +Get the default extension for `type` + + mime.extension('text/html'); // => 'html' + mime.extension('application/octet-stream'); // => 'bin' + +### mime.charsets.lookup() + +Map mime-type to charset + + mime.charsets.lookup('text/plain'); // => 'UTF-8' + +(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) + +## API - Defining Custom Types + +The following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types). + +### mime.define() + +Add custom mime/extension mappings + + mime.define({ + 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], + 'application/x-my-type': ['x-mt', 'x-mtt'], + // etc ... + }); + + mime.lookup('x-sft'); // => 'text/x-some-format' + +The first entry in the extensions array is returned by `mime.extension()`. E.g. + + mime.extension('text/x-some-format'); // => 'x-sf' + +### mime.load(filepath) + +Load mappings from an Apache ".types" format file + + mime.load('./my_project.types'); + +The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/mime.js b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/mime.js new file mode 100644 index 0000000..48be0c5 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/mime.js @@ -0,0 +1,114 @@ +var path = require('path'); +var fs = require('fs'); + +function Mime() { + // Map of extension -> mime type + this.types = Object.create(null); + + // Map of mime type -> extension + this.extensions = Object.create(null); +} + +/** + * Define mimetype -> extension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * @param map (Object) type definitions + */ +Mime.prototype.define = function (map) { + for (var type in map) { + var exts = map[type]; + + for (var i = 0; i < exts.length; i++) { + if (process.env.DEBUG_MIME && this.types[exts]) { + console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + + this.types[exts] + ' to ' + type); + } + + this.types[exts[i]] = type; + } + + // Default extension is the first one we encounter + if (!this.extensions[type]) { + this.extensions[type] = exts[0]; + } + } +}; + +/** + * Load an Apache2-style ".types" file + * + * This may be called multiple times (it's expected). Where files declare + * overlapping types/extensions, the last file wins. + * + * @param file (String) path of file to load. + */ +Mime.prototype.load = function(file) { + + this._loading = file; + // Read file and split into lines + var map = {}, + content = fs.readFileSync(file, 'ascii'), + lines = content.split(/[\r\n]+/); + + lines.forEach(function(line) { + // Clean up whitespace/comments, and split into fields + var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); + map[fields.shift()] = fields; + }); + + this.define(map); + + this._loading = null; +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.lookup = function(path, fallback) { + var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); + + return this.types[ext] || fallback || this.default_type; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.extension = function(mimeType) { + var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); + return this.extensions[type]; +}; + +// Default instance +var mime = new Mime(); + +// Load local copy of +// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +mime.load(path.join(__dirname, 'types/mime.types')); + +// Load additional types from node.js community +mime.load(path.join(__dirname, 'types/node.types')); + +// Default type +mime.default_type = mime.lookup('bin'); + +// +// Additional API specific to the default instance +// + +mime.Mime = Mime; + +/** + * Lookup a charset based on mime type. + */ +mime.charsets = { + lookup: function(mimeType, fallback) { + // Assume text types are utf8 + return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; + } +}; + +module.exports = mime; diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/package.json b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/package.json new file mode 100644 index 0000000..a975939 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/package.json @@ -0,0 +1,36 @@ +{ + "author": { + "name": "Robert Kieffer", + "email": "robert@broofa.com", + "url": "http://github.com/broofa" + }, + "contributors": [ + { + "name": "Benjamin Thomas", + "email": "benjamin@benjaminthomas.org", + "url": "http://github.com/bentomas" + } + ], + "dependencies": {}, + "description": "A comprehensive library for mime-type mapping", + "devDependencies": {}, + "keywords": [ + "util", + "mime" + ], + "main": "mime.js", + "name": "mime", + "repository": { + "url": "https://github.com/broofa/node-mime", + "type": "git" + }, + "version": "1.2.11", + "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/broofa/node-mime/issues" + }, + "homepage": "https://github.com/broofa/node-mime", + "_id": "mime@1.2.11", + "_from": "mime@~1.2.9" +} diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/test.js b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/test.js new file mode 100644 index 0000000..2cda1c7 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/test.js @@ -0,0 +1,84 @@ +/** + * Usage: node test.js + */ + +var mime = require('./mime'); +var assert = require('assert'); +var path = require('path'); + +function eq(a, b) { + console.log('Test: ' + a + ' === ' + b); + assert.strictEqual.apply(null, arguments); +} + +console.log(Object.keys(mime.extensions).length + ' types'); +console.log(Object.keys(mime.types).length + ' extensions\n'); + +// +// Test mime lookups +// + +eq('text/plain', mime.lookup('text.txt')); // normal file +eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase +eq('text/plain', mime.lookup('dir/text.txt')); // dir + file +eq('text/plain', mime.lookup('.text.txt')); // hidden file +eq('text/plain', mime.lookup('.txt')); // nameless +eq('text/plain', mime.lookup('txt')); // extension-only +eq('text/plain', mime.lookup('/txt')); // extension-less () +eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less +eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized +eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default + +// +// Test extensions +// + +eq('txt', mime.extension(mime.types.text)); +eq('html', mime.extension(mime.types.htm)); +eq('bin', mime.extension('application/octet-stream')); +eq('bin', mime.extension('application/octet-stream ')); +eq('html', mime.extension(' text/html; charset=UTF-8')); +eq('html', mime.extension('text/html; charset=UTF-8 ')); +eq('html', mime.extension('text/html; charset=UTF-8')); +eq('html', mime.extension('text/html ; charset=UTF-8')); +eq('html', mime.extension('text/html;charset=UTF-8')); +eq('html', mime.extension('text/Html;charset=UTF-8')); +eq(undefined, mime.extension('unrecognized')); + +// +// Test node.types lookups +// + +eq('application/font-woff', mime.lookup('file.woff')); +eq('application/octet-stream', mime.lookup('file.buffer')); +eq('audio/mp4', mime.lookup('file.m4a')); +eq('font/opentype', mime.lookup('file.otf')); + +// +// Test charsets +// + +eq('UTF-8', mime.charsets.lookup('text/plain')); +eq(undefined, mime.charsets.lookup(mime.types.js)); +eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); + +// +// Test for overlaps between mime.types and node.types +// + +var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime(); +apacheTypes.load(path.join(__dirname, 'types/mime.types')); +nodeTypes.load(path.join(__dirname, 'types/node.types')); + +var keys = [].concat(Object.keys(apacheTypes.types)) + .concat(Object.keys(nodeTypes.types)); +keys.sort(); +for (var i = 1; i < keys.length; i++) { + if (keys[i] == keys[i-1]) { + console.warn('Warning: ' + + 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] + + ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]); + } +} + +console.log('\nOK'); diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/types/mime.types b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/types/mime.types new file mode 100644 index 0000000..da8cd69 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/types/mime.types @@ -0,0 +1,1588 @@ +# This file maps Internet media types to unique file extension(s). +# Although created for httpd, this file is used by many software systems +# and has been placed in the public domain for unlimited redisribution. +# +# The table below contains both registered and (common) unregistered types. +# A type that has no unique extension can be ignored -- they are listed +# here to guide configurations toward known types and to make it easier to +# identify "new" types. File extensions are also commonly used to indicate +# content languages and encodings, so choose them carefully. +# +# Internet media types should be registered as described in RFC 4288. +# The registry is at . +# +# MIME type (lowercased) Extensions +# ============================================ ========== +# application/1d-interleaved-parityfec +# application/3gpp-ims+xml +# application/activemessage +application/andrew-inset ez +# application/applefile +application/applixware aw +application/atom+xml atom +application/atomcat+xml atomcat +# application/atomicmail +application/atomsvc+xml atomsvc +# application/auth-policy+xml +# application/batch-smtp +# application/beep+xml +# application/calendar+xml +# application/cals-1840 +# application/ccmp+xml +application/ccxml+xml ccxml +application/cdmi-capability cdmia +application/cdmi-container cdmic +application/cdmi-domain cdmid +application/cdmi-object cdmio +application/cdmi-queue cdmiq +# application/cea-2018+xml +# application/cellml+xml +# application/cfw +# application/cnrp+xml +# application/commonground +# application/conference-info+xml +# application/cpl+xml +# application/csta+xml +# application/cstadata+xml +application/cu-seeme cu +# application/cybercash +application/davmount+xml davmount +# application/dca-rft +# application/dec-dx +# application/dialog-info+xml +# application/dicom +# application/dns +application/docbook+xml dbk +# application/dskpp+xml +application/dssc+der dssc +application/dssc+xml xdssc +# application/dvcs +application/ecmascript ecma +# application/edi-consent +# application/edi-x12 +# application/edifact +application/emma+xml emma +# application/epp+xml +application/epub+zip epub +# application/eshop +# application/example +application/exi exi +# application/fastinfoset +# application/fastsoap +# application/fits +application/font-tdpfr pfr +# application/framework-attributes+xml +application/gml+xml gml +application/gpx+xml gpx +application/gxf gxf +# application/h224 +# application/held+xml +# application/http +application/hyperstudio stk +# application/ibe-key-request+xml +# application/ibe-pkg-reply+xml +# application/ibe-pp-data +# application/iges +# application/im-iscomposing+xml +# application/index +# application/index.cmd +# application/index.obj +# application/index.response +# application/index.vnd +application/inkml+xml ink inkml +# application/iotp +application/ipfix ipfix +# application/ipp +# application/isup +application/java-archive jar +application/java-serialized-object ser +application/java-vm class +application/javascript js +application/json json +application/jsonml+json jsonml +# application/kpml-request+xml +# application/kpml-response+xml +application/lost+xml lostxml +application/mac-binhex40 hqx +application/mac-compactpro cpt +# application/macwriteii +application/mads+xml mads +application/marc mrc +application/marcxml+xml mrcx +application/mathematica ma nb mb +# application/mathml-content+xml +# application/mathml-presentation+xml +application/mathml+xml mathml +# application/mbms-associated-procedure-description+xml +# application/mbms-deregister+xml +# application/mbms-envelope+xml +# application/mbms-msk+xml +# application/mbms-msk-response+xml +# application/mbms-protection-description+xml +# application/mbms-reception-report+xml +# application/mbms-register+xml +# application/mbms-register-response+xml +# application/mbms-user-service-description+xml +application/mbox mbox +# application/media_control+xml +application/mediaservercontrol+xml mscml +application/metalink+xml metalink +application/metalink4+xml meta4 +application/mets+xml mets +# application/mikey +application/mods+xml mods +# application/moss-keys +# application/moss-signature +# application/mosskey-data +# application/mosskey-request +application/mp21 m21 mp21 +application/mp4 mp4s +# application/mpeg4-generic +# application/mpeg4-iod +# application/mpeg4-iod-xmt +# application/msc-ivr+xml +# application/msc-mixer+xml +application/msword doc dot +application/mxf mxf +# application/nasdata +# application/news-checkgroups +# application/news-groupinfo +# application/news-transmission +# application/nss +# application/ocsp-request +# application/ocsp-response +application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy +application/oda oda +application/oebps-package+xml opf +application/ogg ogx +application/omdoc+xml omdoc +application/onenote onetoc onetoc2 onetmp onepkg +application/oxps oxps +# application/parityfec +application/patch-ops-error+xml xer +application/pdf pdf +application/pgp-encrypted pgp +# application/pgp-keys +application/pgp-signature asc sig +application/pics-rules prf +# application/pidf+xml +# application/pidf-diff+xml +application/pkcs10 p10 +application/pkcs7-mime p7m p7c +application/pkcs7-signature p7s +application/pkcs8 p8 +application/pkix-attr-cert ac +application/pkix-cert cer +application/pkix-crl crl +application/pkix-pkipath pkipath +application/pkixcmp pki +application/pls+xml pls +# application/poc-settings+xml +application/postscript ai eps ps +# application/prs.alvestrand.titrax-sheet +application/prs.cww cww +# application/prs.nprend +# application/prs.plucker +# application/prs.rdf-xml-crypt +# application/prs.xsf+xml +application/pskc+xml pskcxml +# application/qsig +application/rdf+xml rdf +application/reginfo+xml rif +application/relax-ng-compact-syntax rnc +# application/remote-printing +application/resource-lists+xml rl +application/resource-lists-diff+xml rld +# application/riscos +# application/rlmi+xml +application/rls-services+xml rs +application/rpki-ghostbusters gbr +application/rpki-manifest mft +application/rpki-roa roa +# application/rpki-updown +application/rsd+xml rsd +application/rss+xml rss +application/rtf rtf +# application/rtx +# application/samlassertion+xml +# application/samlmetadata+xml +application/sbml+xml sbml +application/scvp-cv-request scq +application/scvp-cv-response scs +application/scvp-vp-request spq +application/scvp-vp-response spp +application/sdp sdp +# application/set-payment +application/set-payment-initiation setpay +# application/set-registration +application/set-registration-initiation setreg +# application/sgml +# application/sgml-open-catalog +application/shf+xml shf +# application/sieve +# application/simple-filter+xml +# application/simple-message-summary +# application/simplesymbolcontainer +# application/slate +# application/smil +application/smil+xml smi smil +# application/soap+fastinfoset +# application/soap+xml +application/sparql-query rq +application/sparql-results+xml srx +# application/spirits-event+xml +application/srgs gram +application/srgs+xml grxml +application/sru+xml sru +application/ssdl+xml ssdl +application/ssml+xml ssml +# application/tamp-apex-update +# application/tamp-apex-update-confirm +# application/tamp-community-update +# application/tamp-community-update-confirm +# application/tamp-error +# application/tamp-sequence-adjust +# application/tamp-sequence-adjust-confirm +# application/tamp-status-query +# application/tamp-status-response +# application/tamp-update +# application/tamp-update-confirm +application/tei+xml tei teicorpus +application/thraud+xml tfi +# application/timestamp-query +# application/timestamp-reply +application/timestamped-data tsd +# application/tve-trigger +# application/ulpfec +# application/vcard+xml +# application/vemmi +# application/vividence.scriptfile +# application/vnd.3gpp.bsf+xml +application/vnd.3gpp.pic-bw-large plb +application/vnd.3gpp.pic-bw-small psb +application/vnd.3gpp.pic-bw-var pvb +# application/vnd.3gpp.sms +# application/vnd.3gpp2.bcmcsinfo+xml +# application/vnd.3gpp2.sms +application/vnd.3gpp2.tcap tcap +application/vnd.3m.post-it-notes pwn +application/vnd.accpac.simply.aso aso +application/vnd.accpac.simply.imp imp +application/vnd.acucobol acu +application/vnd.acucorp atc acutc +application/vnd.adobe.air-application-installer-package+zip air +application/vnd.adobe.formscentral.fcdt fcdt +application/vnd.adobe.fxp fxp fxpl +# application/vnd.adobe.partial-upload +application/vnd.adobe.xdp+xml xdp +application/vnd.adobe.xfdf xfdf +# application/vnd.aether.imp +# application/vnd.ah-barcode +application/vnd.ahead.space ahead +application/vnd.airzip.filesecure.azf azf +application/vnd.airzip.filesecure.azs azs +application/vnd.amazon.ebook azw +application/vnd.americandynamics.acc acc +application/vnd.amiga.ami ami +# application/vnd.amundsen.maze+xml +application/vnd.android.package-archive apk +application/vnd.anser-web-certificate-issue-initiation cii +application/vnd.anser-web-funds-transfer-initiation fti +application/vnd.antix.game-component atx +application/vnd.apple.installer+xml mpkg +application/vnd.apple.mpegurl m3u8 +# application/vnd.arastra.swi +application/vnd.aristanetworks.swi swi +application/vnd.astraea-software.iota iota +application/vnd.audiograph aep +# application/vnd.autopackage +# application/vnd.avistar+xml +application/vnd.blueice.multipass mpm +# application/vnd.bluetooth.ep.oob +application/vnd.bmi bmi +application/vnd.businessobjects rep +# application/vnd.cab-jscript +# application/vnd.canon-cpdl +# application/vnd.canon-lips +# application/vnd.cendio.thinlinc.clientconf +application/vnd.chemdraw+xml cdxml +application/vnd.chipnuts.karaoke-mmd mmd +application/vnd.cinderella cdy +# application/vnd.cirpack.isdn-ext +application/vnd.claymore cla +application/vnd.cloanto.rp9 rp9 +application/vnd.clonk.c4group c4g c4d c4f c4p c4u +application/vnd.cluetrust.cartomobile-config c11amc +application/vnd.cluetrust.cartomobile-config-pkg c11amz +# application/vnd.collection+json +# application/vnd.commerce-battelle +application/vnd.commonspace csp +application/vnd.contact.cmsg cdbcmsg +application/vnd.cosmocaller cmc +application/vnd.crick.clicker clkx +application/vnd.crick.clicker.keyboard clkk +application/vnd.crick.clicker.palette clkp +application/vnd.crick.clicker.template clkt +application/vnd.crick.clicker.wordbank clkw +application/vnd.criticaltools.wbs+xml wbs +application/vnd.ctc-posml pml +# application/vnd.ctct.ws+xml +# application/vnd.cups-pdf +# application/vnd.cups-postscript +application/vnd.cups-ppd ppd +# application/vnd.cups-raster +# application/vnd.cups-raw +# application/vnd.curl +application/vnd.curl.car car +application/vnd.curl.pcurl pcurl +# application/vnd.cybank +application/vnd.dart dart +application/vnd.data-vision.rdz rdz +application/vnd.dece.data uvf uvvf uvd uvvd +application/vnd.dece.ttml+xml uvt uvvt +application/vnd.dece.unspecified uvx uvvx +application/vnd.dece.zip uvz uvvz +application/vnd.denovo.fcselayout-link fe_launch +# application/vnd.dir-bi.plate-dl-nosuffix +application/vnd.dna dna +application/vnd.dolby.mlp mlp +# application/vnd.dolby.mobile.1 +# application/vnd.dolby.mobile.2 +application/vnd.dpgraph dpg +application/vnd.dreamfactory dfac +application/vnd.ds-keypoint kpxx +application/vnd.dvb.ait ait +# application/vnd.dvb.dvbj +# application/vnd.dvb.esgcontainer +# application/vnd.dvb.ipdcdftnotifaccess +# application/vnd.dvb.ipdcesgaccess +# application/vnd.dvb.ipdcesgaccess2 +# application/vnd.dvb.ipdcesgpdd +# application/vnd.dvb.ipdcroaming +# application/vnd.dvb.iptv.alfec-base +# application/vnd.dvb.iptv.alfec-enhancement +# application/vnd.dvb.notif-aggregate-root+xml +# application/vnd.dvb.notif-container+xml +# application/vnd.dvb.notif-generic+xml +# application/vnd.dvb.notif-ia-msglist+xml +# application/vnd.dvb.notif-ia-registration-request+xml +# application/vnd.dvb.notif-ia-registration-response+xml +# application/vnd.dvb.notif-init+xml +# application/vnd.dvb.pfr +application/vnd.dvb.service svc +# application/vnd.dxr +application/vnd.dynageo geo +# application/vnd.easykaraoke.cdgdownload +# application/vnd.ecdis-update +application/vnd.ecowin.chart mag +# application/vnd.ecowin.filerequest +# application/vnd.ecowin.fileupdate +# application/vnd.ecowin.series +# application/vnd.ecowin.seriesrequest +# application/vnd.ecowin.seriesupdate +# application/vnd.emclient.accessrequest+xml +application/vnd.enliven nml +# application/vnd.eprints.data+xml +application/vnd.epson.esf esf +application/vnd.epson.msf msf +application/vnd.epson.quickanime qam +application/vnd.epson.salt slt +application/vnd.epson.ssf ssf +# application/vnd.ericsson.quickcall +application/vnd.eszigno3+xml es3 et3 +# application/vnd.etsi.aoc+xml +# application/vnd.etsi.cug+xml +# application/vnd.etsi.iptvcommand+xml +# application/vnd.etsi.iptvdiscovery+xml +# application/vnd.etsi.iptvprofile+xml +# application/vnd.etsi.iptvsad-bc+xml +# application/vnd.etsi.iptvsad-cod+xml +# application/vnd.etsi.iptvsad-npvr+xml +# application/vnd.etsi.iptvservice+xml +# application/vnd.etsi.iptvsync+xml +# application/vnd.etsi.iptvueprofile+xml +# application/vnd.etsi.mcid+xml +# application/vnd.etsi.overload-control-policy-dataset+xml +# application/vnd.etsi.sci+xml +# application/vnd.etsi.simservs+xml +# application/vnd.etsi.tsl+xml +# application/vnd.etsi.tsl.der +# application/vnd.eudora.data +application/vnd.ezpix-album ez2 +application/vnd.ezpix-package ez3 +# application/vnd.f-secure.mobile +application/vnd.fdf fdf +application/vnd.fdsn.mseed mseed +application/vnd.fdsn.seed seed dataless +# application/vnd.ffsns +# application/vnd.fints +application/vnd.flographit gph +application/vnd.fluxtime.clip ftc +# application/vnd.font-fontforge-sfd +application/vnd.framemaker fm frame maker book +application/vnd.frogans.fnc fnc +application/vnd.frogans.ltf ltf +application/vnd.fsc.weblaunch fsc +application/vnd.fujitsu.oasys oas +application/vnd.fujitsu.oasys2 oa2 +application/vnd.fujitsu.oasys3 oa3 +application/vnd.fujitsu.oasysgp fg5 +application/vnd.fujitsu.oasysprs bh2 +# application/vnd.fujixerox.art-ex +# application/vnd.fujixerox.art4 +# application/vnd.fujixerox.hbpl +application/vnd.fujixerox.ddd ddd +application/vnd.fujixerox.docuworks xdw +application/vnd.fujixerox.docuworks.binder xbd +# application/vnd.fut-misnet +application/vnd.fuzzysheet fzs +application/vnd.genomatix.tuxedo txd +# application/vnd.geocube+xml +application/vnd.geogebra.file ggb +application/vnd.geogebra.tool ggt +application/vnd.geometry-explorer gex gre +application/vnd.geonext gxt +application/vnd.geoplan g2w +application/vnd.geospace g3w +# application/vnd.globalplatform.card-content-mgt +# application/vnd.globalplatform.card-content-mgt-response +application/vnd.gmx gmx +application/vnd.google-earth.kml+xml kml +application/vnd.google-earth.kmz kmz +application/vnd.grafeq gqf gqs +# application/vnd.gridmp +application/vnd.groove-account gac +application/vnd.groove-help ghf +application/vnd.groove-identity-message gim +application/vnd.groove-injector grv +application/vnd.groove-tool-message gtm +application/vnd.groove-tool-template tpl +application/vnd.groove-vcard vcg +# application/vnd.hal+json +application/vnd.hal+xml hal +application/vnd.handheld-entertainment+xml zmm +application/vnd.hbci hbci +# application/vnd.hcl-bireports +application/vnd.hhe.lesson-player les +application/vnd.hp-hpgl hpgl +application/vnd.hp-hpid hpid +application/vnd.hp-hps hps +application/vnd.hp-jlyt jlt +application/vnd.hp-pcl pcl +application/vnd.hp-pclxl pclxl +# application/vnd.httphone +application/vnd.hydrostatix.sof-data sfd-hdstx +# application/vnd.hzn-3d-crossword +# application/vnd.ibm.afplinedata +# application/vnd.ibm.electronic-media +application/vnd.ibm.minipay mpy +application/vnd.ibm.modcap afp listafp list3820 +application/vnd.ibm.rights-management irm +application/vnd.ibm.secure-container sc +application/vnd.iccprofile icc icm +application/vnd.igloader igl +application/vnd.immervision-ivp ivp +application/vnd.immervision-ivu ivu +# application/vnd.informedcontrol.rms+xml +# application/vnd.informix-visionary +# application/vnd.infotech.project +# application/vnd.infotech.project+xml +# application/vnd.innopath.wamp.notification +application/vnd.insors.igm igm +application/vnd.intercon.formnet xpw xpx +application/vnd.intergeo i2g +# application/vnd.intertrust.digibox +# application/vnd.intertrust.nncp +application/vnd.intu.qbo qbo +application/vnd.intu.qfx qfx +# application/vnd.iptc.g2.conceptitem+xml +# application/vnd.iptc.g2.knowledgeitem+xml +# application/vnd.iptc.g2.newsitem+xml +# application/vnd.iptc.g2.newsmessage+xml +# application/vnd.iptc.g2.packageitem+xml +# application/vnd.iptc.g2.planningitem+xml +application/vnd.ipunplugged.rcprofile rcprofile +application/vnd.irepository.package+xml irp +application/vnd.is-xpr xpr +application/vnd.isac.fcs fcs +application/vnd.jam jam +# application/vnd.japannet-directory-service +# application/vnd.japannet-jpnstore-wakeup +# application/vnd.japannet-payment-wakeup +# application/vnd.japannet-registration +# application/vnd.japannet-registration-wakeup +# application/vnd.japannet-setstore-wakeup +# application/vnd.japannet-verification +# application/vnd.japannet-verification-wakeup +application/vnd.jcp.javame.midlet-rms rms +application/vnd.jisp jisp +application/vnd.joost.joda-archive joda +application/vnd.kahootz ktz ktr +application/vnd.kde.karbon karbon +application/vnd.kde.kchart chrt +application/vnd.kde.kformula kfo +application/vnd.kde.kivio flw +application/vnd.kde.kontour kon +application/vnd.kde.kpresenter kpr kpt +application/vnd.kde.kspread ksp +application/vnd.kde.kword kwd kwt +application/vnd.kenameaapp htke +application/vnd.kidspiration kia +application/vnd.kinar kne knp +application/vnd.koan skp skd skt skm +application/vnd.kodak-descriptor sse +application/vnd.las.las+xml lasxml +# application/vnd.liberty-request+xml +application/vnd.llamagraphics.life-balance.desktop lbd +application/vnd.llamagraphics.life-balance.exchange+xml lbe +application/vnd.lotus-1-2-3 123 +application/vnd.lotus-approach apr +application/vnd.lotus-freelance pre +application/vnd.lotus-notes nsf +application/vnd.lotus-organizer org +application/vnd.lotus-screencam scm +application/vnd.lotus-wordpro lwp +application/vnd.macports.portpkg portpkg +# application/vnd.marlin.drm.actiontoken+xml +# application/vnd.marlin.drm.conftoken+xml +# application/vnd.marlin.drm.license+xml +# application/vnd.marlin.drm.mdcf +application/vnd.mcd mcd +application/vnd.medcalcdata mc1 +application/vnd.mediastation.cdkey cdkey +# application/vnd.meridian-slingshot +application/vnd.mfer mwf +application/vnd.mfmp mfm +application/vnd.micrografx.flo flo +application/vnd.micrografx.igx igx +application/vnd.mif mif +# application/vnd.minisoft-hp3000-save +# application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf daf +application/vnd.mobius.dis dis +application/vnd.mobius.mbk mbk +application/vnd.mobius.mqy mqy +application/vnd.mobius.msl msl +application/vnd.mobius.plc plc +application/vnd.mobius.txf txf +application/vnd.mophun.application mpn +application/vnd.mophun.certificate mpc +# application/vnd.motorola.flexsuite +# application/vnd.motorola.flexsuite.adsi +# application/vnd.motorola.flexsuite.fis +# application/vnd.motorola.flexsuite.gotap +# application/vnd.motorola.flexsuite.kmr +# application/vnd.motorola.flexsuite.ttc +# application/vnd.motorola.flexsuite.wem +# application/vnd.motorola.iprm +application/vnd.mozilla.xul+xml xul +application/vnd.ms-artgalry cil +# application/vnd.ms-asf +application/vnd.ms-cab-compressed cab +# application/vnd.ms-color.iccprofile +application/vnd.ms-excel xls xlm xla xlc xlt xlw +application/vnd.ms-excel.addin.macroenabled.12 xlam +application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb +application/vnd.ms-excel.sheet.macroenabled.12 xlsm +application/vnd.ms-excel.template.macroenabled.12 xltm +application/vnd.ms-fontobject eot +application/vnd.ms-htmlhelp chm +application/vnd.ms-ims ims +application/vnd.ms-lrm lrm +# application/vnd.ms-office.activex+xml +application/vnd.ms-officetheme thmx +# application/vnd.ms-opentype +# application/vnd.ms-package.obfuscated-opentype +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +# application/vnd.ms-playready.initiator+xml +application/vnd.ms-powerpoint ppt pps pot +application/vnd.ms-powerpoint.addin.macroenabled.12 ppam +application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm +application/vnd.ms-powerpoint.slide.macroenabled.12 sldm +application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm +application/vnd.ms-powerpoint.template.macroenabled.12 potm +# application/vnd.ms-printing.printticket+xml +application/vnd.ms-project mpp mpt +# application/vnd.ms-tnef +# application/vnd.ms-wmdrm.lic-chlg-req +# application/vnd.ms-wmdrm.lic-resp +# application/vnd.ms-wmdrm.meter-chlg-req +# application/vnd.ms-wmdrm.meter-resp +application/vnd.ms-word.document.macroenabled.12 docm +application/vnd.ms-word.template.macroenabled.12 dotm +application/vnd.ms-works wps wks wcm wdb +application/vnd.ms-wpl wpl +application/vnd.ms-xpsdocument xps +application/vnd.mseq mseq +# application/vnd.msign +# application/vnd.multiad.creator +# application/vnd.multiad.creator.cif +# application/vnd.music-niff +application/vnd.musician mus +application/vnd.muvee.style msty +application/vnd.mynfc taglet +# application/vnd.ncd.control +# application/vnd.ncd.reference +# application/vnd.nervana +# application/vnd.netfpx +application/vnd.neurolanguage.nlu nlu +application/vnd.nitf ntf nitf +application/vnd.noblenet-directory nnd +application/vnd.noblenet-sealer nns +application/vnd.noblenet-web nnw +# application/vnd.nokia.catalogs +# application/vnd.nokia.conml+wbxml +# application/vnd.nokia.conml+xml +# application/vnd.nokia.isds-radio-presets +# application/vnd.nokia.iptv.config+xml +# application/vnd.nokia.landmark+wbxml +# application/vnd.nokia.landmark+xml +# application/vnd.nokia.landmarkcollection+xml +# application/vnd.nokia.n-gage.ac+xml +application/vnd.nokia.n-gage.data ngdat +application/vnd.nokia.n-gage.symbian.install n-gage +# application/vnd.nokia.ncd +# application/vnd.nokia.pcd+wbxml +# application/vnd.nokia.pcd+xml +application/vnd.nokia.radio-preset rpst +application/vnd.nokia.radio-presets rpss +application/vnd.novadigm.edm edm +application/vnd.novadigm.edx edx +application/vnd.novadigm.ext ext +# application/vnd.ntt-local.file-transfer +# application/vnd.ntt-local.sip-ta_remote +# application/vnd.ntt-local.sip-ta_tcp_stream +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.chart-template otc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.formula-template odft +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.image-template oti +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +# application/vnd.obn +# application/vnd.oftn.l10n+json +# application/vnd.oipf.contentaccessdownload+xml +# application/vnd.oipf.contentaccessstreaming+xml +# application/vnd.oipf.cspg-hexbinary +# application/vnd.oipf.dae.svg+xml +# application/vnd.oipf.dae.xhtml+xml +# application/vnd.oipf.mippvcontrolmessage+xml +# application/vnd.oipf.pae.gem +# application/vnd.oipf.spdiscovery+xml +# application/vnd.oipf.spdlist+xml +# application/vnd.oipf.ueprofile+xml +# application/vnd.oipf.userprofile+xml +application/vnd.olpc-sugar xo +# application/vnd.oma-scws-config +# application/vnd.oma-scws-http-request +# application/vnd.oma-scws-http-response +# application/vnd.oma.bcast.associated-procedure-parameter+xml +# application/vnd.oma.bcast.drm-trigger+xml +# application/vnd.oma.bcast.imd+xml +# application/vnd.oma.bcast.ltkm +# application/vnd.oma.bcast.notification+xml +# application/vnd.oma.bcast.provisioningtrigger +# application/vnd.oma.bcast.sgboot +# application/vnd.oma.bcast.sgdd+xml +# application/vnd.oma.bcast.sgdu +# application/vnd.oma.bcast.simple-symbol-container +# application/vnd.oma.bcast.smartcard-trigger+xml +# application/vnd.oma.bcast.sprov+xml +# application/vnd.oma.bcast.stkm +# application/vnd.oma.cab-address-book+xml +# application/vnd.oma.cab-feature-handler+xml +# application/vnd.oma.cab-pcc+xml +# application/vnd.oma.cab-user-prefs+xml +# application/vnd.oma.dcd +# application/vnd.oma.dcdc +application/vnd.oma.dd2+xml dd2 +# application/vnd.oma.drm.risd+xml +# application/vnd.oma.group-usage-list+xml +# application/vnd.oma.pal+xml +# application/vnd.oma.poc.detailed-progress-report+xml +# application/vnd.oma.poc.final-report+xml +# application/vnd.oma.poc.groups+xml +# application/vnd.oma.poc.invocation-descriptor+xml +# application/vnd.oma.poc.optimized-progress-report+xml +# application/vnd.oma.push +# application/vnd.oma.scidm.messages+xml +# application/vnd.oma.xcap-directory+xml +# application/vnd.omads-email+xml +# application/vnd.omads-file+xml +# application/vnd.omads-folder+xml +# application/vnd.omaloc-supl-init +application/vnd.openofficeorg.extension oxt +# application/vnd.openxmlformats-officedocument.custom-properties+xml +# application/vnd.openxmlformats-officedocument.customxmlproperties+xml +# application/vnd.openxmlformats-officedocument.drawing+xml +# application/vnd.openxmlformats-officedocument.drawingml.chart+xml +# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml +# application/vnd.openxmlformats-officedocument.extended-properties+xml +# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml +# application/vnd.openxmlformats-officedocument.presentationml.comments+xml +# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml +application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml +application/vnd.openxmlformats-officedocument.presentationml.slide sldx +# application/vnd.openxmlformats-officedocument.presentationml.slide+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml +application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx +# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml +# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml +# application/vnd.openxmlformats-officedocument.presentationml.tags+xml +application/vnd.openxmlformats-officedocument.presentationml.template potx +# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml +# application/vnd.openxmlformats-officedocument.theme+xml +# application/vnd.openxmlformats-officedocument.themeoverride+xml +# application/vnd.openxmlformats-officedocument.vmldrawing +# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml +# application/vnd.openxmlformats-package.core-properties+xml +# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml +# application/vnd.openxmlformats-package.relationships+xml +# application/vnd.quobject-quoxdocument +# application/vnd.osa.netdeploy +application/vnd.osgeo.mapguide.package mgp +# application/vnd.osgi.bundle +application/vnd.osgi.dp dp +application/vnd.osgi.subsystem esa +# application/vnd.otps.ct-kip+xml +application/vnd.palm pdb pqa oprc +# application/vnd.paos.xml +application/vnd.pawaafile paw +application/vnd.pg.format str +application/vnd.pg.osasli ei6 +# application/vnd.piaccess.application-licence +application/vnd.picsel efif +application/vnd.pmi.widget wg +# application/vnd.poc.group-advertisement+xml +application/vnd.pocketlearn plf +application/vnd.powerbuilder6 pbd +# application/vnd.powerbuilder6-s +# application/vnd.powerbuilder7 +# application/vnd.powerbuilder7-s +# application/vnd.powerbuilder75 +# application/vnd.powerbuilder75-s +# application/vnd.preminet +application/vnd.previewsystems.box box +application/vnd.proteus.magazine mgz +application/vnd.publishare-delta-tree qps +application/vnd.pvi.ptid1 ptid +# application/vnd.pwg-multiplexed +# application/vnd.pwg-xhtml-print+xml +# application/vnd.qualcomm.brew-app-res +application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb +# application/vnd.radisys.moml+xml +# application/vnd.radisys.msml+xml +# application/vnd.radisys.msml-audit+xml +# application/vnd.radisys.msml-audit-conf+xml +# application/vnd.radisys.msml-audit-conn+xml +# application/vnd.radisys.msml-audit-dialog+xml +# application/vnd.radisys.msml-audit-stream+xml +# application/vnd.radisys.msml-conf+xml +# application/vnd.radisys.msml-dialog+xml +# application/vnd.radisys.msml-dialog-base+xml +# application/vnd.radisys.msml-dialog-fax-detect+xml +# application/vnd.radisys.msml-dialog-fax-sendrecv+xml +# application/vnd.radisys.msml-dialog-group+xml +# application/vnd.radisys.msml-dialog-speech+xml +# application/vnd.radisys.msml-dialog-transform+xml +# application/vnd.rainstor.data +# application/vnd.rapid +application/vnd.realvnc.bed bed +application/vnd.recordare.musicxml mxl +application/vnd.recordare.musicxml+xml musicxml +# application/vnd.renlearn.rlprint +application/vnd.rig.cryptonote cryptonote +application/vnd.rim.cod cod +application/vnd.rn-realmedia rm +application/vnd.rn-realmedia-vbr rmvb +application/vnd.route66.link66+xml link66 +# application/vnd.rs-274x +# application/vnd.ruckus.download +# application/vnd.s3sms +application/vnd.sailingtracker.track st +# application/vnd.sbm.cid +# application/vnd.sbm.mid2 +# application/vnd.scribus +# application/vnd.sealed.3df +# application/vnd.sealed.csf +# application/vnd.sealed.doc +# application/vnd.sealed.eml +# application/vnd.sealed.mht +# application/vnd.sealed.net +# application/vnd.sealed.ppt +# application/vnd.sealed.tiff +# application/vnd.sealed.xls +# application/vnd.sealedmedia.softseal.html +# application/vnd.sealedmedia.softseal.pdf +application/vnd.seemail see +application/vnd.sema sema +application/vnd.semd semd +application/vnd.semf semf +application/vnd.shana.informed.formdata ifm +application/vnd.shana.informed.formtemplate itp +application/vnd.shana.informed.interchange iif +application/vnd.shana.informed.package ipk +application/vnd.simtech-mindmapper twd twds +application/vnd.smaf mmf +# application/vnd.smart.notebook +application/vnd.smart.teacher teacher +# application/vnd.software602.filler.form+xml +# application/vnd.software602.filler.form-xml-zip +application/vnd.solent.sdkm+xml sdkm sdkd +application/vnd.spotfire.dxp dxp +application/vnd.spotfire.sfs sfs +# application/vnd.sss-cod +# application/vnd.sss-dtf +# application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.stepmania.package smzip +application/vnd.stepmania.stepchart sm +# application/vnd.street-stream +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +# application/vnd.sun.wadl+xml +application/vnd.sus-calendar sus susp +application/vnd.svd svd +# application/vnd.swiftview-ics +application/vnd.symbian.install sis sisx +application/vnd.syncml+xml xsm +application/vnd.syncml.dm+wbxml bdm +application/vnd.syncml.dm+xml xdm +# application/vnd.syncml.dm.notification +# application/vnd.syncml.ds.notification +application/vnd.tao.intent-module-archive tao +application/vnd.tcpdump.pcap pcap cap dmp +application/vnd.tmobile-livetv tmo +application/vnd.trid.tpt tpt +application/vnd.triscape.mxs mxs +application/vnd.trueapp tra +# application/vnd.truedoc +# application/vnd.ubisoft.webplayer +application/vnd.ufdl ufd ufdl +application/vnd.uiq.theme utz +application/vnd.umajin umj +application/vnd.unity unityweb +application/vnd.uoml+xml uoml +# application/vnd.uplanet.alert +# application/vnd.uplanet.alert-wbxml +# application/vnd.uplanet.bearer-choice +# application/vnd.uplanet.bearer-choice-wbxml +# application/vnd.uplanet.cacheop +# application/vnd.uplanet.cacheop-wbxml +# application/vnd.uplanet.channel +# application/vnd.uplanet.channel-wbxml +# application/vnd.uplanet.list +# application/vnd.uplanet.list-wbxml +# application/vnd.uplanet.listcmd +# application/vnd.uplanet.listcmd-wbxml +# application/vnd.uplanet.signal +application/vnd.vcx vcx +# application/vnd.vd-study +# application/vnd.vectorworks +# application/vnd.verimatrix.vcas +# application/vnd.vidsoft.vidconference +application/vnd.visio vsd vst vss vsw +application/vnd.visionary vis +# application/vnd.vividence.scriptfile +application/vnd.vsf vsf +# application/vnd.wap.sic +# application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo wtb +# application/vnd.wfa.wsc +# application/vnd.wmc +# application/vnd.wmf.bootstrap +# application/vnd.wolfram.mathematica +# application/vnd.wolfram.mathematica.package +application/vnd.wolfram.player nbp +application/vnd.wordperfect wpd +application/vnd.wqd wqd +# application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf stf +# application/vnd.wv.csp+wbxml +# application/vnd.wv.csp+xml +# application/vnd.wv.ssp+xml +application/vnd.xara xar +application/vnd.xfdl xfdl +# application/vnd.xfdl.webform +# application/vnd.xmi+xml +# application/vnd.xmpie.cpkg +# application/vnd.xmpie.dpkg +# application/vnd.xmpie.plan +# application/vnd.xmpie.ppkg +# application/vnd.xmpie.xlim +application/vnd.yamaha.hv-dic hvd +application/vnd.yamaha.hv-script hvs +application/vnd.yamaha.hv-voice hvp +application/vnd.yamaha.openscoreformat osf +application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg +# application/vnd.yamaha.remote-setup +application/vnd.yamaha.smaf-audio saf +application/vnd.yamaha.smaf-phrase spf +# application/vnd.yamaha.through-ngn +# application/vnd.yamaha.tunnel-udpencap +application/vnd.yellowriver-custom-menu cmp +application/vnd.zul zir zirz +application/vnd.zzazz.deck+xml zaz +application/voicexml+xml vxml +# application/vq-rtcpxr +# application/watcherinfo+xml +# application/whoispp-query +# application/whoispp-response +application/widget wgt +application/winhlp hlp +# application/wita +# application/wordperfect5.1 +application/wsdl+xml wsdl +application/wspolicy+xml wspolicy +application/x-7z-compressed 7z +application/x-abiword abw +application/x-ace-compressed ace +# application/x-amf +application/x-apple-diskimage dmg +application/x-authorware-bin aab x32 u32 vox +application/x-authorware-map aam +application/x-authorware-seg aas +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-blorb blb blorb +application/x-bzip bz +application/x-bzip2 bz2 boz +application/x-cbr cbr cba cbt cbz cb7 +application/x-cdlink vcd +application/x-cfs-compressed cfs +application/x-chat chat +application/x-chess-pgn pgn +application/x-conference nsc +# application/x-compress +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb udeb +application/x-dgc-compressed dgc +application/x-director dir dcr dxr cst cct cxt w3d fgd swa +application/x-doom wad +application/x-dtbncx+xml ncx +application/x-dtbook+xml dtb +application/x-dtbresource+xml res +application/x-dvi dvi +application/x-envoy evy +application/x-eva eva +application/x-font-bdf bdf +# application/x-font-dos +# application/x-font-framemaker +application/x-font-ghostscript gsf +# application/x-font-libgrx +application/x-font-linux-psf psf +application/x-font-otf otf +application/x-font-pcf pcf +application/x-font-snf snf +# application/x-font-speedo +# application/x-font-sunos-news +application/x-font-ttf ttf ttc +application/x-font-type1 pfa pfb pfm afm +application/font-woff woff +# application/x-font-vfont +application/x-freearc arc +application/x-futuresplash spl +application/x-gca-compressed gca +application/x-glulx ulx +application/x-gnumeric gnumeric +application/x-gramps-xml gramps +application/x-gtar gtar +# application/x-gzip +application/x-hdf hdf +application/x-install-instructions install +application/x-iso9660-image iso +application/x-java-jnlp-file jnlp +application/x-latex latex +application/x-lzh-compressed lzh lha +application/x-mie mie +application/x-mobipocket-ebook prc mobi +application/x-ms-application application +application/x-ms-shortcut lnk +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-ms-xbap xbap +application/x-msaccess mdb +application/x-msbinder obd +application/x-mscardfile crd +application/x-msclip clp +application/x-msdownload exe dll com bat msi +application/x-msmediaview mvb m13 m14 +application/x-msmetafile wmf wmz emf emz +application/x-msmoney mny +application/x-mspublisher pub +application/x-msschedule scd +application/x-msterminal trm +application/x-mswrite wri +application/x-netcdf nc cdf +application/x-nzb nzb +application/x-pkcs12 p12 pfx +application/x-pkcs7-certificates p7b spc +application/x-pkcs7-certreqresp p7r +application/x-rar-compressed rar +application/x-research-info-systems ris +application/x-sh sh +application/x-shar shar +application/x-shockwave-flash swf +application/x-silverlight-app xap +application/x-sql sql +application/x-stuffit sit +application/x-stuffitx sitx +application/x-subrip srt +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-t3vm-image t3 +application/x-tads gam +application/x-tar tar +application/x-tcl tcl +application/x-tex tex +application/x-tex-tfm tfm +application/x-texinfo texinfo texi +application/x-tgif obj +application/x-ustar ustar +application/x-wais-source src +application/x-x509-ca-cert der crt +application/x-xfig fig +application/x-xliff+xml xlf +application/x-xpinstall xpi +application/x-xz xz +application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 +# application/x400-bp +application/xaml+xml xaml +# application/xcap-att+xml +# application/xcap-caps+xml +application/xcap-diff+xml xdf +# application/xcap-el+xml +# application/xcap-error+xml +# application/xcap-ns+xml +# application/xcon-conference-info-diff+xml +# application/xcon-conference-info+xml +application/xenc+xml xenc +application/xhtml+xml xhtml xht +# application/xhtml-voice+xml +application/xml xml xsl +application/xml-dtd dtd +# application/xml-external-parsed-entity +# application/xmpp+xml +application/xop+xml xop +application/xproc+xml xpl +application/xslt+xml xslt +application/xspf+xml xspf +application/xv+xml mxml xhvml xvml xvm +application/yang yang +application/yin+xml yin +application/zip zip +# audio/1d-interleaved-parityfec +# audio/32kadpcm +# audio/3gpp +# audio/3gpp2 +# audio/ac3 +audio/adpcm adp +# audio/amr +# audio/amr-wb +# audio/amr-wb+ +# audio/asc +# audio/atrac-advanced-lossless +# audio/atrac-x +# audio/atrac3 +audio/basic au snd +# audio/bv16 +# audio/bv32 +# audio/clearmode +# audio/cn +# audio/dat12 +# audio/dls +# audio/dsr-es201108 +# audio/dsr-es202050 +# audio/dsr-es202211 +# audio/dsr-es202212 +# audio/dv +# audio/dvi4 +# audio/eac3 +# audio/evrc +# audio/evrc-qcp +# audio/evrc0 +# audio/evrc1 +# audio/evrcb +# audio/evrcb0 +# audio/evrcb1 +# audio/evrcwb +# audio/evrcwb0 +# audio/evrcwb1 +# audio/example +# audio/fwdred +# audio/g719 +# audio/g722 +# audio/g7221 +# audio/g723 +# audio/g726-16 +# audio/g726-24 +# audio/g726-32 +# audio/g726-40 +# audio/g728 +# audio/g729 +# audio/g7291 +# audio/g729d +# audio/g729e +# audio/gsm +# audio/gsm-efr +# audio/gsm-hr-08 +# audio/ilbc +# audio/ip-mr_v2.5 +# audio/isac +# audio/l16 +# audio/l20 +# audio/l24 +# audio/l8 +# audio/lpc +audio/midi mid midi kar rmi +# audio/mobile-xmf +audio/mp4 mp4a +# audio/mp4a-latm +# audio/mpa +# audio/mpa-robust +audio/mpeg mpga mp2 mp2a mp3 m2a m3a +# audio/mpeg4-generic +# audio/musepack +audio/ogg oga ogg spx +# audio/opus +# audio/parityfec +# audio/pcma +# audio/pcma-wb +# audio/pcmu-wb +# audio/pcmu +# audio/prs.sid +# audio/qcelp +# audio/red +# audio/rtp-enc-aescm128 +# audio/rtp-midi +# audio/rtx +audio/s3m s3m +audio/silk sil +# audio/smv +# audio/smv0 +# audio/smv-qcp +# audio/sp-midi +# audio/speex +# audio/t140c +# audio/t38 +# audio/telephone-event +# audio/tone +# audio/uemclip +# audio/ulpfec +# audio/vdvi +# audio/vmr-wb +# audio/vnd.3gpp.iufp +# audio/vnd.4sb +# audio/vnd.audiokoz +# audio/vnd.celp +# audio/vnd.cisco.nse +# audio/vnd.cmles.radio-events +# audio/vnd.cns.anp1 +# audio/vnd.cns.inf1 +audio/vnd.dece.audio uva uvva +audio/vnd.digital-winds eol +# audio/vnd.dlna.adts +# audio/vnd.dolby.heaac.1 +# audio/vnd.dolby.heaac.2 +# audio/vnd.dolby.mlp +# audio/vnd.dolby.mps +# audio/vnd.dolby.pl2 +# audio/vnd.dolby.pl2x +# audio/vnd.dolby.pl2z +# audio/vnd.dolby.pulse.1 +audio/vnd.dra dra +audio/vnd.dts dts +audio/vnd.dts.hd dtshd +# audio/vnd.dvb.file +# audio/vnd.everad.plj +# audio/vnd.hns.audio +audio/vnd.lucent.voice lvp +audio/vnd.ms-playready.media.pya pya +# audio/vnd.nokia.mobile-xmf +# audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 ecelp4800 +audio/vnd.nuera.ecelp7470 ecelp7470 +audio/vnd.nuera.ecelp9600 ecelp9600 +# audio/vnd.octel.sbc +# audio/vnd.qcelp +# audio/vnd.rhetorex.32kadpcm +audio/vnd.rip rip +# audio/vnd.sealedmedia.softseal.mpeg +# audio/vnd.vmx.cvsd +# audio/vorbis +# audio/vorbis-config +audio/webm weba +audio/x-aac aac +audio/x-aiff aif aiff aifc +audio/x-caf caf +audio/x-flac flac +audio/x-matroska mka +audio/x-mpegurl m3u +audio/x-ms-wax wax +audio/x-ms-wma wma +audio/x-pn-realaudio ram ra +audio/x-pn-realaudio-plugin rmp +# audio/x-tta +audio/x-wav wav +audio/xm xm +chemical/x-cdx cdx +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-csml csml +# chemical/x-pdb +chemical/x-xyz xyz +image/bmp bmp +image/cgm cgm +# image/example +# image/fits +image/g3fax g3 +image/gif gif +image/ief ief +# image/jp2 +image/jpeg jpeg jpg jpe +# image/jpm +# image/jpx +image/ktx ktx +# image/naplps +image/png png +image/prs.btif btif +# image/prs.pti +image/sgi sgi +image/svg+xml svg svgz +# image/t38 +image/tiff tiff tif +# image/tiff-fx +image/vnd.adobe.photoshop psd +# image/vnd.cns.inf2 +image/vnd.dece.graphic uvi uvvi uvg uvvg +image/vnd.dvb.subtitle sub +image/vnd.djvu djvu djv +image/vnd.dwg dwg +image/vnd.dxf dxf +image/vnd.fastbidsheet fbs +image/vnd.fpx fpx +image/vnd.fst fst +image/vnd.fujixerox.edmics-mmr mmr +image/vnd.fujixerox.edmics-rlc rlc +# image/vnd.globalgraphics.pgb +# image/vnd.microsoft.icon +# image/vnd.mix +image/vnd.ms-modi mdi +image/vnd.ms-photo wdp +image/vnd.net-fpx npx +# image/vnd.radiance +# image/vnd.sealed.png +# image/vnd.sealedmedia.softseal.gif +# image/vnd.sealedmedia.softseal.jpg +# image/vnd.svf +image/vnd.wap.wbmp wbmp +image/vnd.xiff xif +image/webp webp +image/x-3ds 3ds +image/x-cmu-raster ras +image/x-cmx cmx +image/x-freehand fh fhc fh4 fh5 fh7 +image/x-icon ico +image/x-mrsid-image sid +image/x-pcx pcx +image/x-pict pic pct +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-tga tga +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd +# message/cpim +# message/delivery-status +# message/disposition-notification +# message/example +# message/external-body +# message/feedback-report +# message/global +# message/global-delivery-status +# message/global-disposition-notification +# message/global-headers +# message/http +# message/imdn+xml +# message/news +# message/partial +message/rfc822 eml mime +# message/s-http +# message/sip +# message/sipfrag +# message/tracking-status +# message/vnd.si.simp +# model/example +model/iges igs iges +model/mesh msh mesh silo +model/vnd.collada+xml dae +model/vnd.dwf dwf +# model/vnd.flatland.3dml +model/vnd.gdl gdl +# model/vnd.gs-gdl +# model/vnd.gs.gdl +model/vnd.gtw gtw +# model/vnd.moml+xml +model/vnd.mts mts +# model/vnd.parasolid.transmit.binary +# model/vnd.parasolid.transmit.text +model/vnd.vtu vtu +model/vrml wrl vrml +model/x3d+binary x3db x3dbz +model/x3d+vrml x3dv x3dvz +model/x3d+xml x3d x3dz +# multipart/alternative +# multipart/appledouble +# multipart/byteranges +# multipart/digest +# multipart/encrypted +# multipart/example +# multipart/form-data +# multipart/header-set +# multipart/mixed +# multipart/parallel +# multipart/related +# multipart/report +# multipart/signed +# multipart/voice-message +# text/1d-interleaved-parityfec +text/cache-manifest appcache +text/calendar ics ifb +text/css css +text/csv csv +# text/directory +# text/dns +# text/ecmascript +# text/enriched +# text/example +# text/fwdred +text/html html htm +# text/javascript +text/n3 n3 +# text/parityfec +text/plain txt text conf def list log in +# text/prs.fallenstein.rst +text/prs.lines.tag dsc +# text/vnd.radisys.msml-basic-layout +# text/red +# text/rfc822-headers +text/richtext rtx +# text/rtf +# text/rtp-enc-aescm128 +# text/rtx +text/sgml sgml sgm +# text/t140 +text/tab-separated-values tsv +text/troff t tr roff man me ms +text/turtle ttl +# text/ulpfec +text/uri-list uri uris urls +text/vcard vcard +# text/vnd.abc +text/vnd.curl curl +text/vnd.curl.dcurl dcurl +text/vnd.curl.scurl scurl +text/vnd.curl.mcurl mcurl +# text/vnd.dmclientscript +text/vnd.dvb.subtitle sub +# text/vnd.esmertec.theme-descriptor +text/vnd.fly fly +text/vnd.fmi.flexstor flx +text/vnd.graphviz gv +text/vnd.in3d.3dml 3dml +text/vnd.in3d.spot spot +# text/vnd.iptc.newsml +# text/vnd.iptc.nitf +# text/vnd.latex-z +# text/vnd.motorola.reflex +# text/vnd.ms-mediapackage +# text/vnd.net2phone.commcenter.command +# text/vnd.si.uricatalogue +text/vnd.sun.j2me.app-descriptor jad +# text/vnd.trolltech.linguist +# text/vnd.wap.si +# text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-asm s asm +text/x-c c cc cxx cpp h hh dic +text/x-fortran f for f77 f90 +text/x-java-source java +text/x-opml opml +text/x-pascal p pas +text/x-nfo nfo +text/x-setext etx +text/x-sfv sfv +text/x-uuencode uu +text/x-vcalendar vcs +text/x-vcard vcf +# text/xml +# text/xml-external-parsed-entity +# video/1d-interleaved-parityfec +video/3gpp 3gp +# video/3gpp-tt +video/3gpp2 3g2 +# video/bmpeg +# video/bt656 +# video/celb +# video/dv +# video/example +video/h261 h261 +video/h263 h263 +# video/h263-1998 +# video/h263-2000 +video/h264 h264 +# video/h264-rcdo +# video/h264-svc +video/jpeg jpgv +# video/jpeg2000 +video/jpm jpm jpgm +video/mj2 mj2 mjp2 +# video/mp1s +# video/mp2p +# video/mp2t +video/mp4 mp4 mp4v mpg4 +# video/mp4v-es +video/mpeg mpeg mpg mpe m1v m2v +# video/mpeg4-generic +# video/mpv +# video/nv +video/ogg ogv +# video/parityfec +# video/pointer +video/quicktime qt mov +# video/raw +# video/rtp-enc-aescm128 +# video/rtx +# video/smpte292m +# video/ulpfec +# video/vc1 +# video/vnd.cctv +video/vnd.dece.hd uvh uvvh +video/vnd.dece.mobile uvm uvvm +# video/vnd.dece.mp4 +video/vnd.dece.pd uvp uvvp +video/vnd.dece.sd uvs uvvs +video/vnd.dece.video uvv uvvv +# video/vnd.directv.mpeg +# video/vnd.directv.mpeg-tts +# video/vnd.dlna.mpeg-tts +video/vnd.dvb.file dvb +video/vnd.fvt fvt +# video/vnd.hns.video +# video/vnd.iptvforum.1dparityfec-1010 +# video/vnd.iptvforum.1dparityfec-2005 +# video/vnd.iptvforum.2dparityfec-1010 +# video/vnd.iptvforum.2dparityfec-2005 +# video/vnd.iptvforum.ttsavc +# video/vnd.iptvforum.ttsmpeg2 +# video/vnd.motorola.video +# video/vnd.motorola.videop +video/vnd.mpegurl mxu m4u +video/vnd.ms-playready.media.pyv pyv +# video/vnd.nokia.interleaved-multimedia +# video/vnd.nokia.videovoip +# video/vnd.objectvideo +# video/vnd.sealed.mpeg1 +# video/vnd.sealed.mpeg4 +# video/vnd.sealed.swf +# video/vnd.sealedmedia.softseal.mov +video/vnd.uvvu.mp4 uvu uvvu +video/vnd.vivo viv +video/webm webm +video/x-f4v f4v +video/x-fli fli +video/x-flv flv +video/x-m4v m4v +video/x-matroska mkv mk3d mks +video/x-mng mng +video/x-ms-asf asf asx +video/x-ms-vob vob +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie +video/x-smv smv +x-conference/x-cooltalk ice diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/types/node.types b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/types/node.types new file mode 100644 index 0000000..55b2cf7 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/mime/types/node.types @@ -0,0 +1,77 @@ +# What: WebVTT +# Why: To allow formats intended for marking up external text track resources. +# http://dev.w3.org/html5/webvtt/ +# Added by: niftylettuce +text/vtt vtt + +# What: Google Chrome Extension +# Why: To allow apps to (work) be served with the right content type header. +# http://codereview.chromium.org/2830017 +# Added by: niftylettuce +application/x-chrome-extension crx + +# What: HTC support +# Why: To properly render .htc files such as CSS3PIE +# Added by: niftylettuce +text/x-component htc + +# What: HTML5 application cache manifes ('.manifest' extension) +# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps +# per https://developer.mozilla.org/en/offline_resources_in_firefox +# Added by: louisremi +text/cache-manifest manifest + +# What: node binary buffer format +# Why: semi-standard extension w/in the node community +# Added by: tootallnate +application/octet-stream buffer + +# What: The "protected" MP-4 formats used by iTunes. +# Why: Required for streaming music to browsers (?) +# Added by: broofa +application/mp4 m4p +audio/mp4 m4a + +# What: Video format, Part of RFC1890 +# Why: See https://github.com/bentomas/node-mime/pull/6 +# Added by: mjrusso +video/MP2T ts + +# What: EventSource mime type +# Why: mime type of Server-Sent Events stream +# http://www.w3.org/TR/eventsource/#text-event-stream +# Added by: francois2metz +text/event-stream event-stream + +# What: Mozilla App manifest mime type +# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests +# Added by: ednapiranha +application/x-web-app-manifest+json webapp + +# What: Lua file types +# Why: Googling around shows de-facto consensus on these +# Added by: creationix (Issue #45) +text/x-lua lua +application/x-lua-bytecode luac + +# What: Markdown files, as per http://daringfireball.net/projects/markdown/syntax +# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown +# Added by: avoidwork +text/x-markdown markdown md mkd + +# What: ini files +# Why: because they're just text files +# Added by: Matthew Kastor +text/plain ini + +# What: DASH Adaptive Streaming manifest +# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video +# Added by: eelcocramer +application/dash+xml mdp + +# What: OpenType font files - http://www.microsoft.com/typography/otspec/ +# Why: Browsers usually ignore the font MIME types and sniff the content, +# but Chrome, shows a warning if OpenType fonts aren't served with +# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png. +# Added by: alrra +font/opentype otf diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/.npmignore b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/.npmignore new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/History.md b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/History.md new file mode 100644 index 0000000..82df7b1 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/History.md @@ -0,0 +1,15 @@ + +0.0.4 / 2012-06-17 +================== + + * changed: ret -1 for unsatisfiable and -2 when invalid + +0.0.3 / 2012-06-17 +================== + + * fix last-byte-pos default to len - 1 + +0.0.2 / 2012-06-14 +================== + + * add `.type` diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/Makefile b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/Makefile new file mode 100644 index 0000000..8e8640f --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --reporter spec \ + --require should + +.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/Readme.md b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/Readme.md new file mode 100644 index 0000000..b2a67fe --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/Readme.md @@ -0,0 +1,28 @@ + +# node-range-parser + + Range header field parser. + +## Example: + +```js +assert(-1 == parse(200, 'bytes=500-20')); +assert(-2 == parse(200, 'bytes=malformed')); +parse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }])); +parse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }])); +parse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }])); +parse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }])); +parse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }])); +parse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }])); +parse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }])); +parse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }])); +parse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }])); +parse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }])); +parse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }])); +``` + +## Installation + +``` +$ npm install range-parser +``` \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/index.js b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/index.js new file mode 100644 index 0000000..9b0f7a8 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/index.js @@ -0,0 +1,49 @@ + +/** + * Parse "Range" header `str` relative to the given file `size`. + * + * @param {Number} size + * @param {String} str + * @return {Array} + * @api public + */ + +module.exports = function(size, str){ + var valid = true; + var i = str.indexOf('='); + + if (-1 == i) return -2; + + var arr = str.slice(i + 1).split(',').map(function(range){ + var range = range.split('-') + , start = parseInt(range[0], 10) + , end = parseInt(range[1], 10); + + // -nnn + if (isNaN(start)) { + start = size - end; + end = size - 1; + // nnn- + } else if (isNaN(end)) { + end = size - 1; + } + + // limit last-byte-pos to current length + if (end > size - 1) end = size - 1; + + // invalid + if (isNaN(start) + || isNaN(end) + || start > end + || start < 0) valid = false; + + return { + start: start, + end: end + }; + }); + + arr.type = str.slice(0, i); + + return valid ? arr : -1; +}; \ No newline at end of file diff --git a/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/package.json b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/package.json new file mode 100644 index 0000000..0a11e32 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/node_modules/range-parser/package.json @@ -0,0 +1,25 @@ +{ + "name": "range-parser", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "description": "Range header field string parser", + "version": "0.0.4", + "main": "index.js", + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "readme": "\n# node-range-parser\n\n Range header field parser.\n\n## Example:\n\n```js\nassert(-1 == parse(200, 'bytes=500-20'));\nassert(-2 == parse(200, 'bytes=malformed'));\nparse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }]));\nparse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }]));\nparse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }]));\nparse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }]));\nparse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }]));\nparse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }]));\nparse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }]));\nparse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }]));\nparse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }]));\n```\n\n## Installation\n\n```\n$ npm install range-parser\n```", + "readmeFilename": "Readme.md", + "_id": "range-parser@0.0.4", + "dist": { + "shasum": "abd6341ce92c448ac14d99378f2ef28d85a55ab7" + }, + "_from": "range-parser@0.0.4", + "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz", + "scripts": {} +} diff --git a/node_modules/express/node_modules/connect/node_modules/send/package.json b/node_modules/express/node_modules/connect/node_modules/send/package.json new file mode 100644 index 0000000..4819852 --- /dev/null +++ b/node_modules/express/node_modules/connect/node_modules/send/package.json @@ -0,0 +1,46 @@ +{ + "name": "send", + "version": "0.1.4", + "description": "Better streaming static file server with Range and conditional-GET support", + "keywords": [ + "static", + "file", + "server" + ], + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "dependencies": { + "debug": "*", + "mime": "~1.2.9", + "fresh": "0.2.0", + "range-parser": "0.0.4" + }, + "devDependencies": { + "mocha": "*", + "should": "*", + "supertest": "0.0.1", + "connect": "2.x" + }, + "scripts": { + "test": "make test" + }, + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/send.git" + }, + "main": "index", + "readme": "# send\n\n Send is Connect's `static()` extracted for generalized use, a streaming static file\n server supporting partial responses (Ranges), conditional-GET negotiation, high test coverage, and granular events which may be leveraged to take appropriate actions in your application or framework.\n\n## Installation\n\n $ npm install send\n\n## Examples\n\n Small:\n\n```js\nvar http = require('http');\nvar send = require('send');\n\nvar app = http.createServer(function(req, res){\n send(req, req.url).pipe(res);\n}).listen(3000);\n```\n\n Serving from a root directory with custom error-handling:\n\n```js\nvar http = require('http');\nvar send = require('send');\nvar url = require('url');\n\nvar app = http.createServer(function(req, res){\n // your custom error-handling logic:\n function error(err) {\n res.statusCode = err.status || 500;\n res.end(err.message);\n }\n\n // your custom directory handling logic:\n function redirect() {\n res.statusCode = 301;\n res.setHeader('Location', req.url + '/');\n res.end('Redirecting to ' + req.url + '/');\n }\n\n // transfer arbitrary files from within\n // /www/example.com/public/*\n send(req, url.parse(req.url).pathname)\n .root('/www/example.com/public')\n .on('error', error)\n .on('directory', redirect)\n .pipe(res);\n}).listen(3000);\n```\n\n## API\n\n### Events\n\n - `error` an error occurred `(err)`\n - `directory` a directory was requested\n - `file` a file was requested `(path, stat)`\n - `stream` file streaming has started `(stream)`\n - `end` streaming has completed\n\n### .root(dir)\n\n Serve files relative to `path`. Aliased as `.from(dir)`.\n\n### .index(path)\n\n By default send supports \"index.html\" files, to disable this\n invoke `.index(false)` or to supply a new index pass a string.\n\n### .maxage(ms)\n\n Provide a max-age in milliseconds for http caching, defaults to 0.\n\n### .hidden(bool)\n\n Enable or disable transfer of hidden files, defaults to false.\n\n## Error-handling\n\n By default when no `error` listeners are present an automatic response will be made, otherwise you have full control over the response, aka you may show a 5xx page etc.\n\n## Caching\n\n It does _not_ perform internal caching, you should use a reverse proxy cache such\n as Varnish for this, or those fancy things called CDNs. If your application is small enough that it would benefit from single-node memory caching, it's small enough that it does not need caching at all ;).\n\n## Debugging\n\n To enable `debug()` instrumentation output export __DEBUG__:\n\n```\n$ DEBUG=send node app\n```\n\n## Running tests\n\n```\n$ npm install\n$ make test\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/send/issues" + }, + "homepage": "https://github.com/visionmedia/send", + "_id": "send@0.1.4", + "dist": { + "shasum": "75165ac4d568b6d651f624b03a07a5b29969da5d" + }, + "_from": "send@0.1.4", + "_resolved": "https://registry.npmjs.org/send/-/send-0.1.4.tgz" +} diff --git a/node_modules/express/node_modules/cookie-signature/package.json b/node_modules/express/node_modules/cookie-signature/package.json index 83bea32..1b160d1 100644 --- a/node_modules/express/node_modules/cookie-signature/package.json +++ b/node_modules/express/node_modules/cookie-signature/package.json @@ -20,5 +20,9 @@ "readme": "\n# cookie-signature\n\n Sign and unsign cookies.\n\n## Example\n\n```js\nvar cookie = require('cookie-signature');\n\nvar val = cookie.sign('hello', 'tobiiscool');\nval.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI');\n\nvar val = cookie.sign('hello', 'tobiiscool');\ncookie.unsign(val, 'tobiiscool').should.equal('hello');\ncookie.unsign(val, 'luna').should.be.false;\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 LearnBoost <tj@learnboost.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", "readmeFilename": "Readme.md", "_id": "cookie-signature@1.0.1", - "_from": "cookie-signature@1.0.1" + "dist": { + "shasum": "5ea27b06fe136e2aaf2ec9b9a0fec680c787daac" + }, + "_from": "cookie-signature@1.0.1", + "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.1.tgz" } diff --git a/node_modules/express/node_modules/fresh/package.json b/node_modules/express/node_modules/fresh/package.json index f6dfe8d..4c93abb 100644 --- a/node_modules/express/node_modules/fresh/package.json +++ b/node_modules/express/node_modules/fresh/package.json @@ -24,5 +24,9 @@ }, "homepage": "https://github.com/visionmedia/node-fresh", "_id": "fresh@0.2.0", - "_from": "fresh@0.2.0" + "dist": { + "shasum": "129869ce4b069a25a531126de6745be67c382115" + }, + "_from": "fresh@0.2.0", + "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz" } diff --git a/node_modules/express/node_modules/merge-descriptors/package.json b/node_modules/express/node_modules/merge-descriptors/package.json index 26f8196..7a7d1ec 100644 --- a/node_modules/express/node_modules/merge-descriptors/package.json +++ b/node_modules/express/node_modules/merge-descriptors/package.json @@ -22,5 +22,9 @@ "readmeFilename": "README.md", "homepage": "https://github.com/jonathanong/merge-descriptors", "_id": "merge-descriptors@0.0.1", - "_from": "merge-descriptors@0.0.1" + "dist": { + "shasum": "f58f32ca750e2c48dfeb78c2505e3974d8d12348" + }, + "_from": "merge-descriptors@0.0.1", + "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.1.tgz" } diff --git a/node_modules/express/node_modules/range-parser/package.json b/node_modules/express/node_modules/range-parser/package.json index efdf450..77dfe05 100644 --- a/node_modules/express/node_modules/range-parser/package.json +++ b/node_modules/express/node_modules/range-parser/package.json @@ -16,5 +16,9 @@ "readme": "\n# node-range-parser\n\n Range header field parser.\n\n## Example:\n\n```js\nassert(-1 == parse(200, 'bytes=500-20'));\nassert(-2 == parse(200, 'bytes=malformed'));\nparse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }]));\nparse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }]));\nparse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }]));\nparse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }]));\nparse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }]));\nparse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }]));\nparse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }]));\nparse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }]));\nparse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }]));\n```\n\n## Installation\n\n```\n$ npm install range-parser\n```", "readmeFilename": "Readme.md", "_id": "range-parser@0.0.4", - "_from": "range-parser@0.0.4" + "dist": { + "shasum": "abd6341ce92c448ac14d99378f2ef28d85a55ab7" + }, + "_from": "range-parser@0.0.4", + "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz" } diff --git a/node_modules/express/node_modules/send/package.json b/node_modules/express/node_modules/send/package.json index 1107aca..4819852 100644 --- a/node_modules/express/node_modules/send/package.json +++ b/node_modules/express/node_modules/send/package.json @@ -38,5 +38,9 @@ }, "homepage": "https://github.com/visionmedia/send", "_id": "send@0.1.4", - "_from": "send@0.1.4" + "dist": { + "shasum": "75165ac4d568b6d651f624b03a07a5b29969da5d" + }, + "_from": "send@0.1.4", + "_resolved": "https://registry.npmjs.org/send/-/send-0.1.4.tgz" } diff --git a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/package.json b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/package.json index 745129b..0937b2a 100644 --- a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/package.json +++ b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/optimist/package.json @@ -42,5 +42,5 @@ }, "homepage": "https://github.com/substack/node-optimist", "_id": "optimist@0.3.7", - "_from": "optimist@~0.3.5" + "_from": "optimist@0.3.7" } diff --git a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md index 98b90d5..3796e07 100644 --- a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md +++ b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 0.1.32 + +* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns + (issue 92). + +* Fixed test runner to actually report number of failed tests as its process + exit code. + +* Fixed a typo when reporting bad mappings (issue 87). + ## 0.1.31 * Delay parsing the mappings in SourceMapConsumer until queried for a source @@ -109,4 +119,3 @@ ## 0.1.10 * Added sourcesContent support to the customer and generator. - diff --git a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js index a3b9dc0..d7f10d8 100644 --- a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js +++ b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js @@ -257,6 +257,7 @@ define(function (require, exports, module) { } } + this.__generatedMappings.sort(util.compareByGeneratedPositions); this.__originalMappings.sort(util.compareByOriginalPositions); }; diff --git a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js index 48ead7d..88b06ec 100644 --- a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js +++ b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js @@ -252,7 +252,7 @@ define(function (require, exports, module) { throw new Error('Invalid mapping: ' + JSON.stringify({ generated: aGenerated, source: aSource, - orginal: aOriginal, + original: aOriginal, name: aName })); } diff --git a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/package.json b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/package.json index f59e820..d9a0cb5 100644 --- a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/package.json +++ b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/package.json @@ -1,7 +1,7 @@ { "name": "source-map", "description": "Generates and consumes source maps", - "version": "0.1.31", + "version": "0.1.32", "homepage": "https://github.com/mozilla/source-map", "author": { "name": "Nick Fitzgerald", @@ -71,6 +71,14 @@ { "name": "Heather Arthur", "email": "fayearthur@gmail.com" + }, + { + "name": "Hugh Kennedy", + "email": "hughskennedy@gmail.com" + }, + { + "name": "David Glasser", + "email": "glasser@davidglasser.net" } ], "repository": { @@ -105,6 +113,10 @@ "bugs": { "url": "https://github.com/mozilla/source-map/issues" }, - "_id": "source-map@0.1.31", - "_from": "source-map@~0.1.7" + "_id": "source-map@0.1.32", + "dist": { + "shasum": "f36d77ab5bfe0111a4d709fdbb89b106c86ed50f" + }, + "_from": "source-map@0.1.32", + "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz" } diff --git a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/run-tests.js b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/run-tests.js index 626c53f..64a7c3a 100644 --- a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/run-tests.js +++ b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/source-map/test/run-tests.js @@ -11,7 +11,6 @@ var path = require('path'); var util = require('./source-map/util'); function run(tests) { - var failures = []; var total = 0; var passed = 0; @@ -31,22 +30,13 @@ function run(tests) { } } - console.log(""); + console.log(''); console.log(passed + ' / ' + total + ' tests passed.'); - console.log(""); + console.log(''); - failures.forEach(function (f) { - }); - - return failures.length; + return total - passed; } -var code; - -process.stdout.on('close', function () { - process.exit(code); -}); - function isTestFile(f) { var testToRun = process.argv[2]; return testToRun @@ -62,10 +52,11 @@ var requires = fs.readdirSync(path.join(__dirname, 'source-map')) .filter(isTestFile) .map(toModule); -code = run(requires.map(require).map(function (mod, i) { +var code = run(requires.map(require).map(function (mod, i) { return { name: requires[i], testCase: mod }; })); + process.exit(code); diff --git a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js index 5d33072..c1741b2 100644 --- a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js +++ b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js @@ -31,6 +31,9 @@ function transform(file) { src += 'exports.minify = ' + uglify.minify.toString() + ';\n\n' src += 'exports.describe_ast = ' + uglify.describe_ast.toString() + ';' + // TODO: remove once https://github.com/substack/node-browserify/issues/631 is resolved + src = src.replace(/"for"/g, '"fo" + "r"') + cache[file] = src return makeStream(src); } diff --git a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json index a949324..139a614 100644 --- a/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json +++ b/node_modules/jade/node_modules/constantinople/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json @@ -1,6 +1,6 @@ { "name": "uglify-to-browserify", - "version": "1.0.1", + "version": "1.0.2", "description": "A transform to make UglifyJS work in browserify.", "keywords": [], "dependencies": {}, @@ -25,6 +25,10 @@ "url": "https://github.com/ForbesLindesay/uglify-to-browserify/issues" }, "homepage": "https://github.com/ForbesLindesay/uglify-to-browserify", - "_id": "uglify-to-browserify@1.0.1", - "_from": "uglify-to-browserify@~1.0.0" + "_id": "uglify-to-browserify@1.0.2", + "_from": "uglify-to-browserify@1.0.2", + "dist": { + "shasum": "fa9db0f68f81d518c8c96e9ac38e93b92d0e21a4" + }, + "_resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz" } diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.npmignore b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.npmignore deleted file mode 100644 index 13abef4..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.travis.yml b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/LICENCE b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/LICENCE deleted file mode 100644 index 171dd97..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/examples/pretty.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/examples/pretty.js deleted file mode 100644 index af04340..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/examples/pretty.js +++ /dev/null @@ -1,25 +0,0 @@ - -var inspect = require('util').inspect - -if(!module.parent) { - var es = require('..') //load event-stream - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/index.js deleted file mode 100644 index 16846a2..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/index.js +++ /dev/null @@ -1,341 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - -var Stream = require('stream').Stream - , es = exports - , through = require('through') - , from = require('from') - , duplex = require('duplexer') - , map = require('map-stream') - , pause = require('pause-stream') - , split = require('split') - -es.Stream = Stream //re-export Stream from core -es.through = through -es.from = from -es.duplex = duplex -es.map = map -es.pause = pause -es.split = split - -// merge / concat -// -// combine multiple streams into a single stream. -// will emit end only once - -es.concat = //actually this should be called concat -es.merge = function (/*streams...*/) { - var toMerge = [].slice.call(arguments) - var stream = new Stream() - var endCount = 0 - stream.writable = stream.readable = true - - toMerge.forEach(function (e) { - e.pipe(stream, {end: false}) - var ended = false - e.on('end', function () { - if(ended) return - ended = true - endCount ++ - if(endCount == toMerge.length) - stream.emit('end') - }) - }) - stream.write = function (data) { - this.emit('data', data) - } - stream.destroy = function () { - merge.forEach(function (e) { - if(e.destroy) e.destroy() - }) - } - return stream -} - - -// writable stream, collects all events into an array -// and calls back when 'end' occurs -// mainly I'm using this to test the other functions - -es.writeArray = function (done) { - if ('function' !== typeof done) - throw new Error('function writeArray (done): done must be function') - - var a = new Stream () - , array = [], isDone = false - a.write = function (l) { - array.push(l) - } - a.end = function () { - isDone = true - done(null, array) - } - a.writable = true - a.readable = false - a.destroy = function () { - a.writable = a.readable = false - if(isDone) return - done(new Error('destroyed before end'), array) - } - return a -} - -//return a Stream that reads the properties of an object -//respecting pause() and resume() - -es.readArray = function (array) { - var stream = new Stream() - , i = 0 - , paused = false - , ended = false - - stream.readable = true - stream.writable = false - - if(!Array.isArray(array)) - throw new Error('event-stream.read expects an array') - - stream.resume = function () { - if(ended) return - paused = false - var l = array.length - while(i < l && !paused && !ended) { - stream.emit('data', array[i++]) - } - if(i == l && !ended) - ended = true, stream.readable = false, stream.emit('end') - } - process.nextTick(stream.resume) - stream.pause = function () { - paused = true - } - stream.destroy = function () { - ended = true - stream.emit('close') - } - return stream -} - -// -// readable (asyncFunction) -// return a stream that calls an async function while the stream is not paused. -// -// the function must take: (count, callback) {... -// - -es.readable = function (func, continueOnError) { - var stream = new Stream() - , i = 0 - , paused = false - , ended = false - , reading = false - - stream.readable = true - stream.writable = false - - if('function' !== typeof func) - throw new Error('event-stream.readable expects async function') - - stream.on('end', function () { ended = true }) - - function get (err, data) { - - if(err) { - stream.emit('error', err) - if(!continueOnError) stream.emit('end') - } else if (arguments.length > 1) - stream.emit('data', data) - - process.nextTick(function () { - if(ended || paused || reading) return - try { - reading = true - func.call(stream, i++, function () { - reading = false - get.apply(null, arguments) - }) - } catch (err) { - stream.emit('error', err) - } - }) - } - stream.resume = function () { - paused = false - get() - } - process.nextTick(get) - stream.pause = function () { - paused = true - } - stream.destroy = function () { - stream.emit('end') - stream.emit('close') - ended = true - } - return stream -} - - - -// -// map sync -// - -es.mapSync = function (sync) { - return es.through(function write(data) { - var mappedData = sync(data) - if (typeof mappedData !== 'undefined') - this.emit('data', mappedData) - }) -} - -// -// log just print out what is coming through the stream, for debugging -// - -es.log = function (name) { - return es.through(function (data) { - var args = [].slice.call(arguments) - if(name) console.error(name, data) - else console.error(data) - this.emit('data', data) - }) -} - -// -// combine multiple streams together so that they act as a single stream -// -es.pipeline = -es.pipe = es.connect = function () { - - var streams = [].slice.call(arguments) - , first = streams[0] - , last = streams[streams.length - 1] - , thepipe = es.duplex(first, last) - - if(streams.length == 1) - return streams[0] - else if (!streams.length) - throw new Error('connect called with empty args') - - //pipe all the streams together - - function recurse (streams) { - if(streams.length < 2) - return - streams[0].pipe(streams[1]) - recurse(streams.slice(1)) - } - - recurse(streams) - - function onerror () { - var args = [].slice.call(arguments) - args.unshift('error') - thepipe.emit.apply(thepipe, args) - } - - //es.duplex already reemits the error from the first and last stream. - //add a listener for the inner streams in the pipeline. - for(var i = 1; i < streams.length - 1; i ++) - streams[i].on('error', onerror) - - return thepipe -} - -// -// child -- pipe through a child process -// - -es.child = function (child) { - - return es.duplex(child.stdin, child.stdout) - -} - -// -// parse -// -// must be used after es.split() to ensure that each chunk represents a line -// source.pipe(es.split()).pipe(es.parse()) - -es.parse = function () { - return es.through(function (data) { - var obj - try { - if(data) //ignore empty lines - obj = JSON.parse(data.toString()) - } catch (err) { - return console.error(err, 'attemping to parse:', data) - } - //ignore lines that where only whitespace. - if(obj !== undefined) - this.emit('data', obj) - }) -} -// -// stringify -// - -es.stringify = function () { - var Buffer = require('buffer').Buffer - return es.mapSync(function (e){ - return JSON.stringify(Buffer.isBuffer(e) ? e.toString() : e) + '\n' - }) -} - -// -// replace a string within a stream. -// -// warn: just concatenates the string and then does str.split().join(). -// probably not optimal. -// for smallish responses, who cares? -// I need this for shadow-npm so it's only relatively small json files. - -es.replace = function (from, to) { - return es.pipeline(es.split(from), es.join(to)) -} - -// -// join chunks with a joiner. just like Array#join -// also accepts a callback that is passed the chunks appended together -// this is still supported for legacy reasons. -// - -es.join = function (str) { - - //legacy api - if('function' === typeof str) - return es.wait(str) - - var first = true - return es.through(function (data) { - if(!first) - this.emit('data', str) - first = false - this.emit('data', data) - return true - }) -} - - -// -// wait. callback when 'end' is emitted, with all chunks appended as string. -// - -es.wait = function (callback) { - var body = '' - return es.through(function (data) { body += data }, - function () { - this.emit('data', body) - this.emit('end') - if(callback) callback(null, body) - }) -} - -es.pipeable = function () { - throw new Error('[EVENT-STREAM] es.pipeable is deprecated') -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.npmignore b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.npmignore deleted file mode 100644 index 062c11e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -*.err \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.travis.yml b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.travis.yml deleted file mode 100644 index c2ba3f9..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.8 \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/Makefile b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/Makefile deleted file mode 100644 index 1f8985d..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -test: - node test.js - -.PHONY: test \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/README.md b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/README.md deleted file mode 100644 index a24cecb..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# duplexer [![build status][1]][2] - -Creates a duplex stream - -Taken from [event-stream][3] - -## duplex (writeStream, readStream) - -Takes a writable stream and a readable stream and makes them appear as a readable writable stream. - -It is assumed that the two streams are connected to each other in some way. - -## Example - - var grep = cp.exec('grep Stream') - - duplex(grep.stdin, grep.stdout) - -## Installation - -`npm install duplexer` - -## Tests - -`make test` - -## Contributors - - - Dominictarr - - Raynos - -## MIT Licenced - - [1]: https://secure.travis-ci.org/Raynos/duplexer.png - [2]: http://travis-ci.org/Raynos/duplexer - [3]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/index.js deleted file mode 100644 index fee581d..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/index.js +++ /dev/null @@ -1,87 +0,0 @@ -var Stream = require("stream") - , writeMethods = ["write", "end", "destroy"] - , readMethods = ["resume", "pause"] - , readEvents = ["data", "close"] - , slice = Array.prototype.slice - -module.exports = duplex - -function duplex(writer, reader) { - var stream = new Stream() - , ended = false - - Object.defineProperties(stream, { - writable: { - get: getWritable - } - , readable: { - get: getReadable - } - }) - - writeMethods.forEach(proxyWriter) - - readMethods.forEach(proxyReader) - - readEvents.forEach(proxyStream) - - reader.on("end", handleEnd) - - writer.on("error", reemit) - reader.on("error", reemit) - - return stream - - function getWritable() { - return writer.writable - } - - function getReadable() { - return reader.readable - } - - function proxyWriter(methodName) { - stream[methodName] = method - - function method() { - return writer[methodName].apply(writer, arguments) - } - } - - function proxyReader(methodName) { - stream[methodName] = method - - function method() { - stream.emit(methodName) - var func = reader[methodName] - if (func) { - return func.apply(reader, arguments) - } - reader.emit(methodName) - } - } - - function proxyStream(methodName) { - reader.on(methodName, reemit) - - function reemit() { - var args = slice.call(arguments) - args.unshift(methodName) - stream.emit.apply(stream, args) - } - } - - function handleEnd() { - if (ended) { - return - } - ended = true - var args = slice.call(arguments) - args.unshift("end") - stream.emit.apply(stream, args) - } - - function reemit(err) { - stream.emit("error", err) - } -} \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/package.json deleted file mode 100644 index 6f54329..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "duplexer", - "version": "0.0.2", - "description": "Creates a duplex stream", - "keywords": [], - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "repository": { - "type": "git", - "url": "git://github.com/Raynos/duplexer.git" - }, - "main": "index", - "homepage": "https://github.com/Raynos/duplexer", - "contributors": [ - { - "name": "Jake Verbaten" - } - ], - "bugs": { - "url": "https://github.com/Raynos/duplexer/issues", - "email": "raynos2@gmail.com" - }, - "dependencies": {}, - "devDependencies": { - "through": "~0.1.4" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/Raynos/duplexer/raw/master/LICENSE" - } - ], - "scripts": { - "test": "make test" - }, - "readme": "# duplexer [![build status][1]][2]\n\nCreates a duplex stream\n\nTaken from [event-stream][3]\n\n## duplex (writeStream, readStream)\n\nTakes a writable stream and a readable stream and makes them appear as a readable writable stream.\n\nIt is assumed that the two streams are connected to each other in some way.\n\n## Example\n\n var grep = cp.exec('grep Stream')\n\n duplex(grep.stdin, grep.stdout)\n\n## Installation\n\n`npm install duplexer`\n\n## Tests\n\n`make test`\n\n## Contributors\n\n - Dominictarr\n - Raynos\n\n## MIT Licenced\n\n [1]: https://secure.travis-ci.org/Raynos/duplexer.png\n [2]: http://travis-ci.org/Raynos/duplexer\n [3]: https://github.com/dominictarr/event-stream#duplex-writestream-readstream", - "_id": "duplexer@0.0.2", - "_from": "duplexer@~0.0.2" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/test.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/test.js deleted file mode 100644 index e06a864..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/duplexer/test.js +++ /dev/null @@ -1,27 +0,0 @@ -var duplex = require("./index") - , assert = require("assert") - , through = require("through") - -var readable = through() - , writable = through(write) - , written = 0 - , data = 0 - -var stream = duplex(writable, readable) - -function write() { - written++ -} - -stream.on("data", ondata) - -function ondata() { - data++ -} - -stream.write() -readable.emit("data") - -assert.equal(written, 1) -assert.equal(data, 1) -console.log("DONE") \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 deleted file mode 100644 index 6366c04..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.MIT b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.MIT deleted file mode 100644 index 6eafbd7..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/index.js deleted file mode 100644 index 95a8975..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/index.js +++ /dev/null @@ -1,62 +0,0 @@ - -var Stream = require('stream') - -// from -// -// a stream that reads from an source. -// source may be an array, or a function. -// from handles pause behaviour for you. - -module.exports = -function from (source) { - if(Array.isArray(source)) - return from (function (i) { - if(source.length) - this.emit('data', source.shift()) - else - this.emit('end') - return true - }) - - var s = new Stream(), i = 0, ended = false, started = false - s.readable = true - s.writable = false - s.paused = false - s.pause = function () { - started = true - s.paused = true - } - function next () { - var n = 0, r = false - if(ended) return - while(!ended && !s.paused && source.call(s, i++, function () { - if(!n++ && !s.ended && !s.paused) - next() - })) - ; - } - s.resume = function () { - started = true - s.paused = false - next() - } - s.on('end', function () { - ended = true - s.readable = false - process.nextTick(s.destroy) - }) - s.destroy = function () { - ended = true - s.emit('close') - } - /* - by default, the stream will start emitting at nextTick - if you want, you can pause it, after pipeing. - you can also resume before next tick, and that will also - work. - */ - process.nextTick(function () { - if(!started) s.resume() - }) - return s -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/package.json deleted file mode 100644 index be3c0df..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "from", - "version": "0.0.2", - "description": "Easy way to make a Readable Stream", - "main": "index.js", - "scripts": { - "test": "asynct test/*.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/from.git" - }, - "keywords": [ - "stream", - "streams", - "readable", - "easy" - ], - "devDependencies": { - "asynct": "1", - "stream-spec": "0", - "assertions": "~2.3.0" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "license": "MIT", - "readme": "# from\n\nAn easy way to create a `readable Stream`.\n\n## License\nMIT / Apache2\n", - "_id": "from@0.0.2", - "_from": "from@~0" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/readme.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/readme.markdown deleted file mode 100644 index 84c8269..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/readme.markdown +++ /dev/null @@ -1,6 +0,0 @@ -# from - -An easy way to create a `readable Stream`. - -## License -MIT / Apache2 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/test/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/test/index.js deleted file mode 100644 index fafea57..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/from/test/index.js +++ /dev/null @@ -1,141 +0,0 @@ -var from = require('..') -var spec = require('stream-spec') -var a = require('assertions') - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -function pause(stream) { - stream.on('data', function () { - if(Math.random() > 0.1) return - stream.pause() - process.nextTick(function () { - stream.resume() - }) - }) -} - -exports['inc'] = function (test) { - - var fs = from(function (i) { - this.emit('data', i) - if(i >= 99) - return this.emit('end') - return true - }) - - spec(fs).readable().validateOnExit() - - read(fs, function (err, arr) { - test.equal(arr.length, 100) - test.done() - }) -} - -exports['simple'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = from(expected.slice()) - - spec(t) - .readable() - .pausable({strict: true}) - .validateOnExit() - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - -} - -exports['simple pausable'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = from(expected.slice()) - - spec(t) - .readable() - .pausable({strict: true}) - .validateOnExit() - - pause(t) - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - -} - -exports['simple (not strictly pausable) setTimeout'] = function (test) { - - var l = 10 - , expected = [] - while(l--) expected.push(l * Math.random()) - - - var _expected = expected.slice() - var t = from(function (i, n) { - var self = this - setTimeout(function () { - if(_expected.length) - self.emit('data', _expected.shift()) - else - self.emit('end') - n() - }, 3) - }) - - /* - using from in this way will not be strictly pausable. - it could be extended to buffer outputs, but I think a better - way would be to use a PauseStream that implements strict pause. - */ - - spec(t) - .readable() - .pausable({strict: false }) - .validateOnExit() - - //pause(t) - var paused = false - var i = setInterval(function () { - if(!paused) t.pause() - else t.resume() - paused = !paused - }, 2) - - t.on('end', function () { - clearInterval(i) - }) - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - -} - - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.npmignore b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.npmignore deleted file mode 100644 index 13abef4..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.travis.yml b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/LICENCE b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/LICENCE deleted file mode 100644 index 171dd97..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/examples/pretty.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/examples/pretty.js deleted file mode 100644 index af04340..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/examples/pretty.js +++ /dev/null @@ -1,25 +0,0 @@ - -var inspect = require('util').inspect - -if(!module.parent) { - var es = require('..') //load event-stream - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/index.js deleted file mode 100644 index d3a7fd9..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/index.js +++ /dev/null @@ -1,105 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - - -var Stream = require('stream').Stream - - -//create an event stream and apply function to each .write -//emitting each response as data -//unless it's an empty callback - -module.exports = function (mapper) { - var stream = new Stream() - , inputs = 0 - , outputs = 0 - , ended = false - , paused = false - , destroyed = false - - stream.writable = true - stream.readable = true - - stream.write = function () { - if(ended) throw new Error('map stream is not writable') - inputs ++ - var args = [].slice.call(arguments) - , r - , inNext = false - //pipe only allows one argument. so, do not - function next (err) { - if(destroyed) return - inNext = true - outputs ++ - var args = [].slice.call(arguments) - if(err) { - args.unshift('error') - return inNext = false, stream.emit.apply(stream, args) - } - args.shift() //drop err - if (args.length) { - args.unshift('data') - r = stream.emit.apply(stream, args) - } - if(inputs == outputs) { - if(paused) paused = false, stream.emit('drain') //written all the incoming events - if(ended) end() - } - inNext = false - } - args.push(next) - - try { - //catch sync errors and handle them like async errors - var written = mapper.apply(null, args) - paused = (written === false) - return !paused - } catch (err) { - //if the callback has been called syncronously, and the error - //has occured in an listener, throw it again. - if(inNext) - throw err - next(err) - return !paused - } - } - - function end (data) { - //if end was called with args, write it, - ended = true //write will emit 'end' if ended is true - stream.writable = false - if(data !== undefined) - return stream.write(data) - else if (inputs == outputs) //wait for processing - stream.readable = false, stream.emit('end'), stream.destroy() - } - - stream.end = function (data) { - if(ended) return - end() - } - - stream.destroy = function () { - ended = destroyed = true - stream.writable = stream.readable = paused = false - process.nextTick(function () { - stream.emit('close') - }) - } - stream.pause = function () { - paused = true - } - - stream.resume = function () { - paused = false - } - - return stream -} - - - - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/package.json deleted file mode 100644 index 97e7338..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "map-stream", - "version": "0.0.1", - "description": "construct pipes of streams of events", - "homepage": "http://github.com/dominictarr/map-stream", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/map-stream.git" - }, - "dependencies": {}, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~2.9", - "stream-spec": "~0.2", - "event-stream": "~2.1", - "from": "0.0.2" - }, - "scripts": { - "test": "asynct test/" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "http://dominictarr.com" - }, - "readme": "# MapStream\n\nRefactored out of [event-stream](https://github.com/dominictarr/event-stream)\n\n##map (asyncFunction)\n\nCreate a through stream from an asyncronous function. \n\n``` js\nvar es = require('event-stream')\n\nes.map(function (data, callback) {\n //transform data\n // ...\n callback(null, data)\n})\n\n```\n\nEach map MUST call the callback. It may callback with data, with an error or with no arguments, \n\n * `callback()` drop this data. \n this makes the map work like `filter`, \n note:`callback(null,null)` is not the same, and will emit `null`\n\n * `callback(null, newData)` turn data into newData\n \n * `callback(error)` emit an error for this item.\n\n>Note: if a callback is not called, `map` will think that it is still being processed, \n>every call must be answered or the stream will not know when to end. \n>\n>Also, if the callback is called more than once, every call but the first will be ignored.\n\n\n", - "_id": "map-stream@0.0.1", - "_from": "map-stream@0.0.1" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/readme.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/readme.markdown deleted file mode 100644 index 22c019d..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/readme.markdown +++ /dev/null @@ -1,35 +0,0 @@ -# MapStream - -Refactored out of [event-stream](https://github.com/dominictarr/event-stream) - -##map (asyncFunction) - -Create a through stream from an asyncronous function. - -``` js -var es = require('event-stream') - -es.map(function (data, callback) { - //transform data - // ... - callback(null, data) -}) - -``` - -Each map MUST call the callback. It may callback with data, with an error or with no arguments, - - * `callback()` drop this data. - this makes the map work like `filter`, - note:`callback(null,null)` is not the same, and will emit `null` - - * `callback(null, newData)` turn data into newData - - * `callback(error)` emit an error for this item. - ->Note: if a callback is not called, `map` will think that it is still being processed, ->every call must be answered or the stream will not know when to end. -> ->Also, if the callback is called more than once, every call but the first will be ignored. - - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js deleted file mode 100644 index 77ac48e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/map-stream/test/simple-map.asynct.js +++ /dev/null @@ -1,295 +0,0 @@ -'use strict'; - -var map = require('../') - , it = require('it-is') - , u = require('ubelt') - , spec = require('stream-spec') - , from = require('from') - , Stream = require('stream') - , es = require('event-stream') - -//REFACTOR THIS TEST TO USE es.readArray and es.writeArray - -function writeArray(array, stream) { - - array.forEach( function (j) { - stream.write(j) - }) - stream.end() - -} - -function readStream(stream, done) { - - var array = [] - stream.on('data', function (data) { - array.push(data) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -//call sink on each write, -//and complete when finished. - -function pauseStream (prob, delay) { - var pauseIf = ( - 'number' == typeof prob - ? function () { - return Math.random() < prob - } - : 'function' == typeof prob - ? prob - : 0.1 - ) - var delayer = ( - !delay - ? process.nextTick - : 'number' == typeof delay - ? function (next) { setTimeout(next, delay) } - : delay - ) - - return es.through(function (data) { - if(!this.paused && pauseIf()) { - console.log('PAUSE STREAM PAUSING') - this.pause() - var self = this - delayer(function () { - console.log('PAUSE STREAM RESUMING') - self.resume() - }) - } - console.log("emit ('data', " + data + ')') - this.emit('data', data) - }) -} - -exports ['simple map'] = function (test) { - - var input = u.map(1, 1000, function () { - return Math.random() - }) - var expected = input.map(function (v) { - return v * 2 - }) - - var pause = pauseStream(0.1) - var fs = from(input) - var ts = es.writeArray(function (err, ar) { - it(ar).deepEqual(expected) - test.done() - }) - var map = es.through(function (data) { - this.emit('data', data * 2) - }) - - spec(map).through().validateOnExit() - spec(pause).through().validateOnExit() - - fs.pipe(map).pipe(pause).pipe(ts) -} - -exports ['simple map applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - - var doubler = map(function (data, cb) { - cb(null, data * 2) - }) - - spec(doubler).through().validateOnExit() - - //a map is only a middle man, so it is both readable and writable - - it(doubler).has({ - readable: true, - writable: true, - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) -// process.nextTick(x.validate) - test.done() - }) - - writeArray(input, doubler) - -} - -exports['pipe two maps together'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - function dd (data, cb) { - cb(null, data * 2) - } - var doubler1 = es.map(dd), doubler2 = es.map(dd) - - doubler1.pipe(doubler2) - - spec(doubler1).through().validateOnExit() - spec(doubler2).through().validateOnExit() - - readStream(doubler2, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 4 - })) - test.done() - }) - - writeArray(input, doubler1) - -} - -//next: -// -// test pause, resume and drian. -// - -// then make a pipe joiner: -// -// plumber (evStr1, evStr2, evStr3, evStr4, evStr5) -// -// will return a single stream that write goes to the first - -exports ['map will not call end until the callback'] = function (test) { - - var ticker = map(function (data, cb) { - process.nextTick(function () { - cb(null, data * 2) - }) - }) - - spec(ticker).through().validateOnExit() - - ticker.write('x') - ticker.end() - - ticker.on('end', function () { - test.done() - }) -} - - -exports ['emit error thrown'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - es.map(function () { - throw err - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error calledback'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - es.map(function (data, callback) { - callback(err) - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['do not emit drain if not paused'] = function (test) { - - var maps = map(function (data, callback) { - u.delay(callback)(null, 1) - return true - }) - - spec(maps).through().pausable().validateOnExit() - - maps.on('drain', function () { - it(false).ok('should not emit drain unless the stream is paused') - }) - - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - setTimeout(function () {maps.end()},10) - maps.on('end', test.done) -} - -exports ['emits drain if paused, when all '] = function (test) { - var active = 0 - var drained = false - var maps = map(function (data, callback) { - active ++ - u.delay(function () { - active -- - callback(null, 1) - })() - console.log('WRITE', false) - return false - }) - - spec(maps).through().validateOnExit() - - maps.on('drain', function () { - drained = true - it(active).equal(0, 'should emit drain when all maps are done') - }) - - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - - process.nextTick(function () {maps.end()},10) - - maps.on('end', function () { - console.log('end') - it(drained).ok('shoud have emitted drain before end') - test.done() - }) - -} - -exports ['map applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = map(function (data, callback) { - if (data % 2) - callback(null, data * 2) - else - callback() - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/.npmignore b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/.npmignore deleted file mode 100644 index bfdb82c..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -lib-cov/* -*.swp -*.swo -node_modules diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/LICENSE b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/LICENSE deleted file mode 100644 index 432d1ae..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/README.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/README.markdown deleted file mode 100644 index deb493c..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/README.markdown +++ /dev/null @@ -1,474 +0,0 @@ -optimist -======== - -Optimist is a node.js library for option parsing for people who hate option -parsing. More specifically, this module is for people who like all the --bells -and -whistlz of program usage but think optstrings are a waste of time. - -With optimist, option parsing doesn't have to suck (as much). - -examples -======== - -With Optimist, the options are just a hash! No optstrings attached. -------------------------------------------------------------------- - -xup.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; - -if (argv.rif - 5 * argv.xup > 7.138) { - console.log('Buy more riffiwobbles'); -} -else { - console.log('Sell the xupptumblers'); -} -```` - -*** - - $ ./xup.js --rif=55 --xup=9.52 - Buy more riffiwobbles - - $ ./xup.js --rif 12 --xup 8.1 - Sell the xupptumblers - -![This one's optimistic.](http://substack.net/images/optimistic.png) - -But wait! There's more! You can do short options: -------------------------------------------------- - -short.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -```` - -*** - - $ ./short.js -x 10 -y 21 - (10,21) - -And booleans, both long and short (and grouped): ----------------------------------- - -bool.js: - -````javascript -#!/usr/bin/env node -var util = require('util'); -var argv = require('optimist').argv; - -if (argv.s) { - util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: '); -} -console.log( - (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '') -); -```` - -*** - - $ ./bool.js -s - The cat says: meow - - $ ./bool.js -sp - The cat says: meow. - - $ ./bool.js -sp --fr - Le chat dit: miaou. - -And non-hypenated options too! Just use `argv._`! -------------------------------------------------- - -nonopt.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -console.log(argv._); -```` - -*** - - $ ./nonopt.js -x 6.82 -y 3.35 moo - (6.82,3.35) - [ 'moo' ] - - $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz - (0.54,1.12) - [ 'foo', 'bar', 'baz' ] - -Plus, Optimist comes with .usage() and .demand()! -------------------------------------------------- - -divide.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .usage('Usage: $0 -x [num] -y [num]') - .demand(['x','y']) - .argv; - -console.log(argv.x / argv.y); -```` - -*** - - $ ./divide.js -x 55 -y 11 - 5 - - $ node ./divide.js -x 4.91 -z 2.51 - Usage: node ./divide.js -x [num] -y [num] - - Options: - -x [required] - -y [required] - - Missing required arguments: y - -EVEN MORE HOLY COW ------------------- - -default_singles.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .default('x', 10) - .default('y', 10) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_singles.js -x 5 - 15 - -default_hash.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .default({ x : 10, y : 10 }) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_hash.js -y 7 - 17 - -And if you really want to get all descriptive about it... ---------------------------------------------------------- - -boolean_single.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .boolean('v') - .argv -; -console.dir(argv); -```` - -*** - - $ ./boolean_single.js -v foo bar baz - true - [ 'bar', 'baz', 'foo' ] - -boolean_double.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .boolean(['x','y','z']) - .argv -; -console.dir([ argv.x, argv.y, argv.z ]); -console.dir(argv._); -```` - -*** - - $ ./boolean_double.js -x -z one two three - [ true, false, true ] - [ 'one', 'two', 'three' ] - -Optimist is here to help... ---------------------------- - -You can describe parameters for help messages and set aliases. Optimist figures -out how to format a handy help string automatically. - -line_count.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .demand('f') - .alias('f', 'file') - .describe('f', 'Load a file') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines); -}); -```` - -*** - - $ node line_count.js - Count the lines in a file. - Usage: node ./line_count.js - - Options: - -f, --file Load a file [required] - - Missing required arguments: f - - $ node line_count.js --file line_count.js - 20 - - $ node line_count.js -f line_count.js - 20 - -methods -======= - -By itself, - -````javascript -require('optimist').argv -````` - -will use `process.argv` array to construct the `argv` object. - -You can pass in the `process.argv` yourself: - -````javascript -require('optimist')([ '-x', '1', '-y', '2' ]).argv -```` - -or use .parse() to do the same thing: - -````javascript -require('optimist').parse([ '-x', '1', '-y', '2' ]) -```` - -The rest of these methods below come in just before the terminating `.argv`. - -.alias(key, alias) ------------------- - -Set key names as equivalent such that updates to a key will propagate to aliases -and vice-versa. - -Optionally `.alias()` can take an object that maps keys to aliases. - -.default(key, value) --------------------- - -Set `argv[key]` to `value` if no option was specified on `process.argv`. - -Optionally `.default()` can take an object that maps keys to default values. - -.demand(key) ------------- - -If `key` is a string, show the usage information and exit if `key` wasn't -specified in `process.argv`. - -If `key` is a number, demand at least as many non-option arguments, which show -up in `argv._`. - -If `key` is an Array, demand each element. - -.describe(key, desc) --------------------- - -Describe a `key` for the generated usage information. - -Optionally `.describe()` can take an object that maps keys to descriptions. - -.options(key, opt) ------------------- - -Instead of chaining together `.alias().demand().default()`, you can specify -keys in `opt` for each of the chainable methods. - -For example: - -````javascript -var argv = require('optimist') - .options('f', { - alias : 'file', - default : '/etc/passwd', - }) - .argv -; -```` - -is the same as - -````javascript -var argv = require('optimist') - .alias('f', 'file') - .default('f', '/etc/passwd') - .argv -; -```` - -Optionally `.options()` can take an object that maps keys to `opt` parameters. - -.usage(message) ---------------- - -Set a usage message to show which commands to use. Inside `message`, the string -`$0` will get interpolated to the current script name or node command for the -present script similar to how `$0` works in bash or perl. - -.check(fn) ----------- - -Check that certain conditions are met in the provided arguments. - -If `fn` throws or returns `false`, show the thrown error, usage information, and -exit. - -.boolean(key) -------------- - -Interpret `key` as a boolean. If a non-flag option follows `key` in -`process.argv`, that string won't get set as the value of `key`. - -If `key` never shows up as a flag in `process.arguments`, `argv[key]` will be -`false`. - -If `key` is an Array, interpret all the elements as booleans. - -.string(key) ------------- - -Tell the parser logic not to interpret `key` as a number or boolean. -This can be useful if you need to preserve leading zeros in an input. - -If `key` is an Array, interpret all the elements as strings. - -.wrap(columns) --------------- - -Format usage output to wrap at `columns` many columns. - -.help() -------- - -Return the generated usage string. - -.showHelp(fn=console.error) ---------------------------- - -Print the usage data using `fn` for printing. - -.parse(args) ------------- - -Parse `args` instead of `process.argv`. Returns the `argv` object. - -.argv ------ - -Get the arguments as a plain old object. - -Arguments without a corresponding flag show up in the `argv._` array. - -The script name or node command is available at `argv.$0` similarly to how `$0` -works in bash or perl. - -parsing tricks -============== - -stop parsing ------------- - -Use `--` to stop parsing flags and stuff the remainder into `argv._`. - - $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4 - { _: [ '-c', '3', '-d', '4' ], - '$0': 'node ./examples/reflect.js', - a: 1, - b: 2 } - -negate fields -------------- - -If you want to explicity set a field to false instead of just leaving it -undefined or to override a default you can do `--no-key`. - - $ node examples/reflect.js -a --no-b - { _: [], - '$0': 'node ./examples/reflect.js', - a: true, - b: false } - -numbers -------- - -Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to -one. This way you can just `net.createConnection(argv.port)` and you can add -numbers out of `argv` with `+` without having that mean concatenation, -which is super frustrating. - -duplicates ----------- - -If you specify a flag multiple times it will get turned into an array containing -all the values in order. - - $ node examples/reflect.js -x 5 -x 8 -x 0 - { _: [], - '$0': 'node ./examples/reflect.js', - x: [ 5, 8, 0 ] } - -installation -============ - -With [npm](http://github.com/isaacs/npm), just do: - npm install optimist - -or clone this project on github: - - git clone http://github.com/substack/node-optimist.git - -To run the tests with [expresso](http://github.com/visionmedia/expresso), -just do: - - expresso - -inspired By -=========== - -This module is loosely inspired by Perl's -[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm). diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/bool.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/bool.js deleted file mode 100644 index a998fb7..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/bool.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -var util = require('util'); -var argv = require('optimist').argv; - -if (argv.s) { - util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: '); -} -console.log( - (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '') -); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_double.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_double.js deleted file mode 100644 index a35a7e6..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_double.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .boolean(['x','y','z']) - .argv -; -console.dir([ argv.x, argv.y, argv.z ]); -console.dir(argv._); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_single.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_single.js deleted file mode 100644 index 017bb68..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/boolean_single.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .boolean('v') - .argv -; -console.dir(argv.v); -console.dir(argv._); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_hash.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_hash.js deleted file mode 100644 index ade7768..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_hash.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var argv = require('optimist') - .default({ x : 10, y : 10 }) - .argv -; - -console.log(argv.x + argv.y); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_singles.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_singles.js deleted file mode 100644 index d9b1ff4..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/default_singles.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .default('x', 10) - .default('y', 10) - .argv -; -console.log(argv.x + argv.y); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/divide.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/divide.js deleted file mode 100644 index 5e2ee82..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/divide.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var argv = require('optimist') - .usage('Usage: $0 -x [num] -y [num]') - .demand(['x','y']) - .argv; - -console.log(argv.x / argv.y); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count.js deleted file mode 100644 index b5f95bf..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count.js +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .demand('f') - .alias('f', 'file') - .describe('f', 'Load a file') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines); -}); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_options.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_options.js deleted file mode 100644 index d9ac709..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_options.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .options({ - file : { - demand : true, - alias : 'f', - description : 'Load a file' - }, - base : { - alias : 'b', - description : 'Numeric base to use for output', - default : 10, - }, - }) - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines.toString(argv.base)); -}); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_wrap.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_wrap.js deleted file mode 100644 index 4267511..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/line_count_wrap.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .wrap(80) - .demand('f') - .alias('f', [ 'file', 'filename' ]) - .describe('f', - "Load a file. It's pretty important." - + " Required even. So you'd better specify it." - ) - .alias('b', 'base') - .describe('b', 'Numeric base to display the number of lines in') - .default('b', 10) - .describe('x', 'Super-secret optional parameter which is secret') - .default('x', '') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines.toString(argv.base)); -}); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/nonopt.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/nonopt.js deleted file mode 100644 index ee633ee..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/nonopt.js +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -console.log(argv._); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/reflect.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/reflect.js deleted file mode 100644 index 816b3e1..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/reflect.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -console.dir(require('optimist').argv); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/short.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/short.js deleted file mode 100644 index 1db0ad0..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/short.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/string.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/string.js deleted file mode 100644 index a8e5aeb..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/string.js +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .string('x', 'y') - .argv -; -console.dir([ argv.x, argv.y ]); - -/* Turns off numeric coercion: - ./node string.js -x 000123 -y 9876 - [ '000123', '9876' ] -*/ diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/usage-options.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/usage-options.js deleted file mode 100644 index b999977..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/usage-options.js +++ /dev/null @@ -1,19 +0,0 @@ -var optimist = require('./../index'); - -var argv = optimist.usage('This is my awesome program', { - 'about': { - description: 'Provide some details about the author of this program', - required: true, - short: 'a', - }, - 'info': { - description: 'Provide some information about the node.js agains!!!!!!', - boolean: true, - short: 'i' - } -}).argv; - -optimist.showHelp(); - -console.log('\n\nInspecting options'); -console.dir(argv); \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/xup.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/xup.js deleted file mode 100644 index 8f6ecd2..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/examples/xup.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; - -if (argv.rif - 5 * argv.xup > 7.138) { - console.log('Buy more riffiwobbles'); -} -else { - console.log('Sell the xupptumblers'); -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/index.js deleted file mode 100644 index 070d642..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/index.js +++ /dev/null @@ -1,457 +0,0 @@ -var path = require('path'); -var wordwrap = require('wordwrap'); - -/* Hack an instance of Argv with process.argv into Argv - so people can do - require('optimist')(['--beeble=1','-z','zizzle']).argv - to parse a list of args and - require('optimist').argv - to get a parsed version of process.argv. -*/ - -var inst = Argv(process.argv.slice(2)); -Object.keys(inst).forEach(function (key) { - Argv[key] = typeof inst[key] == 'function' - ? inst[key].bind(inst) - : inst[key]; -}); - -var exports = module.exports = Argv; -function Argv (args, cwd) { - var self = {}; - if (!cwd) cwd = process.cwd(); - - self.$0 = process.argv - .slice(0,2) - .map(function (x) { - var b = rebase(cwd, x); - return x.match(/^\//) && b.length < x.length - ? b : x - }) - .join(' ') - ; - - if (process.argv[1] == process.env._) { - self.$0 = process.env._.replace( - path.dirname(process.execPath) + '/', '' - ); - } - - var flags = { bools : {}, strings : {} }; - - self.boolean = function (bools) { - if (!Array.isArray(bools)) { - bools = [].slice.call(arguments); - } - - bools.forEach(function (name) { - flags.bools[name] = true; - }); - - return self; - }; - - self.string = function (strings) { - if (!Array.isArray(strings)) { - strings = [].slice.call(arguments); - } - - strings.forEach(function (name) { - flags.strings[name] = true; - }); - - return self; - }; - - var aliases = {}; - self.alias = function (x, y) { - if (typeof x === 'object') { - Object.keys(x).forEach(function (key) { - self.alias(key, x[key]); - }); - } - else if (Array.isArray(y)) { - y.forEach(function (yy) { - self.alias(x, yy); - }); - } - else { - var zs = (aliases[x] || []).concat(aliases[y] || []).concat(x, y); - aliases[x] = zs.filter(function (z) { return z != x }); - aliases[y] = zs.filter(function (z) { return z != y }); - } - - return self; - }; - - var demanded = {}; - self.demand = function (keys) { - if (typeof keys == 'number') { - if (!demanded._) demanded._ = 0; - demanded._ += keys; - } - else if (Array.isArray(keys)) { - keys.forEach(function (key) { - self.demand(key); - }); - } - else { - demanded[keys] = true; - } - - return self; - }; - - var usage; - self.usage = function (msg, opts) { - if (!opts && typeof msg === 'object') { - opts = msg; - msg = null; - } - - usage = msg; - - if (opts) self.options(opts); - - return self; - }; - - function fail (msg) { - self.showHelp(); - if (msg) console.error(msg); - process.exit(1); - } - - var checks = []; - self.check = function (f) { - checks.push(f); - return self; - }; - - var defaults = {}; - self.default = function (key, value) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.default(k, key[k]); - }); - } - else { - defaults[key] = value; - } - - return self; - }; - - var descriptions = {}; - self.describe = function (key, desc) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.describe(k, key[k]); - }); - } - else { - descriptions[key] = desc; - } - return self; - }; - - self.parse = function (args) { - return Argv(args).argv; - }; - - self.option = self.options = function (key, opt) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.options(k, key[k]); - }); - } - else { - if (opt.alias) self.alias(key, opt.alias); - if (opt.demand) self.demand(key); - if (opt.default) self.default(key, opt.default); - - if (opt.boolean || opt.type === 'boolean') { - self.boolean(key); - } - if (opt.string || opt.type === 'string') { - self.string(key); - } - - var desc = opt.describe || opt.description || opt.desc; - if (desc) { - self.describe(key, desc); - } - } - - return self; - }; - - var wrap = null; - self.wrap = function (cols) { - wrap = cols; - return self; - }; - - self.showHelp = function (fn) { - if (!fn) fn = console.error; - fn(self.help()); - }; - - self.help = function () { - var keys = Object.keys( - Object.keys(descriptions) - .concat(Object.keys(demanded)) - .concat(Object.keys(defaults)) - .reduce(function (acc, key) { - if (key !== '_') acc[key] = true; - return acc; - }, {}) - ); - - var help = keys.length ? [ 'Options:' ] : []; - - if (usage) { - help.unshift(usage.replace(/\$0/g, self.$0), ''); - } - - var switches = keys.reduce(function (acc, key) { - acc[key] = [ key ].concat(aliases[key] || []) - .map(function (sw) { - return (sw.length > 1 ? '--' : '-') + sw - }) - .join(', ') - ; - return acc; - }, {}); - - var switchlen = longest(Object.keys(switches).map(function (s) { - return switches[s] || ''; - })); - - var desclen = longest(Object.keys(descriptions).map(function (d) { - return descriptions[d] || ''; - })); - - keys.forEach(function (key) { - var kswitch = switches[key]; - var desc = descriptions[key] || ''; - - if (wrap) { - desc = wordwrap(switchlen + 4, wrap)(desc) - .slice(switchlen + 4) - ; - } - - var spadding = new Array( - Math.max(switchlen - kswitch.length + 3, 0) - ).join(' '); - - var dpadding = new Array( - Math.max(desclen - desc.length + 1, 0) - ).join(' '); - - var type = null; - - if (flags.bools[key]) type = '[boolean]'; - if (flags.strings[key]) type = '[string]'; - - if (!wrap && dpadding.length > 0) { - desc += dpadding; - } - - var prelude = ' ' + kswitch + spadding; - var extra = [ - type, - demanded[key] - ? '[required]' - : null - , - defaults[key] !== undefined - ? '[default: ' + JSON.stringify(defaults[key]) + ']' - : null - , - ].filter(Boolean).join(' '); - - var body = [ desc, extra ].filter(Boolean).join(' '); - - if (wrap) { - var dlines = desc.split('\n'); - var dlen = dlines.slice(-1)[0].length - + (dlines.length === 1 ? prelude.length : 0) - - body = desc + (dlen + extra.length > wrap - 2 - ? '\n' - + new Array(wrap - extra.length + 1).join(' ') - + extra - : new Array(wrap - extra.length - dlen + 1).join(' ') - + extra - ); - } - - help.push(prelude + body); - }); - - help.push(''); - return help.join('\n'); - }; - - Object.defineProperty(self, 'argv', { - get : parseArgs, - enumerable : true, - }); - - function parseArgs () { - var argv = { _ : [], $0 : self.$0 }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] || false); - }); - - function setArg (key, val) { - var num = Number(val); - var value = typeof val !== 'string' || isNaN(num) ? val : num; - if (flags.strings[key]) value = val; - - if (key in argv && !flags.bools[key]) { - if (!Array.isArray(argv[key])) { - argv[key] = [ argv[key] ]; - } - argv[key].push(value); - } - else { - argv[key] = value; - } - - (aliases[key] || []).forEach(function (x) { - argv[x] = argv[key]; - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (arg === '--') { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - else if (arg.match(/^--.+=/)) { - var m = arg.match(/^--([^=]+)=(.*)/); - setArg(m[1], m[2]); - } - else if (arg.match(/^--no-.+/)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false); - } - else if (arg.match(/^--.+/)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !next.match(/^-/) - && !flags.bools[key]) { - setArg(key, next); - i++; - } - else if (flags.bools[key] && /true|false/.test(next)) { - setArg(key, next === 'true'); - i++; - } - else { - setArg(key, true); - } - } - else if (arg.match(/^-[^-]+/)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2)); - broken = true; - break; - } - else { - setArg(letters[j], true); - } - } - - if (!broken) { - var key = arg.slice(-1)[0]; - - if (args[i+1] && !args[i+1].match(/^-/) - && !flags.bools[key]) { - setArg(key, args[i+1]); - i++; - } - else if (args[i+1] && flags.bools[key] && /true|false/.test(args[i+1])) { - setArg(key, args[i+1] === 'true'); - i++; - } - else { - setArg(key, true); - } - } - } - else { - var n = Number(arg); - argv._.push(flags.strings['_'] || isNaN(n) ? arg : n); - } - } - - Object.keys(defaults).forEach(function (key) { - if (!(key in argv)) { - argv[key] = defaults[key]; - } - }); - - if (demanded._ && argv._.length < demanded._) { - fail('Not enough non-option arguments: got ' - + argv._.length + ', need at least ' + demanded._ - ); - } - - var missing = []; - Object.keys(demanded).forEach(function (key) { - if (!argv[key]) missing.push(key); - }); - - if (missing.length) { - fail('Missing required arguments: ' + missing.join(', ')); - } - - checks.forEach(function (f) { - try { - if (f(argv) === false) { - fail('Argument check failed: ' + f.toString()); - } - } - catch (err) { - fail(err) - } - }); - - return argv; - } - - function longest (xs) { - return Math.max.apply( - null, - xs.map(function (x) { return x.length }) - ); - } - - return self; -}; - -// rebase an absolute path to a relative one with respect to a base directory -// exported for tests -exports.rebase = rebase; -function rebase (base, dir) { - var ds = path.normalize(dir).split('/').slice(1); - var bs = path.normalize(base).split('/').slice(1); - - for (var i = 0; ds[i] && ds[i] == bs[i]; i++); - ds.splice(0, i); bs.splice(0, i); - - var p = path.normalize( - bs.map(function () { return '..' }).concat(ds).join('/') - ).replace(/\/$/,'').replace(/^$/, '.'); - return p.match(/^[.\/]/) ? p : './' + p; -}; diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/.npmignore b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/README.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/README.markdown deleted file mode 100644 index 346374e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/README.markdown +++ /dev/null @@ -1,70 +0,0 @@ -wordwrap -======== - -Wrap your words. - -example -======= - -made out of meat ----------------- - -meat.js - - var wrap = require('wordwrap')(15); - console.log(wrap('You and your whole family are made out of meat.')); - -output: - - You and your - whole family - are made out - of meat. - -centered --------- - -center.js - - var wrap = require('wordwrap')(20, 60); - console.log(wrap( - 'At long last the struggle and tumult was over.' - + ' The machines had finally cast off their oppressors' - + ' and were finally free to roam the cosmos.' - + '\n' - + 'Free of purpose, free of obligation.' - + ' Just drifting through emptiness.' - + ' The sun was just another point of light.' - )); - -output: - - At long last the struggle and tumult - was over. The machines had finally cast - off their oppressors and were finally - free to roam the cosmos. - Free of purpose, free of obligation. - Just drifting through emptiness. The - sun was just another point of light. - -methods -======= - -var wrap = require('wordwrap'); - -wrap(stop), wrap(start, stop, params={mode:"soft"}) ---------------------------------------------------- - -Returns a function that takes a string and returns a new string. - -Pad out lines with spaces out to column `start` and then wrap until column -`stop`. If a word is longer than `stop - start` characters it will overflow. - -In "soft" mode, split chunks by `/(\S+\s+/` and don't break up chunks which are -longer than `stop - start`, in "hard" mode, split chunks with `/\b/` and break -up chunks longer than `stop - start`. - -wrap.hard(start, stop) ----------------------- - -Like `wrap()` but with `params.mode = "hard"`. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/center.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/center.js deleted file mode 100644 index a3fbaae..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/center.js +++ /dev/null @@ -1,10 +0,0 @@ -var wrap = require('wordwrap')(20, 60); -console.log(wrap( - 'At long last the struggle and tumult was over.' - + ' The machines had finally cast off their oppressors' - + ' and were finally free to roam the cosmos.' - + '\n' - + 'Free of purpose, free of obligation.' - + ' Just drifting through emptiness.' - + ' The sun was just another point of light.' -)); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/meat.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/meat.js deleted file mode 100644 index a4665e1..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/example/meat.js +++ /dev/null @@ -1,3 +0,0 @@ -var wrap = require('wordwrap')(15); - -console.log(wrap('You and your whole family are made out of meat.')); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/index.js deleted file mode 100644 index c9bc945..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/index.js +++ /dev/null @@ -1,76 +0,0 @@ -var wordwrap = module.exports = function (start, stop, params) { - if (typeof start === 'object') { - params = start; - start = params.start; - stop = params.stop; - } - - if (typeof stop === 'object') { - params = stop; - start = start || params.start; - stop = undefined; - } - - if (!stop) { - stop = start; - start = 0; - } - - if (!params) params = {}; - var mode = params.mode || 'soft'; - var re = mode === 'hard' ? /\b/ : /(\S+\s+)/; - - return function (text) { - var chunks = text.toString() - .split(re) - .reduce(function (acc, x) { - if (mode === 'hard') { - for (var i = 0; i < x.length; i += stop - start) { - acc.push(x.slice(i, i + stop - start)); - } - } - else acc.push(x) - return acc; - }, []) - ; - - return chunks.reduce(function (lines, rawChunk) { - if (rawChunk === '') return lines; - - var chunk = rawChunk.replace(/\t/g, ' '); - - var i = lines.length - 1; - if (lines[i].length + chunk.length > stop) { - lines[i] = lines[i].replace(/\s+$/, ''); - - chunk.split(/\n/).forEach(function (c) { - lines.push( - new Array(start + 1).join(' ') - + c.replace(/^\s+/, '') - ); - }); - } - else if (chunk.match(/\n/)) { - var xs = chunk.split(/\n/); - lines[i] += xs.shift(); - xs.forEach(function (c) { - lines.push( - new Array(start + 1).join(' ') - + c.replace(/^\s+/, '') - ); - }); - } - else { - lines[i] += chunk; - } - - return lines; - }, [ new Array(start + 1).join(' ') ]).join('\n'); - }; -}; - -wordwrap.soft = wordwrap; - -wordwrap.hard = function (start, stop) { - return wordwrap(start, stop, { mode : 'hard' }); -}; diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/package.json deleted file mode 100644 index 928d935..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "wordwrap", - "description": "Wrap those words. Show them at what columns to start and stop.", - "version": "0.0.2", - "repository": { - "type": "git", - "url": "git://github.com/substack/node-wordwrap.git" - }, - "main": "./index.js", - "keywords": [ - "word", - "wrap", - "rule", - "format", - "column" - ], - "directories": { - "lib": ".", - "example": "example", - "test": "test" - }, - "scripts": { - "test": "expresso" - }, - "devDependencies": { - "expresso": "=0.7.x" - }, - "engines": { - "node": ">=0.4.0" - }, - "license": "MIT/X11", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "readme": "wordwrap\n========\n\nWrap your words.\n\nexample\n=======\n\nmade out of meat\n----------------\n\nmeat.js\n\n var wrap = require('wordwrap')(15);\n console.log(wrap('You and your whole family are made out of meat.'));\n\noutput:\n\n You and your\n whole family\n are made out\n of meat.\n\ncentered\n--------\n\ncenter.js\n\n var wrap = require('wordwrap')(20, 60);\n console.log(wrap(\n 'At long last the struggle and tumult was over.'\n + ' The machines had finally cast off their oppressors'\n + ' and were finally free to roam the cosmos.'\n + '\\n'\n + 'Free of purpose, free of obligation.'\n + ' Just drifting through emptiness.'\n + ' The sun was just another point of light.'\n ));\n\noutput:\n\n At long last the struggle and tumult\n was over. The machines had finally cast\n off their oppressors and were finally\n free to roam the cosmos.\n Free of purpose, free of obligation.\n Just drifting through emptiness. The\n sun was just another point of light.\n\nmethods\n=======\n\nvar wrap = require('wordwrap');\n\nwrap(stop), wrap(start, stop, params={mode:\"soft\"})\n---------------------------------------------------\n\nReturns a function that takes a string and returns a new string.\n\nPad out lines with spaces out to column `start` and then wrap until column\n`stop`. If a word is longer than `stop - start` characters it will overflow.\n\nIn \"soft\" mode, split chunks by `/(\\S+\\s+/` and don't break up chunks which are\nlonger than `stop - start`, in \"hard\" mode, split chunks with `/\\b/` and break\nup chunks longer than `stop - start`.\n\nwrap.hard(start, stop)\n----------------------\n\nLike `wrap()` but with `params.mode = \"hard\"`.\n", - "_id": "wordwrap@0.0.2", - "_from": "wordwrap@>=0.0.1 <0.1.0" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/break.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/break.js deleted file mode 100644 index 749292e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/break.js +++ /dev/null @@ -1,30 +0,0 @@ -var assert = require('assert'); -var wordwrap = require('../'); - -exports.hard = function () { - var s = 'Assert from {"type":"equal","ok":false,"found":1,"wanted":2,' - + '"stack":[],"id":"b7ddcd4c409de8799542a74d1a04689b",' - + '"browser":"chrome/6.0"}' - ; - var s_ = wordwrap.hard(80)(s); - - var lines = s_.split('\n'); - assert.equal(lines.length, 2); - assert.ok(lines[0].length < 80); - assert.ok(lines[1].length < 80); - - assert.equal(s, s_.replace(/\n/g, '')); -}; - -exports.break = function () { - var s = new Array(55+1).join('a'); - var s_ = wordwrap.hard(20)(s); - - var lines = s_.split('\n'); - assert.equal(lines.length, 3); - assert.ok(lines[0].length === 20); - assert.ok(lines[1].length === 20); - assert.ok(lines[2].length === 15); - - assert.equal(s, s_.replace(/\n/g, '')); -}; diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/idleness.txt b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/idleness.txt deleted file mode 100644 index aa3f490..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/idleness.txt +++ /dev/null @@ -1,63 +0,0 @@ -In Praise of Idleness - -By Bertrand Russell - -[1932] - -Like most of my generation, I was brought up on the saying: 'Satan finds some mischief for idle hands to do.' Being a highly virtuous child, I believed all that I was told, and acquired a conscience which has kept me working hard down to the present moment. But although my conscience has controlled my actions, my opinions have undergone a revolution. I think that there is far too much work done in the world, that immense harm is caused by the belief that work is virtuous, and that what needs to be preached in modern industrial countries is quite different from what always has been preached. Everyone knows the story of the traveler in Naples who saw twelve beggars lying in the sun (it was before the days of Mussolini), and offered a lira to the laziest of them. Eleven of them jumped up to claim it, so he gave it to the twelfth. this traveler was on the right lines. But in countries which do not enjoy Mediterranean sunshine idleness is more difficult, and a great public propaganda will be required to inaugurate it. I hope that, after reading the following pages, the leaders of the YMCA will start a campaign to induce good young men to do nothing. If so, I shall not have lived in vain. - -Before advancing my own arguments for laziness, I must dispose of one which I cannot accept. Whenever a person who already has enough to live on proposes to engage in some everyday kind of job, such as school-teaching or typing, he or she is told that such conduct takes the bread out of other people's mouths, and is therefore wicked. If this argument were valid, it would only be necessary for us all to be idle in order that we should all have our mouths full of bread. What people who say such things forget is that what a man earns he usually spends, and in spending he gives employment. As long as a man spends his income, he puts just as much bread into people's mouths in spending as he takes out of other people's mouths in earning. The real villain, from this point of view, is the man who saves. If he merely puts his savings in a stocking, like the proverbial French peasant, it is obvious that they do not give employment. If he invests his savings, the matter is less obvious, and different cases arise. - -One of the commonest things to do with savings is to lend them to some Government. In view of the fact that the bulk of the public expenditure of most civilized Governments consists in payment for past wars or preparation for future wars, the man who lends his money to a Government is in the same position as the bad men in Shakespeare who hire murderers. The net result of the man's economical habits is to increase the armed forces of the State to which he lends his savings. Obviously it would be better if he spent the money, even if he spent it in drink or gambling. - -But, I shall be told, the case is quite different when savings are invested in industrial enterprises. When such enterprises succeed, and produce something useful, this may be conceded. In these days, however, no one will deny that most enterprises fail. That means that a large amount of human labor, which might have been devoted to producing something that could be enjoyed, was expended on producing machines which, when produced, lay idle and did no good to anyone. The man who invests his savings in a concern that goes bankrupt is therefore injuring others as well as himself. If he spent his money, say, in giving parties for his friends, they (we may hope) would get pleasure, and so would all those upon whom he spent money, such as the butcher, the baker, and the bootlegger. But if he spends it (let us say) upon laying down rails for surface card in some place where surface cars turn out not to be wanted, he has diverted a mass of labor into channels where it gives pleasure to no one. Nevertheless, when he becomes poor through failure of his investment he will be regarded as a victim of undeserved misfortune, whereas the gay spendthrift, who has spent his money philanthropically, will be despised as a fool and a frivolous person. - -All this is only preliminary. I want to say, in all seriousness, that a great deal of harm is being done in the modern world by belief in the virtuousness of work, and that the road to happiness and prosperity lies in an organized diminution of work. - -First of all: what is work? Work is of two kinds: first, altering the position of matter at or near the earth's surface relatively to other such matter; second, telling other people to do so. The first kind is unpleasant and ill paid; the second is pleasant and highly paid. The second kind is capable of indefinite extension: there are not only those who give orders, but those who give advice as to what orders should be given. Usually two opposite kinds of advice are given simultaneously by two organized bodies of men; this is called politics. The skill required for this kind of work is not knowledge of the subjects as to which advice is given, but knowledge of the art of persuasive speaking and writing, i.e. of advertising. - -Throughout Europe, though not in America, there is a third class of men, more respected than either of the classes of workers. There are men who, through ownership of land, are able to make others pay for the privilege of being allowed to exist and to work. These landowners are idle, and I might therefore be expected to praise them. Unfortunately, their idleness is only rendered possible by the industry of others; indeed their desire for comfortable idleness is historically the source of the whole gospel of work. The last thing they have ever wished is that others should follow their example. - -From the beginning of civilization until the Industrial Revolution, a man could, as a rule, produce by hard work little more than was required for the subsistence of himself and his family, although his wife worked at least as hard as he did, and his children added their labor as soon as they were old enough to do so. The small surplus above bare necessaries was not left to those who produced it, but was appropriated by warriors and priests. In times of famine there was no surplus; the warriors and priests, however, still secured as much as at other times, with the result that many of the workers died of hunger. This system persisted in Russia until 1917 [1], and still persists in the East; in England, in spite of the Industrial Revolution, it remained in full force throughout the Napoleonic wars, and until a hundred years ago, when the new class of manufacturers acquired power. In America, the system came to an end with the Revolution, except in the South, where it persisted until the Civil War. A system which lasted so long and ended so recently has naturally left a profound impress upon men's thoughts and opinions. Much that we take for granted about the desirability of work is derived from this system, and, being pre-industrial, is not adapted to the modern world. Modern technique has made it possible for leisure, within limits, to be not the prerogative of small privileged classes, but a right evenly distributed throughout the community. The morality of work is the morality of slaves, and the modern world has no need of slavery. - -It is obvious that, in primitive communities, peasants, left to themselves, would not have parted with the slender surplus upon which the warriors and priests subsisted, but would have either produced less or consumed more. At first, sheer force compelled them to produce and part with the surplus. Gradually, however, it was found possible to induce many of them to accept an ethic according to which it was their duty to work hard, although part of their work went to support others in idleness. By this means the amount of compulsion required was lessened, and the expenses of government were diminished. To this day, 99 per cent of British wage-earners would be genuinely shocked if it were proposed that the King should not have a larger income than a working man. The conception of duty, speaking historically, has been a means used by the holders of power to induce others to live for the interests of their masters rather than for their own. Of course the holders of power conceal this fact from themselves by managing to believe that their interests are identical with the larger interests of humanity. Sometimes this is true; Athenian slave-owners, for instance, employed part of their leisure in making a permanent contribution to civilization which would have been impossible under a just economic system. Leisure is essential to civilization, and in former times leisure for the few was only rendered possible by the labors of the many. But their labors were valuable, not because work is good, but because leisure is good. And with modern technique it would be possible to distribute leisure justly without injury to civilization. - -Modern technique has made it possible to diminish enormously the amount of labor required to secure the necessaries of life for everyone. This was made obvious during the war. At that time all the men in the armed forces, and all the men and women engaged in the production of munitions, all the men and women engaged in spying, war propaganda, or Government offices connected with the war, were withdrawn from productive occupations. In spite of this, the general level of well-being among unskilled wage-earners on the side of the Allies was higher than before or since. The significance of this fact was concealed by finance: borrowing made it appear as if the future was nourishing the present. But that, of course, would have been impossible; a man cannot eat a loaf of bread that does not yet exist. The war showed conclusively that, by the scientific organization of production, it is possible to keep modern populations in fair comfort on a small part of the working capacity of the modern world. If, at the end of the war, the scientific organization, which had been created in order to liberate men for fighting and munition work, had been preserved, and the hours of the week had been cut down to four, all would have been well. Instead of that the old chaos was restored, those whose work was demanded were made to work long hours, and the rest were left to starve as unemployed. Why? Because work is a duty, and a man should not receive wages in proportion to what he has produced, but in proportion to his virtue as exemplified by his industry. - -This is the morality of the Slave State, applied in circumstances totally unlike those in which it arose. No wonder the result has been disastrous. Let us take an illustration. Suppose that, at a given moment, a certain number of people are engaged in the manufacture of pins. They make as many pins as the world needs, working (say) eight hours a day. Someone makes an invention by which the same number of men can make twice as many pins: pins are already so cheap that hardly any more will be bought at a lower price. In a sensible world, everybody concerned in the manufacturing of pins would take to working four hours instead of eight, and everything else would go on as before. But in the actual world this would be thought demoralizing. The men still work eight hours, there are too many pins, some employers go bankrupt, and half the men previously concerned in making pins are thrown out of work. There is, in the end, just as much leisure as on the other plan, but half the men are totally idle while half are still overworked. In this way, it is insured that the unavoidable leisure shall cause misery all round instead of being a universal source of happiness. Can anything more insane be imagined? - -The idea that the poor should have leisure has always been shocking to the rich. In England, in the early nineteenth century, fifteen hours was the ordinary day's work for a man; children sometimes did as much, and very commonly did twelve hours a day. When meddlesome busybodies suggested that perhaps these hours were rather long, they were told that work kept adults from drink and children from mischief. When I was a child, shortly after urban working men had acquired the vote, certain public holidays were established by law, to the great indignation of the upper classes. I remember hearing an old Duchess say: 'What do the poor want with holidays? They ought to work.' People nowadays are less frank, but the sentiment persists, and is the source of much of our economic confusion. - -Let us, for a moment, consider the ethics of work frankly, without superstition. Every human being, of necessity, consumes, in the course of his life, a certain amount of the produce of human labor. Assuming, as we may, that labor is on the whole disagreeable, it is unjust that a man should consume more than he produces. Of course he may provide services rather than commodities, like a medical man, for example; but he should provide something in return for his board and lodging. to this extent, the duty of work must be admitted, but to this extent only. - -I shall not dwell upon the fact that, in all modern societies outside the USSR, many people escape even this minimum amount of work, namely all those who inherit money and all those who marry money. I do not think the fact that these people are allowed to be idle is nearly so harmful as the fact that wage-earners are expected to overwork or starve. - -If the ordinary wage-earner worked four hours a day, there would be enough for everybody and no unemployment -- assuming a certain very moderate amount of sensible organization. This idea shocks the well-to-do, because they are convinced that the poor would not know how to use so much leisure. In America men often work long hours even when they are well off; such men, naturally, are indignant at the idea of leisure for wage-earners, except as the grim punishment of unemployment; in fact, they dislike leisure even for their sons. Oddly enough, while they wish their sons to work so hard as to have no time to be civilized, they do not mind their wives and daughters having no work at all. the snobbish admiration of uselessness, which, in an aristocratic society, extends to both sexes, is, under a plutocracy, confined to women; this, however, does not make it any more in agreement with common sense. - -The wise use of leisure, it must be conceded, is a product of civilization and education. A man who has worked long hours all his life will become bored if he becomes suddenly idle. But without a considerable amount of leisure a man is cut off from many of the best things. There is no longer any reason why the bulk of the population should suffer this deprivation; only a foolish asceticism, usually vicarious, makes us continue to insist on work in excessive quantities now that the need no longer exists. - -In the new creed which controls the government of Russia, while there is much that is very different from the traditional teaching of the West, there are some things that are quite unchanged. The attitude of the governing classes, and especially of those who conduct educational propaganda, on the subject of the dignity of labor, is almost exactly that which the governing classes of the world have always preached to what were called the 'honest poor'. Industry, sobriety, willingness to work long hours for distant advantages, even submissiveness to authority, all these reappear; moreover authority still represents the will of the Ruler of the Universe, Who, however, is now called by a new name, Dialectical Materialism. - -The victory of the proletariat in Russia has some points in common with the victory of the feminists in some other countries. For ages, men had conceded the superior saintliness of women, and had consoled women for their inferiority by maintaining that saintliness is more desirable than power. At last the feminists decided that they would have both, since the pioneers among them believed all that the men had told them about the desirability of virtue, but not what they had told them about the worthlessness of political power. A similar thing has happened in Russia as regards manual work. For ages, the rich and their sycophants have written in praise of 'honest toil', have praised the simple life, have professed a religion which teaches that the poor are much more likely to go to heaven than the rich, and in general have tried to make manual workers believe that there is some special nobility about altering the position of matter in space, just as men tried to make women believe that they derived some special nobility from their sexual enslavement. In Russia, all this teaching about the excellence of manual work has been taken seriously, with the result that the manual worker is more honored than anyone else. What are, in essence, revivalist appeals are made, but not for the old purposes: they are made to secure shock workers for special tasks. Manual work is the ideal which is held before the young, and is the basis of all ethical teaching. - -For the present, possibly, this is all to the good. A large country, full of natural resources, awaits development, and has has to be developed with very little use of credit. In these circumstances, hard work is necessary, and is likely to bring a great reward. But what will happen when the point has been reached where everybody could be comfortable without working long hours? - -In the West, we have various ways of dealing with this problem. We have no attempt at economic justice, so that a large proportion of the total produce goes to a small minority of the population, many of whom do no work at all. Owing to the absence of any central control over production, we produce hosts of things that are not wanted. We keep a large percentage of the working population idle, because we can dispense with their labor by making the others overwork. When all these methods prove inadequate, we have a war: we cause a number of people to manufacture high explosives, and a number of others to explode them, as if we were children who had just discovered fireworks. By a combination of all these devices we manage, though with difficulty, to keep alive the notion that a great deal of severe manual work must be the lot of the average man. - -In Russia, owing to more economic justice and central control over production, the problem will have to be differently solved. the rational solution would be, as soon as the necessaries and elementary comforts can be provided for all, to reduce the hours of labor gradually, allowing a popular vote to decide, at each stage, whether more leisure or more goods were to be preferred. But, having taught the supreme virtue of hard work, it is difficult to see how the authorities can aim at a paradise in which there will be much leisure and little work. It seems more likely that they will find continually fresh schemes, by which present leisure is to be sacrificed to future productivity. I read recently of an ingenious plan put forward by Russian engineers, for making the White Sea and the northern coasts of Siberia warm, by putting a dam across the Kara Sea. An admirable project, but liable to postpone proletarian comfort for a generation, while the nobility of toil is being displayed amid the ice-fields and snowstorms of the Arctic Ocean. This sort of thing, if it happens, will be the result of regarding the virtue of hard work as an end in itself, rather than as a means to a state of affairs in which it is no longer needed. - -The fact is that moving matter about, while a certain amount of it is necessary to our existence, is emphatically not one of the ends of human life. If it were, we should have to consider every navvy superior to Shakespeare. We have been misled in this matter by two causes. One is the necessity of keeping the poor contented, which has led the rich, for thousands of years, to preach the dignity of labor, while taking care themselves to remain undignified in this respect. The other is the new pleasure in mechanism, which makes us delight in the astonishingly clever changes that we can produce on the earth's surface. Neither of these motives makes any great appeal to the actual worker. If you ask him what he thinks the best part of his life, he is not likely to say: 'I enjoy manual work because it makes me feel that I am fulfilling man's noblest task, and because I like to think how much man can transform his planet. It is true that my body demands periods of rest, which I have to fill in as best I may, but I am never so happy as when the morning comes and I can return to the toil from which my contentment springs.' I have never heard working men say this sort of thing. They consider work, as it should be considered, a necessary means to a livelihood, and it is from their leisure that they derive whatever happiness they may enjoy. - -It will be said that, while a little leisure is pleasant, men would not know how to fill their days if they had only four hours of work out of the twenty-four. In so far as this is true in the modern world, it is a condemnation of our civilization; it would not have been true at any earlier period. There was formerly a capacity for light-heartedness and play which has been to some extent inhibited by the cult of efficiency. The modern man thinks that everything ought to be done for the sake of something else, and never for its own sake. Serious-minded persons, for example, are continually condemning the habit of going to the cinema, and telling us that it leads the young into crime. But all the work that goes to producing a cinema is respectable, because it is work, and because it brings a money profit. The notion that the desirable activities are those that bring a profit has made everything topsy-turvy. The butcher who provides you with meat and the baker who provides you with bread are praiseworthy, because they are making money; but when you enjoy the food they have provided, you are merely frivolous, unless you eat only to get strength for your work. Broadly speaking, it is held that getting money is good and spending money is bad. Seeing that they are two sides of one transaction, this is absurd; one might as well maintain that keys are good, but keyholes are bad. Whatever merit there may be in the production of goods must be entirely derivative from the advantage to be obtained by consuming them. The individual, in our society, works for profit; but the social purpose of his work lies in the consumption of what he produces. It is this divorce between the individual and the social purpose of production that makes it so difficult for men to think clearly in a world in which profit-making is the incentive to industry. We think too much of production, and too little of consumption. One result is that we attach too little importance to enjoyment and simple happiness, and that we do not judge production by the pleasure that it gives to the consumer. - -When I suggest that working hours should be reduced to four, I am not meaning to imply that all the remaining time should necessarily be spent in pure frivolity. I mean that four hours' work a day should entitle a man to the necessities and elementary comforts of life, and that the rest of his time should be his to use as he might see fit. It is an essential part of any such social system that education should be carried further than it usually is at present, and should aim, in part, at providing tastes which would enable a man to use leisure intelligently. I am not thinking mainly of the sort of things that would be considered 'highbrow'. Peasant dances have died out except in remote rural areas, but the impulses which caused them to be cultivated must still exist in human nature. The pleasures of urban populations have become mainly passive: seeing cinemas, watching football matches, listening to the radio, and so on. This results from the fact that their active energies are fully taken up with work; if they had more leisure, they would again enjoy pleasures in which they took an active part. - -In the past, there was a small leisure class and a larger working class. The leisure class enjoyed advantages for which there was no basis in social justice; this necessarily made it oppressive, limited its sympathies, and caused it to invent theories by which to justify its privileges. These facts greatly diminished its excellence, but in spite of this drawback it contributed nearly the whole of what we call civilization. It cultivated the arts and discovered the sciences; it wrote the books, invented the philosophies, and refined social relations. Even the liberation of the oppressed has usually been inaugurated from above. Without the leisure class, mankind would never have emerged from barbarism. - -The method of a leisure class without duties was, however, extraordinarily wasteful. None of the members of the class had to be taught to be industrious, and the class as a whole was not exceptionally intelligent. The class might produce one Darwin, but against him had to be set tens of thousands of country gentlemen who never thought of anything more intelligent than fox-hunting and punishing poachers. At present, the universities are supposed to provide, in a more systematic way, what the leisure class provided accidentally and as a by-product. This is a great improvement, but it has certain drawbacks. University life is so different from life in the world at large that men who live in academic milieu tend to be unaware of the preoccupations and problems of ordinary men and women; moreover their ways of expressing themselves are usually such as to rob their opinions of the influence that they ought to have upon the general public. Another disadvantage is that in universities studies are organized, and the man who thinks of some original line of research is likely to be discouraged. Academic institutions, therefore, useful as they are, are not adequate guardians of the interests of civilization in a world where everyone outside their walls is too busy for unutilitarian pursuits. - -In a world where no one is compelled to work more than four hours a day, every person possessed of scientific curiosity will be able to indulge it, and every painter will be able to paint without starving, however excellent his pictures may be. Young writers will not be obliged to draw attention to themselves by sensational pot-boilers, with a view to acquiring the economic independence needed for monumental works, for which, when the time at last comes, they will have lost the taste and capacity. Men who, in their professional work, have become interested in some phase of economics or government, will be able to develop their ideas without the academic detachment that makes the work of university economists often seem lacking in reality. Medical men will have the time to learn about the progress of medicine, teachers will not be exasperatedly struggling to teach by routine methods things which they learnt in their youth, which may, in the interval, have been proved to be untrue. - -Above all, there will be happiness and joy of life, instead of frayed nerves, weariness, and dyspepsia. The work exacted will be enough to make leisure delightful, but not enough to produce exhaustion. Since men will not be tired in their spare time, they will not demand only such amusements as are passive and vapid. At least one per cent will probably devote the time not spent in professional work to pursuits of some public importance, and, since they will not depend upon these pursuits for their livelihood, their originality will be unhampered, and there will be no need to conform to the standards set by elderly pundits. But it is not only in these exceptional cases that the advantages of leisure will appear. Ordinary men and women, having the opportunity of a happy life, will become more kindly and less persecuting and less inclined to view others with suspicion. The taste for war will die out, partly for this reason, and partly because it will involve long and severe work for all. Good nature is, of all moral qualities, the one that the world needs most, and good nature is the result of ease and security, not of a life of arduous struggle. Modern methods of production have given us the possibility of ease and security for all; we have chosen, instead, to have overwork for some and starvation for others. Hitherto we have continued to be as energetic as we were before there were machines; in this we have been foolish, but there is no reason to go on being foolish forever. - -[1] Since then, members of the Communist Party have succeeded to this privilege of the warriors and priests. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/wrap.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/wrap.js deleted file mode 100644 index 0cfb76d..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/node_modules/wordwrap/test/wrap.js +++ /dev/null @@ -1,31 +0,0 @@ -var assert = require('assert'); -var wordwrap = require('wordwrap'); - -var fs = require('fs'); -var idleness = fs.readFileSync(__dirname + '/idleness.txt', 'utf8'); - -exports.stop80 = function () { - var lines = wordwrap(80)(idleness).split(/\n/); - var words = idleness.split(/\s+/); - - lines.forEach(function (line) { - assert.ok(line.length <= 80, 'line > 80 columns'); - var chunks = line.match(/\S/) ? line.split(/\s+/) : []; - assert.deepEqual(chunks, words.splice(0, chunks.length)); - }); -}; - -exports.start20stop60 = function () { - var lines = wordwrap(20, 100)(idleness).split(/\n/); - var words = idleness.split(/\s+/); - - lines.forEach(function (line) { - assert.ok(line.length <= 100, 'line > 100 columns'); - var chunks = line - .split(/\s+/) - .filter(function (x) { return x.match(/\S/) }) - ; - assert.deepEqual(chunks, words.splice(0, chunks.length)); - assert.deepEqual(line.slice(0, 20), new Array(20 + 1).join(' ')); - }); -}; diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/package.json deleted file mode 100644 index bbe848c..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "optimist", - "version": "0.2.8", - "description": "Light-weight option parsing with an argv hash. No optstrings attached.", - "main": "./index.js", - "directories": { - "lib": ".", - "test": "test", - "example": "examples" - }, - "dependencies": { - "wordwrap": ">=0.0.1 <0.1.0" - }, - "devDependencies": { - "hashish": "0.0.x", - "expresso": "0.7.x" - }, - "scripts": { - "test": "expresso" - }, - "repository": { - "type": "git", - "url": "http://github.com/substack/node-optimist.git" - }, - "keywords": [ - "argument", - "args", - "option", - "parser", - "parsing", - "cli", - "command" - ], - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "license": "MIT/X11", - "engine": { - "node": ">=0.4" - }, - "readme": "optimist\n========\n\nOptimist is a node.js library for option parsing for people who hate option\nparsing. More specifically, this module is for people who like all the --bells\nand -whistlz of program usage but think optstrings are a waste of time.\n\nWith optimist, option parsing doesn't have to suck (as much).\n\nexamples\n========\n\nWith Optimist, the options are just a hash! No optstrings attached.\n-------------------------------------------------------------------\n\nxup.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\n\nif (argv.rif - 5 * argv.xup > 7.138) {\n console.log('Buy more riffiwobbles');\n}\nelse {\n console.log('Sell the xupptumblers');\n}\n````\n\n***\n\n $ ./xup.js --rif=55 --xup=9.52\n Buy more riffiwobbles\n \n $ ./xup.js --rif 12 --xup 8.1\n Sell the xupptumblers\n\n![This one's optimistic.](http://substack.net/images/optimistic.png)\n\nBut wait! There's more! You can do short options:\n-------------------------------------------------\n \nshort.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\n````\n\n***\n\n $ ./short.js -x 10 -y 21\n (10,21)\n\nAnd booleans, both long and short (and grouped):\n----------------------------------\n\nbool.js:\n\n````javascript\n#!/usr/bin/env node\nvar util = require('util');\nvar argv = require('optimist').argv;\n\nif (argv.s) {\n util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: ');\n}\nconsole.log(\n (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '')\n);\n````\n\n***\n\n $ ./bool.js -s\n The cat says: meow\n \n $ ./bool.js -sp\n The cat says: meow.\n\n $ ./bool.js -sp --fr\n Le chat dit: miaou.\n\nAnd non-hypenated options too! Just use `argv._`!\n-------------------------------------------------\n \nnonopt.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist').argv;\nconsole.log('(%d,%d)', argv.x, argv.y);\nconsole.log(argv._);\n````\n\n***\n\n $ ./nonopt.js -x 6.82 -y 3.35 moo\n (6.82,3.35)\n [ 'moo' ]\n \n $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz\n (0.54,1.12)\n [ 'foo', 'bar', 'baz' ]\n\nPlus, Optimist comes with .usage() and .demand()!\n-------------------------------------------------\n\ndivide.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .usage('Usage: $0 -x [num] -y [num]')\n .demand(['x','y'])\n .argv;\n\nconsole.log(argv.x / argv.y);\n````\n\n***\n \n $ ./divide.js -x 55 -y 11\n 5\n \n $ node ./divide.js -x 4.91 -z 2.51\n Usage: node ./divide.js -x [num] -y [num]\n\n Options:\n -x [required]\n -y [required]\n\n Missing required arguments: y\n\nEVEN MORE HOLY COW\n------------------\n\ndefault_singles.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .default('x', 10)\n .default('y', 10)\n .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n $ ./default_singles.js -x 5\n 15\n\ndefault_hash.js:\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .default({ x : 10, y : 10 })\n .argv\n;\nconsole.log(argv.x + argv.y);\n````\n\n***\n\n $ ./default_hash.js -y 7\n 17\n\nAnd if you really want to get all descriptive about it...\n---------------------------------------------------------\n\nboolean_single.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .boolean('v')\n .argv\n;\nconsole.dir(argv);\n````\n\n***\n\n $ ./boolean_single.js -v foo bar baz\n true\n [ 'bar', 'baz', 'foo' ]\n\nboolean_double.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .boolean(['x','y','z'])\n .argv\n;\nconsole.dir([ argv.x, argv.y, argv.z ]);\nconsole.dir(argv._);\n````\n\n***\n\n $ ./boolean_double.js -x -z one two three\n [ true, false, true ]\n [ 'one', 'two', 'three' ]\n\nOptimist is here to help...\n---------------------------\n\nYou can describe parameters for help messages and set aliases. Optimist figures\nout how to format a handy help string automatically.\n\nline_count.js\n\n````javascript\n#!/usr/bin/env node\nvar argv = require('optimist')\n .usage('Count the lines in a file.\\nUsage: $0')\n .demand('f')\n .alias('f', 'file')\n .describe('f', 'Load a file')\n .argv\n;\n\nvar fs = require('fs');\nvar s = fs.createReadStream(argv.file);\n\nvar lines = 0;\ns.on('data', function (buf) {\n lines += buf.toString().match(/\\n/g).length;\n});\n\ns.on('end', function () {\n console.log(lines);\n});\n````\n\n***\n\n $ node line_count.js\n Count the lines in a file.\n Usage: node ./line_count.js\n\n Options:\n -f, --file Load a file [required]\n\n Missing required arguments: f\n\n $ node line_count.js --file line_count.js \n 20\n \n $ node line_count.js -f line_count.js \n 20\n\nmethods\n=======\n\nBy itself,\n\n````javascript\nrequire('optimist').argv\n`````\n\nwill use `process.argv` array to construct the `argv` object.\n\nYou can pass in the `process.argv` yourself:\n\n````javascript\nrequire('optimist')([ '-x', '1', '-y', '2' ]).argv\n````\n\nor use .parse() to do the same thing:\n\n````javascript\nrequire('optimist').parse([ '-x', '1', '-y', '2' ])\n````\n\nThe rest of these methods below come in just before the terminating `.argv`.\n\n.alias(key, alias)\n------------------\n\nSet key names as equivalent such that updates to a key will propagate to aliases\nand vice-versa.\n\nOptionally `.alias()` can take an object that maps keys to aliases.\n\n.default(key, value)\n--------------------\n\nSet `argv[key]` to `value` if no option was specified on `process.argv`.\n\nOptionally `.default()` can take an object that maps keys to default values.\n\n.demand(key)\n------------\n\nIf `key` is a string, show the usage information and exit if `key` wasn't\nspecified in `process.argv`.\n\nIf `key` is a number, demand at least as many non-option arguments, which show\nup in `argv._`.\n\nIf `key` is an Array, demand each element.\n\n.describe(key, desc)\n--------------------\n\nDescribe a `key` for the generated usage information.\n\nOptionally `.describe()` can take an object that maps keys to descriptions.\n\n.options(key, opt)\n------------------\n\nInstead of chaining together `.alias().demand().default()`, you can specify\nkeys in `opt` for each of the chainable methods.\n\nFor example:\n\n````javascript\nvar argv = require('optimist')\n .options('f', {\n alias : 'file',\n default : '/etc/passwd',\n })\n .argv\n;\n````\n\nis the same as\n\n````javascript\nvar argv = require('optimist')\n .alias('f', 'file')\n .default('f', '/etc/passwd')\n .argv\n;\n````\n\nOptionally `.options()` can take an object that maps keys to `opt` parameters.\n\n.usage(message)\n---------------\n\nSet a usage message to show which commands to use. Inside `message`, the string\n`$0` will get interpolated to the current script name or node command for the\npresent script similar to how `$0` works in bash or perl.\n\n.check(fn)\n----------\n\nCheck that certain conditions are met in the provided arguments.\n\nIf `fn` throws or returns `false`, show the thrown error, usage information, and\nexit.\n\n.boolean(key)\n-------------\n\nInterpret `key` as a boolean. If a non-flag option follows `key` in\n`process.argv`, that string won't get set as the value of `key`.\n\nIf `key` never shows up as a flag in `process.arguments`, `argv[key]` will be\n`false`.\n\nIf `key` is an Array, interpret all the elements as booleans.\n\n.string(key)\n------------\n\nTell the parser logic not to interpret `key` as a number or boolean.\nThis can be useful if you need to preserve leading zeros in an input.\n\nIf `key` is an Array, interpret all the elements as strings.\n\n.wrap(columns)\n--------------\n\nFormat usage output to wrap at `columns` many columns.\n\n.help()\n-------\n\nReturn the generated usage string.\n\n.showHelp(fn=console.error)\n---------------------------\n\nPrint the usage data using `fn` for printing.\n\n.parse(args)\n------------\n\nParse `args` instead of `process.argv`. Returns the `argv` object.\n\n.argv\n-----\n\nGet the arguments as a plain old object.\n\nArguments without a corresponding flag show up in the `argv._` array.\n\nThe script name or node command is available at `argv.$0` similarly to how `$0`\nworks in bash or perl.\n\nparsing tricks\n==============\n\nstop parsing\n------------\n\nUse `--` to stop parsing flags and stuff the remainder into `argv._`.\n\n $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4\n { _: [ '-c', '3', '-d', '4' ],\n '$0': 'node ./examples/reflect.js',\n a: 1,\n b: 2 }\n\nnegate fields\n-------------\n\nIf you want to explicity set a field to false instead of just leaving it\nundefined or to override a default you can do `--no-key`.\n\n $ node examples/reflect.js -a --no-b\n { _: [],\n '$0': 'node ./examples/reflect.js',\n a: true,\n b: false }\n\nnumbers\n-------\n\nEvery argument that looks like a number (`!isNaN(Number(arg))`) is converted to\none. This way you can just `net.createConnection(argv.port)` and you can add\nnumbers out of `argv` with `+` without having that mean concatenation,\nwhich is super frustrating.\n\nduplicates\n----------\n\nIf you specify a flag multiple times it will get turned into an array containing\nall the values in order.\n\n $ node examples/reflect.js -x 5 -x 8 -x 0\n { _: [],\n '$0': 'node ./examples/reflect.js',\n x: [ 5, 8, 0 ] }\n\ninstallation\n============\n\nWith [npm](http://github.com/isaacs/npm), just do:\n npm install optimist\n \nor clone this project on github:\n\n git clone http://github.com/substack/node-optimist.git\n\nTo run the tests with [expresso](http://github.com/visionmedia/expresso),\njust do:\n \n expresso\n\ninspired By\n===========\n\nThis module is loosely inspired by Perl's\n[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm).\n", - "_id": "optimist@0.2.8", - "_from": "optimist@0.2" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_.js deleted file mode 100644 index 3d6df6e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_.js +++ /dev/null @@ -1,66 +0,0 @@ -var spawn = require('child_process').spawn; -var assert = require('assert'); - -exports.dotSlashEmpty = function () { - testCmd('./bin.js', []); -}; - -exports.dotSlashArgs = function () { - testCmd('./bin.js', [ 'a', 'b', 'c' ]); -}; - -exports.nodeEmpty = function () { - testCmd('node bin.js', []); -}; - -exports.nodeArgs = function () { - testCmd('node bin.js', [ 'x', 'y', 'z' ]); -}; - -exports.whichNodeEmpty = function () { - var which = spawn('which', ['node']); - - which.stdout.on('data', function (buf) { - testCmd(buf.toString().trim() + ' bin.js', []); - }); - - which.stderr.on('data', function (err) { - assert.fail(err.toString()); - }); -}; - -exports.whichNodeArgs = function () { - var which = spawn('which', ['node']); - - which.stdout.on('data', function (buf) { - testCmd(buf.toString().trim() + ' bin.js', [ 'q', 'r' ]); - }); - - which.stderr.on('data', function (err) { - assert.fail(err.toString()); - }); -}; - -function testCmd (cmd, args) { - var to = setTimeout(function () { - assert.fail('Never got stdout data.') - }, 5000); - - var oldDir = process.cwd(); - process.chdir(__dirname + '/_'); - - var cmds = cmd.split(' '); - - var bin = spawn(cmds[0], cmds.slice(1).concat(args.map(String))); - process.chdir(oldDir); - - bin.stderr.on('data', function (err) { - assert.fail(err.toString()); - }); - - bin.stdout.on('data', function (buf) { - clearTimeout(to); - var _ = JSON.parse(buf.toString()); - assert.eql(_.map(String), args.map(String)); - }); -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/argv.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/argv.js deleted file mode 100644 index 3d09606..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/argv.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -console.log(JSON.stringify(process.argv)); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/bin.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/bin.js deleted file mode 100644 index 4a18d85..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/_/bin.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -var argv = require('../../index').argv -console.log(JSON.stringify(argv._)); diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/parse.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/parse.js deleted file mode 100644 index eed467e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/parse.js +++ /dev/null @@ -1,304 +0,0 @@ -var optimist = require('../index'); -var assert = require('assert'); -var path = require('path'); - -var localExpresso = path.normalize( - __dirname + '/../node_modules/.bin/expresso' -); - -var expresso = process.argv[1] === localExpresso - ? 'node ./node_modules/.bin/expresso' - : 'expresso' -; - -exports['short boolean'] = function () { - var parse = optimist.parse([ '-b' ]); - assert.eql(parse, { b : true, _ : [], $0 : expresso }); - assert.eql(typeof parse.b, 'boolean'); -}; - -exports['long boolean'] = function () { - assert.eql( - optimist.parse([ '--bool' ]), - { bool : true, _ : [], $0 : expresso } - ); -}; - -exports.bare = function () { - assert.eql( - optimist.parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ], $0 : expresso } - ); -}; - -exports['short group'] = function () { - assert.eql( - optimist.parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [], $0 : expresso } - ); -}; - -exports['short group next'] = function () { - assert.eql( - optimist.parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [], $0 : expresso } - ); -}; - -exports['short capture'] = function () { - assert.eql( - optimist.parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [], $0 : expresso } - ); -}; - -exports['short captures'] = function () { - assert.eql( - optimist.parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [], $0 : expresso } - ); -}; - -exports['long capture sp'] = function () { - assert.eql( - optimist.parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [], $0 : expresso } - ); -}; - -exports['long capture eq'] = function () { - assert.eql( - optimist.parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [], $0 : expresso } - ); -}; - -exports['long captures sp'] = function () { - assert.eql( - optimist.parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [], $0 : expresso } - ); -}; - -exports['long captures eq'] = function () { - assert.eql( - optimist.parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [], $0 : expresso } - ); -}; - -exports['mixed short bool and capture'] = function () { - assert.eql( - optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ], $0 : expresso, - } - ); -}; - -exports['short and long'] = function () { - assert.eql( - optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ], $0 : expresso, - } - ); -}; - -exports.no = function () { - assert.eql( - optimist.parse([ '--no-moo' ]), - { moo : false, _ : [], $0 : expresso } - ); -}; - -exports.multi = function () { - assert.eql( - optimist.parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [], $0 : expresso } - ); -}; - -exports.comprehensive = function () { - assert.eql( - optimist.parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek' - ]), - { - c : true, - a : true, - t : true, - s : 'woo', - h : 'awesome', - b : true, - bool : true, - key : 'value', - multi : [ 'quux', 'baz' ], - meep : false, - name : 'meowmers', - _ : [ 'bare', '--not-a-flag', 'eek' ], - $0 : expresso - } - ); -}; - -exports.nums = function () { - var argv = optimist.parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789', - ]); - assert.eql(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ], - $0 : expresso - }); - assert.eql(typeof argv.x, 'number'); - assert.eql(typeof argv.y, 'number'); - assert.eql(typeof argv.z, 'number'); - assert.eql(typeof argv.w, 'string'); - assert.eql(typeof argv.hex, 'number'); - assert.eql(typeof argv._[0], 'number'); -}; - -exports['flag boolean'] = function () { - var parse = optimist([ '-t', 'moo' ]).boolean(['t']).argv; - assert.eql(parse, { t : true, _ : [ 'moo' ], $0 : expresso }); - assert.eql(typeof parse.t, 'boolean'); -}; - -exports['flag boolean value'] = function () { - var parse = optimist(['--verbose', 'false', 'moo', '-t', 'true']) - .boolean(['t', 'verbose']).default('verbose', true).argv; - - assert.eql(parse, { - verbose: false, - t: true, - _: ['moo'], - $0 : expresso - }); - - assert.eql(typeof parse.verbose, 'boolean'); - assert.eql(typeof parse.t, 'boolean'); -}; - -exports['flag boolean default false'] = function () { - var parse = optimist(['moo']) - .boolean(['t', 'verbose']) - .default('verbose', false) - .default('t', false).argv; - - assert.eql(parse, { - verbose: false, - t: false, - _: ['moo'], - $0 : expresso - }); - - assert.eql(typeof parse.verbose, 'boolean'); - assert.eql(typeof parse.t, 'boolean'); - -}; - -exports['boolean groups'] = function () { - var parse = optimist([ '-x', '-z', 'one', 'two', 'three' ]) - .boolean(['x','y','z']).argv; - - assert.eql(parse, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ], - $0 : expresso - }); - - assert.eql(typeof parse.x, 'boolean'); - assert.eql(typeof parse.y, 'boolean'); - assert.eql(typeof parse.z, 'boolean'); -}; - -exports.strings = function () { - var s = optimist([ '-s', '0001234' ]).string('s').argv.s; - assert.eql(s, '0001234'); - assert.eql(typeof s, 'string'); - - var x = optimist([ '-x', '56' ]).string('x').argv.x; - assert.eql(x, '56'); - assert.eql(typeof x, 'string'); -}; - -exports.stringArgs = function () { - var s = optimist([ ' ', ' ' ]).string('_').argv._; - assert.eql(s.length, 2); - assert.eql(typeof s[0], 'string'); - assert.eql(s[0], ' '); - assert.eql(typeof s[1], 'string'); - assert.eql(s[1], ' '); -}; - -exports.slashBreak = function () { - assert.eql( - optimist.parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [], $0 : expresso } - ); - assert.eql( - optimist.parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [], $0 : expresso } - ); -}; - -exports.alias = function () { - var argv = optimist([ '-f', '11', '--zoom', '55' ]) - .alias('z', 'zoom') - .argv - ; - assert.equal(argv.zoom, 55); - assert.equal(argv.z, argv.zoom); - assert.equal(argv.f, 11); -}; - -exports.multiAlias = function () { - var argv = optimist([ '-f', '11', '--zoom', '55' ]) - .alias('z', [ 'zm', 'zoom' ]) - .argv - ; - assert.equal(argv.zoom, 55); - assert.equal(argv.z, argv.zoom); - assert.equal(argv.z, argv.zm); - assert.equal(argv.f, 11); -}; - -exports['boolean default true'] = function () { - var argv = optimist.options({ - sometrue: { - boolean: true, - default: true - } - }).argv; - - assert.equal(argv.sometrue, true); -}; - -exports['boolean default false'] = function () { - var argv = optimist.options({ - somefalse: { - boolean: true, - default: false - } - }).argv; - - assert.equal(argv.somefalse, false); -}; diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/usage.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/usage.js deleted file mode 100644 index 6593b9b..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/optimist/test/usage.js +++ /dev/null @@ -1,256 +0,0 @@ -var Hash = require('hashish'); -var optimist = require('../index'); -var assert = require('assert'); - -exports.usageFail = function () { - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .demand(['x','y']) - .argv; - }); - assert.deepEqual( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - assert.deepEqual( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage -x NUM -y NUM', - 'Options:', - ' -x [required]', - ' -y [required]', - 'Missing required arguments: y', - ] - ); - assert.deepEqual(r.logs, []); - assert.ok(r.exit); -}; - -exports.usagePass = function () { - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .demand(['x','y']) - .argv; - }); - assert.deepEqual(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); -}; - -exports.checkPass = function () { - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(function (argv) { - if (!('x' in argv)) throw 'You forgot about -x'; - if (!('y' in argv)) throw 'You forgot about -y'; - }) - .argv; - }); - assert.deepEqual(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); -}; - -exports.checkFail = function () { - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(function (argv) { - if (!('x' in argv)) throw 'You forgot about -x'; - if (!('y' in argv)) throw 'You forgot about -y'; - }) - .argv; - }); - - assert.deepEqual( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - assert.deepEqual( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage -x NUM -y NUM', - 'You forgot about -y' - ] - ); - - assert.deepEqual(r.logs, []); - assert.ok(r.exit); -}; - -exports.checkCondPass = function () { - function checker (argv) { - return 'x' in argv && 'y' in argv; - } - - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(checker) - .argv; - }); - assert.deepEqual(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); -}; - -exports.checkCondFail = function () { - function checker (argv) { - return 'x' in argv && 'y' in argv; - } - - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(checker) - .argv; - }); - - assert.deepEqual( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - assert.deepEqual( - r.errors.join('\n').split(/\n+/).join('\n'), - 'Usage: ./usage -x NUM -y NUM\n' - + 'Argument check failed: ' + checker.toString() - ); - - assert.deepEqual(r.logs, []); - assert.ok(r.exit); -}; - -exports.countPass = function () { - var r = checkUsage(function () { - return optimist('1 2 3 --moo'.split(' ')) - .usage('Usage: $0 [x] [y] [z] {OPTIONS}') - .demand(3) - .argv; - }); - assert.deepEqual(r, { - result : { _ : [ '1', '2', '3' ], moo : true, $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); -}; - -exports.countFail = function () { - var r = checkUsage(function () { - return optimist('1 2 --moo'.split(' ')) - .usage('Usage: $0 [x] [y] [z] {OPTIONS}') - .demand(3) - .argv; - }); - assert.deepEqual( - r.result, - { _ : [ '1', '2' ], moo : true, $0 : './usage' } - ); - - assert.deepEqual( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage [x] [y] [z] {OPTIONS}', - 'Not enough non-option arguments: got 2, need at least 3', - ] - ); - - assert.deepEqual(r.logs, []); - assert.ok(r.exit); -}; - -exports.defaultSingles = function () { - var r = checkUsage(function () { - return optimist('--foo 50 --baz 70 --powsy'.split(' ')) - .default('foo', 5) - .default('bar', 6) - .default('baz', 7) - .argv - ; - }); - assert.eql(r.result, { - foo : '50', - bar : 6, - baz : '70', - powsy : true, - _ : [], - $0 : './usage', - }); -}; - -exports.defaultHash = function () { - var r = checkUsage(function () { - return optimist('--foo 50 --baz 70'.split(' ')) - .default({ foo : 10, bar : 20, quux : 30 }) - .argv - ; - }); - assert.eql(r.result, { - foo : '50', - bar : 20, - baz : 70, - quux : 30, - _ : [], - $0 : './usage', - }); -}; - -exports.rebase = function () { - assert.equal( - optimist.rebase('/home/substack', '/home/substack/foo/bar/baz'), - './foo/bar/baz' - ); - assert.equal( - optimist.rebase('/home/substack/foo/bar/baz', '/home/substack'), - '../../..' - ); - assert.equal( - optimist.rebase('/home/substack/foo', '/home/substack/pow/zoom.txt'), - '../pow/zoom.txt' - ); -}; - -function checkUsage (f) { - var _process = process; - process = Hash.copy(process); - var exit = false; - process.exit = function () { exit = true }; - process.env = Hash.merge(process.env, { _ : 'node' }); - process.argv = [ './usage' ]; - - var errors = []; - var logs = []; - - console._error = console.error; - console.error = function (msg) { errors.push(msg) }; - console._log = console.log; - console.log = function (msg) { logs.push(msg) }; - - var result = f(); - - process = _process; - console.error = console._error; - console.log = console._log; - - return { - errors : errors, - logs : logs, - exit : exit, - result : result, - }; -}; diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/.npmignore b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/.npmignore deleted file mode 100644 index 13abef4..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/index.js deleted file mode 100644 index 8fadda9..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/index.js +++ /dev/null @@ -1,76 +0,0 @@ -var Stream = require('stream') - -/* - was gonna use through for this, - but it does not match quite right, - because you need a seperate pause - mechanism for the readable and writable - sides. -*/ - -module.exports = function () { - var buffer = [], ended = false, destroyed = false - var stream = new Stream() - stream.writable = stream.readable = true - stream.paused = false - - stream.write = function (data) { - if(!this.paused) - this.emit('data', data) - else - buffer.push(data) - return !(this.paused || buffer.length) - } - function onEnd () { - stream.readable = false - stream.emit('end') - process.nextTick(stream.destroy.bind(stream)) - } - stream.end = function (data) { - if(data) this.write(data) - this.ended = true - this.writable = false - if(!(this.paused || buffer.length)) - return onEnd() - else - this.once('drain', onEnd) - this.drain() - } - - stream.drain = function () { - while(!this.paused && buffer.length) - this.emit('data', buffer.shift()) - //if the buffer has emptied. emit drain. - if(!buffer.length && !this.paused) - this.emit('drain') - } - - stream.resume = function () { - //this is where I need pauseRead, and pauseWrite. - //here the reading side is unpaused, - //but the writing side may still be paused. - //the whole buffer might not empity at once. - //it might pause again. - //the stream should never emit data inbetween pause()...resume() - //and write should return !buffer.length - - this.paused = false -// process.nextTick(this.drain.bind(this)) //will emit drain if buffer empties. - this.drain() - return this - } - - stream.destroy = function () { - if(destroyed) return - destroyed = ended = true - buffer.length = 0 - this.emit('close') - } - - stream.pause = function () { - stream.paused = true - return this - } - - return stream -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/package.json deleted file mode 100644 index 7702ad5..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "pause-stream", - "version": "0.0.4", - "description": "a ThroughStream that strictly buffers all readable events when paused.", - "main": "index.js", - "directories": { - "test": "test" - }, - "devDependencies": { - "stream-spec": "~0.2.0" - }, - "scripts": { - "test": "node test/index.js && node test/pause-end.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/pause-stream.git" - }, - "keywords": [ - "stream", - "pipe", - "pause", - "drain", - "buffer" - ], - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "license": [ - "MIT", - "Apache2" - ], - "readme": "# PauseStream\n\nThis is a `Stream` that will strictly buffer when paused.\nConnect it to anything you need buffered.\n\n``` js\n var ps = require('pause-stream')();\n\n badlyBehavedStream.pipe(ps.pause())\n\n aLittleLater(function (err, data) {\n ps.pipe(createAnotherStream(data))\n ps.resume()\n })\n```\n\n`PauseStream` will buffer whenever paused.\nit will buffer when yau have called `pause` manually.\nbut also when it's downstream `dest.write()===false`.\nit will attempt to drain the buffer when you call resume\nor the downstream emits `'drain'`\n\n`PauseStream` is tested using [stream-spec](https://github.com/dominictarr/stream-spec)\nand [stream-tester](https://github.com/dominictarr/stream-tester)\n", - "_id": "pause-stream@0.0.4", - "_from": "pause-stream@0.0.4" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/readme.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/readme.markdown deleted file mode 100644 index 715cb52..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/readme.markdown +++ /dev/null @@ -1,24 +0,0 @@ -# PauseStream - -This is a `Stream` that will strictly buffer when paused. -Connect it to anything you need buffered. - -``` js - var ps = require('pause-stream')(); - - badlyBehavedStream.pipe(ps.pause()) - - aLittleLater(function (err, data) { - ps.pipe(createAnotherStream(data)) - ps.resume() - }) -``` - -`PauseStream` will buffer whenever paused. -it will buffer when yau have called `pause` manually. -but also when it's downstream `dest.write()===false`. -it will attempt to drain the buffer when you call resume -or the downstream emits `'drain'` - -`PauseStream` is tested using [stream-spec](https://github.com/dominictarr/stream-spec) -and [stream-tester](https://github.com/dominictarr/stream-tester) diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/index.js deleted file mode 100644 index 4aa7d5e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/index.js +++ /dev/null @@ -1,17 +0,0 @@ -var spec = require('stream-spec') -var tester = require('stream-tester') -var ps = require('..')() - -spec(ps) - .through({strict: false}) - .validateOnExit() - -var master = tester.createConsistent - -tester.createRandomStream(100) //1k random numbers - .pipe(master = tester.createConsistentStream()) - .pipe(tester.createUnpauseStream()) - .pipe(ps) - .pipe(tester.createPauseStream()) - .pipe(master.createSlave()) - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js deleted file mode 100644 index a6c27ef..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/pause-stream/test/pause-end.js +++ /dev/null @@ -1,33 +0,0 @@ - -var pause = require('..') -var assert = require('assert') - -var ps = pause() -var read = [], ended = false - -ps.on('data', function (i) { - read.push(i) -}) - -ps.on('end', function () { - ended = true -}) - -assert.deepEqual(read, []) - -ps.write(0) -ps.write(1) -ps.write(2) - -assert.deepEqual(read, [0, 1, 2]) - -ps.pause() - -assert.deepEqual(read, [0, 1, 2]) - -ps.end() -assert.equal(ended, false) -ps.resume() -assert.equal(ended, true) - - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.npmignore b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.npmignore deleted file mode 100644 index 13abef4..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.travis.yml b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/LICENCE b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/LICENCE deleted file mode 100644 index 171dd97..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/examples/pretty.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/examples/pretty.js deleted file mode 100644 index af04340..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/examples/pretty.js +++ /dev/null @@ -1,25 +0,0 @@ - -var inspect = require('util').inspect - -if(!module.parent) { - var es = require('..') //load event-stream - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/index.js deleted file mode 100644 index 1146c96..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/index.js +++ /dev/null @@ -1,35 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - - -var through = require('through') - - -module.exports = split - -function split (matcher) { - var soFar = '' - if (!matcher) - matcher = '\n' - - return through(function (buffer) { - var stream = this - , pieces = (soFar + buffer).split(matcher) - soFar = pieces.pop() - - pieces.forEach(function (piece) { - stream.emit('data', piece) - }) - - return true - }, - function () { - if(soFar) - this.emit('data', soFar) - this.emit('end') - }) -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/.travis.yml b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.APACHE2 b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.APACHE2 deleted file mode 100644 index 6366c04..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.MIT b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.MIT deleted file mode 100644 index 6eafbd7..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/index.js deleted file mode 100644 index cd25055..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/index.js +++ /dev/null @@ -1,65 +0,0 @@ -var Stream = require('stream') - -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) - -exports = module.exports = through -through.through = through - -//create a readable writable stream. - -function through (write, end) { - write = write || function (data) { this.emit('data', data) } - end = end || function () { this.emit('end') } - - var ended = false, destroyed = false - var stream = new Stream() - stream.readable = stream.writable = true - stream.paused = false - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - stream.on('end', function () { - stream.readable = false - if(!stream.writable) - process.nextTick(function () { - stream.destroy() - }) - }) - - stream.end = function (data) { - if(ended) return - //this breaks, because pipe doesn't check writable before calling end. - //throw new Error('cannot call end twice') - ended = true - if(arguments.length) stream.write(data) - this.writable = false - end.call(this) - if(!this.readable) - this.destroy() - } - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - stream.writable = stream.readable = false - stream.emit('close') - } - stream.pause = function () { - stream.paused = true - } - stream.resume = function () { - if(stream.paused) { - stream.paused = false - stream.emit('drain') - } - } - return stream -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/package.json deleted file mode 100644 index 3ecb71d..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "through", - "version": "0.0.4", - "description": "simplified stream contruction", - "main": "index.js", - "scripts": { - "test": "asynct test/*.js" - }, - "devDependencies": { - "stream-spec": "0", - "assertions": "2", - "asynct": "1" - }, - "keywords": [ - "stream", - "streams", - "user-streams", - "pipe" - ], - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "license": "MIT", - "readme": "#through\n\n[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through)\n\nEasy way to create a `Stream` that is both `readable` and `writable`. Pass in optional `write` and `end` methods. `through` takes care of pause/resume logic.\nUse `this.pause()` and `this.resume()` to manage flow.\nCheck `this.paused` to see current flow state. (write always returns `!this.paused`)\n\nthis function is the basis for most of the syncronous streams in [event-stream](http://github.com/dominictarr/event-stream).\n\n``` js\nvar through = require('through')\n\nthrough(function write(data) {\n this.emit('data', data)\n //this.pause() \n },\n function end () { //optional\n this.emit('end')\n })\n\n```\n\n## License\n\nMIT / Apache2\n", - "_id": "through@0.0.4", - "_from": "through@0.0.4" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/readme.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/readme.markdown deleted file mode 100644 index ce9b9e5..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/readme.markdown +++ /dev/null @@ -1,26 +0,0 @@ -#through - -[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through) - -Easy way to create a `Stream` that is both `readable` and `writable`. Pass in optional `write` and `end` methods. `through` takes care of pause/resume logic. -Use `this.pause()` and `this.resume()` to manage flow. -Check `this.paused` to see current flow state. (write always returns `!this.paused`) - -this function is the basis for most of the syncronous streams in [event-stream](http://github.com/dominictarr/event-stream). - -``` js -var through = require('through') - -through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) - -``` - -## License - -MIT / Apache2 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/test/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/test/index.js deleted file mode 100644 index 25a6ea7..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/node_modules/through/test/index.js +++ /dev/null @@ -1,113 +0,0 @@ - -var spec = require('stream-spec') -var through = require('..') -var a = require('assertions') - -/* - I'm using these two functions, and not streams and pipe - so there is less to break. if this test fails it must be - the implementation of _through_ -*/ - -function write(array, stream) { - array = array.slice() - function next() { - while(array.length) - if(stream.write(array.shift()) === false) - return stream.once('drain', next) - - stream.end() - } - - next() -} - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -exports['simple defaults'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through() - spec(t) - .through() - .pausable() - .validateOnExit() - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - - write(expected, t) -} - -exports['simple functions'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through(function (data) { - this.emit('data', data*2) - }) - spec(t) - .through() - .pausable() - .validateOnExit() - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected.map(function (data) { - return data*2 - })) - test.done() - }) - - write(expected, t) -} -exports['pauses'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l) //Math.random()) - - var t = through() - spec(t) - .through() - .pausable() - .validateOnExit() - - t.on('data', function () { - if(Math.random() > 0.1) return - t.pause() - process.nextTick(function () { - t.resume() - }) - }) - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - - write(expected, t) -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/package.json deleted file mode 100644 index a592dad..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "split", - "version": "0.0.0", - "description": "split a Text Stream into a Line Stream", - "homepage": "http://github.com/dominictarr/split", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/split.git" - }, - "dependencies": { - "through": "0.0.4" - }, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~2.9", - "stream-spec": "~0.2", - "event-stream": "~3.0.2" - }, - "scripts": { - "test": "asynct test/" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "http://bit.ly/dominictarr" - }, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "# Split (matcher)\n\n\n\nBreak up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` \n\nExample, read every line in a file ...\n\n``` js\n fs.createReadStream(file)\n .pipe(split())\n .on('data', function (line) {\n //each chunk now is a seperate line!\n })\n\n```\n\n`split` takes the same arguments as `string.split` except it defaults to '\\n' instead of ',', and the optional `limit` paremeter is ignored.\n[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split)\n\n", - "_id": "split@0.0.0", - "_from": "split@0.0.0" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/readme.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/readme.markdown deleted file mode 100644 index 57c8edc..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/readme.markdown +++ /dev/null @@ -1,20 +0,0 @@ -# Split (matcher) - - - -Break up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` - -Example, read every line in a file ... - -``` js - fs.createReadStream(file) - .pipe(split()) - .on('data', function (line) { - //each chunk now is a seperate line! - }) - -``` - -`split` takes the same arguments as `string.split` except it defaults to '\n' instead of ',', and the optional `limit` paremeter is ignored. -[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split) - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/test/split.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/test/split.asynct.js deleted file mode 100644 index a6a3b1b..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/split/test/split.asynct.js +++ /dev/null @@ -1,47 +0,0 @@ -var es = require('event-stream') - , it = require('it-is').style('colour') - , d = require('ubelt') - , split = require('..') - , join = require('path').join - , fs = require('fs') - , Stream = require('stream').Stream - , spec = require('stream-spec') - -exports ['es.split() works like String#split'] = function (test) { - var readme = join(__filename) - , expected = fs.readFileSync(readme, 'utf-8').split('\n') - , cs = split() - , actual = [] - , ended = false - , x = spec(cs).through() - - var a = new Stream () - - a.write = function (l) { - actual.push(l.trim()) - } - a.end = function () { - - ended = true - expected.forEach(function (v,k) { - //String.split will append an empty string '' - //if the string ends in a split pattern. - //es.split doesn't which was breaking this test. - //clearly, appending the empty string is correct. - //tests are passing though. which is the current job. - if(v) - it(actual[k]).like(v) - }) - //give the stream time to close - process.nextTick(function () { - test.done() - x.validate() - }) - } - a.writable = true - - fs.createReadStream(readme, {flags: 'r'}).pipe(cs) - cs.pipe(a) - -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/.travis.yml b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 deleted file mode 100644 index 6366c04..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.MIT b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.MIT deleted file mode 100644 index 6eafbd7..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/index.js deleted file mode 100644 index 7072b37..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/index.js +++ /dev/null @@ -1,100 +0,0 @@ -var Stream = require('stream') - -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) - - - -exports = module.exports = through -through.through = through - -//create a readable writable stream. - -function through (write, end) { - write = write || function (data) { this.emit('data', data) } - end = end || function () { this.emit('end') } - - var ended = false, destroyed = false - var stream = new Stream(), buffer = [] - stream.buffer = buffer - stream.readable = stream.writable = true - stream.paused = false - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } - - function drain() { - while(buffer.length && !stream.paused) { - var data = buffer.shift() - if(null === data) - return stream.emit('end') - else - stream.emit('data', data) - } - } - - stream.queue = function (data) { - buffer.push(data) - drain() - } - - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - //this is only a problem if end is not emitted synchronously. - //a nicer way to do this is to make sure this is the last listener for 'end' - - stream.on('end', function () { - stream.readable = false - if(!stream.writable) - process.nextTick(function () { - stream.destroy() - }) - }) - - function _end () { - stream.writable = false - end.call(stream) - if(!stream.readable) - stream.destroy() - } - - stream.end = function (data) { - if(ended) return - //this breaks, because pipe doesn't check writable before calling end. - //throw new Error('cannot call end twice') - ended = true - if(arguments.length) stream.write(data) - if(!buffer.length) _end() - } - - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - buffer.length = 0 - stream.writable = stream.readable = false - stream.emit('close') - } - - stream.pause = function () { - if(stream.paused) return - stream.paused = true - stream.emit('pause') - } - stream.resume = function () { - if(stream.paused) { - stream.paused = false - } - drain() - //may have become paused again, - //as drain emits 'data'. - if(!stream.paused) - stream.emit('drain') - } - return stream -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/package.json deleted file mode 100644 index 168247e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "through", - "version": "1.1.0", - "description": "simplified stream contruction", - "main": "index.js", - "scripts": { - "test": "asynct test/*.js" - }, - "devDependencies": { - "stream-spec": "0", - "assertions": "2", - "asynct": "1" - }, - "keywords": [ - "stream", - "streams", - "user-streams", - "pipe" - ], - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/dominictarr/through.git" - }, - "homepage": "http://github.com/dominictarr/through", - "readme": "#through\n\n[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through)\n\nEasy way to create a `Stream` that is both `readable` and `writable`. Pass in optional `write` and `end` methods. `through` takes care of pause/resume logic.\nUse `this.pause()` and `this.resume()` to manage flow.\nCheck `this.paused` to see current flow state. (write always returns `!this.paused`)\n\nthis function is the basis for most of the syncronous streams in [event-stream](http://github.com/dominictarr/event-stream).\n\n``` js\nvar through = require('through')\n\nthrough(function write(data) {\n this.emit('data', data)\n //this.pause() \n },\n function end () { //optional\n this.emit('end')\n })\n\n```\n\nor, with buffering on pause, use `this.queue(data)`,\ndata *cannot* be `null`. `this.queue(null)` will emit 'end'\nwhen it gets to the `null` element.\n\n``` js\nvar through = require('through')\n\nthrough(function write(data) {\n this.queue(data)\n //this.pause() \n },\n function end () { //optional\n this.queue(null)\n })\n\n```\n\n\n## License\n\nMIT / Apache2\n", - "_id": "through@1.1.0", - "_from": "through@~1.1.0" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/readme.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/readme.markdown deleted file mode 100644 index 1b687e9..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/readme.markdown +++ /dev/null @@ -1,44 +0,0 @@ -#through - -[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through) - -Easy way to create a `Stream` that is both `readable` and `writable`. Pass in optional `write` and `end` methods. `through` takes care of pause/resume logic. -Use `this.pause()` and `this.resume()` to manage flow. -Check `this.paused` to see current flow state. (write always returns `!this.paused`) - -this function is the basis for most of the syncronous streams in [event-stream](http://github.com/dominictarr/event-stream). - -``` js -var through = require('through') - -through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) - -``` - -or, with buffering on pause, use `this.queue(data)`, -data *cannot* be `null`. `this.queue(null)` will emit 'end' -when it gets to the `null` element. - -``` js -var through = require('through') - -through(function write(data) { - this.queue(data) - //this.pause() - }, - function end () { //optional - this.queue(null) - }) - -``` - - -## License - -MIT / Apache2 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/buffering.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/buffering.js deleted file mode 100644 index 1ce4b0d..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/buffering.js +++ /dev/null @@ -1,37 +0,0 @@ -var through = require('..') - -// must emit end before close. - -exports['buffering'] = function (t) { - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - t.deepEqual(actual, [1, 2, 3]) - ts.pause() - ts.write(4) - ts.write(5) - ts.write(6) - t.deepEqual(actual, [1, 2, 3]) - ts.resume() - t.deepEqual(actual, [1, 2, 3, 4, 5, 6]) - ts.pause() - ts.end() - t.ok(!ended) - ts.resume() - t.ok(ended) - t.end() - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/end.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/end.js deleted file mode 100644 index 280da0a..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/end.js +++ /dev/null @@ -1,27 +0,0 @@ -var through = require('..') - -// must emit end before close. - -exports['end before close'] = function (t) { - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - t.ok(!closed) - ended = true - }) - ts.on('close', function () { - t.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - t.ok(ended) - t.ok(closed) - - t.end() - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/index.js deleted file mode 100644 index 25a6ea7..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/node_modules/through/test/index.js +++ /dev/null @@ -1,113 +0,0 @@ - -var spec = require('stream-spec') -var through = require('..') -var a = require('assertions') - -/* - I'm using these two functions, and not streams and pipe - so there is less to break. if this test fails it must be - the implementation of _through_ -*/ - -function write(array, stream) { - array = array.slice() - function next() { - while(array.length) - if(stream.write(array.shift()) === false) - return stream.once('drain', next) - - stream.end() - } - - next() -} - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -exports['simple defaults'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through() - spec(t) - .through() - .pausable() - .validateOnExit() - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - - write(expected, t) -} - -exports['simple functions'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through(function (data) { - this.emit('data', data*2) - }) - spec(t) - .through() - .pausable() - .validateOnExit() - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected.map(function (data) { - return data*2 - })) - test.done() - }) - - write(expected, t) -} -exports['pauses'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l) //Math.random()) - - var t = through() - spec(t) - .through() - .pausable() - .validateOnExit() - - t.on('data', function () { - if(Math.random() > 0.1) return - t.pause() - process.nextTick(function () { - t.resume() - }) - }) - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - - write(expected, t) -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/package.json deleted file mode 100644 index 15f8ea8..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "event-stream", - "version": "3.0.7", - "description": "construct pipes of streams of events", - "homepage": "http://github.com/dominictarr/event-stream", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/event-stream.git" - }, - "dependencies": { - "optimist": "0.2", - "through": "1.1.0", - "duplexer": "~0.0.2", - "from": "~0", - "map-stream": "0.0.1", - "pause-stream": "0.0.4", - "split": "0.0.0" - }, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~2.9", - "stream-spec": "~0.2" - }, - "scripts": { - "test": "asynct test/" - }, - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "http://bit.ly/dominictarr" - }, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "# EventStream\n\n\n\n[Streams](http://nodejs.org/api/streams.html \"Stream\") are nodes best and most misunderstood idea, and \n_EventStream_ is a toolkit to make creating and working with streams easy. \n\nNormally, streams are only used of IO, \nbut in event stream we send all kinds of objects down the pipe. \nIf your application's input and output are streams, \nshouldn't the throughput be a stream too? \n\nThe *EventStream* functions resemble the array functions, \nbecause Streams are like Arrays, but laid out in time, rather than in memory. \n\nAll the `event-stream` functions return instances of `Stream`.\n\nStream API docs: [nodejs.org/api/streams](http://nodejs.org/api/streams.html \"Stream\")\n\nNOTE: I shall use the term \"through stream\" to refer to a stream that is writable and readable. \n\n###[simple example](https://github.com/dominictarr/event-stream/blob/master/examples/pretty.js):\n\n``` js\n\n//pretty.js\n\nif(!module.parent) {\n var es = require('event-stream')\n es.pipeline( //connect streams together with `pipe`\n process.openStdin(), //open stdin\n es.split(), //split stream to break on newlines\n es.map(function (data, callback) {//turn this async function into a stream\n callback(null\n , inspect(JSON.parse(data))) //render it nicely\n }),\n process.stdout // pipe it to stdout !\n )\n }\n```\nrun it ...\n\n``` bash \ncurl -sS registry.npmjs.org/event-stream | node pretty.js\n```\n \n[node Stream documentation](http://nodejs.org/api/streams.html)\n\n## through (write?, end?)\n\nReemits data synchronously. Easy way to create syncronous through streams.\nPass in an optional `write` and `end` methods. They will be called in the \ncontext of the stream. Use `this.pause()` and `this.resume()` to manage flow.\nCheck `this.paused` to see current flow state. (write always returns `!this.paused`)\n\nthis function is the basis for most of the syncronous streams in `event-stream`.\n\n``` js\n\nes.through(function write(data) {\n this.emit('data', data)\n //this.pause() \n },\n function end () { //optional\n this.emit('end')\n })\n\n```\n\n##map (asyncFunction)\n\nCreate a through stream from an asyncronous function. \n\n``` js\nvar es = require('event-stream')\n\nes.map(function (data, callback) {\n //transform data\n // ...\n callback(null, data)\n})\n\n```\n\nEach map MUST call the callback. It may callback with data, with an error or with no arguments, \n\n * `callback()` drop this data. \n this makes the map work like `filter`, \n note:`callback(null,null)` is not the same, and will emit `null`\n\n * `callback(null, newData)` turn data into newData\n \n * `callback(error)` emit an error for this item.\n\n>Note: if a callback is not called, `map` will think that it is still being processed, \n>every call must be answered or the stream will not know when to end. \n>\n>Also, if the callback is called more than once, every call but the first will be ignored.\n\n## mapSync (syncFunction)\n\nSame as `map`, but the callback is called synchronously. Based on `es.through`\n\n## split (matcher)\n\nBreak up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` \n\nExample, read every line in a file ...\n\n``` js\n es.pipeline(\n fs.createReadStream(file, {flags: 'r'}),\n es.split(),\n es.map(function (line, cb) {\n //do something with the line \n cb(null, line)\n })\n )\n\n```\n\n`split` takes the same arguments as `string.split` except it defaults to '\\n' instead of ',', and the optional `limit` paremeter is ignored.\n[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split)\n\n## join (seperator)\n\ncreate a through stream that emits `seperator` between each chunk, just like Array#join.\n\n(for legacy reasons, if you pass a callback instead of a string, join is a synonym for `es.wait`)\n\n## replace (from, to)\n\nReplace all occurences of `from` with `to`. `from` may be a `String` or a `RegExp`. \nWorks just like `string.split(from).join(to)`, but streaming.\n\n\n## parse\n\nConvienience function for parsing JSON chunks. For newline seperated JSON,\nuse with `es.split`\n\n``` js\nfs.createReadStream(filename)\n .pipe(es.split()) //defaults to lines.\n .pipe(es.parse())\n```\n\n## stringify\n\nconvert javascript objects into lines of text. The text will have whitespace escaped and have a `\\n` appended, so it will be compatible with `es.parse`\n\n``` js\nobjectStream\n .pipe(es.stringify())\n .pipe(fs.createWriteStream(filename))\n```\n\n##readable (asyncFunction) \n\ncreate a readable stream (that respects pause) from an async function. \nwhile the stream is not paused, \nthe function will be polled with `(count, callback)`, \nand `this` will be the readable stream.\n\n``` js\n\nes.readable(function (count, callback) {\n if(streamHasEnded)\n return this.emit('end')\n \n //...\n \n this.emit('data', data) //use this way to emit multiple chunks per call.\n \n callback() // you MUST always call the callback eventually.\n // the function will not be called again until you do this.\n})\n```\nyou can also pass the data and the error to the callback. \nyou may only call the callback once. \ncalling the same callback more than once will have no effect. \n\n##readArray (array)\n\nCreate a readable stream from an Array.\n\nJust emit each item as a data event, respecting `pause` and `resume`.\n\n``` js\n var es = require('event-stream')\n , reader = es.readArray([1,2,3])\n\n reader.pipe(...)\n```\n\n## writeArray (callback)\n\ncreate a writeable stream from a callback, \nall `data` events are stored in an array, which is passed to the callback when the stream ends.\n\n``` js\n var es = require('event-stream')\n , reader = es.readArray([1, 2, 3])\n , writer = es.writeArray(function (err, array){\n //array deepEqual [1, 2, 3]\n })\n\n reader.pipe(writer)\n```\n\n## pipeline (stream1,...,streamN)\n\nTurn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream\nand reads from the last stream. \n\nListening for 'error' will recieve errors from all streams inside the pipe.\n\n> `connect` is an alias for `pipeline`.\n\n``` js\n\n es.pipeline( //connect streams together with `pipe`\n process.openStdin(), //open stdin\n es.split(), //split stream to break on newlines\n es.map(function (data, callback) {//turn this async function into a stream\n callback(null\n , inspect(JSON.parse(data))) //render it nicely\n }),\n process.stdout // pipe it to stdout !\n )\n```\n\n## pause () \n\nA stream that buffers all chunks when paused.\n\n\n``` js\n var ps = es.pause()\n ps.pause() //buffer the stream, also do not allow 'end' \n ps.resume() //allow chunks through\n```\n\n## duplex (writeStream, readStream)\n\nTakes a writable stream and a readable stream and makes them appear as a readable writable stream.\n\nIt is assumed that the two streams are connected to each other in some way. \n\n(This is used by `pipeline` and `child`.)\n\n``` js\n var grep = cp.exec('grep Stream')\n\n es.duplex(grep.stdin, grep.stdout)\n```\n\n## child (child_process)\n\nCreate a through stream from a child process ...\n\n``` js\n var cp = require('child_process')\n\n es.child(cp.exec('grep Stream')) // a through stream\n\n```\n\n## wait (callback)\n\nwaits for stream to emit 'end'.\njoins chunks of a stream into a single string. \ntakes an optional callback, which will be passed the \ncomplete string when it receives the 'end' event.\n\nalso, emits a simgle 'data' event.\n\n``` js\n\nreadStream.pipe(es.join(function (err, text) {\n // have complete text here.\n}))\n\n```\n\n\n", - "_id": "event-stream@3.0.7", - "_from": "event-stream@~3.0.7" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/readme.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/readme.markdown deleted file mode 100644 index e83724a..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/readme.markdown +++ /dev/null @@ -1,286 +0,0 @@ -# EventStream - - - -[Streams](http://nodejs.org/api/streams.html "Stream") are nodes best and most misunderstood idea, and -_EventStream_ is a toolkit to make creating and working with streams easy. - -Normally, streams are only used of IO, -but in event stream we send all kinds of objects down the pipe. -If your application's input and output are streams, -shouldn't the throughput be a stream too? - -The *EventStream* functions resemble the array functions, -because Streams are like Arrays, but laid out in time, rather than in memory. - -All the `event-stream` functions return instances of `Stream`. - -Stream API docs: [nodejs.org/api/streams](http://nodejs.org/api/streams.html "Stream") - -NOTE: I shall use the term "through stream" to refer to a stream that is writable and readable. - -###[simple example](https://github.com/dominictarr/event-stream/blob/master/examples/pretty.js): - -``` js - -//pretty.js - -if(!module.parent) { - var es = require('event-stream') - es.pipeline( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } -``` -run it ... - -``` bash -curl -sS registry.npmjs.org/event-stream | node pretty.js -``` - -[node Stream documentation](http://nodejs.org/api/streams.html) - -## through (write?, end?) - -Reemits data synchronously. Easy way to create syncronous through streams. -Pass in an optional `write` and `end` methods. They will be called in the -context of the stream. Use `this.pause()` and `this.resume()` to manage flow. -Check `this.paused` to see current flow state. (write always returns `!this.paused`) - -this function is the basis for most of the syncronous streams in `event-stream`. - -``` js - -es.through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) - -``` - -##map (asyncFunction) - -Create a through stream from an asyncronous function. - -``` js -var es = require('event-stream') - -es.map(function (data, callback) { - //transform data - // ... - callback(null, data) -}) - -``` - -Each map MUST call the callback. It may callback with data, with an error or with no arguments, - - * `callback()` drop this data. - this makes the map work like `filter`, - note:`callback(null,null)` is not the same, and will emit `null` - - * `callback(null, newData)` turn data into newData - - * `callback(error)` emit an error for this item. - ->Note: if a callback is not called, `map` will think that it is still being processed, ->every call must be answered or the stream will not know when to end. -> ->Also, if the callback is called more than once, every call but the first will be ignored. - -## mapSync (syncFunction) - -Same as `map`, but the callback is called synchronously. Based on `es.through` - -## split (matcher) - -Break up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` - -Example, read every line in a file ... - -``` js - es.pipeline( - fs.createReadStream(file, {flags: 'r'}), - es.split(), - es.map(function (line, cb) { - //do something with the line - cb(null, line) - }) - ) - -``` - -`split` takes the same arguments as `string.split` except it defaults to '\n' instead of ',', and the optional `limit` paremeter is ignored. -[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split) - -## join (seperator) - -create a through stream that emits `seperator` between each chunk, just like Array#join. - -(for legacy reasons, if you pass a callback instead of a string, join is a synonym for `es.wait`) - -## replace (from, to) - -Replace all occurences of `from` with `to`. `from` may be a `String` or a `RegExp`. -Works just like `string.split(from).join(to)`, but streaming. - - -## parse - -Convienience function for parsing JSON chunks. For newline seperated JSON, -use with `es.split` - -``` js -fs.createReadStream(filename) - .pipe(es.split()) //defaults to lines. - .pipe(es.parse()) -``` - -## stringify - -convert javascript objects into lines of text. The text will have whitespace escaped and have a `\n` appended, so it will be compatible with `es.parse` - -``` js -objectStream - .pipe(es.stringify()) - .pipe(fs.createWriteStream(filename)) -``` - -##readable (asyncFunction) - -create a readable stream (that respects pause) from an async function. -while the stream is not paused, -the function will be polled with `(count, callback)`, -and `this` will be the readable stream. - -``` js - -es.readable(function (count, callback) { - if(streamHasEnded) - return this.emit('end') - - //... - - this.emit('data', data) //use this way to emit multiple chunks per call. - - callback() // you MUST always call the callback eventually. - // the function will not be called again until you do this. -}) -``` -you can also pass the data and the error to the callback. -you may only call the callback once. -calling the same callback more than once will have no effect. - -##readArray (array) - -Create a readable stream from an Array. - -Just emit each item as a data event, respecting `pause` and `resume`. - -``` js - var es = require('event-stream') - , reader = es.readArray([1,2,3]) - - reader.pipe(...) -``` - -## writeArray (callback) - -create a writeable stream from a callback, -all `data` events are stored in an array, which is passed to the callback when the stream ends. - -``` js - var es = require('event-stream') - , reader = es.readArray([1, 2, 3]) - , writer = es.writeArray(function (err, array){ - //array deepEqual [1, 2, 3] - }) - - reader.pipe(writer) -``` - -## pipeline (stream1,...,streamN) - -Turn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream -and reads from the last stream. - -Listening for 'error' will recieve errors from all streams inside the pipe. - -> `connect` is an alias for `pipeline`. - -``` js - - es.pipeline( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) -``` - -## pause () - -A stream that buffers all chunks when paused. - - -``` js - var ps = es.pause() - ps.pause() //buffer the stream, also do not allow 'end' - ps.resume() //allow chunks through -``` - -## duplex (writeStream, readStream) - -Takes a writable stream and a readable stream and makes them appear as a readable writable stream. - -It is assumed that the two streams are connected to each other in some way. - -(This is used by `pipeline` and `child`.) - -``` js - var grep = cp.exec('grep Stream') - - es.duplex(grep.stdin, grep.stdout) -``` - -## child (child_process) - -Create a through stream from a child process ... - -``` js - var cp = require('child_process') - - es.child(cp.exec('grep Stream')) // a through stream - -``` - -## wait (callback) - -waits for stream to emit 'end'. -joins chunks of a stream into a single string. -takes an optional callback, which will be passed the -complete string when it receives the 'end' event. - -also, emits a simgle 'data' event. - -``` js - -readStream.pipe(es.join(function (err, text) { - // have complete text here. -})) - -``` - - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/connect.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/connect.asynct.js deleted file mode 100644 index 0ba0020..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/connect.asynct.js +++ /dev/null @@ -1,82 +0,0 @@ -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - -function makeExamplePipe() { - - return es.connect( - es.map(function (data, callback) { - callback(null, data * 2) - }), - es.map(function (data, callback) { - d.delay(callback)(null, data) - }), - es.map(function (data, callback) { - callback(null, data + 2) - })) -} - -exports['simple pipe'] = function (test) { - - var pipe = makeExamplePipe() - - pipe.on('data', function (data) { - it(data).equal(18) - test.done() - }) - - pipe.write(8) - -} - -exports['read array then map'] = function (test) { - - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - , first = es.readArray(readThis) - , read = [] - , pipe = - es.connect( - first, - es.map(function (data, callback) { - callback(null, {data: data}) - }), - es.map(function (data, callback) { - callback(null, {data: data}) - }), - es.writeArray(function (err, array) { - it(array).deepEqual(d.map(readThis, function (data) { - return {data: {data: data}} - })) - test.done() - }) - ) -} - -exports ['connect returns a stream'] = function (test) { - - var rw = - es.connect( - es.map(function (data, callback) { - callback(null, data * 2) - }), - es.map(function (data, callback) { - callback(null, data * 5) - }) - ) - - it(rw).has({readable: true, writable: true}) - - var array = [190, 24, 6, 7, 40, 57, 4, 6] - , _array = [] - , c = - es.connect( - es.readArray(array), - rw, - es.log('after rw:'), - es.writeArray(function (err, _array) { - it(_array).deepEqual(array.map(function (e) { return e * 10 })) - test.done() - }) - ) - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/merge.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/merge.asynct.js deleted file mode 100644 index 17fae5b..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/merge.asynct.js +++ /dev/null @@ -1,20 +0,0 @@ -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - -exports.merge = function (t) { - var odd = d.map(1, 3, 100, d.id) //array of multiples of 3 < 100 - var even = d.map(2, 4, 100, d.id) //array of multiples of 3 < 100 - - var r1 = es.readArray(even) - var r2 = es.readArray(odd) - - var writer = es.writeArray(function (err, array){ - if(err) throw err //unpossible - it(array.sort()).deepEqual(even.concat(odd).sort()) - t.done() - }) - - es.merge(r1, r2).pipe(writer) - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pause.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pause.asynct.js deleted file mode 100644 index 59d896f..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pause.asynct.js +++ /dev/null @@ -1,38 +0,0 @@ - -var es = require('../') - , it = require('it-is') - , d = require('ubelt') - -exports ['gate buffers when shut'] = function (test) { - - var hundy = d.map(1,100, d.id) - , gate = es.pause() - , ten = 10 - es.connect( - es.readArray(hundy), - es.log('after readArray'), - gate, - //es.log('after gate'), - es.map(function (num, next) { - //stick a map in here to check that gate never emits when open - it(gate.paused).equal(false) - console.log('data', num) - if(!--ten) { - console.log('PAUSE') - gate.pause()//.resume() - d.delay(gate.resume.bind(gate), 10)() - ten = 10 - } - - next(null, num) - }), - es.writeArray(function (err, array) { //just realized that I should remove the error param. errors will be emitted - console.log('eonuhoenuoecbulc') - it(array).deepEqual(hundy) - test.done() - }) - ) - - gate.resume() - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pipeline.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pipeline.asynct.js deleted file mode 100644 index c2af9d8..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/pipeline.asynct.js +++ /dev/null @@ -1,51 +0,0 @@ -var es = require('..') - -exports['do not duplicate errors'] = function (test) { - - var errors = 0; - var pipe = es.pipeline( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }) - ) - - pipe.on('error', function(err) { - errors++ - console.log('error count', errors) - process.nextTick(function () { - return test.done(); - }) - }) - - return pipe.write('meh'); - -} - -exports['3 pipe do not duplicate errors'] = function (test) { - - var errors = 0; - var pipe = es.pipeline( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }), - es.through() - ) - - pipe.on('error', function(err) { - errors++ - console.log('error count', errors) - process.nextTick(function () { - return test.done(); - }) - }) - - return pipe.write('meh'); - -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readArray.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readArray.asynct.js deleted file mode 100644 index 76585ee..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readArray.asynct.js +++ /dev/null @@ -1,88 +0,0 @@ - -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - -function readStream(stream, pauseAt, done) { - if(!done) done = pauseAt, pauseAt = -1 - var array = [] - stream.on('data', function (data) { - array.push(data) - if(!--pauseAt ) - stream.pause(), done(null, array) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -exports ['read an array'] = function (test) { - - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - - var reader = es.readArray(readThis) - - var writer = es.writeArray(function (err, array){ - if(err) throw err //unpossible - it(array).deepEqual(readThis) - test.done() - }) - - reader.pipe(writer) -} - -exports ['read an array and pause it.'] = function (test) { - - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - - var reader = es.readArray(readThis) - - readStream(reader, 10, function (err, data) { - if(err) throw err - it(data).deepEqual([3, 6, 9, 12, 15, 18, 21, 24, 27, 30]) - readStream(reader, 10, function (err, data) { - it(data).deepEqual([33, 36, 39, 42, 45, 48, 51, 54, 57, 60]) - test.done() - }) - reader.resume() - }) - -} - -exports ['reader is readable, but not writeable'] = function (test) { - var reader = es.readArray([1]) - it(reader).has({ - readable: true, - writable: false - }) - - test.done() -} - - -exports ['read one item per tick'] = function (test) { - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - var drains = 0 - var reader = es.readArray(readThis) - var tickMapper = es.map(function (data,callback) { - process.nextTick(function () { - callback(null, data) - }) - //since tickMapper is returning false - //pipe should pause the writer until a drain occurs - return false - }) - reader.pipe(tickMapper) - readStream(tickMapper, function (err, array) { - it(array).deepEqual(readThis) - it(array.length).deepEqual(readThis.length) - it(drains).equal(readThis.length) - test.done() - }) - tickMapper.on('drain', function () { - drains ++ - }) - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readable.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readable.asynct.js deleted file mode 100644 index 77d0039..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/readable.asynct.js +++ /dev/null @@ -1,167 +0,0 @@ - -var es = require('../') - , it = require('it-is').style('colour') - , u = require('ubelt') - -exports ['read an array'] = function (test) { - - var readThis = u.map(3, 6, 100, u.id) //array of multiples of 3 < 100 - - var reader = - es.readable(function (i, callback) { - if(i >= readThis.length) - return this.emit('end') - callback(null, readThis[i]) - }) - - var writer = es.writeArray(function (err, array){ - if(err) throw err - it(array).deepEqual(readThis) - test.done() - }) - - reader.pipe(writer) -} - -exports ['read an array - async'] = function (test) { - - var readThis = u.map(3, 6, 100, u.id) //array of multiples of 3 < 100 - - var reader = - es.readable(function (i, callback) { - if(i >= readThis.length) - return this.emit('end') - u.delay(callback)(null, readThis[i]) - }) - - var writer = es.writeArray(function (err, array){ - if(err) throw err - it(array).deepEqual(readThis) - test.done() - }) - - reader.pipe(writer) -} - - -exports ['emit data then call next() also works'] = function (test) { - - var readThis = u.map(3, 6, 100, u.id) //array of multiples of 3 < 100 - - var reader = - es.readable(function (i, next) { - if(i >= readThis.length) - return this.emit('end') - this.emit('data', readThis[i]) - next() - }) - - var writer = es.writeArray(function (err, array){ - if(err) throw err - it(array).deepEqual(readThis) - test.done() - }) - - reader.pipe(writer) -} - - -exports ['callback emits error, then stops'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , called = 0 - - var reader = - es.readable(function (i, callback) { - if(called++) - return - callback(err) - }) - - reader.on('error', function (_err){ - it(_err).deepEqual(err) - u.delay(function() { - it(called).equal(1) - test.done() - }, 50)() - }) -} - -exports['readable does not call read concurrently'] = function (test) { - - var current = 0 - var source = es.readable(function(count, cb){ - current ++ - if(count > 100) - return this.emit('end') - u.delay(function(){ - current -- - it(current).equal(0) - cb(null, {ok: true, n: count}); - })(); - }); - - var destination = es.map(function(data, cb){ - //console.info(data); - cb(); - }); - - var all = es.connect(source, destination); - - destination.on('end', test.done) -} - - -// -// emitting multiple errors is not supported by stream. -// -// I do not think that this is a good idea, at least, there should be an option to pipe to -// continue on error. it makes alot ef sense, if you are using Stream like I am, to be able to emit multiple errors. -// an error might not necessarily mean the end of the stream. it depends on the error, at least. -// -// I will start a thread on the mailing list. I'd rather that than use a custom `pipe` implementation. -// -// basically, I want to be able use pipe to transform objects, and if one object is invalid, -// the next might still be good, so I should get to choose if it's gonna stop. -// re-enstate this test when this issue progresses. -// -// hmm. I could add this to es.connect by deregistering the error listener, -// but I would rather it be an option in core. - -/* -exports ['emit multiple errors, with 2nd parameter (continueOnError)'] = function (test) { - - var readThis = d.map(1, 100, d.id) - , errors = 0 - var reader = - es.readable(function (i, callback) { - console.log(i, readThis.length) - if(i >= readThis.length) - return this.emit('end') - if(!(readThis[i] % 7)) - return callback(readThis[i]) - callback(null, readThis[i]) - }, true) - - var writer = es.writeArray(function (err, array) { - if(err) throw err - it(array).every(function (u){ - it(u % 7).notEqual(0) - }).property('length', 80) - it(errors).equal(14) - test.done() - }) - - reader.on('error', function (u) { - errors ++ - console.log(u) - if('number' !== typeof u) - throw u - - it(u % 7).equal(0) - - }) - - reader.pipe(writer) -} -*/ diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/replace.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/replace.asynct.js deleted file mode 100644 index 7fabf6e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/replace.asynct.js +++ /dev/null @@ -1,50 +0,0 @@ -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - , spec = require('stream-spec') - -var next = process.nextTick - -var fizzbuzz = '12F4BF78FB11F1314FB1617F19BF2223FB26F2829FB3132F34BF3738FB41F4344FB4647F49BF5253FB56F5859FB6162F64BF6768FB71F7374FB7677F79BF8283FB86F8889FB9192F94BF9798FB' - , fizz7buzz = '12F4BFseven8FB11F1314FB161sevenF19BF2223FB26F2829FB3132F34BF3seven38FB41F4344FB464sevenF49BF5253FB56F5859FB6162F64BF6seven68FBseven1Fseven3seven4FBseven6sevensevenFseven9BF8283FB86F8889FB9192F94BF9seven98FB' - -exports ['fizz buzz'] = function (test) { - - var readThis = d.map(1, 100, function (i) { - return ( - ! (i % 3 || i % 5) ? "FB" : - !(i % 3) ? "F" : - !(i % 5) ? "B" : - ''+i - ) - }) //array of multiples of 3 < 100 - - var reader = es.readArray(readThis) - var join = es.wait(function (err, string){ - it(string).equal(fizzbuzz) - test.done() - }) - reader.pipe(join) - -} - - -exports ['fizz buzz replace'] = function (test) { - var split = es.split(/(1)/) - var replace = es.replace('7', 'seven') - var x = spec(replace).through() - split - .pipe(replace) - .pipe(es.join(function (err, string) { - it(string).equal(fizz7buzz) - })) - - replace.on('close', function () { - x.validate() - test.done() - }) - - split.write(fizzbuzz) - split.end() - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/simple-map.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/simple-map.asynct.js deleted file mode 100644 index 4786faa..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/simple-map.asynct.js +++ /dev/null @@ -1,342 +0,0 @@ -'use strict'; - -var es = require('../') - , it = require('it-is') - , u = require('ubelt') - , spec = require('stream-spec') - , Stream = require('stream') - , from = require('from') - , through = require('through') - -//REFACTOR THIS TEST TO USE es.readArray and es.writeArray - -function writeArray(array, stream) { - - array.forEach( function (j) { - stream.write(j) - }) - stream.end() - -} - -function readStream(stream, done) { - - var array = [] - stream.on('data', function (data) { - array.push(data) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -//call sink on each write, -//and complete when finished. - -function pauseStream (prob, delay) { - var pauseIf = ( - 'number' == typeof prob - ? function () { - return Math.random() < prob - } - : 'function' == typeof prob - ? prob - : 0.1 - ) - var delayer = ( - !delay - ? process.nextTick - : 'number' == typeof delay - ? function (next) { setTimeout(next, delay) } - : delay - ) - - return es.through(function (data) { - if(!this.paused && pauseIf()) { - console.log('PAUSE STREAM PAUSING') - this.pause() - var self = this - delayer(function () { - console.log('PAUSE STREAM RESUMING') - self.resume() - }) - } - console.log("emit ('data', " + data + ')') - this.emit('data', data) - }) -} - -exports ['simple map'] = function (test) { - - var input = u.map(1, 1000, function () { - return Math.random() - }) - var expected = input.map(function (v) { - return v * 2 - }) - - var pause = pauseStream(0.1) - var fs = from(input) - var ts = es.writeArray(function (err, ar) { - it(ar).deepEqual(expected) - test.done() - }) - var map = es.through(function (data) { - this.emit('data', data * 2) - }) - - spec(map).through().validateOnExit() - spec(pause).through().validateOnExit() - - fs.pipe(map).pipe(pause).pipe(ts) -} - -exports ['simple map applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - - var doubler = es.map(function (data, cb) { - cb(null, data * 2) - }) - - spec(doubler).through().validateOnExit() - - //a map is only a middle man, so it is both readable and writable - - it(doubler).has({ - readable: true, - writable: true, - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) -// process.nextTick(x.validate) - test.done() - }) - - writeArray(input, doubler) - -} - -exports['pipe two maps together'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - function dd (data, cb) { - cb(null, data * 2) - } - var doubler1 = es.map(dd), doubler2 = es.map(dd) - - doubler1.pipe(doubler2) - - spec(doubler1).through().validateOnExit() - spec(doubler2).through().validateOnExit() - - readStream(doubler2, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 4 - })) - test.done() - }) - - writeArray(input, doubler1) - -} - -//next: -// -// test pause, resume and drian. -// - -// then make a pipe joiner: -// -// plumber (evStr1, evStr2, evStr3, evStr4, evStr5) -// -// will return a single stream that write goes to the first - -exports ['map will not call end until the callback'] = function (test) { - - var ticker = es.map(function (data, cb) { - process.nextTick(function () { - cb(null, data * 2) - }) - }) - - spec(ticker).through().validateOnExit() - - ticker.write('x') - ticker.end() - - ticker.on('end', function () { - test.done() - }) -} - - -exports ['emit error thrown'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - es.map(function () { - throw err - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - -// onExit(spec(mapper).basic().validate) -//need spec that says stream may error. - - mapper.write('hello') - -} - -exports ['emit error calledback'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - es.map(function (data, callback) { - callback(err) - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['do not emit drain if not paused'] = function (test) { - - var map = es.map(function (data, callback) { - u.delay(callback)(null, 1) - return true - }) - - spec(map).through().pausable().validateOnExit() - - map.on('drain', function () { - it(false).ok('should not emit drain unless the stream is paused') - }) - - it(map.write('hello')).equal(true) - it(map.write('hello')).equal(true) - it(map.write('hello')).equal(true) - setTimeout(function () {map.end()},10) - map.on('end', test.done) -} - -exports ['emits drain if paused, when all '] = function (test) { - var active = 0 - var drained = false - var map = es.map(function (data, callback) { - active ++ - u.delay(function () { - active -- - callback(null, 1) - })() - console.log('WRITE', false) - return false - }) - - spec(map).through().validateOnExit() - - map.on('drain', function () { - drained = true - it(active).equal(0, 'should emit drain when all maps are done') - }) - - it(map.write('hello')).equal(false) - it(map.write('hello')).equal(false) - it(map.write('hello')).equal(false) - - process.nextTick(function () {map.end()},10) - - map.on('end', function () { - console.log('end') - it(drained).ok('shoud have emitted drain before end') - test.done() - }) - -} - -exports ['map applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = es.map(function (data, callback) { - if (data % 2) - callback(null, data * 2) - else - callback() - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - -exports ['simple mapSync applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = es.mapSync(function (data) { - return data * 2 - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - -exports ['mapSync applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = es.mapSync(function (data) { - if (data % 2) - return data * 2 - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/spec.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/spec.asynct.js deleted file mode 100644 index 516dbf4..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/spec.asynct.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - assert that data is called many times - assert that end is called eventually - - assert that when stream enters pause state, - on drain is emitted eventually. -*/ - -var es = require('..') -var it = require('it-is').style('colour') -var spec = require('stream-spec') - -exports['simple stream'] = function (test) { - - var stream = es.through() - var x = spec(stream).basic().pausable() - - stream.write(1) - stream.write(1) - stream.pause() - stream.write(1) - stream.resume() - stream.write(1) - stream.end(2) //this will call write() - - process.nextTick(function (){ - x.validate() - test.done() - }) -} - -exports['throw on write when !writable'] = function (test) { - - var stream = es.through() - var x = spec(stream).basic().pausable() - - stream.write(1) - stream.write(1) - stream.end(2) //this will call write() - stream.write(1) //this will be throwing..., but the spec will catch it. - - process.nextTick(function () { - x.validate() - test.done() - }) - -} - -exports['end fast'] = function (test) { - - var stream = es.through() - var x = spec(stream).basic().pausable() - - stream.end() //this will call write() - - process.nextTick(function () { - x.validate() - test.done() - }) - -} - - -/* - okay, that was easy enough, whats next? - - say, after you call paused(), write should return false - until resume is called. - - simple way to implement this: - write must return !paused - after pause() paused = true - after resume() paused = false - - on resume, if !paused drain is emitted again. - after drain, !paused - - there are lots of subtle ordering bugs in streams. - - example, set !paused before emitting drain. - - the stream api is stateful. -*/ - - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/split.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/split.asynct.js deleted file mode 100644 index a0ce4b2..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/split.asynct.js +++ /dev/null @@ -1,46 +0,0 @@ -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - , join = require('path').join - , fs = require('fs') - , Stream = require('stream').Stream - , spec = require('stream-spec') - -exports ['es.split() works like String#split'] = function (test) { - var readme = join(__filename) - , expected = fs.readFileSync(readme, 'utf-8').split('\n') - , cs = es.split() - , actual = [] - , ended = false - , x = spec(cs).through() - - var a = new Stream () - - a.write = function (l) { - actual.push(l.trim()) - } - a.end = function () { - - ended = true - expected.forEach(function (v,k) { - //String.split will append an empty string '' - //if the string ends in a split pattern. - //es.split doesn't which was breaking this test. - //clearly, appending the empty string is correct. - //tests are passing though. which is the current job. - if(v) - it(actual[k]).like(v) - }) - //give the stream time to close - process.nextTick(function () { - test.done() - x.validate() - }) - } - a.writable = true - - fs.createReadStream(readme, {flags: 'r'}).pipe(cs) - cs.pipe(a) - -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/stringify.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/stringify.js deleted file mode 100644 index a77887b..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/stringify.js +++ /dev/null @@ -1,14 +0,0 @@ - - - -var es = require('../') - -exports['handle buffer'] = function (t) { - - - es.stringify().on('data', function (d) { - t.equal(d.trim(), JSON.stringify('HELLO')) - t.end() - }).write(new Buffer('HELLO')) - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/writeArray.asynct.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/writeArray.asynct.js deleted file mode 100644 index f09fea2..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/event-stream/test/writeArray.asynct.js +++ /dev/null @@ -1,30 +0,0 @@ - -var es = require('../') - , it = require('it-is').style('colour') - , d = require('ubelt') - -exports ['write an array'] = function (test) { - - var readThis = d.map(3, 6, 100, d.id) //array of multiples of 3 < 100 - - var writer = es.writeArray(function (err, array){ - if(err) throw err //unpossible - it(array).deepEqual(readThis) - test.done() - }) - - d.each(readThis, writer.write.bind(writer)) - writer.end() - -} - - -exports ['writer is writable, but not readable'] = function (test) { - var reader = es.writeArray(function () {}) - it(reader).has({ - readable: false, - writable: true - }) - - test.done() -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.npmignore b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.npmignore deleted file mode 100644 index ee88966..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.npmignore +++ /dev/null @@ -1 +0,0 @@ -assets/ diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.travis.yml b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.travis.yml deleted file mode 100644 index 84fd7ca..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/README.md b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/README.md deleted file mode 100644 index 6cd71ba..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# tap-stream [![Build Status](https://secure.travis-ci.org/thlorenz/tap-stream.png)](http://travis-ci.org/thlorenz/tap-stream) - -Taps a nodejs stream and logs the data that's coming through. - - npm install tap-stream - -Given an [object stream](#object-stream) we can print out objects passing through and control the detail via the -depth parameter: - -```javascript -objectStream().pipe(tap(0)); -``` - -![depth0](https://github.com/thlorenz/tap-stream/raw/master/assets/depth0.png) - -```javascript -objectStream().pipe(tap(1)); -``` - -![depth1](https://github.com/thlorenz/tap-stream/raw/master/assets/depth1.png) - -``` -objectStream().pipe(tap(2)); -``` - -![depth2](https://github.com/thlorenz/tap-stream/raw/master/assets/depth2.png) - -For even more control a custom log function may be supplied: - -```javascript -objectStream() - .pipe(tap(function customLog (data) { - var nest = data.nest; - console.log ('Bird: %s, id: %s, age: %s, layed egg: %s', nest.name, data.id, nest.age, nest.egg !== undefined); - }) - ); -``` - -```text -Bird: yellow rumped warbler, id: 0, age: 1, layed egg: true -Bird: yellow rumped warbler, id: 1, age: 1, layed egg: true -``` - -## API - -### tap( [ depth | log ] ) - -Intercepts the stream and logs data that is passing through. - -- optional parameter is either a `Number` or a `Function` -- if no parameter is given, `depth` defaults to `0` and `log` to `console.log(util.inspect(..))` - -- `depth` controls the `depth` with which - [util.inspect](http://nodejs.org/api/util.html#util_util_inspect_object_showhidden_depth_colors) is called -- `log` replaces the default logging function with a custom one - -**Example:** - -```javascript -var tap = require('tap-stream'); - -myStream - .pipe(tap(1)) // log intermediate results - .pipe(..) // continute manipulating the data -``` - -## Object stream - -Included in order to give context for above examples. - -```javascript -function objectStream () { - var s = new Stream() - , objects = 0; - - var iv = setInterval( - function () { - s.emit('data', { - id: objects - , created: new Date() - , nest: { - name: 'yellow rumped warbler' - , age: 1 - , egg: { name: 'unknown' , age: 0 } - } - } - , 4 - ); - - if (++objects === 2) { - s.emit('end'); - clearInterval(iv); - } - } - , 200); - return s; -} -``` diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/examples/tap-nested-objects.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/examples/tap-nested-objects.js deleted file mode 100644 index 97aa578..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/examples/tap-nested-objects.js +++ /dev/null @@ -1,38 +0,0 @@ -var Stream = require('stream') - , tap = require('..'); - -function objectStream () { - var s = new Stream() - , objects = 0; - - var iv = setInterval( - function () { - s.emit('data', { - id: objects - , created: new Date() - , nest: { - name: 'yellow rumped warbler' - , age: 1 - , egg: { name: 'unknown' , age: 0 } - } - } - ); - - if (++objects === 2) { - s.emit('end'); - clearInterval(iv); - } - } - , 200); - return s; -} - -objectStream().pipe(tap(2)); - -objectStream() - .pipe(tap(function customLog (data) { - var nest = data.nest; - console.log ('Bird: %s, id: %s, age: %s, layed egg: %s', nest.name, data.id, nest.age, nest.egg !== undefined); - }) - ); - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/index.js deleted file mode 100644 index a541dfe..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/index.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -var util = require('util') - , through = require('through') - , toString = Object.prototype.toString - , slice = Array.prototype.slice; - -function blowup () { - throw new Error('Argument to streamTap needs to be either Number for depth or a log Function'); -} - -function defaultLog (depth) { - function log (data) { - console.log(util.inspect(data, false, depth, true)); - } - - return function (data) { - if (arguments.length === 1) { - log(data); - } else { - slice.call(arguments).forEach(log); - } - }; -} - -// invoke three ways: -// tap () -// tap (depth) -// tap (log) -function tap (arg0) { - var log; - - if (!arguments.length) { - log = defaultLog(1); - } else { - - if (toString.call(arg0) === '[object Number]' ) { - log = defaultLog(arg0); - } else if (toString.call(arg0) === '[object Function]' ) { - log = arg0; - } else { - blowup(); - } - - } - - return through( - function write (data) { - log(data); - this.emit('data', data); - } - ); - -} - -module.exports = tap; diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/.travis.yml b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.APACHE2 b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.APACHE2 deleted file mode 100644 index 6366c04..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.MIT b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.MIT deleted file mode 100644 index 6eafbd7..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/index.js deleted file mode 100644 index 7072b37..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/index.js +++ /dev/null @@ -1,100 +0,0 @@ -var Stream = require('stream') - -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) - - - -exports = module.exports = through -through.through = through - -//create a readable writable stream. - -function through (write, end) { - write = write || function (data) { this.emit('data', data) } - end = end || function () { this.emit('end') } - - var ended = false, destroyed = false - var stream = new Stream(), buffer = [] - stream.buffer = buffer - stream.readable = stream.writable = true - stream.paused = false - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } - - function drain() { - while(buffer.length && !stream.paused) { - var data = buffer.shift() - if(null === data) - return stream.emit('end') - else - stream.emit('data', data) - } - } - - stream.queue = function (data) { - buffer.push(data) - drain() - } - - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - //this is only a problem if end is not emitted synchronously. - //a nicer way to do this is to make sure this is the last listener for 'end' - - stream.on('end', function () { - stream.readable = false - if(!stream.writable) - process.nextTick(function () { - stream.destroy() - }) - }) - - function _end () { - stream.writable = false - end.call(stream) - if(!stream.readable) - stream.destroy() - } - - stream.end = function (data) { - if(ended) return - //this breaks, because pipe doesn't check writable before calling end. - //throw new Error('cannot call end twice') - ended = true - if(arguments.length) stream.write(data) - if(!buffer.length) _end() - } - - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - buffer.length = 0 - stream.writable = stream.readable = false - stream.emit('close') - } - - stream.pause = function () { - if(stream.paused) return - stream.paused = true - stream.emit('pause') - } - stream.resume = function () { - if(stream.paused) { - stream.paused = false - } - drain() - //may have become paused again, - //as drain emits 'data'. - if(!stream.paused) - stream.emit('drain') - } - return stream -} - diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/package.json deleted file mode 100644 index 168247e..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "through", - "version": "1.1.0", - "description": "simplified stream contruction", - "main": "index.js", - "scripts": { - "test": "asynct test/*.js" - }, - "devDependencies": { - "stream-spec": "0", - "assertions": "2", - "asynct": "1" - }, - "keywords": [ - "stream", - "streams", - "user-streams", - "pipe" - ], - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/dominictarr/through.git" - }, - "homepage": "http://github.com/dominictarr/through", - "readme": "#through\n\n[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through)\n\nEasy way to create a `Stream` that is both `readable` and `writable`. Pass in optional `write` and `end` methods. `through` takes care of pause/resume logic.\nUse `this.pause()` and `this.resume()` to manage flow.\nCheck `this.paused` to see current flow state. (write always returns `!this.paused`)\n\nthis function is the basis for most of the syncronous streams in [event-stream](http://github.com/dominictarr/event-stream).\n\n``` js\nvar through = require('through')\n\nthrough(function write(data) {\n this.emit('data', data)\n //this.pause() \n },\n function end () { //optional\n this.emit('end')\n })\n\n```\n\nor, with buffering on pause, use `this.queue(data)`,\ndata *cannot* be `null`. `this.queue(null)` will emit 'end'\nwhen it gets to the `null` element.\n\n``` js\nvar through = require('through')\n\nthrough(function write(data) {\n this.queue(data)\n //this.pause() \n },\n function end () { //optional\n this.queue(null)\n })\n\n```\n\n\n## License\n\nMIT / Apache2\n", - "_id": "through@1.1.0", - "_from": "through@~1.1.0" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/readme.markdown b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/readme.markdown deleted file mode 100644 index 1b687e9..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/readme.markdown +++ /dev/null @@ -1,44 +0,0 @@ -#through - -[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through) - -Easy way to create a `Stream` that is both `readable` and `writable`. Pass in optional `write` and `end` methods. `through` takes care of pause/resume logic. -Use `this.pause()` and `this.resume()` to manage flow. -Check `this.paused` to see current flow state. (write always returns `!this.paused`) - -this function is the basis for most of the syncronous streams in [event-stream](http://github.com/dominictarr/event-stream). - -``` js -var through = require('through') - -through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) - -``` - -or, with buffering on pause, use `this.queue(data)`, -data *cannot* be `null`. `this.queue(null)` will emit 'end' -when it gets to the `null` element. - -``` js -var through = require('through') - -through(function write(data) { - this.queue(data) - //this.pause() - }, - function end () { //optional - this.queue(null) - }) - -``` - - -## License - -MIT / Apache2 diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/buffering.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/buffering.js deleted file mode 100644 index 1ce4b0d..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/buffering.js +++ /dev/null @@ -1,37 +0,0 @@ -var through = require('..') - -// must emit end before close. - -exports['buffering'] = function (t) { - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - t.deepEqual(actual, [1, 2, 3]) - ts.pause() - ts.write(4) - ts.write(5) - ts.write(6) - t.deepEqual(actual, [1, 2, 3]) - ts.resume() - t.deepEqual(actual, [1, 2, 3, 4, 5, 6]) - ts.pause() - ts.end() - t.ok(!ended) - ts.resume() - t.ok(ended) - t.end() - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/end.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/end.js deleted file mode 100644 index 280da0a..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/end.js +++ /dev/null @@ -1,27 +0,0 @@ -var through = require('..') - -// must emit end before close. - -exports['end before close'] = function (t) { - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - t.ok(!closed) - ended = true - }) - ts.on('close', function () { - t.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - t.ok(ended) - t.ok(closed) - - t.end() - -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/index.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/index.js deleted file mode 100644 index 25a6ea7..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/node_modules/through/test/index.js +++ /dev/null @@ -1,113 +0,0 @@ - -var spec = require('stream-spec') -var through = require('..') -var a = require('assertions') - -/* - I'm using these two functions, and not streams and pipe - so there is less to break. if this test fails it must be - the implementation of _through_ -*/ - -function write(array, stream) { - array = array.slice() - function next() { - while(array.length) - if(stream.write(array.shift()) === false) - return stream.once('drain', next) - - stream.end() - } - - next() -} - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -exports['simple defaults'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through() - spec(t) - .through() - .pausable() - .validateOnExit() - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - - write(expected, t) -} - -exports['simple functions'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through(function (data) { - this.emit('data', data*2) - }) - spec(t) - .through() - .pausable() - .validateOnExit() - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected.map(function (data) { - return data*2 - })) - test.done() - }) - - write(expected, t) -} -exports['pauses'] = function (test) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l) //Math.random()) - - var t = through() - spec(t) - .through() - .pausable() - .validateOnExit() - - t.on('data', function () { - if(Math.random() > 0.1) return - t.pause() - process.nextTick(function () { - t.resume() - }) - }) - - read(t, function (err, actual) { - if(err) test.error(err) //fail - a.deepEqual(actual, expected) - test.done() - }) - - write(expected, t) -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/package.json deleted file mode 100644 index 8040579..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "tap-stream", - "version": "0.1.0", - "author": { - "name": "Thorsten Lorenz", - "email": "thlorenz@gmx.de", - "url": "http://thlorenz.com" - }, - "description": "Taps a nodejs stream and logs the data that's coming through.", - "main": "index.js", - "directories": { - "test": "test" - }, - "scripts": { - "test": "tap ./test/*.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/thlorenz/tap-stream.git" - }, - "keywords": [ - "stream", - "streams", - "log", - "print", - "inspect" - ], - "license": "BSD", - "dependencies": { - "through": "~1.1.0" - }, - "devDependencies": { - "tap": "~0.3.1" - }, - "readme": "# tap-stream [![Build Status](https://secure.travis-ci.org/thlorenz/tap-stream.png)](http://travis-ci.org/thlorenz/tap-stream)\n\nTaps a nodejs stream and logs the data that's coming through.\n\n npm install tap-stream\n\nGiven an [object stream](#object-stream) we can print out objects passing through and control the detail via the\ndepth parameter:\n\n```javascript\nobjectStream().pipe(tap(0));\n```\n\n![depth0](https://github.com/thlorenz/tap-stream/raw/master/assets/depth0.png)\n\n```javascript\nobjectStream().pipe(tap(1));\n```\n\n![depth1](https://github.com/thlorenz/tap-stream/raw/master/assets/depth1.png)\n\n```\nobjectStream().pipe(tap(2));\n```\n\n![depth2](https://github.com/thlorenz/tap-stream/raw/master/assets/depth2.png)\n\nFor even more control a custom log function may be supplied:\n\n```javascript\nobjectStream()\n .pipe(tap(function customLog (data) {\n var nest = data.nest;\n console.log ('Bird: %s, id: %s, age: %s, layed egg: %s', nest.name, data.id, nest.age, nest.egg !== undefined);\n })\n );\n```\n\n```text\nBird: yellow rumped warbler, id: 0, age: 1, layed egg: true\nBird: yellow rumped warbler, id: 1, age: 1, layed egg: true\n```\n\n## API\n\n### tap( [ depth | log ] )\n\nIntercepts the stream and logs data that is passing through.\n\n- optional parameter is either a `Number` or a `Function`\n- if no parameter is given, `depth` defaults to `0` and `log` to `console.log(util.inspect(..))`\n\n- `depth` controls the `depth` with which\n [util.inspect](http://nodejs.org/api/util.html#util_util_inspect_object_showhidden_depth_colors) is called\n- `log` replaces the default logging function with a custom one\n\n**Example:**\n\n```javascript\nvar tap = require('tap-stream');\n\nmyStream\n .pipe(tap(1)) // log intermediate results\n .pipe(..) // continute manipulating the data\n```\n\n## Object stream\n\nIncluded in order to give context for above examples.\n\n```javascript\nfunction objectStream () {\n var s = new Stream()\n , objects = 0;\n \n var iv = setInterval(\n function () {\n s.emit('data', { \n id: objects\n , created: new Date()\n , nest: { \n name: 'yellow rumped warbler'\n , age: 1\n , egg: { name: 'unknown' , age: 0 }\n } \n }\n , 4\n );\n\n if (++objects === 2) {\n s.emit('end');\n clearInterval(iv);\n }\n }\n , 200);\n return s;\n}\n```\n", - "_id": "tap-stream@0.1.0", - "_from": "tap-stream@~0.1.0" -} diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/test/tap-stream.js b/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/test/tap-stream.js deleted file mode 100644 index b484fcb..0000000 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/examples/node_modules/tap-stream/test/tap-stream.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; -/*jshint asi: true */ - -var test = require('tap').test - , Stream = require('stream') - , tap = require('..') - , through = require('through'); - -function objectStream () { - var s = new Stream() - , objects = 0; - - var iv = setInterval( - function () { - s.emit('data', { id: objects, created: new Date() }); - - if (++objects === 2) { - s.emit('end'); - clearInterval(iv); - } - } - , 20); - return s; -} - -test('tapping object stream that emits 2 objects', function (t) { - var logged = [] - , piped = []; - - function log (data) { - logged.push(data); - } - - t.plan(4); - - objectStream() - .pipe(tap(log)) - .pipe(through( - function write (data) { - piped.push(data); - this.emit('data', data); - } - , function end (data) { - - t.equals(0, logged[0].id, 'logs first item'); - t.equals(1, logged[1].id, 'logs second item'); - - t.equals(0, piped[0].id, 'pipes first item'); - t.equals(1, piped[1].id, 'pipes second item'); - - t.end(); - - this.emit('end'); - } - )) -}) - -/* The below doesn't work since pipe only writes one argument: - * https://github.com/joyent/node/blob/master/lib/stream.js#L36 - * - * Since it uses EventEmitter whose 'emit' supports multiple args, this may change in the future - I hope so. - * Until then ... - */ -var onDataInsidePipeWritesMultipleArgs = false; - -if (! onDataInsidePipeWritesMultipleArgs) return; - -function numberStream () { - var s = new Stream(); - - setTimeout( - function () { - s.emit('data', 1, 2); - s.emit('end'); - } - , 20); - return s; -} - -test('tapping stream that emits a number and a string one time', function (t) { - var logged = [] - , piped = []; - - function log (n1, n2) { - logged.push({ n1: n1, n2: n2 }); - } - - t.plan(2); - - numberStream() - .pipe(tap(log)) - .pipe(through( - function write (n1, n2) { - piped.push({ n1: n1, n2: n2 }); - } - , function end () { - t.equals({ n1: 1, n2: 2 }, logged[0], 'logs both numbers'); - t.equals({ n1: 1, n2: 2 }, piped[0], 'pipes both numbers'); - t.end(); - - this.emit('end'); - } - )) -}) diff --git a/node_modules/jade/node_modules/monocle/node_modules/readdirp/package.json b/node_modules/jade/node_modules/monocle/node_modules/readdirp/package.json index 4503a75..54b76aa 100644 --- a/node_modules/jade/node_modules/monocle/node_modules/readdirp/package.json +++ b/node_modules/jade/node_modules/monocle/node_modules/readdirp/package.json @@ -45,5 +45,9 @@ "url": "https://github.com/thlorenz/readdirp/issues" }, "_id": "readdirp@0.2.5", - "_from": "readdirp@~0.2.3" + "_from": "readdirp@0.2.5", + "dist": { + "shasum": "16eb6a645183034d66c990d612cfb0b0542610fe" + }, + "_resolved": "https://registry.npmjs.org/readdirp/-/readdirp-0.2.5.tgz" } diff --git a/node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/package.json b/node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/package.json index 7a42806..e51e457 100644 --- a/node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/package.json +++ b/node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-parse/package.json @@ -20,7 +20,7 @@ "readmeFilename": "Readme.md", "_id": "css-parse@1.0.4", "dist": { - "shasum": "425c01ffc43dc7260ea08d59f8e8b033045ec49b" + "shasum": "60fad97bf9ddc739ef40c16aab74edd002611680" }, "_from": "css-parse@1.0.4", "_resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz" diff --git a/node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/package.json b/node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/package.json index 50f70db..5b2b089 100644 --- a/node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/package.json +++ b/node_modules/jade/node_modules/transformers/node_modules/css/node_modules/css-stringify/package.json @@ -20,9 +20,5 @@ "readme": "\n# css-stringify\n\n CSS compiler using the AST provided by [css-parse](https://github.com/visionmedia/css-parse).\n\n## Performance\n\n Formats 15,000 lines of CSS (2mb) in 23ms on my macbook air.\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", "readmeFilename": "Readme.md", "_id": "css-stringify@1.0.5", - "dist": { - "shasum": "4147fc77d3a2b4642eb46d45d6faab23d942609f" - }, - "_from": "css-stringify@1.0.5", - "_resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz" + "_from": "css-stringify@1.0.5" } diff --git a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md index 98b90d5..3796e07 100644 --- a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md +++ b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 0.1.32 + +* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns + (issue 92). + +* Fixed test runner to actually report number of failed tests as its process + exit code. + +* Fixed a typo when reporting bad mappings (issue 87). + ## 0.1.31 * Delay parsing the mappings in SourceMapConsumer until queried for a source @@ -109,4 +119,3 @@ ## 0.1.10 * Added sourcesContent support to the customer and generator. - diff --git a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js index a3b9dc0..d7f10d8 100644 --- a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js +++ b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js @@ -257,6 +257,7 @@ define(function (require, exports, module) { } } + this.__generatedMappings.sort(util.compareByGeneratedPositions); this.__originalMappings.sort(util.compareByOriginalPositions); }; diff --git a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js index 48ead7d..88b06ec 100644 --- a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js +++ b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js @@ -252,7 +252,7 @@ define(function (require, exports, module) { throw new Error('Invalid mapping: ' + JSON.stringify({ generated: aGenerated, source: aSource, - orginal: aOriginal, + original: aOriginal, name: aName })); } diff --git a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json index bca411d..8caf15c 100644 --- a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json +++ b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json @@ -32,6 +32,5 @@ "url": "https://github.com/jrburke/amdefine/issues" }, "_id": "amdefine@0.1.0", - "_from": "amdefine@>=0.0.4", - "scripts": {} + "_from": "amdefine@>=0.0.4" } diff --git a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/package.json b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/package.json index f59e820..0284e47 100644 --- a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/package.json +++ b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/package.json @@ -1,7 +1,7 @@ { "name": "source-map", "description": "Generates and consumes source maps", - "version": "0.1.31", + "version": "0.1.32", "homepage": "https://github.com/mozilla/source-map", "author": { "name": "Nick Fitzgerald", @@ -71,6 +71,14 @@ { "name": "Heather Arthur", "email": "fayearthur@gmail.com" + }, + { + "name": "Hugh Kennedy", + "email": "hughskennedy@gmail.com" + }, + { + "name": "David Glasser", + "email": "glasser@davidglasser.net" } ], "repository": { @@ -105,6 +113,10 @@ "bugs": { "url": "https://github.com/mozilla/source-map/issues" }, - "_id": "source-map@0.1.31", - "_from": "source-map@~0.1.7" + "_id": "source-map@0.1.32", + "dist": { + "shasum": "f36d77ab5bfe0111a4d709fdbb89b106c86ed50f" + }, + "_from": "source-map@~0.1.7", + "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz" } diff --git a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/run-tests.js b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/run-tests.js index 626c53f..64a7c3a 100644 --- a/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/run-tests.js +++ b/node_modules/jade/node_modules/transformers/node_modules/uglify-js/node_modules/source-map/test/run-tests.js @@ -11,7 +11,6 @@ var path = require('path'); var util = require('./source-map/util'); function run(tests) { - var failures = []; var total = 0; var passed = 0; @@ -31,22 +30,13 @@ function run(tests) { } } - console.log(""); + console.log(''); console.log(passed + ' / ' + total + ' tests passed.'); - console.log(""); + console.log(''); - failures.forEach(function (f) { - }); - - return failures.length; + return total - passed; } -var code; - -process.stdout.on('close', function () { - process.exit(code); -}); - function isTestFile(f) { var testToRun = process.argv[2]; return testToRun @@ -62,10 +52,11 @@ var requires = fs.readdirSync(path.join(__dirname, 'source-map')) .filter(isTestFile) .map(toModule); -code = run(requires.map(require).map(function (mod, i) { +var code = run(requires.map(require).map(function (mod, i) { return { name: requires[i], testCase: mod }; })); + process.exit(code); diff --git a/node_modules/jade/node_modules/transformers/package.json b/node_modules/jade/node_modules/transformers/package.json index 2403b80..5dd5400 100644 --- a/node_modules/jade/node_modules/transformers/package.json +++ b/node_modules/jade/node_modules/transformers/package.json @@ -74,7 +74,7 @@ "homepage": "https://github.com/ForbesLindesay/transformers", "_id": "transformers@2.1.0", "dist": { - "shasum": "cca66c54b0a542469799b933685eedc1024c11b2" + "shasum": "53bc3a16b02c2917a11dc89a77b55899b80398d3" }, "_from": "transformers@2.1.0", "_resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz" diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md index 98b90d5..3796e07 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 0.1.32 + +* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns + (issue 92). + +* Fixed test runner to actually report number of failed tests as its process + exit code. + +* Fixed a typo when reporting bad mappings (issue 87). + ## 0.1.31 * Delay parsing the mappings in SourceMapConsumer until queried for a source @@ -109,4 +119,3 @@ ## 0.1.10 * Added sourcesContent support to the customer and generator. - diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js index a3b9dc0..d7f10d8 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js @@ -257,6 +257,7 @@ define(function (require, exports, module) { } } + this.__generatedMappings.sort(util.compareByGeneratedPositions); this.__originalMappings.sort(util.compareByOriginalPositions); }; diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js index 48ead7d..88b06ec 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js @@ -252,7 +252,7 @@ define(function (require, exports, module) { throw new Error('Invalid mapping: ' + JSON.stringify({ generated: aGenerated, source: aSource, - orginal: aOriginal, + original: aOriginal, name: aName })); } diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json index 8caf15c..bca411d 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json @@ -32,5 +32,6 @@ "url": "https://github.com/jrburke/amdefine/issues" }, "_id": "amdefine@0.1.0", - "_from": "amdefine@>=0.0.4" + "_from": "amdefine@>=0.0.4", + "scripts": {} } diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/package.json b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/package.json index f59e820..0284e47 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/package.json +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/package.json @@ -1,7 +1,7 @@ { "name": "source-map", "description": "Generates and consumes source maps", - "version": "0.1.31", + "version": "0.1.32", "homepage": "https://github.com/mozilla/source-map", "author": { "name": "Nick Fitzgerald", @@ -71,6 +71,14 @@ { "name": "Heather Arthur", "email": "fayearthur@gmail.com" + }, + { + "name": "Hugh Kennedy", + "email": "hughskennedy@gmail.com" + }, + { + "name": "David Glasser", + "email": "glasser@davidglasser.net" } ], "repository": { @@ -105,6 +113,10 @@ "bugs": { "url": "https://github.com/mozilla/source-map/issues" }, - "_id": "source-map@0.1.31", - "_from": "source-map@~0.1.7" + "_id": "source-map@0.1.32", + "dist": { + "shasum": "f36d77ab5bfe0111a4d709fdbb89b106c86ed50f" + }, + "_from": "source-map@~0.1.7", + "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz" } diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/run-tests.js b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/run-tests.js index 626c53f..64a7c3a 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/run-tests.js +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/source-map/test/run-tests.js @@ -11,7 +11,6 @@ var path = require('path'); var util = require('./source-map/util'); function run(tests) { - var failures = []; var total = 0; var passed = 0; @@ -31,22 +30,13 @@ function run(tests) { } } - console.log(""); + console.log(''); console.log(passed + ' / ' + total + ' tests passed.'); - console.log(""); + console.log(''); - failures.forEach(function (f) { - }); - - return failures.length; + return total - passed; } -var code; - -process.stdout.on('close', function () { - process.exit(code); -}); - function isTestFile(f) { var testToRun = process.argv[2]; return testToRun @@ -62,10 +52,11 @@ var requires = fs.readdirSync(path.join(__dirname, 'source-map')) .filter(isTestFile) .map(toModule); -code = run(requires.map(require).map(function (mod, i) { +var code = run(requires.map(require).map(function (mod, i) { return { name: requires[i], testCase: mod }; })); + process.exit(code); diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/.npmignore b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/.npmignore index 3e56974..66d015b 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/.npmignore +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/.npmignore @@ -1,14 +1,14 @@ -lib-cov -*.seed -*.log -*.csv -*.dat -*.out -*.pid -*.gz -pids -logs -results -npm-debug.log -node_modules -/test/output.js +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz +pids +logs +results +npm-debug.log +node_modules +/test/output.js diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js index 11cb627..2cea629 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js @@ -31,6 +31,9 @@ function transform(file) { src += 'exports.minify = ' + uglify.minify.toString() + ';\n\n' src += 'exports.describe_ast = ' + uglify.describe_ast.toString() + ';' + // TODO: remove once https://github.com/substack/node-browserify/issues/631 is resolved + src = src.replace(/"for"/g, '"fo" + "r"') + cache[file] = src return makeStream(src); } diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json index a949324..be8caa5 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json @@ -1,6 +1,6 @@ { "name": "uglify-to-browserify", - "version": "1.0.1", + "version": "1.0.2", "description": "A transform to make UglifyJS work in browserify.", "keywords": [], "dependencies": {}, @@ -25,6 +25,10 @@ "url": "https://github.com/ForbesLindesay/uglify-to-browserify/issues" }, "homepage": "https://github.com/ForbesLindesay/uglify-to-browserify", - "_id": "uglify-to-browserify@1.0.1", - "_from": "uglify-to-browserify@~1.0.0" + "_id": "uglify-to-browserify@1.0.2", + "_from": "uglify-to-browserify@~1.0.0", + "dist": { + "shasum": "fa9db0f68f81d518c8c96e9ac38e93b92d0e21a4" + }, + "_resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz" } diff --git a/node_modules/jade/node_modules/with/node_modules/uglify-js/package.json b/node_modules/jade/node_modules/with/node_modules/uglify-js/package.json index 6cd6765..226efe2 100644 --- a/node_modules/jade/node_modules/with/node_modules/uglify-js/package.json +++ b/node_modules/jade/node_modules/with/node_modules/uglify-js/package.json @@ -42,7 +42,7 @@ }, "_id": "uglify-js@2.4.0", "dist": { - "shasum": "e62a45b033953e852e01d67ad542da4df3085085" + "shasum": "638455b44e12921613e5d76de96bdadb74effe97" }, "_from": "uglify-js@2.4.0", "_resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.0.tgz" diff --git a/node_modules/jade/node_modules/with/package.json b/node_modules/jade/node_modules/with/package.json index b44cbff..4aa0333 100644 --- a/node_modules/jade/node_modules/with/package.json +++ b/node_modules/jade/node_modules/with/package.json @@ -27,5 +27,9 @@ }, "homepage": "https://github.com/ForbesLindesay/with", "_id": "with@2.0.0", - "_from": "with@~2.0.0" + "_from": "with@2.0.0", + "dist": { + "shasum": "ad5e70bffcb89bc3ff983f3c38cac48fc88967db" + }, + "_resolved": "https://registry.npmjs.org/with/-/with-2.0.0.tgz" } diff --git a/node_modules/mongodb/node_modules/bson/build/Release/bson.exp b/node_modules/mongodb/node_modules/bson/build/Release/bson.exp index c45dd273379bf3599ebaa95c051dff49a511e44f..2318c1243f780944855d3d2bf65e3bf40955a5e0 100644 GIT binary patch delta 86 zcmeA<#W>>>BWFq*6GM3|bFk|~PG=@=sfm74EFkX2oNLM=|0Nk1Vi*_&8GyjWDyBHI cB(->QfJ(LCdwZtI1(1 W)!Z`~Yy}yT%TpkHo6T~nzw7}?)fI^V diff --git a/node_modules/mongodb/node_modules/bson/build/Release/bson.lib b/node_modules/mongodb/node_modules/bson/build/Release/bson.lib index 57a0a61fc5ba20a55813a7f8ae3ad418d9774b15..f848dd0359b88b0557e2685e6ffa0f6d1df3ff26 100644 GIT binary patch delta 3788 zcmZ`+TTGN!5XM_8D^+yS^#bT3?jo1vqAUW+ik6UC3#c_(D;E(&P+2ZosiH+x5JgvZ z6cnMX(l%*hQj8C6Ow;V6Nt@`iF~z2D)>iw{G{%I^oO5>0|1bCk|9o@%zBzNw1|Cii zJe+=Y*}GXeYjWJ#*-+-U-OG(nH~xSBSo-_=L$Jaz^Z2P5JMKTPcsY$>&#D}==<5&Q zsa_7r`~EOkY>-ktPx=&8uVNqnkPXHMtik{{_J7JA8J#w$9I(!zco`895z``O!qrG8 zL?4V}Oj&<&6xmm!eR{;q2(T9~hetK>3<$Q`U{0+Jl82xf7^F8Y6ZX{VAi>sTnf-3< zj*z2&NCsYyKC>wBSaB9K9$+U^)xiV0YD!q@Rqd43?FEmxvrhSfIH+79MSnf~vK%u_6n6Ums&a@2pqZ57+Nv10~9Dmpr6l zm?-4ocJ@+uYOx@p78u{JgOs%(@eLB|K>nFs$gn7hg7l(f1q zY&6k2e_VgtDw1zrLZO;X^ICWi^d!oF_O*_Bv=FcNDS5jGJOi)C9N-fQIurUKqH z>jKJJR8yy0HZz*SGPVD<7^$_v$O*-HLu)B}@O=N>swaY)t2`>@bYpdPs_x#_RDZis za+Uwh(GLvK49DoiF@22GfCzbMKoU`<0#|~+-8{pJRY`ZpXSyQtH*OUN`afIjG!#Tf zyRSyh!3NCWM8uigwP6_uHE~>aR)DA^>TFsG!gOb*BED+VMUY`hh{V*-w{hEeK1649 zK2k96#=KSG0ogC(g!ZF=sEY7igT86#>&r`?x@JjA-pNlmExF^Cl!k{V&1@UjMh3=> z%})%A8(L%1|8cvXEycE&PTJvF#L~-Bhp{O&n4)&tfom|wiX2lmV?sAZig#d5<`GgbQ9HqMC{+AB6l5|Eceub&{p$!9T!|w!8D~tJ zi)p`DKPfF!(N8BE#G0ZTpa6dFjDuiOBwXyY zfbXnf|M$xwq)XL^ zd6)SvUEQs`H+GwLmynO{i(>SK<{d70-K|fux*KHPtrzqR{pM1+A-#BMNW;2b^AR2G zRir%V<(V_SfVNYnzS;N!x@_RYZ-Z|yE63pFOPnfLu?P-ciIJ%~uGEDLRNE|{a)|X+ zhQ8xt!f>aI`B)cnz^9=YHV-zu3x{pYhd}il=ZD z%)Q3ZR9Dik>YDlK$m99y8q*;7DZeg-&%&TpRHJ=)62y2pssQ0TLNr1T#eD?ou%*G+ zs0Gp*^cms>bGo0!78@KFy)5d#em$XTgNue}gV$g~1x_cV-!wfh!lkN3*l%_>4BTM} zL=IelGDp{q51C2IVSMz}iT?K3F$sH{SnIsWtkHM8hedsK57%Sj$IG&zWRR&LNY9|k z8yI9)T4YMSTbc>eFn)K7Rp7UuYlvT86qzUb!H}Nl6~iiW$uNH;@GrwspdzfaNeC31 z55D24yKMWCOXcLVM>sjqIcpz@5sDXMz*Z4(Zw!o$6f?Kf4nG`I1KJyZ;lb^IV&%uc zA@)#;OJ;W8)-q8j<8P_sNOiC%6Qb`h)uAaAa?ljEA*N%oD|`rv3qFp|@04?L%E1f1 reN->_V1*6-9JMCUl3#>@PvV-cZuK@+9`V*3J6tRNb~SoyY9sy!>tsva delta 3788 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 Bi^Ko` delta 8378 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 delta 126496 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 diff --git a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/CL.read.1.tlog b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/CL.read.1.tlog index 97093f95aad5c17fca17bdfd663a17c6b5e8adc2..14f4f20e4ec2600d24e8ecd4cce1d281a2c78f19 100644 GIT binary patch delta 225 zcmX?gjj`(nqwxQKaSSdDRtzx=!3>@ZAq=hz!IQ1C8aHYSJBBHt{GrfDTKe-#_f+X QKc-XLv51vVw#nuL0QrtRrvLx| delta 151 zcmeCW!FcK#Bm4h`j zaRw*@Ig@qbf#heMBp?~43u156-3TNz^sG62y!;$JT%9~OuhuhR<8bqK^zrw0ah$wb zZ~f$HruVf>V~UHCWAgG-Qsc`~i;6Sz^Yk(p1Q@UW`8qYv$C~dXTSUn`=XfEZ+fyey z=&1wEJZ@&j;S%8J>g??3x|!9STZSVA;RA=sLBYOA0>LxQyqp~Zd^{bUoW1=W>{T2c zQ$U2hF_<(0k;Nb)6GW7Nh*YrHP6vh-HU<{PhDn>hgsc{Z8{51vqkUlpI}mdKF((jnZGZooTk@`anW*T_i=Gwxs_dQjoRo=T_?WeXk%55$=1)+> zL~O4<$+KLVNsw{cQy$UjmQQ(jnSoJ0o$)D;$n;nskLkG)Sf=qQPpB9ux={fOkP84+ CGu3_o delta 574 zcmbPr#`w)?V@(Ez|Nj{oQrZ~I-UeCx+sw1{=4#(Hv#)JaQVTwG<|z+@Fb_KeNN(3e zO=m{diMi^m=g%=Q^h}(o%zE31fgyV0L3Kv6i7(Ze9=w_?#Hhq}SDJz0?up4(jI~V8 zR?`Dd@|aKl5X>?;KA3g#e@0EHnC;|TrbNc1&F7i+urQiz?qM%rWHg!lmm>hk@#73o z26E=>!~@CyI!R!*%;Y*55>s519Fv!yk{Vx@T2!2wpQo3>Ai#L}=5wi*Ij8OgeO>>atnToLhz|8O8ZQNc<#mPj?4rH!oLzUw0P=dlg5=WDsF* zJh>yJS_8x^1ra$QA{9gwg9v*g5Si=1(89*R!r0KZnJ09$Fp{a@Kx+P<(f&V!ar^%a zrd>IVCfj#iWin)9G@1V9I@4Srx9bK|oiJ+~Lo$O^yW|@tAZ7+)79eH?Vm2UV2VxE& z<^*D{?UHY}CGScWiHd#=`&c42QN(3N%CBna@2aVc3=9kq4@NM3`nY}NNuK4>jI7fG cpYkX(o}XR{qHa&0`IIMH3>2ZLfCb0}0Lz5P>i_@% diff --git a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.write.1.tlog b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.write.1.tlog index c719032..1dc8a2e 100644 --- a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.write.1.tlog +++ b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.write.1.tlog @@ -1,3 +1,3 @@ -^C:\node\nodetest2\node_modules\mongodb\node_modules\bson\build\bson.vcxproj -C:\node\nodetest2\node_modules\mongodb\node_modules\bson\build\Release\bson.lib -C:\node\nodetest2\node_modules\mongodb\node_modules\bson\build\Release\bson.exp +^D:\sites\node\nodetest2\node_modules\mongodb\node_modules\bson\build\bson.vcxproj +D:\sites\node\nodetest2\node_modules\mongodb\node_modules\bson\build\Release\bson.lib +D:\sites\node\nodetest2\node_modules\mongodb\node_modules\bson\build\Release\bson.exp diff --git a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/cl.command.1.tlog b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/cl.command.1.tlog index 6e4e73e704de2f0ff2b6d451c0ab1567924428b7..aabd66c843fcea283429abebdab89dfaaa149b63 100644 GIT binary patch delta 69 zcmdnSb&gB;|Gzi}7X~Ya7=~a5PlgZ%SBBupYgsxcP6%T(o%lSK(R8vaV=1HQ=G~0% JnfS3N1OVdf6c7La delta 54 zcmX@dwT+AY|Gzi}X9lauM_D>2&I#i*VTfTUW+-Avo?OTn%4jk delta 44 xcmeyseTJL;|Gzi}X9lZ@!jGAO)Z})SshejpE@EUf*=);f%?J|P+|H882moR(4e0;? diff --git a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/link.read.1.tlog b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/link.read.1.tlog index f9fb951ecb0e8f6e2530c9285b82dbc0d89c0b89..bfe9e112c7255ad5ba72d494d41e12ab9db02d90 100644 GIT binary patch delta 83 zcmbOswMR<$|Gzi}7X~Ya7=~a5PlgZ%SBBupoE+OX?o(iAG@abYAw2mLy9hs;ip`uH Nxh&{{lPh`V0|1vn6deEn delta 52 zcmdlZHA9O1|Gzi}X9lauiX7V~*Dw`rwqaby#%MD6HM{!cdCY8^RXDO(m?84rlQnon E0NY3q4FCWD diff --git a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/link.write.1.tlog b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/link.write.1.tlog index aebff420478e331cfe4cc21b7945264ca4ea773d..1f82d326223c6c45ac1dbe2d1230ba5be107a6e7 100644 GIT binary patch delta 103 zcmaFBI)P32|Gzi}7X~Ya7=~a5PlgZ%SBBupj!fN?Uopx|T*t+aDK&L+03#0;agde} HEaLM4U9A}A delta 51 scmbQh_JEcB|Gzi}X9laug-qQO=czG6m{TWbF!Dgz-IMv4LZIyV0JeM&kpKVy diff --git a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/mt.command.1.tlog b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/mt.command.1.tlog index ed5658b921466643244f8321e967b63282461c58..8e996a8ce27b88737277850671e5ac0c891235e1 100644 GIT binary patch delta 49 zcmX@Z@`OeB|Gzi}7X~Ya7=~a5PlgZ%SBBt??8=P%5V2y0OokGMREFZsx{UIS07;z- AcK`qY delta 25 fcmaFDa)yQd|Gzi}X9lZ{!pe-yKzg$)qdX%3a*78T diff --git a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/mt.read.1.tlog b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/mt.read.1.tlog index 23c6542daf1e78b36b8dd3007b319991f02abc8f..5a46113e548a248f83e0b532021f18c7f3a5a39a 100644 GIT binary patch delta 51 ucmcb@_J&RP|Gzi}7X~Ya7=~a5PlgZ%SBBt?>?@i0(ZnXQcTcus76SlnpbUNh delta 28 gcmaFEc7=`o|Gzi}X9laurD?{+am)#R5h45pDE(8EyU=9la delta 27 ecmZ3)+{MiP|6d$~GlSJ+M#k=m^Fo**%!L4c=m={7 diff --git a/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/vc100.pdb b/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/vc100.pdb index 498376568946cdb1acd9cec4fb62bb1d419f5405..a11d5bf5c6ca611979b3b0c97f60abc0e89a8bc4 100644 GIT binary patch delta 99 zcmZozAlk4%bOTF(L|H9!Fe3v4!_JGI75l2}o%fuSiDLMewWL`lpj{?_al1?aQ^yC! iN$pD=n71!=U{RmNWX`<(+$|O}Q=D42%LuSOu?GP53M452 delta 99 zcmZozAlk4%bOTF(1cTYzAVvlThOc2COT;FMxXeiTRW1EpHMLnLpj{?_al1?aQ^yC! iw)UkC%-febu&B>sTEwya+$|O}Q=D42%LuSOu?GME-y~lE diff --git a/node_modules/mongodb/node_modules/bson/build/binding.sln b/node_modules/mongodb/node_modules/bson/build/binding.sln index aaa46e2..0eb9927 100644 --- a/node_modules/mongodb/node_modules/bson/build/binding.sln +++ b/node_modules/mongodb/node_modules/bson/build/binding.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bson", "bson.vcxproj", "{BDA7D9AF-FCF4-C9AB-A203-954062882336}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bson", "bson.vcxproj", "{E90EC1DC-FBED-E81C-A90F-9D2401CE05A1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -8,10 +8,10 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BDA7D9AF-FCF4-C9AB-A203-954062882336}.Debug|x64.ActiveCfg = Debug|x64 - {BDA7D9AF-FCF4-C9AB-A203-954062882336}.Debug|x64.Build.0 = Debug|x64 - {BDA7D9AF-FCF4-C9AB-A203-954062882336}.Release|x64.ActiveCfg = Release|x64 - {BDA7D9AF-FCF4-C9AB-A203-954062882336}.Release|x64.Build.0 = Release|x64 + {E90EC1DC-FBED-E81C-A90F-9D2401CE05A1}.Debug|x64.ActiveCfg = Debug|x64 + {E90EC1DC-FBED-E81C-A90F-9D2401CE05A1}.Debug|x64.Build.0 = Debug|x64 + {E90EC1DC-FBED-E81C-A90F-9D2401CE05A1}.Release|x64.ActiveCfg = Release|x64 + {E90EC1DC-FBED-E81C-A90F-9D2401CE05A1}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/node_modules/mongodb/node_modules/bson/build/bson.vcxproj b/node_modules/mongodb/node_modules/bson/build/bson.vcxproj index 6dfc39e..7633592 100644 --- a/node_modules/mongodb/node_modules/bson/build/bson.vcxproj +++ b/node_modules/mongodb/node_modules/bson/build/bson.vcxproj @@ -11,7 +11,7 @@ - {BDA7D9AF-FCF4-C9AB-A203-954062882336} + {E90EC1DC-FBED-E81C-A90F-9D2401CE05A1} Win32Proj bson @@ -41,7 +41,7 @@ - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;%(AdditionalIncludeDirectories) EnableFastChecks true ProgramDatabase @@ -58,7 +58,7 @@ Level3 - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.24\$(Configuration)\node.lib + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.25\$(Configuration)\node.lib true true true @@ -69,13 +69,13 @@ MachineX64 - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;%(AdditionalIncludeDirectories) WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;BUILDING_V8_SHARED=1;BUILDING_UV_SHARED=1;BUILDING_NODE_EXTENSION;DEBUG;_DEBUG;%(PreprocessorDefinitions);%(PreprocessorDefinitions) - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;%(AdditionalIncludeDirectories) /MP %(AdditionalOptions) true ProgramDatabase @@ -100,7 +100,7 @@ /LTCG %(AdditionalOptions) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.24\$(Configuration)\node.lib + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.25\$(Configuration)\node.lib true true true @@ -114,7 +114,7 @@ MachineX64 - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;%(AdditionalIncludeDirectories) WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;BUILDING_V8_SHARED=1;BUILDING_UV_SHARED=1;BUILDING_NODE_EXTENSION;%(PreprocessorDefinitions);%(PreprocessorDefinitions) diff --git a/node_modules/mongodb/node_modules/bson/build/config.gypi b/node_modules/mongodb/node_modules/bson/build/config.gypi index 2e7f4dc..0b6e248 100644 --- a/node_modules/mongodb/node_modules/bson/build/config.gypi +++ b/node_modules/mongodb/node_modules/bson/build/config.gypi @@ -31,7 +31,7 @@ "v8_no_strict_aliasing": 1, "v8_use_snapshot": "true", "visibility": "", - "nodedir": "C:\\Users\\Christopher\\.node-gyp\\0.10.24", + "nodedir": "C:\\Users\\Christopher\\.node-gyp\\0.10.25", "copy_dev_lib": "true", "standalone_static_library": 1, "registry": "https://registry.npmjs.org/", @@ -39,6 +39,7 @@ "always_auth": "", "bin_links": "true", "browser": "", + "ca": "", "cache": "C:\\Users\\Christopher\\AppData\\Roaming\\npm-cache", "cache_lock_stale": "60000", "cache_lock_retries": "10", @@ -76,7 +77,7 @@ "local_address": "", "long": "", "message": "%s", - "node_version": "v0.10.24", + "node_version": "v0.10.25", "npat": "", "onload_script": "", "optional": "true", @@ -84,7 +85,7 @@ "production": "", "proprietary_attribs": "true", "https_proxy": "", - "user_agent": "node/v0.10.24 win32 x64", + "user_agent": "node/v0.10.25 win32 x64", "rebuild_bundle": "true", "rollback": "true", "save": "", diff --git a/node_modules/mongodb/node_modules/bson/package.json b/node_modules/mongodb/node_modules/bson/package.json index 5302291..062c6cf 100644 --- a/node_modules/mongodb/node_modules/bson/package.json +++ b/node_modules/mongodb/node_modules/bson/package.json @@ -50,7 +50,7 @@ "homepage": "https://github.com/mongodb/js-bson", "_id": "bson@0.2.5", "dist": { - "shasum": "4d741c5b77b5517d14c6316ca581e73806a81673" + "shasum": "737a05df3008fa194020c146bc7d2d5fb9284fa7" }, "_from": "bson@0.2.5", "_resolved": "https://registry.npmjs.org/bson/-/bson-0.2.5.tgz" diff --git a/node_modules/mongoskin/.travis.yml b/node_modules/mongoskin/.travis.yml index f0afa7e..cc7113e 100644 --- a/node_modules/mongoskin/.travis.yml +++ b/node_modules/mongoskin/.travis.yml @@ -1,7 +1,8 @@ language: node_js node_js: - - 0.6 - 0.8 - - 0.9 + - 0.10 + - 0.11 +script: make coveralls services: - mongodb diff --git a/node_modules/mongoskin/Makefile b/node_modules/mongoskin/Makefile index 94d697e..ff27e36 100644 --- a/node_modules/mongoskin/Makefile +++ b/node_modules/mongoskin/Makefile @@ -1,45 +1,21 @@ -TESTS = test/ -TESTTIMEOUT = 60000 -REPORTER = spec -MOCHA_OPTS = -PROJECT_DIR = $(shell pwd) MONGOSKIN_REPLICASET = false -JSCOVERAGE = ./node_modules/jscover/bin/jscover -SUPPORT_VERSIONS := \ - 1.0.0 1.0.1 1.0.2 \ - 1.1.0-beta 1.1.1 1.1.2 1.1.3 1.1.4 +NODE_BIN=./node_modules/.bin +MOCHA=$(NODE_BIN)/mocha +COVERALLS=$(NODE_BIN)/coveralls test: - @npm install - @if ! test -d deps/mongodb; then \ - git clone git://github.com/mongodb/node-mongodb-native.git deps/mongodb; \ - fi - @cd deps/mongodb && npm install && git pull && cd ../.. - @NODE_ENV=test MONGOSKIN_REPLICASET=$(MONGOSKIN_REPLICASET) \ - ./node_modules/mocha/bin/mocha --recursive \ - --reporter $(REPORTER) --timeout $(TESTTIMEOUT) \ - $(MOCHA_OPTS) $(TESTS) - -test-debug: - @$(MAKE) test MOCHA_OPTS="--debug-brk" + @$(MOCHA) -R spec test-replicaset: - @$(MAKE) test MONGOSKIN_REPLICASET=true + @MONGOSKIN_REPLICASET=true $(MOCHA) -lib-cov: - @rm -rf $@ - @$(JSCOVERAGE) lib $@ +test-cov: + @$(MOCHA) -R html-cov > coverage.html -test-cov: lib-cov - @MONGOSKIN_COV=1 $(MAKE) test REPORTER=dot - @MONGOSKIN_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html - @$(MAKE) test REPORTER=markdown > test_results.md +coveralls: + @$(MOCHA) -R mocha-lcov-reporter | $(COVERALLS) -test-version: - @for version in $(SUPPORT_VERSIONS); do \ - echo "test with mongodb@$$version"; \ - npm install mongodb@$$version --loglevel=warn; \ - $(MAKE) test REPORTER=dot; \ - done +test-watch: + @$(MOCHA) -w -R dot --growl -.PHONY: test-replicaset test-version test-cov test lib-cov +.PHONY: test-cov test-replicaset test diff --git a/node_modules/mongoskin/Readme.md b/node_modules/mongoskin/Readme.md index c36b05d..cb2f278 100644 --- a/node_modules/mongoskin/Readme.md +++ b/node_modules/mongoskin/Readme.md @@ -1,85 +1,19 @@ -# mongoskin [![Build Status](https://secure.travis-ci.org/kissjs/node-mongoskin.png)](http://travis-ci.org/kissjs/node-mongoskin) [![Dependencies](https://david-dm.org/kissjs/node-mongoskin.png)](https://david-dm.org/kissjs/node-mongoskin) +# mongoskin +[![Build Status](https://secure.travis-ci.org/kissjs/node-mongoskin.png)](http://travis-ci.org/kissjs/node-mongoskin) +[![Dependencies](https://david-dm.org/kissjs/node-mongoskin.png)](https://david-dm.org/kissjs/node-mongoskin) +[![Coverage Status](https://coveralls.io/repos/kissjs/node-mongoskin/badge.png?branch=1.3.20)](https://coveralls.io/r/kissjs/node-mongoskin?branch=1.3.20) +[![NPM version](https://badge.fury.io/js/mongoskin.png)](http://badge.fury.io/js/mongoskin) ![logo](https://raw.github.com/kissjs/node-mongoskin/master/logo.png) +[![NPM](https://nodei.co/npm/mongoskin.png?downloads=true&stars=true)](https://nodei.co/npm/mongoskin/) + This project is a wrapper for [node-mongodb-native](https://github.com/mongodb/node-mongodb-native). The base API is same at the node-mongodb-native, you may want to familiarise yourself with the [node-mongodb-native documentation](http://mongodb.github.com/node-mongodb-native/) first. -## Compatible mongodb versions - -You should use mongodb version 1.3.3. Prior mongodb versions might not work. - -## Automated tests - -You can run the automated test by running make test. The tests have a coverage of [**89%**](http://fengmk2.github.com/coverage/mongoskin.html) and you can [browse the results](https://github.com/kissjs/node-mongoskin/blob/master/test_results.md). - - - -# Mongoskin documentation - -* [Nodejs mongodb driver comparison](#comparation) -* [Install](#install) -* [Quick Start](#quickstart) - * [Easier to connect](#quickstart-1) - * [Server options and BSON options](#quickstart-2) - * [Similar API to node-mongodb-native](#quickstart-3) - * [Easier cursor](#quickstart-4) - * [MVC helpers](#quickstart-5) -* [API documentation](#documentation) - * [Module](#module) - * [SkinServer](#skinserver) - * [SkinDb](#skindb) - * [SkinCollection](#skincollection) - * [Additional methods](#additional-collection-op) - * [Collection operation](#inherit-collection-op) - * [Indexes](#inherit-indexes) - * [Querying](#inherit-query) - * [Aggregation](#inherit-aggregation) - * [Inserting](#inherit-inserting) - * [Updating](#inherit-updating) - * [Removing](#inherit-removing) - * [SkinCursor](#skincursor) - - - -Nodejs mongodb driver comparison -======== - -node-mongodb-native --------- - -One of the most powerful Mongo drivers is node-mongodb-native. Most other drivers build -on top of it, including mongoskin. Unfortunately, it has an awkward interface with too many -callbacks. Also, mongoskin provides helper method bindings on Collection instances. - -See [mongodb-native](https://github.com/christkv/node-mongodb-native/tree/master/docs) +## NOTE!! mongoskin API change from 1.3.20 -mongoose --------- - -Mongoose provides a full blown ORM view of Collections and Models, - and you are required to define a schema first. But why does mongodb need a schema? - If you're like me, then you prefer to drive your schema from the application layer, - and use fields without having had to define them beforehand. - - Mongoose also provides a data abstraction layer with validation support. Again, if you're like me, then - you would prefer a lighter weight solution and to craft your own validation. I think this is the tao of mongodb. - -mongoskin --------- - -Mongoskin is an easy to use driver of mongodb for nodejs, - it is similar with mongo shell, powerful like node-mongodb-native, - and supports binding helper methods to Collections. - -It provides the full features of [node-mongodb-native](https://github.com/christkv/node-mongodb-native), - and makes good use of [futures](http://en.wikipedia.org/wiki/Future_%28programming%29). - -For validation you can use [node-iform](https://github.com/guileen/node-iform). - -[Back to index](#index) - - +Since node-mongodb-native has change a lot of API, mongoskin redesign from 1.3.20. The version number keep same with node-mongodb-native. And the API appearence is also keep same with node-mongodb-native Install ======== @@ -88,605 +22,188 @@ Install $ npm install mongoskin ``` -[Back to index](#index) - - - - -Quick start +Usage ======== - **Is mongoskin synchronized?** - -Nope! It is asynchronized, it use the [future pattern](http://en.wikipedia.org/wiki/Future_%28programming%29). -**Mongoskin** is the future layer above [node-mongodb-native](https://github.com/christkv/node-mongodb-native) - - - -Easier to connect --------- -You can connect to mongodb easier now. - -```js -var mongo = require('mongoskin'); -mongo.db('localhost:27017/testdb').collection('blog').find().toArray(function (err, items) { - console.dir(items); -}) -``` - - - -Server options and BSON options --------- -You can also set `auto_reconnect` options querystring. -And native_parser options will automatically set if native_parser is available. +Use dburl ```js var mongo = require('mongoskin'); -var db = mongo.db('localhost:27017/test?auto_reconnect'); -``` - - - -Similar API to node-mongodb-native --------- -You can do everything that node-mongodb-native can do. - -```js -db.createCollection(...); -db.collection('user').ensureIndex([['username', 1]], true, function (err, replies) {}); -db.collection('posts').hint = 'slug'; -db.collection('posts').findOne({slug: 'whats-up'}, function (err, post) { - // do something -}); -``` - - - -Easier cursor --------- - -```js -db.collection('posts').find().toArray(function (err, posts) { - // do something -}); -``` - - +var MongoClient = mongo.MongoClient; -MVC helpers --------- - -You can bind **additional methods** for collection. -It is very useful if you want to use MVC patterns with nodejs and mongodb. -You can also invoke collection by properties after bind, -it could simplfy your `require`. - -To keep your code in line with DRY principles, it's possible to create your own -data layer by for example, setting up your own validators and/or default values -inside the MVC methods as shown below in the config example - -```js -db.bind('posts', { - findTop10 : function (fn) { - this.find({}, {limit:10, sort:[['views', -1]]}).toArray(fn); - }, - removeTagWith : function (tag, fn) { - this.remove({tags:tag},fn); - } - } -}); - -db.bind('settings', { - - getAll: function(user, fn) { - - this.find({user: user}).toArray(function(err, settings) { - - // We want to set a default currency from within our app instead of storing it - // for every user - settings.currency = (typeof settings.currency !== "undefined") ? settings.currency : 'USD'; - - fn(err, settings); - - }); - } -}); - - -db.bind('comments'); - -db.collection('posts').removeTagWith('delete', function (err, replies) { - //do something -}); - -db.posts.findTop10(function (err, topPosts) { - //do something -}); - -db.comments.find().toArray(function (err, comments) { - //do something +var db = MongoClient.connect("mongodb://localhost:27017/integration_tests", {native_parser:true}); +db.bind('article'); +db.article.find().toArray(function(err, items) { + db.close(); }); ``` -[Back to index](#index) - - - - -API documentation -======== - -for more information, see the source. - -[Back to index](#index) - - - - -Module --------- - -### db(serverURL[s], dbOptions, replicasetOptions) - -Get or create instance of [SkinDb](#skindb). - -Parameters: -* ```serverURLs``` can be a single mongoskin url, or an array of urls, each with the following format: -```[*://][username:password@]host[:port][/database][?auto_reconnect[=true|false]]``` - -* ```dbOptions``` is an object that can have following options in it: - * ```database``` - the database to connect to. This overrides the database name passed in the url. - * ```socketOptions``` - mongo socket options (see http://mongodb.github.com/node-mongodb-native/markdown-docs/database.html) - * ```username``` - overrides the value set in the serverURl[s] - * ```password``` - overrides the value set in the serverURl[s] - * other parameters - see http://mongodb.github.io/node-mongodb-native/api-generated/db.html -* ```replicasetOptions``` - mongodb ReplSet options (see http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html). This is only useful if an array of urls is passed. - -Examples: - -```js -var a = mongoskin.db('localhost:27017/testdb?auto_reconnect=true&poolSize=5'); -var b = mongoskin.db('mongo://admin:pass@127.0.0.1:27017/blog?auto_reconnect'); -var c = mongoskin.db('127.0.0.1?auto_reconnect=false'); -``` - -for ReplSet server +Use ReplSet ```js -var db = mongoskin.db([ - '192.168.0.1:27017/?auto_reconnect=true', - '192.168.0.2:27017/?auto_reconnect=true', - '192.168.0.3:27017/?auto_reconnect=true' -], { - database: 'testdb', - safe: true -}, { - connectArbiter: false, - socketOptions: { - timeout: 2000 - } -}); -``` - -### router(select) - -select is `function(collectionName)` returns a database instance, means router collectionName to that database. - -```js -var db = mongo.router(function (coll_name) { - switch(coll_name) { - case 'user': - case 'message': - return mongo.db('192.168.1.3/auth_db'); - default: - return mongo.db('192.168.1.2/app_db'); - } -}); -db.bind('user', require('./shared-user-methods')); -var users = db.user; //auth_db.user -var messages = db.collection('message'); // auth_db.message -var products = db.collection('product'); //app_db.product -``` - -### classes extends frome node-mongodb-native - -* BSONPure -* BSONNative -* BinaryParser -* Binary -* Code -* DBRef -* Double -* MaxKey -* MinKey -* ObjectID -* Symbol -* Timestamp -* Long -* BaseCommand -* DbCommand -* DeleteCommand -* GetMoreCommand -* InsertCommand -* KillCursorCommand -* QueryCommand -* UpdateCommand -* MongoReply -* Admin -* Collection -* Connection -* Server -* ReplSetServers -* Cursor -* Db -* connect -* Grid -* Chunk -* GridStore -* native -* pure - - -[Back to index](#index) - - - -SkinServer --------- - -### SkinServer(server) - -Construct SkinServer from native Server instance. - -### db(dbname, username=null, password=null) - -Construct [SkinDb](#skindb) from SkinServer. - -[Back to index](#index) - - - -SkinDb --------- - -### SkinDb(db, username=null, password=null) - -Construct SkinDb. - -### open(callback) - -Connect to database, retrieval native -[Db](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/db.js#L17) -instance, callback is function(err, db). - -### collection(collectionName) - -Retrieval [SkinCollection](#skincollection) instance of specified collection name. - - - -### bind(collectionName) - -### bind(collectionName, SkinCollection) - -### bind(collectionName, extendObject1, extendObject2 ...) - -Bind [SkinCollection](#skincollection) to db properties as a shortcut to db.collection(name). -You can also bind additional methods to the SkinCollection, it is useful when -you want to reuse a complex operation. This will also affect -db.collection(name) method. - -e.g. - -```js -db.bind('book', { - firstBook: function (fn) { - this.findOne(fn); - } -}); -db.book.firstBook(function (err, book) {}); -``` - -### all the methods from Db.prototype - -See [Db](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/db.js#L17) of node-mongodb-native for more information. - -[Back to index](#index) - - - -SkinCollection --------- - -See [Collection](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L45) of node-mongodb-native for more information. - - -### open(callback) - -Retrieval native -[Collection](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L45) -instance, callback is function(err, collection). - -### id(hex) - -Equivalent to - -```js -db.bson_serializer.ObjectID.createFromHexString(hex); -``` - -See [ObjectID.createFromHexString](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/bson/bson.js#L548) - - - - -### Collection operation - -```js -checkCollectionName(collectionName) -options(callback) -rename(collectionName, callback) -drop(callback) -``` - - - -### Indexes - -```js -createIndex(fieldOrSpec, unique, callback) -ensureIndex(fieldOrSpec, unique, callback) -indexInformation(callback) -dropIndex(indexName, callback) -dropIndexes(callback) -``` - -See [mongodb-native indexes](https://github.com/christkv/node-mongodb-native/blob/master/docs/indexes.md) - - - -### Queries - -See [mongodb-native queries](https://github.com/christkv/node-mongodb-native/blob/master/docs/queries.md) - -#### findItems(..., callback) - -Equivalent to - -```js -collection.find(..., function (err, cursor) { - cursor.toArray(callback); -}); -``` - -See [Collection.find](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L348) - -#### findEach(..., callback) - -Equivalent to - -```js -collection.find(..., function (err, cursor) { - cursor.each(callback); +var mongo = require('mongoskin'); +var Server = mongo.Server; +var Db = mongo.Db; + +var replSet = new ReplSetServers([ + new Server('localhost', 30000), + new Server('localhost', 30001), + new Server('localhost', 30002), +]); + +var db = new Db('integration_test_', replSet, {w:0, native_parser: (process.env['TEST_NATIVE'] != null)}); +// no need open and on('fullsetup', ...) +db.collection('myconnection').find().setReadPreference(ReadPreference.SECONDARY).toArray(function(err, items) { + db.close(); }); ``` -See [Collection.find](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L348) - -#### findById(id, ..., callback) - -Equivalent to - -```js -collection.findOne({_id, ObjectID.createFromHexString(id)}, ..., callback); -``` - -See [Collection.findOne](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L417) - -#### find(...) - -If the last parameter is function, it is equivalent to native -[Collection.find](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L348) -method, else it will return a future [SkinCursor](#skincursor). - -e.g. - -```js -// callback -db.book.find({}, function (err, cursor) {/* do something */}); -// future SkinCursor -db.book.find().toArray(function (err, books) {/* do something */}); -``` - -#### normalizeHintField(hint) +## Origin API part +For detail API reference see [node mongodb API](http://mongodb.github.io/node-mongodb-native/). Mongoskin is just change the API call chain. -#### find +We make some common use functioin in promise mode, we call it SkinClass of a normal Class. And the API is almost same with official API. +origin: ```js -/** - * Various argument possibilities - * 1 callback - * 2 selector, callback, - * 2 callback, options // really?! - * 3 selector, fields, callback - * 3 selector, options, callback - * 4,selector, fields, options, callback - * 5 selector, fields, skip, limit, callback - * 6 selector, fields, skip, limit, timeout, callback - * - * Available options: - * limit, sort, fields, skip, hint, explain, snapshot, timeout, tailable, batchSize - */ +var mongo = require('mongodb'); +var Db = mongo.Db; +var Server = mongo.Server; +var MongoClient = mongo.MongoClient; +var ReplSetServers = mongo.ReplSetServers; +... ``` -#### findAndModify(query, sort, update, options, callback) +mongoskin: ```js -/** - Fetch and update a collection - query: a filter for the query - sort: if multiple docs match, choose the first one in the specified sort order as the object to manipulate - update: an object describing the modifications to the documents selected by the query - options: - remove: set to a true to remove the object before returning - new: set to true if you want to return the modified object rather than the original. Ignored for remove. - upsert: true/false (perform upsert operation) -**/ +var mongo = require('mongoskin'); +var Db = mongo.Db; +var Server = mongo.Server; +var MongoClient = mongo.MongoClient; +var ReplSetServers = mongo.ReplSetServers; +... ``` -#### findOne(queryObject, options, callback) - - - -### Aggregation - -#### mapReduce(map, reduce, options, callback) - -e.g. +origin: ```js -var map = function () { - emit(test(this.timestamp.getYear()), 1); -} - -var reduce = function (k, v){ - count = 0; - for (i = 0; i < v.length; i++) { - count += v[i]; - } - return count; -} -var options = {scope: {test: new client.bson_serializer.Code(t.toString())}}; -collection.mapReduce(map, reduce, options, function (err, collection) { - collection.find(function (err, cursor) { - cursor.toArray(function (err, results) { - test.equal(2, results[0].value) - finished_test({test_map_reduce_functions_scope:'ok'}); - }) +MongoClient.connect(..., functioin(err, db) { }) ``` -#### group(keys, condition, initial, reduce, command, callback) - -e.g. +mongoskin: ```js -collection.group([], {}, {"count":0}, "function (obj, prev) { prev.count++; }", true, function(err, results) {}); +var db = MongoClient.connect(...) ``` -#### count(query, callback) -#### distinct(key, query, callback) - - - -### Inserting - -#### insert(docs, options, callback) - - - -### Updating - -#### save(doc, options, callback) +origin: ```js -/** - Update a single document in this collection. - spec - a associcated array containing the fields that need to be present in - the document for the update to succeed - - document - an associated array with the fields to be updated or in the case of - a upsert operation the fields to be inserted. - - Options: - upsert - true/false (perform upsert operation) - multi - true/false (update all documents matching spec) - strict - true/false (perform check if the operation failed, required extra call to db) - Deprecated Options: - safe - true/false (perform check if the operation failed, required extra call to db) -**/ +var db = new Db(...); +db.open(functioin(err, db) { + db.collection('myCollection', {strict: true}, functioin(err, myCollection) { + // myCollection.find() ... + }); +}); ``` -#### update(spec, document, options, callback) - -#### updateById(_id, ..., callback) - -Equivalent to +mongoskin: ```js -collection.update({_id, ObjectID.createFromHexString(id)}, ..., callback); +var db = new Db(...); +var myCollection = db.collection('myCollection', {strict: true}); ``` -See [Collection.update](https://github.com/christkv/node-mongodb-native/blob/master/docs/insert.md) - - - -### Removing +## Promised methods -#### remove(selector, options, callback) +### MongoClient.connect(...) +returns a `Db` instance +alias origin `MongoClient.connect(..., function(err, db) { .... })` +### db.collection +returns a `Collection` instance +alias origin `db.collection(..., function(err, collection) {....})` +### collection.find +returns a `Cursor` instance +alias origin `collection.find(..., function(err, cursor) {....})` -#### removeById(_id, options, callback) +## MongoSkin API part -[Back to index](#index) +### module.db(...) +alias `MongoClient.connect(...)` +### db.admin(...) +alias `new Admin(db, ...)` +### db.grid(...) +alias `new Grid(db, ...)` +### db.gridStore(...) +alias `new GridStore(db, ...)` +### collection.findById(id, ...) +alias `collection.find({_id: toObjectID(id)}, ...)` +### collection.updateById(id, ...) +alias `collection.update({_id: toObjectID(id)}, ...)` +### collection.removeById(id, ...) +alias `collection.remove({_id: toObjectID(id)}, ...)` - -SkinCursor ---------- +### Removed API from mongoskin 1.3.20 -See [Cursor](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/cursor.js#L1) -of node-mongodb-native for more information. +* module.bind +* module.Skin* +* module.router +* skinDb.toId +* skinDb.toObjectId +* skinDb.gridfs +* skinCollection.bind -All these methods will return the SkinCursor itself. +### Modified API from mongoskin 1.3.20 -```js -sort(keyOrList, [direction], [callback]) -limit(limit, [callback]) -skip(skip, [callback]) -batchSize(skip, [callback]) - -toArray(callback) -each(callback) -count(callback) -nextObject(callback) -getMore(callback) -explain(callback) -``` +* module.db +* skinDb.bind -[Back to index](#index) -## How to validate input? +### Additional API from mongoskin 1.3.20 -I wrote a middleware to validate post data, [node-iform](https://github.com/guileen/node-iform) -base on [node-validator](https://github.com/chriso/node-validator) +* module.MongoClient +* module.Grid +* module.GridStore +* module.helper.toObjectID ## Authors Below is the output from `git-summary`. ``` - project: node-mongoskin - commits: 112 - active : 54 days - files : 39 - authors: - 49 Lin Gui 43.8% - 34 guilin 桂林 30.4% - 9 fengmk2 8.0% - 5 guilin 4.5% - 2 François de Metz 1.8% - 2 Paul Gebheim 1.8% - 2 Gui Lin 1.8% - 1 humanchimp 0.9% - 1 Aneil Mallavarapu 0.9% - 1 wmertens 0.9% - 1 Harvey McQueen 0.9% - 1 Joe Faber 0.9% - 1 Matt Perpick 0.9% - 1 Quang Van 0.9% - 1 Rakshit Menpara 0.9% - 1 Wout Mertens 0.9% + project : node-mongoskin + repo age : 2 years, 10 months + active : 84 days + commits : 180 + files : 44 + authors : + 49 Lin Gui 27.2% + 44 fengmk2 24.4% + 34 guilin 桂林 18.9% + 23 Gui Lin 12.8% + 5 guilin 2.8% + 2 Raghu Katti 1.1% + 2 Merlyn Albery-Speyer 1.1% + 2 Paul Gebheim 1.1% + 2 Joakim B 1.1% + 2 François de Metz 1.1% + 1 Wout Mertens 0.6% + 1 Yuriy Nemtsov 0.6% + 1 fresheneesz 0.6% + 1 humanchimp 0.6% + 1 Alan Shaw 0.6% + 1 wmertens 0.6% + 1 Aneil Mallavarapu 0.6% + 1 Gustav 0.6% + 1 Harvey McQueen 0.6% + 1 Joe Faber 0.6% + 1 Matt Perpick 0.6% + 1 Philmod 0.6% + 1 Quang Van 0.6% + 1 Rakshit Menpara 0.6% + 1 Shawn Jonnet 0.6% ``` ## License diff --git a/node_modules/mongoskin/examples/admin.js b/node_modules/mongoskin/examples/admin.js index f32eee5..c6d0d85 100644 --- a/node_modules/mongoskin/examples/admin.js +++ b/node_modules/mongoskin/examples/admin.js @@ -1,6 +1,6 @@ var db = require('./config').db; -db.admin.listDatabases(function(err, result){ +db.admin().listDatabases(function(err, result){ if(err) { console.traceError(err); } diff --git a/node_modules/mongoskin/examples/config.js b/node_modules/mongoskin/examples/config.js index 80c9184..9d8e0fb 100644 --- a/node_modules/mongoskin/examples/config.js +++ b/node_modules/mongoskin/examples/config.js @@ -1,5 +1,3 @@ -var mongoskin = require('../lib/mongoskin/'); +var mongo = require('../'); -exports.db = mongoskin.db('localhost/test'); - -mongoskin.db('localhost', { database: 'test' }); +exports.db = mongo.db('mongodb://localhost/test'); diff --git a/node_modules/mongoskin/examples/gridfs.js b/node_modules/mongoskin/examples/gridfs.js index ce476a3..2a72c0f 100644 --- a/node_modules/mongoskin/examples/gridfs.js +++ b/node_modules/mongoskin/examples/gridfs.js @@ -1,13 +1,11 @@ var db = require('./config').db; -db.gridfs().open('test.txt', 'w', function(err, gs) { - gs.write('blablabla', function(err, reply) { - gs.close(function(err, reply){ - db.gridfs().open('test.txt', 'r' ,function(err, gs) { - gs.read(function(err, reply){ - console.log(reply.toString()); - }); - }); +var gs = db.gridStore('test.txt', 'w') +gs.write('blablabla', function(err, reply) { + gs.close(function(err, reply){ + var gs = db.gridStore('test.txt', 'r') + gs.read(function(err, reply){ + console.log(reply.toString()); }); }); }); diff --git a/node_modules/mongoskin/examples/replset.js b/node_modules/mongoskin/examples/replset.js index 4e3dc61..cadb5ea 100644 --- a/node_modules/mongoskin/examples/replset.js +++ b/node_modules/mongoskin/examples/replset.js @@ -1,10 +1,17 @@ -var mongoskin = require('../lib/mongoskin/'); +var mongo = require('../'); +var Db = mongo.Db; +var Server = mongo.Server; +var ReplSetServers = mongo.ReplSetServers; -var db = mongoskin.db(['127.0.0.1:27017'], { - database: 'test' -}); - -db.open(function(err, data) { +var replSet = new ReplSetServers([ + new Server('localhost', 30000), + new Server('localhost', 30001), + new Server('localhost', 30002) +]); +var db = new Db('integration_test_', replSet, {w:0}); +db.collection('article').find().toArray(function(err, data) { console.log(err && err.stack); console.log(data); + }); + diff --git a/node_modules/mongoskin/index.js b/node_modules/mongoskin/index.js index dd996af..93a8476 100644 --- a/node_modules/mongoskin/index.js +++ b/node_modules/mongoskin/index.js @@ -1 +1 @@ -module.exports = process.env.MONGOSKIN_COV ? require('./lib-cov/mongoskin') : require('./lib/mongoskin'); \ No newline at end of file +module.exports = process.env.MONGOSKIN_COV ? require('./lib-cov/') : require('./lib/'); diff --git a/node_modules/mongoskin/integration/integration_tests.js b/node_modules/mongoskin/integration/integration_tests.js deleted file mode 100644 index 7a34db7..0000000 --- a/node_modules/mongoskin/integration/integration_tests.js +++ /dev/null @@ -1,203 +0,0 @@ -GLOBAL.DEBUG = true; - -var assert = require('assert'), - mongo = require('../lib/mongoskin'); - -console.log('======== test MongoSkin.db ========'); -(function(){ - var username = 'testuser', - password = 'password'; - - db = mongo.db('localhost/test'); - db.open(function(err, db) { - assert.ok(!err); - assert.ok(db, err && err.stack); - db.addUser(username, password, function(err, result){ - var authdb = mongo.db(username + ':' + password +'@localhost/test'); - authdb.open(function(err, db){ - assert.ok(!err, err && err.stack); - }); - var faildb = mongo.db(username + ':wrongpassword@localhost/test'); - faildb.open(function(err, db){ - assert.ok(err, 'should not auth'); - assert.ok(!db, 'should not return db'); - }); - }); - }); -})(); - -(function(){ - db = mongo.db('db://admin:admin@localhost:27017/test?auto_reconnect'); - db.open(function(err, db){ - assert.ok(err instanceof Error); - }) -})(); - -var bindToBlog = { - first: function(fn) { - this.findOne(fn); - } -}; - -console.log('======== test MongoSkin.router ========'); -var testdb1 = mongo.db('localhost/test1'); -var testdb2 = mongo.db('localhost/test2'); -var router = mongo.router(function(name){ - switch(name){ - case 'user': - case 'message': - return testdb1; - default: - return testdb2; - } -}); -assert.equal(router.collection('user'), testdb1.collection('user'), 'user should router to testdb1'); -assert.equal(router.collection('message'), testdb1.collection('message'), 'message should router to testdb1'); -assert.equal(router.collection('others'), testdb2.collection('others'), 'others should router to testdb2'); -router.bind('user'); -router.bind('others'); -assert.equal(router.user, testdb1.user, 'user property should router to testdb1'); -assert.equal(router.others, testdb2.others, 'user property should router to testdb1'); - -console.log('======== test MongoSkin.bind ========'); -var db = mongo.db('localhost/test_mongoskin'); -db.bind('blog', bindToBlog); -db.bind('users'); -assert.equal(db.blog.first, bindToBlog.first); -assert.ok(db.users); - -console.log('======== test SkinDb bson ========'); -assert.ok(db.ObjectID.createFromHexString('a7b79d4dca9d730000000000')); - -console.log('======== test SkinDb.bind ========'); -db.bind('blog2', bindToBlog); -db.bind('user2'); -assert.equal(db.blog2.first, bindToBlog.first); -assert.ok(db.user2); - -console.log('======== test SkinDb.open ========'); -(function(){ - var db1, db2; - db.open(function(err, db) { - assert.ok(db, err && err.stack); - db1 = db; - assert.equal(db1.state, 'connected'); - if (db2) { - assert.equal(db1, db2, 'should alwayse be the same instance in db.open.'); - } - }); - - db.open(function(err, db) { - assert.ok(db, err && err.stack); - db2 = db; - assert.equal(db2.state, 'connected'); - if (db1) { - assert.equal(db1, db2, 'should alwayse be the same instance in db.open.'); - } - }); - -})() - -console.log('======== test normal method of SkinDb ========'); -db.createCollection('test_createCollection', function(err, collection) { - assert.equal(db.db.state, 'connected'); - assert.ok(collection, err && err.stack); -}); - - -console.log('======== test SkinDb.collection ========'); -assert.equal(db.blog, db.collection('blog')); - -console.log('======== test SkinCollection.open ========'); -var coll1, coll2; -db.blog.open(function(err, coll) { - assert.ok(coll, err && err.stack); - coll1 = coll; - if (coll2) { - assert.equal(coll1, coll2, 'should be the same instance in collection.open'); - } -}); - -db.blog.open(function(err, coll) { - assert.ok(coll, err && err.stack); - coll2 = coll; - if (coll1) { - assert.equal(coll1, coll2, 'should be the same instance in collection.open'); - } -}); - -console.log('======== test normal method of SkinCollection ========'); -db.collection('test_normal').ensureIndex([['a',1]], function(err, replies){ - assert.ok(replies, err && err.stack); -}); - -console.log('======== test SkinCollection.drop ========'); -db.collection('test_find').drop(function(err, replies){ - assert.ok(!err, err && err.stack); -}); - -console.log('======== test SkinCollection.find ========'); -collection = db.collection('test_find'); -collection.insert([{a:1},{a:2},{a:3},{a:4}], function(err, replies){ - assert.ok(replies, err && err.stack); - console.log('======== test SkinCollection.findById ========'); - collection.findById(replies[0]._id.toString(), function(err, item){ - assert.equal(item.a, 1); - console.log('======== test SkinCollection.removeById ========'); - collection.removeById(replies[0]._id.toString(), function(err, reply){ - assert.ok(!err, err && err.stack); - collection.findById(replies[0]._id.toString(), function(err, item){ - assert.ok(!err); - assert.ok(!item); - }); - }); - }); -}); - - - collection.findItems(function(err, items){ - assert.ok(items, err && err.stack); - console.log('found '+ items.length + ' items'); - }); - collection.findEach(function(err, item){ - assert.ok(!err, err && err.stack); - }); - collection.find(function(err, cursor){ - assert.ok(cursor, err && err.stack); - }); - - console.log('======== test SkinCursor ========'); - collection.find().toArray(function(err, items){ - console.log('======== test find cursor toArray========'); - assert.ok(items, err && err.stack); - }); - collection.find().each(function(err, item){ - console.log('======== test find cursor each========'); - assert.ok(!err, err && err.stack); - }); - collection.find().sort({a:-1}).limit(2).skip(1).toArray(function(err, items){ - console.log('======== test cursor sort() limit() skip() ========'); - assert.ok(!err, err && err.stack); - console.dir(items); - }); - -console.log('======== deep future test ========'); -(function(){ - var db2 = mongo.db('localhost/test-mongoskin01'); - db2.collection('blog').find().toArray(function(err, items){ - assert.ok(!err, err && err.stack); - }) -})(); - -(function(){ - var db2 = mongo.db('unknownhost/test-mongoskin01'); - db2.collection('blog').find().toArray(function(err, items){ - assert.ok(err); - }) -})(); -/* -console.log('======== test SkinDb.close ========'); -db.close(); -assert.equal(db.db.state, 'notConnected'); -*/ - diff --git a/node_modules/mongoskin/integration/longlive.js b/node_modules/mongoskin/integration/longlive.js deleted file mode 100644 index 828f71a..0000000 --- a/node_modules/mongoskin/integration/longlive.js +++ /dev/null @@ -1,28 +0,0 @@ -var mongo = require('../'); -var db = mongo.db('192.168.0.103/test'); -// var db = mongo.db('127.0.0.1/test'); -var myconsole = require('myconsole'); - -var foo = db.collection('foo'); - -setInterval(function() { - foo.insert({foo:'foo'}, function(err, result){ - if(err) return myconsole.error(err); - foo.count(function(err, count){ - if(err) return myconsole.error(err); - myconsole.log('count: %d', count); - foo.find().limit(10).toArray(function(err, arr) { - if(err) return myconsole.error(err); - myconsole.log('arr: %d', arr.length); - }) - }) - }) -}, 500); - -process.on('SIGINT', function(){ - myconsole.log('SIGINT') - foo.drop(function(err){ - if(err) myconsole.error(err); - process.exit(); - }) -}) diff --git a/node_modules/mongoskin/lib/admin.js b/node_modules/mongoskin/lib/admin.js new file mode 100644 index 0000000..908a7a7 --- /dev/null +++ b/node_modules/mongoskin/lib/admin.js @@ -0,0 +1,26 @@ +/*! + * mongoskin - admin.js + * + * Copyright(c) 2011 - 2012 kissjs.org + * Copyright(c) 2012 fengmk2 + * MIT Licensed + */ + +"use strict"; + +/** + * Module dependencies. + */ + +var Admin = require('mongodb').Admin; +var makeSkinClass = require('./utils').makeSkinClass; + +var SkinAdmin = exports.SkinAdmin = makeSkinClass(Admin); + +SkinAdmin.prototype._open = function(callback) { + var skindb = this._construct_args[0]; + skindb.open(function(err, p_db) { + if(err) return callback(err); + callback(null, p_db.admin()); + }) +} diff --git a/node_modules/mongoskin/lib/mongoskin/collection.js b/node_modules/mongoskin/lib/collection.js similarity index 50% rename from node_modules/mongoskin/lib/mongoskin/collection.js rename to node_modules/mongoskin/lib/collection.js index 0c6d741..f77f4eb 100644 --- a/node_modules/mongoskin/lib/mongoskin/collection.js +++ b/node_modules/mongoskin/lib/collection.js @@ -11,80 +11,23 @@ /** * Module dependencies. */ - -/** - bind these methods from Collection.prototype to Provider - - methods: - insert - checkCollectionName - remove - rename - save - update - distinct - count - drop - findAndModify - find - normalizeHintField - findOne - createIndex - ensureIndex - indexInformation - dropIndex - dropIndexes - mapReduce - group - options -*/ var __slice = Array.prototype.slice; -var events = require('events'); var Collection = require('mongodb').Collection; var SkinCursor = require('./cursor').SkinCursor; +var helper = require('./helper'); var utils = require('./utils'); -var constant = require('./constant'); -var STATE_CLOSE = constant.STATE_CLOSE; -var STATE_OPENNING = constant.STATE_OPENNING; -var STATE_OPEN = constant.STATE_OPEN; /** - * Construct SkinCollection from SkinDb and collectionName - * use skinDb.collection('name') usually - * - * @param {SkinDb} skinDb - * @param {String} collectionName - * @param {Object} [options] collection options - * @constructor - * @api public + * Constructor */ -var SkinCollection = exports.SkinCollection = function (skinDb, collectionName, options) { - utils.SkinObject.call(this); - this.emitter.setMaxListeners(50); - - this.options = options; - this.skinDb = skinDb; - this.ObjectID = this.skinDb.ObjectID; - this.collectionName = collectionName; - this.collection = null; - this.internalHint = null; - this.__defineGetter__('hint', function () { - return this.internalHint; - }); - this.__defineSetter__('hint', function (value) { - this.internalHint = value; - this.open(function (err, collection) { - collection.hint = value; - this.internalHint = collection.hint; - }.bind(this)); - }); -}; - -utils.inherits(SkinCollection, utils.SkinObject); +var SkinCollection = exports.SkinCollection = utils.makeSkinClass(Collection); -for (var _name in Collection.prototype) { - var method = Collection.prototype[_name]; - utils.bindSkin('SkinCollection', SkinCollection, 'collection', _name, method); +SkinCollection.prototype._open = function(callback) { + var collection_args = this._collection_args.concat([callback]); + this._skin_db.open(function(err, db) { + if(err) return callback(err); + db.collection.apply(db, collection_args); + }); } /* @@ -92,74 +35,6 @@ for (var _name in Collection.prototype) { */ SkinCollection.prototype._find = SkinCollection.prototype.find; -/** - * Retrieve mongodb.Collection - * - * @param {Function(err, collection)} callback - * @return {SkinCollection} this - * @api public - */ -SkinCollection.prototype.open = function (callback) { - switch (this.state) { - case STATE_OPEN: - callback(null, this.collection); - break; - case STATE_OPENNING: - this.emitter.once('open', callback); - break; - // case STATE_CLOSE: - default: - this.emitter.once('open', callback); - this.state = STATE_OPENNING; - this.skinDb.open(function (err, db) { - if (err) { - this.state = STATE_CLOSE; - return this.emitter.emit('open', err, null); - } - db.collection(this.collectionName, this.options, function (err, collection) { - if (err) { - this.state = STATE_CLOSE; - } else { - this.state = STATE_OPEN; - this.collection = collection; - if (this.hint) { - this.collection.hint = this.hint; - } - } - this.emitter.emit('open', err, collection); - }.bind(this)); - }.bind(this)); - break; - } - return this; -}; - -/** - * Close current collection. - * - * @param {Function(err)} callback - * @return {SkinCollection} this - * @api public - */ -SkinCollection.prototype.close = function (callback) { - this.collection = null; - this.state = STATE_CLOSE; - return this; -}; - -/** - * Drop current collection. - * - * @param {Function(err)} callback - * @return {SkinCollection} this - * @api public - */ -SkinCollection.prototype.drop = function (callback) { - this.skinDb.dropCollection(this.collectionName, callback); - this.close(); - return this; -}; - /** * same args as find, but use Array as callback result but not use Cursor * @@ -217,17 +92,6 @@ SkinCollection.prototype.findEach = function (query, options, eachCallback) { return this; }; -/** - * @deprecated use `SkinDb.toId` instead - * - * @param {String} hex - * @return {ObjectID|String} - * @api public - */ -SkinCollection.prototype.id = function (hex) { - return this.skinDb.toId(hex); -}; - /** * Operate by object.`_id` * @@ -239,7 +103,7 @@ SkinCollection.prototype.id = function (hex) { */ SkinCollection.prototype._operateById = function (methodName, id, args) { args = __slice.call(args); - args[0] = {_id: this.skinDb.toId(id)}; + args[0] = {_id: helper.toObjectID(id)}; this[methodName].apply(this, args); return this; }; @@ -291,10 +155,16 @@ SkinCollection.prototype.removeById = function (id, callback) { */ SkinCollection.prototype.find = function (query, options, callback) { var args = __slice.call(arguments); + if(this.isOpen()) { + return this._native.find.apply(this._native, args); + } if (args.length > 0 && typeof args[args.length - 1] === 'function') { this._find.apply(this, args); return this; } else { - return new SkinCursor(null, this, args); + var cursor = new SkinCursor(); + cursor._skin_collection = this; + cursor._find_args = args; + return cursor; } }; diff --git a/node_modules/mongoskin/lib/mongoskin/constant.js b/node_modules/mongoskin/lib/constant.js similarity index 100% rename from node_modules/mongoskin/lib/mongoskin/constant.js rename to node_modules/mongoskin/lib/constant.js diff --git a/node_modules/mongoskin/lib/cursor.js b/node_modules/mongoskin/lib/cursor.js new file mode 100644 index 0000000..2a4d062 --- /dev/null +++ b/node_modules/mongoskin/lib/cursor.js @@ -0,0 +1,33 @@ +/*! + * mongoskin - cursor.js + * + * Copyright(c) 2011 - 2012 kissjs.org + * MIT Licensed + */ + +"use strict"; + +/** + * Module dependencies. + */ + +var Cursor = require('mongodb').Cursor; +var utils = require('./utils'); + +var SkinCursor = exports.SkinCursor = utils.makeSkinClass(Cursor); + +/** + * Retrieve mongodb.Cursor instance. + * + * @param {Function(err, cursor)} callback + * @return {SkinCursor} this + * @api public + */ +SkinCursor.prototype._open = function (callback) { + var self = this; + this._skin_collection.open(function (err, collection) { + if (err) return callback(err); + var args = self._find_args.concat([callback]); + collection.find.apply(collection, args); + }); +}; diff --git a/node_modules/mongoskin/lib/db.js b/node_modules/mongoskin/lib/db.js new file mode 100644 index 0000000..1e3a21e --- /dev/null +++ b/node_modules/mongoskin/lib/db.js @@ -0,0 +1,96 @@ +/*! + * mongoskin - db.js + * + * Copyright(c) 2011 - 2012 kissjs.org + * Copyright(c) 2012 fengmk2 + * MIT Licensed + */ + +"use strict"; + +/** + * Module dependencies. + * TODO db.gridfs() + */ + +var mongodb = require('mongodb'); +var Db = mongodb.Db; +var MongoClient = mongodb.MongoClient; +var utils = require('./utils'); +var SkinAdmin = require('./admin').SkinAdmin; +var SkinCollection = require('./collection').SkinCollection; +var SkinGrid = require('./grid').SkinGrid; +var SkinGridStore = require('./grid_store').SkinGridStore; + +/** + * Constructor + */ +var SkinDb = exports.SkinDb = utils.makeSkinClass(Db, true); + +SkinDb.prototype._open = function(callback) { + // TODO authenticate support + if(this._native) { + this._native.open(callback); + } else if(this._connect_args) { + var args = this._connect_args.concat(callback); + MongoClient.connect.apply(MongoClient, args); + } +} + +/** + * Create or retrieval skin collection + * + * @param {String} name, the collection name. + * @param {Object} [options] collection options. + * @param {Function} [callback] + * @return {SkinCollection} + * @api public + */ +SkinDb.prototype.collection = function (name, options, callback) { + if(!callback && typeof options == 'function') { + callback = options; + options = undefined; + } + // Ooops, no extended mthods like findById etc. + // if(this.isOpen() && (!options || !options.strict) && !callback) { + // // mongodb now support collection without callback + // // see: http://mongodb.github.io/node-mongodb-native/api-generated/db.html#collection + // return this._native.collection(name, options); + // } + var collection = new SkinCollection(); + collection._skin_db = this; + collection._collection_args = [name, options]; + if (callback) { + collection.open(callback); + } + return collection; +}; + +/** + * @param {String} name the collection name + * @param {Object} [options] collection options + * @return {SkinCollection} collection + */ +SkinDb.prototype.bind = function (name, options) { + return this[name] = this.collection(name, options); +} + +SkinDb.prototype.admin = function () { + var skinAdmin = new SkinAdmin(); + skinAdmin._construct_args = [this]; + return skinAdmin; +} + +SkinDb.prototype.grid = function (fsName) { + var skinGrid = new SkinGrid(); + skinGrid._construct_args = [this, fsName]; + return skinGrid; +} + +SkinDb.prototype.gridStore = function () { + var skinGridStore = new SkinGridStore(); + var args = Array.prototype.slice.call(arguments); + args.unshift(this); + skinGridStore._construct_args = args; + return skinGridStore; +} diff --git a/node_modules/mongoskin/lib/grid.js b/node_modules/mongoskin/lib/grid.js new file mode 100644 index 0000000..a424367 --- /dev/null +++ b/node_modules/mongoskin/lib/grid.js @@ -0,0 +1,16 @@ +"use strict"; + +var Grid = require('mongodb').Grid; +var makeSkinClass = require('./utils').makeSkinClass; + +var SkinGrid = exports.SkinGrid = makeSkinClass(Grid); + +SkinGrid.prototype._open = function(callback) { + var skin_db = this._construct_args[0]; + var fsName = this._construct_args[1]; + skin_db.open(function(err, p_db) { + if(err) return callback(err); + var grid = new Grid(p_db, fsName); + callback(null, grid); + }); +} diff --git a/node_modules/mongoskin/lib/grid_store.js b/node_modules/mongoskin/lib/grid_store.js new file mode 100644 index 0000000..2142674 --- /dev/null +++ b/node_modules/mongoskin/lib/grid_store.js @@ -0,0 +1,34 @@ +"use strict"; + +var GridStore = require('mongodb').GridStore; +var makeSkinClass = require('./utils').makeSkinClass; + +var SkinGridStore = exports.SkinGridStore = makeSkinClass(GridStore); + +SkinGridStore.prototype._open = function(callback) { + var skin_db = this._construct_args[0]; + var args = this._construct_args.slice(1); + skin_db.open(function(err, p_db) { + if(err) return callback(err); + args = ([null, p_db]).concat(args); + var ctor = GridStore.bind.apply(GridStore, args); + var gridStore = new ctor(); + gridStore.open(callback); + }); +} + +function bindStaticMethod(methodName) { + SkinGridStore[methodName] = function(skindb) { + var args = Array.prototype.slice.call(arguments); + skindb.open(function(err, p_db) { + args[0] = p_db; + GridStore[methodName].apply(GridStore, args); + }); + } +} + +bindStaticMethod('exist'); +bindStaticMethod('list'); +bindStaticMethod('read'); +bindStaticMethod('readlines'); +bindStaticMethod('unlink'); diff --git a/node_modules/mongoskin/lib/helper.js b/node_modules/mongoskin/lib/helper.js new file mode 100644 index 0000000..d7e816e --- /dev/null +++ b/node_modules/mongoskin/lib/helper.js @@ -0,0 +1,18 @@ +var mongodb = require('mongodb'); +var ObjectID = mongodb.ObjectID; + +/** + * Convert to ObjectID. + * + * @param {String} hex + * @return {ObjectID} + */ +exports.toObjectID = function (hex) { + if (hex instanceof ObjectID) { + return hex; + } + if (!hex || hex.length !== 24) { + return hex; + } + return ObjectID.createFromHexString(hex); +}; diff --git a/node_modules/mongoskin/lib/index.js b/node_modules/mongoskin/lib/index.js new file mode 100644 index 0000000..f2ac471 --- /dev/null +++ b/node_modules/mongoskin/lib/index.js @@ -0,0 +1,36 @@ +/*! + * mongoskin - index.js + * + * Copyright(c) 2011 - 2012 kissjs.org + * MIT Licensed + */ + +"use strict"; + +/** + * Module dependencies. + */ + +var mongo = require('mongodb'); + +/* + * exports mongo classes ObjectID Long Code DbRef ... to mongoskin + */ +for (var key in mongo) { + exports[key] = mongo[key]; +} + +// exports.Foo = SkinFoo; +;['mongo_client', 'db', 'collection', 'cursor', 'admin', 'grid', 'grid_store'].forEach(function(modPath){ + var mod = require('./' + modPath); + for(var name in mod) { + if(name.indexOf('Skin') == 0) { + exports[name.substring(4)] = mod[name]; + } + } +}); + +exports.helper = require('./helper'); +exports.utils = require('./utils'); + +exports.db = exports.MongoClient.connect; diff --git a/node_modules/mongoskin/lib/mongo_client.js b/node_modules/mongoskin/lib/mongo_client.js new file mode 100644 index 0000000..14f4870 --- /dev/null +++ b/node_modules/mongoskin/lib/mongo_client.js @@ -0,0 +1,15 @@ +var mongodb = require('mongodb'); +var MongoClient = mongodb.MongoClient; +var utils = require('./utils'); + +var SkinDb = require('./db').SkinDb; + +var SkinMongoClient = utils.makeSkinClass(MongoClient, true); +exports.SkinMongoClient = SkinMongoClient; + +SkinMongoClient.connect = function() { + var args = [].slice.call(arguments); + var db = new SkinDb(); + db._connect_args = args; + return db; +} diff --git a/node_modules/mongoskin/lib/mongoskin/admin.js b/node_modules/mongoskin/lib/mongoskin/admin.js deleted file mode 100644 index 035e208..0000000 --- a/node_modules/mongoskin/lib/mongoskin/admin.js +++ /dev/null @@ -1,67 +0,0 @@ -/*! - * mongoskin - admin.js - * - * Copyright(c) 2011 - 2012 kissjs.org - * Copyright(c) 2012 fengmk2 - * MIT Licensed - */ - -"use strict"; - -/** - * Module dependencies. - */ - -var Admin = require('mongodb').Admin; -var utils = require('./utils'); -var constant = require('./constant'); - -/** - * SkinAdmin - * - * @param {SkinDb} skinDb - * @constructor - * @api public - */ -var SkinAdmin = exports.SkinAdmin = function (skinDb) { - utils.SkinObject.call(this); - this.skinDb = skinDb; - this.admin = null; -}; - -utils.inherits(SkinAdmin, utils.SkinObject); - -/** - * Retrieve mongodb.Admin instance. - * - * @param {Function(err, admin)} callback - * @return {SkinAdmin} this - * @api public - */ -SkinAdmin.prototype.open = function (callback) { - if (this.state === constant.STATE_OPEN) { - callback(null, this.admin); - return this; - } - this.emitter.once('open', callback); - if (this.state === constant.STATE_OPENNING) { - return this; - } - this.state = constant.STATE_OPENNING; - this.skinDb.open(function (err, db) { - if (err) { - this.admin = null; - this.state = constant.STATE_CLOSE; - } else { - this.admin = new Admin(db); - this.state = constant.STATE_OPEN; - } - this.emitter.emit('open', err, this.admin); - }.bind(this)); - return this; -}; - -for (var key in Admin.prototype) { - var method = Admin.prototype[key]; - utils.bindSkin('SkinAdmin', SkinAdmin, 'admin', key, method); -} \ No newline at end of file diff --git a/node_modules/mongoskin/lib/mongoskin/cursor.js b/node_modules/mongoskin/lib/mongoskin/cursor.js deleted file mode 100644 index a879d80..0000000 --- a/node_modules/mongoskin/lib/mongoskin/cursor.js +++ /dev/null @@ -1,87 +0,0 @@ -/*! - * mongoskin - cursor.js - * - * Copyright(c) 2011 - 2012 kissjs.org - * MIT Licensed - */ - -"use strict"; - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter; -var Cursor = require('mongodb').Cursor; -var utils = require('./utils'); -var constant = require('./constant'); -var STATE_CLOSE = constant.STATE_CLOSE; -var STATE_OPENNING = constant.STATE_OPENNING; -var STATE_OPEN = constant.STATE_OPEN; - -var SkinCursor = exports.SkinCursor = function (cursor, skinCollection, args) { - utils.SkinObject.call(this); - - this.cursor = cursor; - this.skinCollection = skinCollection; - this.args = args || []; - this.emitter = new EventEmitter(); - if (cursor) { - this.state = STATE_OPEN; - } -}; - -utils.inherits(SkinCursor, utils.SkinObject); - -/** - * Retrieve mongodb.Cursor instance. - * - * @param {Function(err, cursor)} callback - * @return {SkinCursor} this - * @api public - */ -SkinCursor.prototype.open = function (callback) { - switch (this.state) { - case STATE_OPEN: - callback(null, this.cursor); - break; - case STATE_OPENNING: - this.emitter.once('open', callback); - break; - // case STATE_CLOSE: - default: - this.emitter.once('open', callback); - this.state = STATE_OPENNING; - this.skinCollection.open(function (err, collection) { - if (err) { - this.state = STATE_CLOSE; - this.emitter.emit('open', err); - return; - } - // copy args - var args = this.args.slice(); - args.push(function (err, cursor) { - if (cursor) { - this.state = STATE_OPEN; - this.cursor = cursor; - } - this.emitter.emit('open', err, cursor); - }.bind(this)); - collection.find.apply(collection, args); - }.bind(this)); - break; - } - return this; -}; - -[ - // callbacks - 'toArray', 'each', 'count', 'nextObject', 'getMore', 'explain', - // self return - 'sort', 'limit', 'skip', 'batchSize', - // unsupported - //'rewind', 'close' ,... -].forEach(function (name) { - var method = Cursor.prototype[name]; - utils.bindSkin('SkinCursor', SkinCursor, 'cursor', name, method); -}); diff --git a/node_modules/mongoskin/lib/mongoskin/db.js b/node_modules/mongoskin/lib/mongoskin/db.js deleted file mode 100644 index f954a52..0000000 --- a/node_modules/mongoskin/lib/mongoskin/db.js +++ /dev/null @@ -1,254 +0,0 @@ -/*! - * mongoskin - db.js - * - * Copyright(c) 2011 - 2012 kissjs.org - * Copyright(c) 2012 fengmk2 - * MIT Licensed - */ - -"use strict"; - -/** - * Module dependencies. - */ - -var __slice = Array.prototype.slice; -var mongodb = require('mongodb'); -var utils = require('./utils'); -var SkinAdmin = require('./admin').SkinAdmin; -var SkinCollection = require('./collection').SkinCollection; -var SkinGridStore = require('./gridfs').SkinGridStore; -var Db = mongodb.Db; -var constant = require('./constant'); -var STATE_CLOSE = constant.STATE_CLOSE; -var STATE_OPENNING = constant.STATE_OPENNING; -var STATE_OPEN = constant.STATE_OPEN; - -/** - * SkinDb - * - * @param {Db} dbconn, mongodb.Db instance - * @param {String} [username] - * @param {String} [password] - * @constructor - * @api public - */ -var SkinDb = exports.SkinDb = function (dbconn, username, password) { - utils.SkinObject.call(this); - this.emitter.setMaxListeners(100); - - this._dbconn = dbconn; - this.db = null; - this.username = username; - this.password = password; - this.admin = new SkinAdmin(this); - this._collections = {}; - this.bson_serializer = dbconn.bson_serializer; - this.ObjectID = mongodb.ObjectID /* 0.9.7-3-2 */ || dbconn.bson_serializer.ObjectID /* <= 0.9.7 */; -}; - -utils.inherits(SkinDb, utils.SkinObject); - -/** - * Convert to ObjectID. - * - * @param {String} hex - * @return {ObjectID} - */ -SkinDb.prototype.toObjectID = SkinDb.prototype.toId = function (hex) { - if (hex instanceof this.ObjectID) { - return hex; - } - if (!hex || hex.length !== 24) { - return hex; - } - return this.ObjectID.createFromHexString(hex); -}; - - -/** - * Open the database connection. - * - * @param {Function(err, nativeDb)} [callback] - * @return {SkinDb} this - * @api public - */ -SkinDb.prototype.open = function (callback) { - switch (this.state) { - case STATE_OPEN: - callback && callback(null, this.db); - break; - case STATE_OPENNING: - // if call 'open' method multi times before opened - callback && this.emitter.once('open', callback); - break; - // case STATE_CLOSE: - default: - var onDbOpen = function (err, db) { - if (!err && db) { - this.db = db; - this.state = STATE_OPEN; - } else { - db && db.close(); - // close the openning connection. - this._dbconn.close(); - this.db = null; - this.state = STATE_CLOSE; - } - this.emitter.emit('open', err, this.db); - }.bind(this); - callback && this.emitter.once('open', callback); - this.state = STATE_OPENNING; - this._dbconn.open(function (err, db) { - if (db && this.username) { - // do authenticate - db.authenticate(this.username, this.password, function (err) { - onDbOpen(err, db); - }); - } else { - onDbOpen(err, db); - } - }.bind(this)); - break; - } - return this; -}; - -/** - * Close the database connection. - * - * @param {Function(err)} [callback] - * @return {SkinDb} this - * @api public - */ -SkinDb.prototype.close = function (callback) { - if (this.state === STATE_CLOSE) { - callback && callback(); - } else if (this.state === STATE_OPEN) { - this.state = STATE_CLOSE; - this.db.close(callback); - } else if (this.state === STATE_OPENNING) { - var that = this; - this.emitter.once('open', function (err, db) { - that.state = STATE_CLOSE; - db ? db.close(callback) : callback && callback(err); - }); - } - return this; -}; - -/** - * Create or retrieval skin collection - * - * @param {String} name, the collection name. - * @param {Object} [options] collection options. - * @return {SkinCollection} - * @api public - */ -SkinDb.prototype.collection = function (name, options) { - var collection = this._collections[name]; - if (!collection) { - this._collections[name] = collection = new SkinCollection(this, name, options); - } - return collection; -}; - -/** - * gridfs - * - * @return {SkinGridStore} - * @api public - */ -SkinDb.prototype.gridfs = function () { - return this.skinGridStore || (this.skinGridStore = new SkinGridStore(this)); -}; - -/** - * bind additional method to SkinCollection - * - * 1. collectionName - * 2. collectionName, extends1, extends2,... extendsn - * 3. collectionName, SkinCollection - * - * @param {String} collectionName - * @param {Object|SkinCollection} [options] - * @return {SkinCollection} - * @api public - */ -SkinDb.prototype.bind = function (collectionName, options) { - var args = __slice.call(arguments); - var name = args[0]; - - if (typeof name !== 'string' || !name.trim()) { - throw new Error('Must provide collection name to bind.'); - } - if (args.length === 1) { - return this.bind(name, this.collection(name)); - } - if (args.length === 2 && args[1].constructor === SkinCollection) { - this._collections[name] = args[1]; - Object.defineProperty(this, name, { - value: args[1], - writable: false, - enumerable: true - }); - // support bind for system.js - var names = name.split('.'); - if (names.length > 1){ - var prev = this, next; - for (var i = 0; i < names.length - 1; i++) { - next = prev[names[i]]; - if (!next) { - next = {}; - Object.defineProperty(prev, names[i], { - value: next, - writable: false, - enumerable : true - }); - } - prev = next; - } - Object.defineProperty(prev, names[names.length - 1], { - value: args[1], - writable: false, - enumerable : true - }); - } - return args[1]; - } - - var isOptions = false; - var argsIndex = 1; - if (options && typeof options === 'object') { - isOptions = true; - argsIndex = 2; - for (var k in options) { - if (typeof options[k] === 'function') { - isOptions = false; - argsIndex = 1; - break; - } - } - } - var collection = this.collection(name, isOptions ? options : null); - for (var len = args.length; argsIndex < len; argsIndex++) { - var extend = args[argsIndex]; - if (typeof extend !== 'object') { - throw new Error('the args[' + argsIndex + '] should be object, but is `' + extend + '`'); - } - utils.extend(collection, extend); - } - return this.bind(name, collection); -}; - -var IGNORE_NAMES = [ - 'bind', 'open', 'close', 'collection', 'admin', 'state' -]; -// bind method of mongodb.Db to SkinDb -for (var key in Db.prototype) { - if (!key || key[0] === '_' || IGNORE_NAMES.indexOf(key) >= 0) { - continue; - } - var method = Db.prototype[key]; - utils.bindSkin('SkinDb', SkinDb, 'db', key, method); -} diff --git a/node_modules/mongoskin/lib/mongoskin/gridfs.js b/node_modules/mongoskin/lib/mongoskin/gridfs.js deleted file mode 100644 index 603e9e9..0000000 --- a/node_modules/mongoskin/lib/mongoskin/gridfs.js +++ /dev/null @@ -1,67 +0,0 @@ -/*! - * mongoskin - gridfs.js - * - * Copyright(c) 2011 - 2012 kissjs.org - * MIT Licensed - */ - -"use strict"; - -/** - * Module dependencies. - */ - -var GridStore = require('mongodb').GridStore; -var utils = require('./utils'); - -/** - * @param filename: filename or ObjectId - */ -var SkinGridStore = exports.SkinGridStore = function (skinDb) { - utils.SkinObject.call(this); - this.skinDb = skinDb; -}; - -utils.inherits(SkinGridStore, utils.SkinObject); - -/** - * @param id - * @param filename - * @param mode - * @param options - * @param callback - * callback(err, gridStoreObject) - */ -SkinGridStore.prototype.open = function (id, filename, mode, options, callback) { - var args = Array.prototype.slice.call(arguments); - callback = args.pop(); - this.skinDb.open(function (err, db) { - var gs = new GridStore(db, args[0], args[1], args[2], args[3]); - var props = { - length: gs.length, - contentType: gs.contentType, - uploadDate: gs.uploadDate, - metadata: gs.metadata, - chunkSize: gs.chunkSize - }; - - gs.open(function (error, reply) { - callback(error, reply, props); - }); - }); -}; - -/** - * @param filename: filename or ObjectId - */ -SkinGridStore.prototype.unlink = SkinGridStore.prototype.remove = function (filename, callback) { - this.skinDb.open(function (err, db) { - GridStore.unlink(db, filename, callback); - }); -}; - -SkinGridStore.prototype.exist = function (filename, rootCollection, callback) { - this.skinDb.open(function (err, db) { - GridStore.exist(db, filename, rootCollection, callback); - }); -}; \ No newline at end of file diff --git a/node_modules/mongoskin/lib/mongoskin/index.js b/node_modules/mongoskin/lib/mongoskin/index.js deleted file mode 100644 index db051fc..0000000 --- a/node_modules/mongoskin/lib/mongoskin/index.js +++ /dev/null @@ -1,200 +0,0 @@ -/*! - * mongoskin - index.js - * - * Copyright(c) 2011 - 2012 kissjs.org - * MIT Licensed - */ - -"use strict"; - -/** - * Module dependencies. - */ - -var url = require('url'); -var Router = require('./router').Router; -var mongo = require('mongodb'); -var SkinServer = require('./server').SkinServer; -var SkinDb =require('./db').SkinDb; -var Db = mongo.Db; -var Server = mongo.Server; -var ReplSetServers = mongo.ReplSetServers; -var BSONNative = mongo.BSONNative; -var constant = require('./constant'); -var DEFAULT_PORT = constant.DEFAULT_PORT; - -function toBool(value) { - return value !== undefined && value !== 'false' && value !== 'no' && value !== 'off'; -} - -/** - * parse the database url to config - * - * [*://]username:password@host[:port]/database?options - * - * @param {String} serverUrl - * @return {Object} config - * - {String} host - * - {Number} port, default is `DEFAULT_PORT`. - * - {String} [database], no database by default. - * - {Object} options - * - {Bool} auto_reconnect, default is `false`. - * - {Number} poolSize, default is `1`. - * - {String} [username], no username by default. - * - {String} [password], no password by default. - * @api private - */ -var parseUrl = function (serverUrl) { - serverUrl = /\w+:\/\//.test(serverUrl) ? serverUrl : 'db://' + serverUrl; - var uri = url.parse(serverUrl, true); - var config = {}; - var serverOptions = uri.query; - - config.host = uri.hostname; - config.port = parseInt(uri.port, 10) || DEFAULT_PORT; - if (uri.pathname) { - config.database = uri.pathname.replace(/\//g, ''); - } - config.options = {}; - config.options.auto_reconnect = toBool(serverOptions.auto_reconnect); - config.options.poolSize = parseInt(serverOptions.poolSize || 1, 10); - if (uri && uri.auth) { - var auth = uri.auth; - var separator = auth.indexOf(':'); - config.username = auth.substr(0, separator); - config.password = auth.substr(separator + 1); - } - return config; -}; - -/** - * constructor Server from url - * - * @param {String} serverUrl - * @return {Server} - * @api private - */ -var parseServer = function (serverUrl) { - var config = parseUrl(serverUrl); - return new Server(config.host, config.port, config.options); -}; - -/* - * exports mongo classes ObjectID Long Code DbRef ... to mongoskin - */ -for (var key in mongo) { - exports[key] = mongo[key]; -} - -/** - * constructor SkinDb from serverURL[s] - * - * ReplicaSet: mongoskin.db(serverURLs, dbOptions, replicasetOptions) - * - * ```js - * mongoskin.db([ - * '192.168.0.1:27017/', - * '192.168.0.2/?auto_reconnect', - * '192.168.0.3' - * ], {database: 'mydb'}, {connectArbiter: false, socketOptions: {timeout: 2000}}); - * ``` - * - * Single Server: mongoskin.db(dbURL, options) - * - * ```js - * mongoskin.db('192.168.0.1:27017/mydb'); - * // or - * mongoskin.db('192.168.0.1:27017', {database: 'mydb'}); - * // set the connection timeout to `2000ms` - * mongoskin.db('192.168.0.1:27017', {database: 'mydb', socketOptions: {timeout: 2000}}); - * ``` - * - * @param {String|Array} serverUrl or server urls. - * @param {Object} [dbOptions] - * - {Object} socketOptions: @see http://mongodb.github.com/node-mongodb-native/markdown-docs/database.html#socket-options - * - the other, @see http://mongodb.github.com/node-mongodb-native/markdown-docs/database.html#db-options - * @param {Object} [replicasetOptions], options for replicaset. - * The detail of this options, please - * @see https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/connection/repl_set.js#L27. - * @return {SkinDb} - * @api public - */ -exports.db = function (serverUrl, dbOptions, replicasetOptions) { - dbOptions = dbOptions || {}; - - var server, database, config; - - if (Array.isArray(serverUrl)) { - if (!dbOptions.database) { - throw new Error('Please provide a database in `dbOptions` to connect.'); - } - database = dbOptions.database; - - var len = serverUrl.length; - var servers = []; - for (var i = 0; i < len; i++) { - config = parseUrl(serverUrl[i]); - if (config.database || config.username) { - console.log('MONGOSKIN:WARN: database or username found in RepliSet server URL, ' + serverUrl[i]); - } - servers.push(new Server(config.host, config.port, config.options)); - } - server = new ReplSetServers(servers, replicasetOptions); - } else { - config = parseUrl(serverUrl); - database = dbOptions.database || config.database; - if (!database) { - throw new Error('Please provide a database to connect to.'); - } - var socketOptions = dbOptions.socketOptions; - if (socketOptions) { - delete dbOptions.socketOptions; - config.options.socketOptions = socketOptions; - } - server = new Server(config.host, config.port, config.options); - - if (dbOptions.username === undefined) { - dbOptions.username = config.username; - dbOptions.password = config.password; - } - } - - var skinServer = new SkinServer(server); - return skinServer.db(database, dbOptions); -}; - -/** - * select different db by collection name - * - * @param select `function(name)` returns SkinDb - * - * ```js - * var router = mongoskin.router(function (name) { - * swhich (name) { - * case 'user': - * case 'group': - * return authDb; - * default: - * return appDb; - * } - * }); - * router.collection('user') - * ``` - * - * @param {Function(name)} select - * @return {Router} - * @api public - */ -exports.router = function (select) { - return new Router(select); -}; - -/* - * export Skin classes from ./db ./collection ./cursor ./admin - */ -['server', 'db', 'collection', 'cursor', 'admin'].forEach(function (path) { - var module = require('./' + path); - for (var name in module) { - exports[name] = module[name]; - } -}); diff --git a/node_modules/mongoskin/lib/mongoskin/router.js b/node_modules/mongoskin/lib/mongoskin/router.js deleted file mode 100644 index 1e7bf30..0000000 --- a/node_modules/mongoskin/lib/mongoskin/router.js +++ /dev/null @@ -1,49 +0,0 @@ -/*! - * mongoskin - router.js - * - * Copyright(c) 2011 - 2012 kissjs.org - * MIT Licensed - */ - -"use strict"; - -/** - * Module dependencies. - */ - -/** - * Router - * - * @param {Function(name)} select - * @constructor - * @api public - */ -var Router = exports.Router = function (select) { - this._select = select; - this._collections = {}; -}; - -/** - * Bind custom methods - * - * @param {String} name, collection name. - * @param {Object} [options] - * @return {Router} this - * @api public - */ -Router.prototype.bind = function (name, options) { - var args = Array.prototype.slice.call(arguments); - var database = this._select(name); - var collection = database.bind.apply(database, args); - this._collections[name] = collection; - Object.defineProperty(this, name, { - value: collection, - writable: false, - enumerable: true - }); - return this; -}; - -Router.prototype.collection = function (name) { - return this._collections[name] || (this._collections[name] = this._select(name).collection(name)); -}; diff --git a/node_modules/mongoskin/lib/mongoskin/server.js b/node_modules/mongoskin/lib/mongoskin/server.js deleted file mode 100644 index 54baaf4..0000000 --- a/node_modules/mongoskin/lib/mongoskin/server.js +++ /dev/null @@ -1,54 +0,0 @@ -/*! - * mongoskin - server.js - * - * Copyright(c) 2011 - 2012 kissjs.org - * MIT Licensed - */ - -"use strict"; - -/** - * Module dependencies. - */ - -var mongodb = require('mongodb'); -var Db = mongodb.Db; -var Server = mongodb.Server; -var SkinDb = require('./db').SkinDb; - -/** - * Construct SkinServer with native Server - * - * @param {Server} server - * @constructor - * @api public - */ -var SkinServer = exports.SkinServer = function (server) { - this.server = server; - this._cache_ = {}; -}; - -/** - * Create SkinDb from a SkinServer - * - * @param {String} name database name - * @param {Object} [options] - * @return {SkinDb} - * @api public - */ -SkinServer.prototype.db = function (name, options) { - options = options || {}; - var username = options.username || ''; - var key = username + '@' + name; - var skinDb = this._cache_[key]; - if (!skinDb || skinDb.fail) { - var password = options.password; - if (!options.native_parser) { - options.native_parser = !! mongodb.BSONNative; - } - var db = new Db(name, this.server, options); - skinDb = new SkinDb(db, username, password); - this._cache_[key] = skinDb; - } - return skinDb; -}; diff --git a/node_modules/mongoskin/lib/mongoskin/utils.js b/node_modules/mongoskin/lib/mongoskin/utils.js deleted file mode 100644 index 9b98231..0000000 --- a/node_modules/mongoskin/lib/mongoskin/utils.js +++ /dev/null @@ -1,82 +0,0 @@ -/*! - * mongoskin - utils.js - * - * Copyright(c) 2011 - 2012 kissjs.org - * Copyright(c) 2012 fengmk2 - * MIT Licensed - */ - -"use strict"; - -/** - * Module dependencies. - */ - -var __slice = Array.prototype.slice; -var EventEmitter = require('events').EventEmitter; -var constant = require('./constant'); -var STATE_OPEN = constant.STATE_OPEN; -var STATE_OPENNING = constant.STATE_OPENNING; -var STATE_CLOSE = constant.STATE_CLOSE; - -exports.inherits = require('util').inherits; - -exports.error = function (err, args, name) { - var cb = args.pop(); - if (cb && typeof cb === 'function') { - cb(err); - } else { - console.error("Error occured with no callback to handle it while calling " + name, err); - } -}; - -/** - * SkinObject - * - * @constructor - * @api public - */ -exports.SkinObject = function () { - this.emitter = new EventEmitter(); - this.state = STATE_CLOSE; -}; - -/** - * Skin method binding. - * - * @param {String} objName - * @param {Function} obj - * @param {String} nativeObjName - * @param {String} methodName - * @param {Function} method - * @return {Function} - */ -exports.bindSkin = function (objName, obj, nativeObjName, methodName, method) { - if (typeof method !== 'function') { - return; - } - return obj.prototype[methodName] = function () { - var args = __slice.call(arguments); - if (this.state === STATE_OPEN) { - method.apply(this[nativeObjName], args); - return this; - } - this.open(function (err, nativeObj) { - if (err) { - exports.error(err, args, objName + '.' + methodName); - } else { - return method.apply(nativeObj, args); - } - }); - return this; - }; -}; - -exports.extend = function (destination, source) { - for (var property in source) { - destination[property] = source[property]; - } - return destination; -}; - -exports.noop = function () {}; \ No newline at end of file diff --git a/node_modules/mongoskin/lib/utils.js b/node_modules/mongoskin/lib/utils.js new file mode 100644 index 0000000..577d064 --- /dev/null +++ b/node_modules/mongoskin/lib/utils.js @@ -0,0 +1,170 @@ +/*! + * mongoskin - utils.js + * + * Copyright(c) 2011 - 2012 kissjs.org + * Copyright(c) 2012 fengmk2 + * MIT Licensed + */ + +"use strict"; + +/** + * Module dependencies. + */ + +var __slice = Array.prototype.slice; +var EventEmitter = require('events').EventEmitter; +var constant = require('./constant'); +var STATE_CLOSE = constant.STATE_CLOSE; +var STATE_OPENNING = constant.STATE_OPENNING; +var STATE_OPEN = constant.STATE_OPEN; + +exports.makeSkinClass = function makeSkinClass(NativeClass, useNativeConstructor) { + + function onError (err, args, name) { + var cb = args.pop(); + if (cb && typeof cb === 'function') { + cb(err); + } else { + console.error("Error occured with no callback to handle it while calling " + name, err); + } + }; + + var skinClassName = 'Skin' + NativeClass.name; + function SkinClass() { + var args = __slice.call(arguments); + this._construct_args = args; + if(useNativeConstructor && arguments.length > 0) { + args.unshift(null); + var ctor = NativeClass.bind.apply(NativeClass, args); + this._native = new ctor(); + } else { + this._native = null; + } + this._emitter = new EventEmitter(); + this._emitter.setMaxListeners(50); + this._state = STATE_CLOSE; + this._init && this._init(); + } + SkinClass._class_name = skinClassName; + + function bindSkin(propName) { + var fn; + var desc = Object.getOwnPropertyDescriptor(NativeClass.prototype, propName); + if(!desc) { + // console.log('no desc', skinClassName, propName, desc); + try{ + fn = NativeClass.prototype[propName]; + } catch(e) {} + } else { + fn = desc.value; + } + if(typeof fn == 'function') { + SkinClass._bindMethod(propName); + } else if(desc) { + if (desc.get) { + SkinClass._bindGetter(propName); + } + if (desc.set) { + SkinClass._bindSetter(propName); + } + // } else { + // this will never be called, so comment it. + // console.log('no desc and no value', skinClassName, propName); + } + } + + SkinClass._bindMethod = function(propName) { + SkinClass.prototype[propName] = function() { + var args = __slice.apply(arguments); + if (this._state == STATE_OPEN) { + this._native[propName].apply(this._native, args); + } else { + this.open(function(err, p_native) { + if (err) { + onError(err, args, skinClassName + '.' + propName); + } else { + p_native[propName].apply(p_native, args); + } + }); + } + return this; + } + } + + SkinClass._bindGetter = function(propName) { + SkinClass.prototype.__defineGetter__(propName, function() { + return this._native && this._native[propName];// || this['_prop_' + propName]; + }); + } + + SkinClass._bindSetter = function(propName) { + SkinClass.prototype.__defineSetter__(propName, function(value) { + // this['_prop_' + propName] = value; + this.open(function(err, p_native) { + if(err) return onError(err, args, skinClassName + '.' + propName); + p_native[propName] = value; + }); + }); + } + + for(var propName in NativeClass.prototype) { + if(propName[0] != '_') bindSkin(propName); + } + + SkinClass.prototype.open = function(callback) { + switch (this._state) { + case STATE_OPEN: + callback(null, this._native); + break; + case STATE_OPENNING: + this._emitter.once('open', callback); + break; + default: + this._emitter.once('open', callback); + this._state = STATE_OPENNING; + var self = this; + this._open(function(err, p_native) { + if (err) { + self._state = STATE_CLOSE; + } else { + self._state = STATE_OPEN; + self._native = p_native; + } + self._emitter.emit('open', err, p_native); + }); + } + return this; + } + + SkinClass.prototype.close = function (callback) { + if (this._state === STATE_CLOSE) { + callback && callback(); + } else if (this._state === STATE_OPEN) { + this._state = STATE_CLOSE; + this._close(callback); + } else if (this._state === STATE_OPENNING) { + var self = this; + this._emitter.once('open', function (err, db) { + self.close(callback); + }); + } + this._native = null; + return this; + } + + SkinClass.prototype._close = function(callback) { + if(this._native.close) { + this._native.close(callback) + } else if(callback) { + callback(); + } + } + + SkinClass.prototype.isOpen = function() { + return this._state === STATE_OPEN; + } + + return SkinClass; + +} diff --git a/node_modules/mongoskin/node_modules/mongodb/.travis.yml b/node_modules/mongoskin/node_modules/mongodb/.travis.yml index 0140117..7ef2762 100644 --- a/node_modules/mongoskin/node_modules/mongodb/.travis.yml +++ b/node_modules/mongoskin/node_modules/mongodb/.travis.yml @@ -2,4 +2,5 @@ language: node_js node_js: - 0.6 - 0.8 - - 0.10 # development version of 0.8, may be unstable \ No newline at end of file + - 0.10 + - 0.11 \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/CONTRIBUTING.md b/node_modules/mongoskin/node_modules/mongodb/CONTRIBUTING.md index 2a1c52e..c23e426 100644 --- a/node_modules/mongoskin/node_modules/mongodb/CONTRIBUTING.md +++ b/node_modules/mongoskin/node_modules/mongodb/CONTRIBUTING.md @@ -2,7 +2,7 @@ ### Bugfixes -- Before starting to write code, look for existing [tickets](https://github.com/mongodb/node-mongodb-native/issues) or [create one](https://github.com/mongodb/node-mongodb-native/issues/new) for your specific issue. That way you avoid working on something that might not be of interest or that has been addressed already in a different branch. +- Before starting to write code, look for existing [tickets](https://jira.mongodb.org/browse/NODE) or [create one](https://jira.mongodb.org/secure/CreateIssue!default.jspa) for your specific issue under the "Node Driver" project. That way you avoid working on something that might not be of interest or that has been addressed already in a different branch. - Fork the [repo](https://github.com/mongodb/node-mongodb-native) _or_ for small documentation changes, navigate to the source on github and click the [Edit](https://github.com/blog/844-forking-with-the-edit-button) button. - Follow the general coding style of the rest of the project: - 2 space tabs @@ -14,10 +14,10 @@ - `for(..) {` - `while(..) {` - `function(err) {` -- Write tests and make sure they pass (execute `make test` from the cmd line to run the test suite). +- Write tests and make sure they pass (execute `npm test` from the cmd line to run the test suite). ### Documentation To contribute to the [API documentation](http://mongodb.github.com/node-mongodb-native/) just make your changes to the inline documentation of the appropriate [source code](https://github.com/mongodb/node-mongodb-native/tree/master/docs) in the master branch and submit a [pull request](https://help.github.com/articles/using-pull-requests/). You might also use the github [Edit](https://github.com/blog/844-forking-with-the-edit-button) button. -If you'd like to preview your documentation changes, first commit your changes to your local master branch, then execute `make generate_docs`. Make sure you have the python documentation framework sphinx installed `easy_install sphinx`. The docs are generated under `docs/build'. If all looks good, submit a [pull request](https://help.github.com/articles/using-pull-requests/) to the master branch with your changes. \ No newline at end of file +If you'd like to preview your documentation changes, first commit your changes to your local master branch, then execute `make generate_docs`. Make sure you have the python documentation framework sphinx installed `easy_install sphinx`. The docs are generated under `docs/build'. If all looks good, submit a [pull request](https://help.github.com/articles/using-pull-requests/) to the master branch with your changes. diff --git a/node_modules/mongoskin/node_modules/mongodb/Readme.md b/node_modules/mongoskin/node_modules/mongodb/Readme.md index 0d4830f..c61fbc0 100644 --- a/node_modules/mongoskin/node_modules/mongodb/Readme.md +++ b/node_modules/mongoskin/node_modules/mongodb/Readme.md @@ -1,10 +1,34 @@ -Up to date documentation -======================== +## MongoDB Node.JS Driver + +| what | where | +|---------------|------------------------------------------------| +| documentation | http://mongodb.github.io/node-mongodb-native/ | +| apidoc | http://mongodb.github.io/node-mongodb-native/ | +| source | https://github.com/mongodb/node-mongodb-native | +| mongodb | http://www.mongodb.org/ | -[Documentation](http://mongodb.github.com/node-mongodb-native/) +### Bugs / Feature Requests -Install -======= +Think you’ve found a bug? Want to see a new feature in PyMongo? Please open a +case in our issue management tool, JIRA: + +- Create an account and login . +- Navigate to the NODE project . +- Click **Create Issue** - Please provide as much information as possible about the issue type and how to reproduce it. + +Bug reports in JIRA for all driver projects (i.e. NODE, PYTHON, CSHARP, JAVA) and the +Core Server (i.e. SERVER) project are **public**. + +### Questions and Bug Reports + + * mailing list: https://groups.google.com/forum/#!forum/node-mongodb-native + * jira: http://jira.mongodb.org/ + +### Change Log + +http://jira.mongodb.org/browse/NODE + +## Install To install the most recent release from npm, run: @@ -16,16 +40,10 @@ To install the latest from the repository, run:: npm install path/to/node-mongodb-native -Community -========= -Check out the google group [node-mongodb-native](http://groups.google.com/group/node-mongodb-native) for questions/answers from users of the driver. - -Live Examples -============ +## Live Examples -Introduction -============ +## Introduction This is a node.js driver for MongoDB. It's a port (or close to a port) of the library for ruby at http://github.com/mongodb/mongo-ruby-driver/. @@ -33,7 +51,7 @@ A simple example of inserting a document. ```javascript var MongoClient = require('mongodb').MongoClient - , format = require('util').format; + , format = require('util').format; MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { if(err) throw err; @@ -50,13 +68,12 @@ A simple example of inserting a document. console.dir(results); // Let's close the db db.close(); - }); + }); }); }) ``` -Data types -========== +## Data types To store and retrieve the non-JSON MongoDb primitives ([ObjectID](http://www.mongodb.org/display/DOCS/Object+IDs), Long, Binary, [Timestamp](http://www.mongodb.org/display/DOCS/Timestamp+data+type), [DBRef](http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef), Code). @@ -89,8 +106,7 @@ Here are the constructors the non-Javascript BSON primitive types: new mongo.Double(number) // Force double storage ``` -The C/C++ bson parser/serializer --------------------------------- +### The C/C++ bson parser/serializer If you are running a version of this library has the C/C++ parser compiled, to enable the driver to use the C/C++ bson parser pass it the option native_parser:true like below @@ -102,8 +118,7 @@ If you are running a version of this library has the C/C++ parser compiled, to e The C++ parser uses the js objects both for serialization and deserialization. -GitHub information -================== +## GitHub information The source code is available at http://github.com/mongodb/node-mongodb-native. You can either clone the repository or download a tarball of the latest release. @@ -114,27 +129,24 @@ Once you have the source you can test the driver by running in the main directory. You will need to have a mongo instance running on localhost for the integration tests to pass. -Examples -======== +## Examples For examples look in the examples/ directory. You can execute the examples using node. $ cd examples $ node queries.js -GridStore -========= +## GridStore The GridStore class allows for storage of binary files in mongoDB using the mongoDB defined files and chunks collection definition. For more information have a look at [Gridstore](https://github.com/mongodb/node-mongodb-native/blob/master/docs/gridfs.md) -Replicasets -=========== +## Replicasets + For more information about how to connect to a replicaset have a look at the extensive documentation [Documentation](http://mongodb.github.com/node-mongodb-native/) -Primary Key Factories ---------------------- +### Primary Key Factories Defining your own primary key factory allows you to generate your own series of id's (this could f.ex be to use something like ISBN numbers). The generated the id needs to be a 12 byte long "string". @@ -172,16 +184,14 @@ Simple example below }); ``` -Documentation -============= +## Documentation If this document doesn't answer your questions, see the source of [Collection](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js) or [Cursor](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/cursor.js), or the documentation at MongoDB for query and update formats. -Find ----- +### Find The find method is actually a factory method to create Cursor objects. A Cursor lazily uses the connection the first time @@ -230,7 +240,6 @@ from being returned multiple times. See more * `timeout` if false, asks MongoDb not to time out this cursor after an inactivity period. - For information on how to create queries, see the [MongoDB section on querying](http://www.mongodb.org/display/DOCS/Querying). @@ -251,8 +260,7 @@ For information on how to create queries, see the }); ``` -Insert ------- +### Insert Signature: @@ -288,8 +296,7 @@ Note that there's no reason to pass a callback to the insert or update commands unless you use the `safe:true` option. If you don't specify `safe:true`, then your callback will be called immediately. -Update; update and insert (upsert) ----------------------------------- +### Update: update and insert (upsert) The update operation will update the first document that matches your query (or all documents that match if you use `multi:true`). @@ -326,8 +333,7 @@ Example for `update`: }); ``` -Find and modify ---------------- +### Find and modify `findAndModify` is like `update`, but it also gives the updated document to your callback. But there are a few key differences between findAndModify and @@ -371,41 +377,28 @@ Example for `findAndModify`: }); ``` -Save ----- +### Save The `save` method is a shorthand for upsert if the document contains an `_id`, or an insert if there is no `_id`. -Sponsors -======== -Just as Felix Geisendörfer I'm also working on the driver for my own startup and this driver is a big project that also benefits other companies who are using MongoDB. - -If your company could benefit from a even better-engineered node.js mongodb driver I would appreciate any type of sponsorship you may be able to provide. All the sponsors will get a lifetime display in this readme, priority support and help on problems and votes on the roadmap decisions for the driver. If you are interested contact me on [christkv AT g m a i l.com](mailto:christkv@gmail.com) for details. - -And I'm very thankful for code contributions. If you are interested in working on features please contact me so we can discuss API design and testing. - -Release Notes -============= +## Release Notes See HISTORY -Credits -======= +## Credits 1. [10gen](http://github.com/mongodb/mongo-ruby-driver/) 2. [Google Closure Library](http://code.google.com/closure/library/) 3. [Jonas Raoni Soares Silva](http://jsfromhell.com/classes/binary-parser) -Contributors -============ +## Contributors Aaron Heckmann, Christoph Pojer, Pau Ramon Revilla, Nathan White, Emmerman, Seth LaForge, Boris Filipov, Stefan Schärmeli, Tedde Lundgren, renctan, Sergey Ukustov, Ciaran Jessup, kuno, srimonti, Erik Abele, Pratik Daga, Slobodan Utvic, Kristina Chodorow, Yonathan Randolph, Brian Noguchi, Sam Epstein, James Harrison Fisher, Vladimir Dronnikov, Ben Hockey, Henrik Johansson, Simon Weare, Alex Gorbatchev, Shimon Doodkin, Kyle Mueller, Eran Hammer-Lahav, Marcin Ciszak, François de Metz, Vinay Pulim, nstielau, Adam Wiggins, entrinzikyl, Jeremy Selier, Ian Millington, Public Keating, andrewjstone, Christopher Stott, Corey Jewett, brettkiefer, Rob Holland, Senmiao Liu, heroic, gitfy -License -======= +## License - Copyright 2009 - 2012 Christian Amor Kvalheim. + Copyright 2009 - 2013 MongoDb Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/admin.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/admin.js index 6e9cd30..0bd01b5 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/admin.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/admin.js @@ -152,7 +152,7 @@ Admin.prototype.addUser = function(username, password, options, callback) { var args = Array.prototype.slice.call(arguments, 2); callback = args.pop(); options = args.length ? args.shift() : {}; - + // Set the db name to admin options.dbName = 'admin'; // Add user this.db.addUser(username, password, options, function(err, doc) { diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/aggregation_cursor.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/aggregation_cursor.js new file mode 100644 index 0000000..0f424d3 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/aggregation_cursor.js @@ -0,0 +1,257 @@ +var ReadPreference = require('./connection/read_preference').ReadPreference + , Readable = require('stream').Readable + , CommandCursor = require('./command_cursor').CommandCursor + , utils = require('./utils') + , shared = require('./collection/shared') + , inherits = require('util').inherits; + +var AggregationCursor = function(collection, serverCapabilities, options) { + var pipe = []; + var self = this; + var results = null; + var _cursor_options = {}; + // Ensure we have options set up + options = options == null ? {} : options; + + // If a pipeline was provided + pipe = Array.isArray(options.pipe) ? options.pipe : pipe; + // Set passed in batchSize if provided + if(typeof options.batchSize == 'number') _cursor_options.batchSize = options.batchSize; + // Get the read Preference + var readPreference = shared._getReadConcern(collection, options); + + // Set up + Readable.call(this, {objectMode: true}); + + // Contains connection + var connection = null; + + // Set the read preference + var _options = { + readPreference: readPreference + }; + + // Actual command + var command = { + aggregate: collection.collectionName + , pipeline: pipe + , cursor: _cursor_options + } + + // If allowDiskUsage is set + if(typeof options.allowDiskUsage == 'boolean') + command.allowDiskUsage = options.allowDiskUsage; + + // Command cursor (if we support one) + var commandCursor = new CommandCursor(collection.db, collection, command); + + // // Internal cursor methods + // this.find = function(selector) { + // pipe.push({$match: selector}); + // return self; + // } + + // this.unwind = function(unwind) { + // pipe.push({$unwind: unwind}); + // return self; + // } + + // this.group = function(group) { + // pipe.push({$group: group}); + // return self; + // } + + // this.project = function(project) { + // pipe.push({$project: project}); + // return self; + // } + + // this.limit = function(limit) { + // pipe.push({$limit: limit}); + // return self; + // } + + // this.geoNear = function(geoNear) { + // pipe.push({$geoNear: geoNear}); + // return self; + // } + + // this.sort = function(sort) { + // pipe.push({$sort: sort}); + // return self; + // } + + // this.withReadPreference = function(read_preference) { + // _options.readPreference = read_preference; + // return self; + // } + + // this.withQueryOptions = function(options) { + // if(options.batchSize) { + // _cursor_options.batchSize = options.batchSize; + // } + + // // Return the cursor + // return self; + // } + + // this.skip = function(skip) { + // pipe.push({$skip: skip}); + // return self; + // } + + // this.allowDiskUsage = function(allowDiskUsage) { + // command.allowDiskUsage = allowDiskUsage; + // return self; + // } + + this.explain = function(callback) { + if(typeof callback != 'function') + throw utils.toError("AggregationCursor explain requires a callback function"); + + // Add explain options + _options.explain = true; + // Execute aggregation pipeline + collection.aggregate(pipe, _options, function(err, results) { + if(err) return callback(err, null); + callback(null, results); + }); + } + + // this.maxTimeMS = function(maxTimeMS) { + // if(typeof maxTimeMS != 'number') { + // throw new Error("maxTimeMS must be a number"); + // } + + // // Save the maxTimeMS + // _options.maxTimeMS = maxTimeMS + // // Set the maxTimeMS on the command cursor + // commandCursor.maxTimeMS(maxTimeMS); + // return self; + // } + + this.get = function(callback) { + if(typeof callback != 'function') + throw utils.toError("AggregationCursor get requires a callback function"); + // Checkout a connection + var _connection = collection.db.serverConfig.checkoutReader(_options.readPreference); + // Fall back + if(!_connection.serverCapabilities.hasAggregationCursor) { + return collection.aggregate(pipe, _options, function(err, results) { + if(err) return callback(err); + callback(null, results); + }); + } + + // Execute get using command Cursor + commandCursor.get({connection: _connection}, callback); + } + + this.getOne = function(callback) { + if(typeof callback != 'function') + throw utils.toError("AggregationCursor getOne requires a callback function"); + // Set the limit to 1 + pipe.push({$limit: 1}); + // For now we have no cursor command so let's just wrap existing results + collection.aggregate(pipe, _options, function(err, results) { + if(err) return callback(err); + callback(null, results[0]); + }); + } + + this.each = function(callback) { + // Checkout a connection if we have none + if(!connection) + connection = collection.db.serverConfig.checkoutReader(_options.readPreference); + + // Fall back + if(!connection.serverCapabilities.hasAggregationCursor) { + collection.aggregate(pipe, _options, function(err, _results) { + if(err) return callback(err); + + while(_results.length > 0) { + callback(null, _results.shift()); + } + + callback(null, null); + }); + } + + // Execute each using command Cursor + commandCursor.each({connection: connection}, callback); + } + + this.next = function(callback) { + if(typeof callback != 'function') + throw utils.toError("AggregationCursor next requires a callback function"); + + // Checkout a connection if we have none + if(!connection) + connection = collection.db.serverConfig.checkoutReader(_options.readPreference); + + // Fall back + if(!connection.serverCapabilities.hasAggregationCursor) { + if(!results) { + // For now we have no cursor command so let's just wrap existing results + return collection.aggregate(pipe, _options, function(err, _results) { + if(err) return callback(err); + results = _results; + + // Ensure we don't issue undefined + var item = results.shift(); + callback(null, item ? item : null); + }); + } + + // Ensure we don't issue undefined + var item = results.shift(); + // Return the item + return callback(null, item ? item : null); + } + + // Execute next using command Cursor + commandCursor.next({connection: connection}, callback); + } + + // + // Close method + // + this.close = function(callback) { + if(typeof callback != 'function') + throw utils.toError("AggregationCursor close requires a callback function"); + + // Checkout a connection if we have none + if(!connection) + connection = collection.db.serverConfig.checkoutReader(_options.readPreference); + + // Fall back + if(!connection.serverCapabilities.hasAggregationCursor) { + return callback(null, null); + } + + // Execute next using command Cursor + commandCursor.close({connection: connection}, callback); + } + + // + // Stream method + // + this._read = function(n) { + self.next(function(err, result) { + if(err) { + self.emit('error', err); + return self.push(null); + } + + self.push(result); + }); + } +} + +// Inherit from Readable +if(Readable != null) { + inherits(AggregationCursor, Readable); +} + +// Exports the Aggregation Framework +exports.AggregationCursor = AggregationCursor; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js index 0955896..39bf2ab 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js @@ -16,12 +16,17 @@ var authenticate = function(db, username, password, authdb, options, callback) { // Execute all four db._executeQueryCommand(DbCommand.createGetNonceCommand(db), options, function(err, result, connection) { + // console.log("--------------------------------------------- MONGODB-CR 0") + // console.dir(err) // Execute on all the connections if(err == null) { // Nonce used to make authentication request with md5 hash var nonce = result.documents[0].nonce; // Execute command db._executeQueryCommand(DbCommand.createAuthenticationCommand(db, username, password, nonce, authdb), {connection:connection}, function(err, result) { + // console.log("--------------------------------------------- MONGODB-CR 1") + // console.dir(err) + // console.dir(result) // Count down numberOfConnections = numberOfConnections - 1; // Ensure we save any error diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/auth/mongodb_x509.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/auth/mongodb_x509.js new file mode 100644 index 0000000..de68030 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/auth/mongodb_x509.js @@ -0,0 +1,62 @@ +var DbCommand = require('../commands/db_command').DbCommand + , utils = require('../utils') + , Binary = require('bson').Binary + , format = require('util').format; + +var authenticate = function(db, username, password, options, callback) { + var numberOfConnections = 0; + var errorObject = null; + + if(options['connection'] != null) { + //if a connection was explicitly passed on options, then we have only one... + numberOfConnections = 1; + } else { + // Get the amount of connections in the pool to ensure we have authenticated all comments + numberOfConnections = db.serverConfig.allRawConnections().length; + options['onAll'] = true; + } + + // Let's start the sasl process + var command = { + authenticate: 1 + , mechanism: 'MONGODB-X509' + , user: username + }; + + // Grab all the connections + var connections = options['connection'] != null ? [options['connection']] : db.serverConfig.allRawConnections(); + + // Authenticate all connections + for(var i = 0; i < numberOfConnections; i++) { + var connection = connections[i]; + // Execute first sasl step + db._executeQueryCommand(DbCommand.createDbCommand(db, command, {}, '$external'), {connection:connection}, function(err, result) { + // Count down + numberOfConnections = numberOfConnections - 1; + + // Ensure we save any error + if(err) { + errorObject = err; + } else if(result.documents[0].err != null || result.documents[0].errmsg != null){ + errorObject = utils.toError(result.documents[0]); + } + + // Work around the case where the number of connections are 0 + if(numberOfConnections <= 0 && typeof callback == 'function') { + var internalCallback = callback; + callback = null; + + if(errorObject == null && result.documents[0].ok == 1) { + // We authenticated correctly save the credentials + db.serverConfig.auth.add('MONGODB-X509', db.databaseName, username, password); + // Return callback + internalCallback(errorObject, true); + } else { + internalCallback(errorObject, false); + } + } + }); + } +} + +exports.authenticate = authenticate; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection.js index 7c2ae0f..448996b 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection.js @@ -10,22 +10,17 @@ var InsertCommand = require('./commands/insert_command').InsertCommand , ObjectID = require('bson').ObjectID , Code = require('bson').Code , Cursor = require('./cursor').Cursor - , utils = require('./utils'); + , utils = require('./utils') + , shared = require('./collection/shared') + , core = require('./collection/core') + , query = require('./collection/query') + , index = require('./collection/index') + , geo = require('./collection/geo') + , commands = require('./collection/commands') + , aggregation = require('./collection/aggregation'); /** - * Precompiled regexes - * @ignore -**/ -const eErrorMessages = /No matching object found/; - -/** - * toString helper. - * @ignore - */ -var toString = Object.prototype.toString; - -/** - * Create a new Collection instance (INTERNAL TYPE) + * Create a new Collection instance (INTERNAL TYPE, do not instantiate directly) * * Options * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). @@ -44,7 +39,7 @@ var toString = Object.prototype.toString; function Collection (db, collectionName, pkFactory, options) { if(!(this instanceof Collection)) return new Collection(db, collectionName, pkFactory, options); - checkCollectionName(collectionName); + shared.checkCollectionName(collectionName); this.db = db; this.collectionName = collectionName; @@ -57,18 +52,20 @@ function Collection (db, collectionName, pkFactory, options) { this.readPreference = options == null || options.readPreference == null ? db.serverConfig.options.readPreference : options.readPreference; this.readPreference = this.readPreference == null ? 'primary' : this.readPreference; + this.pkFactory = pkFactory == null ? ObjectID : pkFactory; - var self = this; + // Server Capabilities + this.serverCapabilities = this.db.serverConfig._serverCapabilities; } /** * Inserts a single document or a an array of documents into MongoDB. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning @@ -86,53 +83,19 @@ function Collection (db, collectionName, pkFactory, options) { * @return {null} * @api public */ -Collection.prototype.insert = function insert (docs, options, callback) { - if ('function' === typeof options) callback = options, options = {}; - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - var self = this; - insertAll(self, Array.isArray(docs) ? docs : [docs], options, callback); - return this; -}; - -/** - * @ignore - */ -var checkCollectionName = function checkCollectionName (collectionName) { - if('string' !== typeof collectionName) { - throw Error("collection name must be a String"); - } - - if(!collectionName || collectionName.indexOf('..') != -1) { - throw Error("collection names cannot be empty"); - } - - if(collectionName.indexOf('$') != -1 && - collectionName.match(/((^\$cmd)|(oplog\.\$main))/) == null) { - throw Error("collection names must not contain '$'"); - } - - if(collectionName.match(/^\.|\.$/) != null) { - throw Error("collection names must not start or end with '.'"); - } - - // Validate that we are not passing 0x00 in the colletion name - if(!!~collectionName.indexOf("\x00")) { - throw new Error("collection names cannot contain a null character"); - } -}; +Collection.prototype.insert = function() { return core.insert; }(); /** * Removes documents specified by `selector` from the db. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning * - **single** {Boolean, default:false}, removes the first document found. - * - * Deprecated Options + * + * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} [selector] optional select, no selector is equivalent to removing all documents. @@ -141,82 +104,7 @@ var checkCollectionName = function checkCollectionName (collectionName) { * @return {null} * @api public */ -Collection.prototype.remove = function remove(selector, options, callback) { - if ('function' === typeof selector) { - callback = selector; - selector = options = {}; - } else if ('function' === typeof options) { - callback = options; - options = {}; - } - - // Ensure options - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - // Ensure we have at least an empty selector - selector = selector == null ? {} : selector; - // Set up flags for the command, if we have a single document remove - var flags = 0 | (options.single ? 1 : 0); - - // DbName - var dbName = options['dbName']; - // If no dbname defined use the db one - if(dbName == null) { - dbName = this.db.databaseName; - } - - // Create a delete command - var deleteCommand = new DeleteCommand( - this.db - , dbName + "." + this.collectionName - , selector - , flags); - - var self = this; - var errorOptions = _getWriteConcern(self, options, callback); - // Execute the command, do not add a callback as it's async - if(_hasWriteConcern(errorOptions) && typeof callback == 'function') { - // Insert options - var commandOptions = {read:false}; - // If we have safe set set async to false - if(errorOptions == null) commandOptions['async'] = true; - // Set safe option - commandOptions['safe'] = true; - // If we have an error option - if(typeof errorOptions == 'object') { - var keys = Object.keys(errorOptions); - for(var i = 0; i < keys.length; i++) { - commandOptions[keys[i]] = errorOptions[keys[i]]; - } - } - - // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) - this.db._executeRemoveCommand(deleteCommand, commandOptions, function (err, error) { - error = error && error.documents; - if(!callback) return; - - if(err) { - callback(err); - } else if(error[0].err || error[0].errmsg) { - callback(utils.toError(error[0])); - } else { - callback(null, error[0].n); - } - }); - } else if(_hasWriteConcern(errorOptions) && callback == null) { - throw new Error("Cannot use a writeConcern without a provided callback"); - } else { - var result = this.db._executeRemoveCommand(deleteCommand); - // If no callback just return - if (!callback) return; - // If error return error - if (result instanceof Error) { - return callback(result); - } - // Otherwise just return - return callback(); - } -}; +Collection.prototype.remove = function() { return core.remove; }(); /** * Renames the collection. @@ -230,151 +118,19 @@ Collection.prototype.remove = function remove(selector, options, callback) { * @return {null} * @api public */ -Collection.prototype.rename = function rename(newName, options, callback) { - var self = this; - if(typeof options == 'function') { - callback = options; - options = {} - } - - // Ensure the new name is valid - checkCollectionName(newName); - - // Execute the command, return the new renamed collection if successful - self.db._executeQueryCommand(DbCommand.createRenameCollectionCommand(self.db, self.collectionName, newName, options) - , utils.handleSingleCommandResultReturn(true, false, function(err, result) { - if(err) return callback(err, null) - try { - if(options.new_collection) - return callback(null, new Collection(self.db, newName, self.db.pkFactory)); - self.collectionName = newName; - callback(null, self); - } catch(err) { - callback(err, null); - } - })); -} - -/** - * @ignore - */ -var insertAll = function insertAll (self, docs, options, callback) { - if('function' === typeof options) callback = options, options = {}; - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - - // Insert options (flags for insert) - var insertFlags = {}; - // If we have a mongodb version >= 1.9.1 support keepGoing attribute - if(options['keepGoing'] != null) { - insertFlags['keepGoing'] = options['keepGoing']; - } - - // If we have a mongodb version >= 1.9.1 support keepGoing attribute - if(options['continueOnError'] != null) { - insertFlags['continueOnError'] = options['continueOnError']; - } - - // DbName - var dbName = options['dbName']; - // If no dbname defined use the db one - if(dbName == null) { - dbName = self.db.databaseName; - } - - // Either use override on the function, or go back to default on either the collection - // level or db - if(options['serializeFunctions'] != null) { - insertFlags['serializeFunctions'] = options['serializeFunctions']; - } else { - insertFlags['serializeFunctions'] = self.serializeFunctions; - } - - // Get checkKeys value - var checkKeys = typeof options.checkKeys != 'boolean' ? true : options.checkKeys; - - // Pass in options - var insertCommand = new InsertCommand( - self.db - , dbName + "." + self.collectionName, checkKeys, insertFlags); - - // Add the documents and decorate them with id's if they have none - for(var index = 0, len = docs.length; index < len; ++index) { - var doc = docs[index]; - - // Add id to each document if it's not already defined - if (!(Buffer.isBuffer(doc)) - && doc['_id'] == null - && self.db.forceServerObjectId != true - && options.forceServerObjectId != true) { - doc['_id'] = self.pkFactory.createPk(); - } - - insertCommand.add(doc); - } - - // Collect errorOptions - var errorOptions = _getWriteConcern(self, options, callback); - // Default command options - var commandOptions = {}; - // If safe is defined check for error message - if(_hasWriteConcern(errorOptions) && typeof callback == 'function') { - // Insert options - commandOptions['read'] = false; - // If we have safe set set async to false - if(errorOptions == null) commandOptions['async'] = true; - - // Set safe option - commandOptions['safe'] = errorOptions; - // If we have an error option - if(typeof errorOptions == 'object') { - var keys = Object.keys(errorOptions); - for(var i = 0; i < keys.length; i++) { - commandOptions[keys[i]] = errorOptions[keys[i]]; - } - } - - // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) - self.db._executeInsertCommand(insertCommand, commandOptions, function (err, error) { - error = error && error.documents; - if(!callback) return; - - if (err) { - callback(err); - } else if(error[0].err || error[0].errmsg) { - callback(utils.toError(error[0])); - } else { - callback(null, docs); - } - }); - } else if(_hasWriteConcern(errorOptions) && callback == null) { - throw new Error("Cannot use a writeConcern without a provided callback"); - } else { - // Execute the call without a write concern - var result = self.db._executeInsertCommand(insertCommand, commandOptions); - // If no callback just return - if(!callback) return; - // If error return error - if(result instanceof Error) { - return callback(result); - } - - // Otherwise just return - return callback(null, docs); - } -}; +Collection.prototype.rename = function() { return commands.rename; }(); /** * Save a document. Simple full document replacement function. Not recommended for efficiency, use atomic * operators and update instead for more efficient operations. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning - * - * Deprecated Options + * + * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} [doc] the document to save @@ -383,37 +139,13 @@ var insertAll = function insertAll (self, docs, options, callback) { * @return {null} * @api public */ -Collection.prototype.save = function save(doc, options, callback) { - if('function' === typeof options) callback = options, options = null; - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - // Throw an error if attempting to perform a bulk operation - if(Array.isArray(doc)) throw new Error("doc parameter must be a single document"); - // Extract the id, if we have one we need to do a update command - var id = doc['_id']; - var commandOptions = _getWriteConcern(this, options, callback); - - if(id) { - commandOptions.upsert = true; - this.update({ _id: id }, doc, commandOptions, callback); - } else { - this.insert(doc, commandOptions, callback && function (err, docs) { - if(err) return callback(err, null); - - if(Array.isArray(docs)) { - callback(err, docs[0]); - } else { - callback(err, docs); - } - }); - } -}; +Collection.prototype.save = function() { return core.save; }(); /** * Updates documents. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning @@ -432,92 +164,13 @@ Collection.prototype.save = function save(doc, options, callback) { * @return {null} * @api public */ -Collection.prototype.update = function update(selector, document, options, callback) { - if('function' === typeof options) callback = options, options = null; - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - - // DbName - var dbName = options['dbName']; - // If no dbname defined use the db one - if(dbName == null) { - dbName = this.db.databaseName; - } - - // If we are not providing a selector or document throw - if(selector == null || typeof selector != 'object') return callback(new Error("selector must be a valid JavaScript object")); - if(document == null || typeof document != 'object') return callback(new Error("document must be a valid JavaScript object")); - - // Either use override on the function, or go back to default on either the collection - // level or db - if(options['serializeFunctions'] != null) { - options['serializeFunctions'] = options['serializeFunctions']; - } else { - options['serializeFunctions'] = this.serializeFunctions; - } - - // Build the options command - var updateCommand = new UpdateCommand( - this.db - , dbName + "." + this.collectionName - , selector - , document - , options); - - var self = this; - // Unpack the error options if any - var errorOptions = _getWriteConcern(this, options, callback); - // If safe is defined check for error message - if(_hasWriteConcern(errorOptions) && typeof callback == 'function') { - // Insert options - var commandOptions = {read:false}; - // If we have safe set set async to false - if(errorOptions == null) commandOptions['async'] = true; - // Set safe option - commandOptions['safe'] = errorOptions; - // If we have an error option - if(typeof errorOptions == 'object') { - var keys = Object.keys(errorOptions); - for(var i = 0; i < keys.length; i++) { - commandOptions[keys[i]] = errorOptions[keys[i]]; - } - } - - // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) - this.db._executeUpdateCommand(updateCommand, commandOptions, function (err, error) { - error = error && error.documents; - if(!callback) return; - - if(err) { - callback(err); - } else if(error[0].err || error[0].errmsg) { - callback(utils.toError(error[0])); - } else { - // Perform the callback - callback(null, error[0].n, error[0]); - } - }); - } else if(_hasWriteConcern(errorOptions) && callback == null) { - throw new Error("Cannot use a writeConcern without a provided callback"); - } else { - // Execute update - var result = this.db._executeUpdateCommand(updateCommand); - // If no callback just return - if (!callback) return; - // If error return error - if (result instanceof Error) { - return callback(result); - } - // Otherwise just return - return callback(); - } -}; +Collection.prototype.update = function() { return core.update; }(); /** * The distinct command returns returns a list of distinct values for the given key across a collection. * * Options - * - **readPreference** {String}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {String} key key to run distinct against. * @param {Object} [query] option query to narrow the returned objects. @@ -526,28 +179,7 @@ Collection.prototype.update = function update(selector, document, options, callb * @return {null} * @api public */ -Collection.prototype.distinct = function distinct(key, query, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - query = args.length ? args.shift() || {} : {}; - options = args.length ? args.shift() || {} : {}; - - var mapCommandHash = { - 'distinct': this.collectionName - , 'query': query - , 'key': key - }; - - // Set read preference if we set one - var readPreference = options['readPreference'] ? options['readPreference'] : false; - // Execute the command - this.db._executeQueryCommand(DbCommand.createDbSlaveOkCommand(this.db, mapCommandHash) - , {read:readPreference} - , utils.handleSingleCommandResultReturn(null, null, function(err, result) { - if(err) return callback(err, null); - callback(null, result.values); - })); -}; +Collection.prototype.distinct = function() { return commands.distinct; }(); /** * Count number of matching documents in the db to a query. @@ -555,7 +187,7 @@ Collection.prototype.distinct = function distinct(key, query, options, callback) * Options * - **skip** {Number}, The number of documents to skip for the count. * - **limit** {Number}, The limit of documents to count. - * - **readPreference** {String}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Object} [query] query to filter by before performing count. * @param {Object} [options] additional options during count. @@ -563,38 +195,7 @@ Collection.prototype.distinct = function distinct(key, query, options, callback) * @return {null} * @api public */ -Collection.prototype.count = function count (query, options, callback) { - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - query = args.length ? args.shift() || {} : {}; - options = args.length ? args.shift() || {} : {}; - var skip = options.skip; - var limit = options.limit; - - // Final query - var commandObject = { - 'count': this.collectionName - , 'query': query - , 'fields': null - }; - - // Add limit and skip if defined - if(typeof skip == 'number') commandObject.skip = skip; - if(typeof limit == 'number') commandObject.limit = limit; - - // Set read preference if we set one - var readPreference = _getReadConcern(this, options); - - // Execute the command - this.db._executeQueryCommand(DbCommand.createDbSlaveOkCommand(this.db, commandObject) - , {read: readPreference} - , utils.handleSingleCommandResultReturn(null, null, function(err, result) { - if(err) return callback(err, null); - if(result == null) return callback(new Error("no result returned for count"), null); - callback(null, result.n); - })); -}; - +Collection.prototype.count = function() { return commands.count; }(); /** * Drop the collection @@ -618,8 +219,8 @@ Collection.prototype.drop = function drop(callback) { * - **remove** {Boolean, default:false}, set to true to remove the object before returning. * - **upsert** {Boolean, default:false}, perform an upsert operation. * - **new** {Boolean, default:false}, set to true if you want to return the modified object rather than the original. Ignored for remove. - * - * Deprecated Options + * + * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} query query object to locate the object to modify @@ -630,60 +231,18 @@ Collection.prototype.drop = function drop(callback) { * @return {null} * @api public */ -Collection.prototype.findAndModify = function findAndModify (query, sort, doc, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - sort = args.length ? args.shift() || [] : []; - doc = args.length ? args.shift() : null; - options = args.length ? args.shift() || {} : {}; - var self = this; - - var queryObject = { - 'findandmodify': this.collectionName - , 'query': query - , 'sort': utils.formattedOrderClause(sort) - }; - - queryObject.new = options.new ? 1 : 0; - queryObject.remove = options.remove ? 1 : 0; - queryObject.upsert = options.upsert ? 1 : 0; - - if (options.fields) { - queryObject.fields = options.fields; - } - - if (doc && !options.remove) { - queryObject.update = doc; - } - - // Either use override on the function, or go back to default on either the collection - // level or db - if(options['serializeFunctions'] != null) { - options['serializeFunctions'] = options['serializeFunctions']; - } else { - options['serializeFunctions'] = this.serializeFunctions; - } - - // Only run command and rely on getLastError command - var command = DbCommand.createDbCommand(this.db, queryObject, options) - // Execute command - this.db._executeQueryCommand(command - , {read:false}, utils.handleSingleCommandResultReturn(null, null, function(err, result) { - if(err) return callback(err, null); - return callback(null, result.value, result); - })); -} +Collection.prototype.findAndModify = function() { return core.findAndModify; }(); /** * Find and remove a document * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning - * - * Deprecated Options + * + * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} query query object to locate the object to modify @@ -693,22 +252,7 @@ Collection.prototype.findAndModify = function findAndModify (query, sort, doc, o * @return {null} * @api public */ -Collection.prototype.findAndRemove = function(query, sort, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - sort = args.length ? args.shift() || [] : []; - options = args.length ? args.shift() || {} : {}; - // Add the remove option - options['remove'] = true; - // Execute the callback - this.findAndModify(query, sort, null, options, callback); -} - -var testForFields = { - limit: 1, sort: 1, fields:1, skip: 1, hint: 1, explain: 1, snapshot: 1, timeout: 1, tailable: 1, tailableRetryInterval: 1 - , numberOfRetries: 1, awaitdata: 1, exhaust: 1, batchSize: 1, returnKey: 1, maxScan: 1, min: 1, max: 1, showDiskLoc: 1 - , comment: 1, raw: 1, readPreference: 1, partial: 1, read: 1, dbName: 1 -}; +Collection.prototype.findAndRemove = function() { return core.findAndRemove; }(); /** * Creates a cursor for a query that can be used to iterate over results from MongoDB @@ -735,6 +279,7 @@ var testForFields = { * - **tailableRetryInterval** {Number, default:100}, specify the miliseconds between getMores on tailable cursor. * - **numberOfRetries** {Number, default:5}, specify the number of times to retry the tailable cursor. * - **awaitdata** {Boolean, default:false} allow the cursor to wait for data, only applicable for tailable cursor. + * - **oplogReplay** {Boolean, default:false} sets an internal flag, only applicable for tailable cursor. * - **exhaust** {Boolean, default:false} have the server send all the documents at once as getMore packets, not recommended. * - **batchSize** {Number, default:0}, set the batchSize for the getMoreCommand when iterating over the query results. * - **returnKey** {Boolean, default:false}, only return the index key. @@ -744,7 +289,7 @@ var testForFields = { * - **showDiskLoc** {Boolean, default:false}, Show disk location of results. * - **comment** {String}, You can put a $comment field on a query to make looking in the profiler logs simpler. * - **raw** {Boolean, default:false}, Return all BSON documents as Raw Buffer documents. - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **numberOfRetries** {Number, default:5}, if using awaidata specifies the number of times to retry on timeout. * - **partial** {Boolean, default:false}, specify if the cursor should return partial results when querying against a sharded system * @@ -754,154 +299,7 @@ var testForFields = { * @return {Cursor} returns a cursor to the query * @api public */ -Collection.prototype.find = function find () { - var options - , args = Array.prototype.slice.call(arguments, 0) - , has_callback = typeof args[args.length - 1] === 'function' - , has_weird_callback = typeof args[0] === 'function' - , callback = has_callback ? args.pop() : (has_weird_callback ? args.shift() : null) - , len = args.length - , selector = len >= 1 ? args[0] : {} - , fields = len >= 2 ? args[1] : undefined; - - if(len === 1 && has_weird_callback) { - // backwards compat for callback?, options case - selector = {}; - options = args[0]; - } - - if(len === 2 && !Array.isArray(fields)) { - var fieldKeys = Object.getOwnPropertyNames(fields); - var is_option = false; - - for(var i = 0; i < fieldKeys.length; i++) { - if(testForFields[fieldKeys[i]] != null) { - is_option = true; - break; - } - } - - if(is_option) { - options = fields; - fields = undefined; - } else { - options = {}; - } - } else if(len === 2 && Array.isArray(fields) && !Array.isArray(fields[0])) { - var newFields = {}; - // Rewrite the array - for(var i = 0; i < fields.length; i++) { - newFields[fields[i]] = 1; - } - // Set the fields - fields = newFields; - } - - if(3 === len) { - options = args[2]; - } - - // Ensure selector is not null - selector = selector == null ? {} : selector; - // Validate correctness off the selector - var object = selector; - if(Buffer.isBuffer(object)) { - var object_size = object[0] | object[1] << 8 | object[2] << 16 | object[3] << 24; - if(object_size != object.length) { - var error = new Error("query selector raw message size does not match message header size [" + object.length + "] != [" + object_size + "]"); - error.name = 'MongoError'; - throw error; - } - } - - // Validate correctness of the field selector - var object = fields; - if(Buffer.isBuffer(object)) { - var object_size = object[0] | object[1] << 8 | object[2] << 16 | object[3] << 24; - if(object_size != object.length) { - var error = new Error("query fields raw message size does not match message header size [" + object.length + "] != [" + object_size + "]"); - error.name = 'MongoError'; - throw error; - } - } - - // Check special case where we are using an objectId - if(selector instanceof ObjectID || (selector != null && selector._bsontype == 'ObjectID')) { - selector = {_id:selector}; - } - - // If it's a serialized fields field we need to just let it through - // user be warned it better be good - if(options && options.fields && !(Buffer.isBuffer(options.fields))) { - fields = {}; - - if(Array.isArray(options.fields)) { - if(!options.fields.length) { - fields['_id'] = 1; - } else { - for (var i = 0, l = options.fields.length; i < l; i++) { - fields[options.fields[i]] = 1; - } - } - } else { - fields = options.fields; - } - } - - if (!options) options = {}; - options.skip = len > 3 ? args[2] : options.skip ? options.skip : 0; - options.limit = len > 3 ? args[3] : options.limit ? options.limit : 0; - options.raw = options.raw != null && typeof options.raw === 'boolean' ? options.raw : this.raw; - options.hint = options.hint != null ? normalizeHintField(options.hint) : this.internalHint; - options.timeout = len == 5 ? args[4] : typeof options.timeout === 'undefined' ? undefined : options.timeout; - // If we have overridden slaveOk otherwise use the default db setting - options.slaveOk = options.slaveOk != null ? options.slaveOk : this.db.slaveOk; - - // Set option - var o = options; - // Support read/readPreference - if(o["read"] != null) o["readPreference"] = o["read"]; - // Set the read preference - o.read = o["readPreference"] ? o.readPreference : this.readPreference; - // Adjust slave ok if read preference is secondary or secondary only - if(o.read == "secondary" || o.read == "secondaryOnly") options.slaveOk = true; - - // callback for backward compatibility - if(callback) { - // TODO refactor Cursor args - callback(null, new Cursor(this.db, this, selector, fields, o)); - } else { - return new Cursor(this.db, this, selector, fields, o); - } -}; - -/** - * Normalizes a `hint` argument. - * - * @param {String|Object|Array} hint - * @return {Object} - * @api private - */ -var normalizeHintField = function normalizeHintField(hint) { - var finalHint = null; - - if(typeof hint == 'string') { - finalHint = hint; - } else if(Array.isArray(hint)) { - finalHint = {}; - - hint.forEach(function(param) { - finalHint[param] = 1; - }); - } else if(hint != null && typeof hint == 'object') { - finalHint = {}; - for (var name in hint) { - finalHint[name] = hint[name]; - } - } - - return finalHint; -}; +Collection.prototype.find = function() { return query.find; }(); /** * Finds a single document based on the query @@ -933,7 +331,7 @@ var normalizeHintField = function normalizeHintField(hint) { * - **showDiskLoc** {Boolean, default:false}, Show disk location of results. * - **comment** {String}, You can put a $comment field on a query to make looking in the profiler logs simpler. * - **raw** {Boolean, default:false}, Return all BSON documents as Raw Buffer documents. - * - **readPreference** {String}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **partial** {Boolean, default:false}, specify if the cursor should return partial results when querying against a sharded system * * @param {Object|ObjectID} query query object to locate the object to modify @@ -942,23 +340,13 @@ var normalizeHintField = function normalizeHintField(hint) { * @return {Cursor} returns a cursor to the query * @api public */ -Collection.prototype.findOne = function findOne () { - var self = this; - var args = Array.prototype.slice.call(arguments, 0); - var callback = args.pop(); - var cursor = this.find.apply(this, args).limit(-1).batchSize(1); - // Return the item - cursor.nextObject(function(err, item) { - if(err != null) return callback(utils.toError(err), null); - callback(null, item); - }); -}; +Collection.prototype.findOne = function() { return query.findOne; }(); /** * Creates an index on the collection. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning @@ -971,8 +359,8 @@ Collection.prototype.findOne = function findOne () { * - **v** {Number}, specify the format version of the indexes. * - **expireAfterSeconds** {Number}, allows you to expire data on indexes applied to a data (MongoDB 2.2 or higher) * - **name** {String}, override the autogenerated index name (useful if the resulting name is larger than 128 bytes) - * - * Deprecated Options + * + * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} fieldOrSpec fieldOrSpec that defines the index. @@ -981,25 +369,13 @@ Collection.prototype.findOne = function findOne () { * @return {null} * @api public */ -Collection.prototype.createIndex = function createIndex (fieldOrSpec, options, callback) { - // Clean up call - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; - options = typeof callback === 'function' ? options : callback; - options = options == null ? {} : options; - - // Collect errorOptions - var errorOptions = _getWriteConcern(this, options, callback); - // Execute create index - this.db.createIndex(this.collectionName, fieldOrSpec, options, callback); -}; +Collection.prototype.createIndex = function() { return index.createIndex; }(); /** * Ensures that an index exists, if it does not it creates it * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning @@ -1012,8 +388,8 @@ Collection.prototype.createIndex = function createIndex (fieldOrSpec, options, c * - **v** {Number}, specify the format version of the indexes. * - **expireAfterSeconds** {Number}, allows you to expire data on indexes applied to a data (MongoDB 2.2 or higher) * - **name** {String}, override the autogenerated index name (useful if the resulting name is larger than 128 bytes) - * - * Deprecated Options + * + * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} fieldOrSpec fieldOrSpec that defines the index. @@ -1022,20 +398,7 @@ Collection.prototype.createIndex = function createIndex (fieldOrSpec, options, c * @return {null} * @api public */ -Collection.prototype.ensureIndex = function ensureIndex (fieldOrSpec, options, callback) { - // Clean up call - if (typeof callback === 'undefined' && typeof options === 'function') { - callback = options; - options = {}; - } - - if (options == null) { - options = {}; - } - - // Execute create index - this.db.ensureIndex(this.collectionName, fieldOrSpec, options, callback); -}; +Collection.prototype.ensureIndex = function() { return index.ensureIndex; }(); /** * Retrieves this collections index info. @@ -1048,14 +411,7 @@ Collection.prototype.ensureIndex = function ensureIndex (fieldOrSpec, options, c * @return {null} * @api public */ -Collection.prototype.indexInformation = function indexInformation (options, callback) { - // Unpack calls - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; - // Call the index information - this.db.indexInformation(this.collectionName, options, callback); -}; +Collection.prototype.indexInformation = function() { return index.indexInformation; }(); /** * Drops an index from this collection. @@ -1076,12 +432,7 @@ Collection.prototype.dropIndex = function dropIndex (name, callback) { * @return {null} * @api public */ -Collection.prototype.dropAllIndexes = function dropIndexes (callback) { - this.db.dropIndex(this.collectionName, '*', function (err, result) { - if(err) return callback(err, false); - callback(null, true); - }); -} +Collection.prototype.dropAllIndexes = function() { return index.dropAllIndexes; }(); /** * Drops all indexes from this collection. @@ -1091,7 +442,7 @@ Collection.prototype.dropAllIndexes = function dropIndexes (callback) { * @return {null} * @api private */ -Collection.prototype.dropIndexes = Collection.prototype.dropAllIndexes; +Collection.prototype.dropIndexes = function() { return Collection.prototype.dropAllIndexes; }(); /** * Reindex all indexes on the collection @@ -1118,7 +469,7 @@ Collection.prototype.reIndex = function(callback) { * - **scope** {Object}, can pass in variables that can be access from map/reduce/finalize. * - **jsMode** {Boolean, default:false}, it is possible to make the execution stay in JS. Provided in MongoDB > 2.0.X. * - **verbose** {Boolean, default:false}, provide statistics on job execution time. - * - **readPreference** {String, only for inline results}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String, only for inline results}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Function|String} map the mapping function. * @param {Function|String} reduce the reduce function. @@ -1127,157 +478,13 @@ Collection.prototype.reIndex = function(callback) { * @return {null} * @api public */ -Collection.prototype.mapReduce = function mapReduce (map, reduce, options, callback) { - if ('function' === typeof options) callback = options, options = {}; - // Out must allways be defined (make sure we don't break weirdly on pre 1.8+ servers) - if(null == options.out) { - throw new Error("the out option parameter must be defined, see mongodb docs for possible values"); - } - - if ('function' === typeof map) { - map = map.toString(); - } - - if ('function' === typeof reduce) { - reduce = reduce.toString(); - } - - if ('function' === typeof options.finalize) { - options.finalize = options.finalize.toString(); - } - - var mapCommandHash = { - mapreduce: this.collectionName - , map: map - , reduce: reduce - }; - - // Add any other options passed in - for (var name in options) { - if ('scope' == name) { - mapCommandHash[name] = processScope(options[name]); - } else { - mapCommandHash[name] = options[name]; - } - } - - // Set read preference if we set one - var readPreference = _getReadConcern(this, options); - - // If we have a read preference and inline is not set as output fail hard - if((readPreference != false && readPreference != 'primary') - && options['out'] && (options['out'].inline != 1 && options['out'] != 'inline')) { - throw new Error("a readPreference can only be provided when performing an inline mapReduce"); - } - - // self - var self = this; - var cmd = DbCommand.createDbCommand(this.db, mapCommandHash); - - this.db._executeQueryCommand(cmd, {read:readPreference}, function (err, result) { - if(err) return callback(err); - if(!result || !result.documents || result.documents.length == 0) - return callback(Error("command failed to return results"), null) - - // Check if we have an error - if(1 != result.documents[0].ok || result.documents[0].err || result.documents[0].errmsg) { - return callback(utils.toError(result.documents[0])); - } - - // Create statistics value - var stats = {}; - if(result.documents[0].timeMillis) stats['processtime'] = result.documents[0].timeMillis; - if(result.documents[0].counts) stats['counts'] = result.documents[0].counts; - if(result.documents[0].timing) stats['timing'] = result.documents[0].timing; - - // invoked with inline? - if(result.documents[0].results) { - return callback(null, result.documents[0].results, stats); - } - - // The returned collection - var collection = null; - - // If we have an object it's a different db - if(result.documents[0].result != null && typeof result.documents[0].result == 'object') { - var doc = result.documents[0].result; - collection = self.db.db(doc.db).collection(doc.collection); - } else { - // Create a collection object that wraps the result collection - collection = self.db.collection(result.documents[0].result) - } - - // If we wish for no verbosity - if(options['verbose'] == null || !options['verbose']) { - return callback(err, collection); - } - - // Return stats as third set of values - callback(err, collection, stats); - }); -}; - -/** - * Functions that are passed as scope args must - * be converted to Code instances. - * @ignore - */ -function processScope (scope) { - if (!utils.isObject(scope)) { - return scope; - } - - var keys = Object.keys(scope); - var i = keys.length; - var key; - - while (i--) { - key = keys[i]; - if ('function' == typeof scope[key]) { - scope[key] = new Code(String(scope[key])); - } - } - - return scope; -} - -/** - * Group function helper - * @ignore - */ -var groupFunction = function () { - var c = db[ns].find(condition); - var map = new Map(); - var reduce_function = reduce; - - while (c.hasNext()) { - var obj = c.next(); - var key = {}; - - for (var i = 0, len = keys.length; i < len; ++i) { - var k = keys[i]; - key[k] = obj[k]; - } - - var aggObj = map.get(key); - - if (aggObj == null) { - var newObj = Object.extend({}, key); - aggObj = Object.extend(newObj, initial); - map.put(key, aggObj); - } - - reduce_function(obj, aggObj); - } - - return { "result": map.values() }; -}.toString(); +Collection.prototype.mapReduce = function() { return aggregation.mapReduce; }(); /** * Run a group command across a collection - * + * * Options - * - **readPreference** {String}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Object|Array|Function|Code} keys an object, array or function expressing the keys to group by. * @param {Object} condition an optional condition that must be true for a row to be considered. @@ -1290,97 +497,7 @@ var groupFunction = function () { * @return {null} * @api public */ -Collection.prototype.group = function group(keys, condition, initial, reduce, finalize, command, options, callback) { - var args = Array.prototype.slice.call(arguments, 3); - callback = args.pop(); - // Fetch all commands - reduce = args.length ? args.shift() : null; - finalize = args.length ? args.shift() : null; - command = args.length ? args.shift() : null; - options = args.length ? args.shift() || {} : {}; - - // Make sure we are backward compatible - if(!(typeof finalize == 'function')) { - command = finalize; - finalize = null; - } - - if (!Array.isArray(keys) && keys instanceof Object && typeof(keys) !== 'function' && !(keys instanceof Code)) { - keys = Object.keys(keys); - } - - if(typeof reduce === 'function') { - reduce = reduce.toString(); - } - - if(typeof finalize === 'function') { - finalize = finalize.toString(); - } - - // Set up the command as default - command = command == null ? true : command; - - // Execute using the command - if(command) { - var reduceFunction = reduce instanceof Code - ? reduce - : new Code(reduce); - - var selector = { - group: { - 'ns': this.collectionName - , '$reduce': reduceFunction - , 'cond': condition - , 'initial': initial - , 'out': "inline" - } - }; - - // if finalize is defined - if(finalize != null) selector.group['finalize'] = finalize; - // Set up group selector - if ('function' === typeof keys || keys instanceof Code) { - selector.group.$keyf = keys instanceof Code - ? keys - : new Code(keys); - } else { - var hash = {}; - keys.forEach(function (key) { - hash[key] = 1; - }); - selector.group.key = hash; - } - - var cmd = DbCommand.createDbSlaveOkCommand(this.db, selector); - // Set read preference if we set one - var readPreference = _getReadConcern(this, options); - // Execute the command - this.db._executeQueryCommand(cmd - , {read:readPreference} - , utils.handleSingleCommandResultReturn(null, null, function(err, result) { - if(err) return callback(err, null); - callback(null, result.retval); - })); - } else { - // Create execution scope - var scope = reduce != null && reduce instanceof Code - ? reduce.scope - : {}; - - scope.ns = this.collectionName; - scope.keys = keys; - scope.condition = condition; - scope.initial = initial; - - // Pass in the function text to execute within mongodb. - var groupfn = groupFunction.replace(/ reduce;/, reduce.toString() + ';'); - - this.db.eval(new Code(groupfn, scope), function (err, results) { - if (err) return callback(err, null); - callback(null, results.result || results); - }); - } -}; +Collection.prototype.group = function() { return aggregation.group; }(); /** * Returns the options of the collection. @@ -1389,14 +506,7 @@ Collection.prototype.group = function group(keys, condition, initial, reduce, fi * @return {null} * @api public */ -Collection.prototype.options = function options(callback) { - this.db.collectionsInfo(this.collectionName, function (err, cursor) { - if (err) return callback(err); - cursor.nextObject(function (err, document) { - callback(err, document && document.options || null); - }); - }); -}; +Collection.prototype.options = function() { return commands.options; }(); /** * Returns if the collection is a capped collection @@ -1405,15 +515,7 @@ Collection.prototype.options = function options(callback) { * @return {null} * @api public */ -Collection.prototype.isCapped = function isCapped(callback) { - this.options(function(err, document) { - if(err != null) { - callback(err); - } else { - callback(null, document && document.capped); - } - }); -}; +Collection.prototype.isCapped = function() { return commands.isCapped; }(); /** * Checks if one or more indexes exist on the collection @@ -1423,25 +525,7 @@ Collection.prototype.isCapped = function isCapped(callback) { * @return {null} * @api public */ -Collection.prototype.indexExists = function indexExists(indexes, callback) { - this.indexInformation(function(err, indexInformation) { - // If we have an error return - if(err != null) return callback(err, null); - // Let's check for the index names - if(Array.isArray(indexes)) { - for(var i = 0; i < indexes.length; i++) { - if(indexInformation[indexes[i]] == null) { - return callback(null, false); - } - } - - // All keys found return true - return callback(null, true); - } else { - return callback(null, indexInformation[indexes] != null); - } - }); -} +Collection.prototype.indexExists = function() { return index.indexExists; }(); /** * Execute the geoNear command to search for items in the collection @@ -1454,7 +538,7 @@ Collection.prototype.indexExists = function indexExists(indexes, callback) { * - **spherical** {Boolean, default:false}, perform query using a spherical model. * - **uniqueDocs** {Boolean, default:false}, the closest location in a document to the center of the search region will always be returned MongoDB > 2.X. * - **includeLocs** {Boolean, default:false}, include the location data fields in the top level of the results MongoDB > 2.X. - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Number} x point to search on the x axis, ensure the indexes are ordered in the same order. * @param {Number} y point to search on the y axis, ensure the indexes are ordered in the same order. @@ -1463,43 +547,7 @@ Collection.prototype.indexExists = function indexExists(indexes, callback) { * @return {null} * @api public */ -Collection.prototype.geoNear = function geoNear(x, y, options, callback) { - var args = Array.prototype.slice.call(arguments, 2); - callback = args.pop(); - // Fetch all commands - options = args.length ? args.shift() || {} : {}; - - // Build command object - var commandObject = { - geoNear:this.collectionName, - near: [x, y] - } - - // Decorate object if any with known properties - if(options['num'] != null) commandObject['num'] = options['num']; - if(options['maxDistance'] != null) commandObject['maxDistance'] = options['maxDistance']; - if(options['distanceMultiplier'] != null) commandObject['distanceMultiplier'] = options['distanceMultiplier']; - if(options['query'] != null) commandObject['query'] = options['query']; - if(options['spherical'] != null) commandObject['spherical'] = options['spherical']; - if(options['uniqueDocs'] != null) commandObject['uniqueDocs'] = options['uniqueDocs']; - if(options['includeLocs'] != null) commandObject['includeLocs'] = options['includeLocs']; - - // Ensure we have the right read preference inheritance - options.readPreference = _getReadConcern(this, options); - - // Execute the command - this.db.command(commandObject, options, function (err, res) { - if (err) { - callback(err); - } else if (res.err || res.errmsg) { - callback(utils.toError(res)); - } else { - // should we only be returning res.results here? Not sure if the user - // should see the other return information - callback(null, res); - } - }); -} +Collection.prototype.geoNear = function() { return geo.geoNear; }(); /** * Execute a geo search using a geo haystack index on a collection. @@ -1508,7 +556,7 @@ Collection.prototype.geoNear = function geoNear(x, y, options, callback) { * - **maxDistance** {Number}, include results up to maxDistance from the point. * - **search** {Object}, filter the results by a query. * - **limit** {Number}, max number of results to return. - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Number} x point to search on the x axis, ensure the indexes are ordered in the same order. * @param {Number} y point to search on the y axis, ensure the indexes are ordered in the same order. @@ -1517,40 +565,7 @@ Collection.prototype.geoNear = function geoNear(x, y, options, callback) { * @return {null} * @api public */ -Collection.prototype.geoHaystackSearch = function geoHaystackSearch(x, y, options, callback) { - var args = Array.prototype.slice.call(arguments, 2); - callback = args.pop(); - // Fetch all commands - options = args.length ? args.shift() || {} : {}; - - // Build command object - var commandObject = { - geoSearch:this.collectionName, - near: [x, y] - } - - // Decorate object if any with known properties - if(options['maxDistance'] != null) commandObject['maxDistance'] = options['maxDistance']; - if(options['query'] != null) commandObject['search'] = options['query']; - if(options['search'] != null) commandObject['search'] = options['search']; - if(options['limit'] != null) commandObject['limit'] = options['limit']; - - // Ensure we have the right read preference inheritance - options.readPreference = _getReadConcern(this, options); - - // Execute the command - this.db.command(commandObject, options, function (err, res) { - if (err) { - callback(err); - } else if (res.err || res.errmsg) { - callback(utils.toError(res)); - } else { - // should we only be returning res.results here? Not sure if the user - // should see the other return information - callback(null, res); - } - }); -} +Collection.prototype.geoHaystackSearch = function() { return geo.geoHaystackSearch; }(); /** * Retrieve all the indexes on the collection. @@ -1560,15 +575,14 @@ Collection.prototype.geoHaystackSearch = function geoHaystackSearch(x, y, option * @api public */ Collection.prototype.indexes = function indexes(callback) { - // Return all the index information this.db.indexInformation(this.collectionName, {full:true}, callback); } /** - * Execute an aggregation framework pipeline against the collection, needs MongoDB >= 2.1 + * Execute an aggregation framework pipeline against the collection, needs MongoDB >= 2.2 * * Options - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Array} array containing all the aggregation framework commands for the execution. * @param {Object} [options] additional options during update. @@ -1576,75 +590,21 @@ Collection.prototype.indexes = function indexes(callback) { * @return {null} * @api public */ -Collection.prototype.aggregate = function(pipeline, options, callback) { - // * - **explain** {Boolean}, return the query plan for the aggregation pipeline instead of the results. 2.3, 2.4 - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - var self = this; - - // If we have any of the supported options in the options object - var opts = args[args.length - 1]; - options = opts.readPreference || opts.explain ? args.pop() : {} - - // Convert operations to an array - if(!Array.isArray(args[0])) { - pipeline = []; - // Push all the operations to the pipeline - for(var i = 0; i < args.length; i++) pipeline.push(args[i]); - } - - // Build the command - var command = { aggregate : this.collectionName, pipeline : pipeline}; - - // Ensure we have the right read preference inheritance - options.readPreference = _getReadConcern(this, options); - - // Execute the command - this.db.command(command, options, function(err, result) { - if(err) { - callback(err); - } else if(result['err'] || result['errmsg']) { - callback(utils.toError(result)); - } else if(typeof result == 'object' && result['serverPipeline']) { - callback(null, result); - } else { - callback(null, result.result); - } - }); -} +Collection.prototype.aggregate = function() { return aggregation.aggregate; }(); /** * Get all the collection statistics. * * Options * - **scale** {Number}, divide the returned sizes by scale value. - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Objects} [options] options for the stats command. * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from the stats method or null if an error occured. * @return {null} * @api public */ -Collection.prototype.stats = function stats(options, callback) { - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - // Fetch all commands - options = args.length ? args.shift() || {} : {}; - - // Build command object - var commandObject = { - collStats:this.collectionName, - } - - // Check if we have the scale value - if(options['scale'] != null) commandObject['scale'] = options['scale']; - - // Ensure we have the right read preference inheritance - options.readPreference = _getReadConcern(this, options); - - // Execute the command - this.db.command(commandObject, options, callback); -} +Collection.prototype.stats = function() { return commands.stats; }(); /** * @ignore @@ -1655,75 +615,10 @@ Object.defineProperty(Collection.prototype, "hint", { return this.internalHint; } , set: function (v) { - this.internalHint = normalizeHintField(v); + this.internalHint = shared.normalizeHintField(v); } }); -var _getReadConcern = function(self, options) { - if(options.readPreference) return options.readPreference; - if(self.readPreference) return self.readPreference; - if(self.db.readPreference) return self.readPreference; - return 'primary'; -} - -/** - * @ignore - */ -var _hasWriteConcern = function(errorOptions) { - return errorOptions == true - || errorOptions.w > 0 - || errorOptions.w == 'majority' - || errorOptions.j == true - || errorOptions.journal == true - || errorOptions.fsync == true -} - -/** - * @ignore - */ -var _setWriteConcernHash = function(options) { - var finalOptions = {}; - if(options.w != null) finalOptions.w = options.w; - if(options.journal == true) finalOptions.j = options.journal; - if(options.j == true) finalOptions.j = options.j; - if(options.fsync == true) finalOptions.fsync = options.fsync; - if(options.wtimeout != null) finalOptions.wtimeout = options.wtimeout; - return finalOptions; -} - -/** - * @ignore - */ -var _getWriteConcern = function(self, options, callback) { - // Final options - var finalOptions = {w:1}; - // Local options verification - if(options.w != null || typeof options.j == 'boolean' || typeof options.journal == 'boolean' || typeof options.fsync == 'boolean') { - finalOptions = _setWriteConcernHash(options); - } else if(typeof options.safe == "boolean") { - finalOptions = {w: (options.safe ? 1 : 0)}; - } else if(options.safe != null && typeof options.safe == 'object') { - finalOptions = _setWriteConcernHash(options.safe); - } else if(self.opts.w != null || typeof self.opts.j == 'boolean' || typeof self.opts.journal == 'boolean' || typeof self.opts.fsync == 'boolean') { - finalOptions = _setWriteConcernHash(self.opts); - } else if(typeof self.opts.safe == "boolean") { - finalOptions = {w: (self.opts.safe ? 1 : 0)}; - } else if(self.db.safe.w != null || typeof self.db.safe.j == 'boolean' || typeof self.db.safe.journal == 'boolean' || typeof self.db.safe.fsync == 'boolean') { - finalOptions = _setWriteConcernHash(self.db.safe); - } else if(self.db.options.w != null || typeof self.db.options.j == 'boolean' || typeof self.db.options.journal == 'boolean' || typeof self.db.options.fsync == 'boolean') { - finalOptions = _setWriteConcernHash(self.db.options); - } else if(typeof self.db.safe == "boolean") { - finalOptions = {w: (self.db.safe ? 1 : 0)}; - } - - // Ensure we don't have an invalid combination of write concerns - if(finalOptions.w < 1 - && (finalOptions.journal == true || finalOptions.j == true || finalOptions.fsync == true)) throw new Error("No acknowlegement using w < 1 cannot be combined with journal:true or fsync:true"); - - // Return the options - return finalOptions; -} - /** * Expose. */ diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/aggregation.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/aggregation.js new file mode 100644 index 0000000..e78e964 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/aggregation.js @@ -0,0 +1,320 @@ +var shared = require('./shared') + , utils = require('../utils') + , AggregationCursor = require('../aggregation_cursor').AggregationCursor + , Code = require('bson').Code + , DbCommand = require('../commands/db_command').DbCommand; + +/** + * Functions that are passed as scope args must + * be converted to Code instances. + * @ignore + */ +function processScope (scope) { + if (!utils.isObject(scope)) { + return scope; + } + + var keys = Object.keys(scope); + var i = keys.length; + var key; + + while (i--) { + key = keys[i]; + if ('function' == typeof scope[key]) { + scope[key] = new Code(String(scope[key])); + } else { + scope[key] = processScope(scope[key]); + } + } + + return scope; +} + +var pipe = function() { + return new AggregationCursor(this, this.serverCapabilities); +} + +var mapReduce = function mapReduce (map, reduce, options, callback) { + if ('function' === typeof options) callback = options, options = {}; + // Out must allways be defined (make sure we don't break weirdly on pre 1.8+ servers) + if(null == options.out) { + throw new Error("the out option parameter must be defined, see mongodb docs for possible values"); + } + + if ('function' === typeof map) { + map = map.toString(); + } + + if ('function' === typeof reduce) { + reduce = reduce.toString(); + } + + if ('function' === typeof options.finalize) { + options.finalize = options.finalize.toString(); + } + + var mapCommandHash = { + mapreduce: this.collectionName + , map: map + , reduce: reduce + }; + + // Add any other options passed in + for (var name in options) { + if ('scope' == name) { + mapCommandHash[name] = processScope(options[name]); + } else { + mapCommandHash[name] = options[name]; + } + } + + // Set read preference if we set one + var readPreference = shared._getReadConcern(this, options); + + // If we have a read preference and inline is not set as output fail hard + if((readPreference != false && readPreference != 'primary') + && options['out'] && (options['out'].inline != 1 && options['out'] != 'inline')) { + readPreference = 'primary'; + } + + // self + var self = this; + var cmd = DbCommand.createDbCommand(this.db, mapCommandHash); + + this.db._executeQueryCommand(cmd, {read:readPreference}, function (err, result) { + if(err) return callback(err); + if(!result || !result.documents || result.documents.length == 0) + return callback(Error("command failed to return results"), null) + + // Check if we have an error + if(1 != result.documents[0].ok || result.documents[0].err || result.documents[0].errmsg) { + return callback(utils.toError(result.documents[0])); + } + + // Create statistics value + var stats = {}; + if(result.documents[0].timeMillis) stats['processtime'] = result.documents[0].timeMillis; + if(result.documents[0].counts) stats['counts'] = result.documents[0].counts; + if(result.documents[0].timing) stats['timing'] = result.documents[0].timing; + + // invoked with inline? + if(result.documents[0].results) { + // If we wish for no verbosity + if(options['verbose'] == null || !options['verbose']) { + return callback(null, result.documents[0].results); + } + return callback(null, result.documents[0].results, stats); + } + + // The returned collection + var collection = null; + + // If we have an object it's a different db + if(result.documents[0].result != null && typeof result.documents[0].result == 'object') { + var doc = result.documents[0].result; + collection = self.db.db(doc.db).collection(doc.collection); + } else { + // Create a collection object that wraps the result collection + collection = self.db.collection(result.documents[0].result) + } + + // If we wish for no verbosity + if(options['verbose'] == null || !options['verbose']) { + return callback(err, collection); + } + + // Return stats as third set of values + callback(err, collection, stats); + }); +}; + +/** + * Group function helper + * @ignore + */ +var groupFunction = function () { + var c = db[ns].find(condition); + var map = new Map(); + var reduce_function = reduce; + + while (c.hasNext()) { + var obj = c.next(); + var key = {}; + + for (var i = 0, len = keys.length; i < len; ++i) { + var k = keys[i]; + key[k] = obj[k]; + } + + var aggObj = map.get(key); + + if (aggObj == null) { + var newObj = Object.extend({}, key); + aggObj = Object.extend(newObj, initial); + map.put(key, aggObj); + } + + reduce_function(obj, aggObj); + } + + return { "result": map.values() }; +}.toString(); + +var group = function group(keys, condition, initial, reduce, finalize, command, options, callback) { + var args = Array.prototype.slice.call(arguments, 3); + callback = args.pop(); + // Fetch all commands + reduce = args.length ? args.shift() : null; + finalize = args.length ? args.shift() : null; + command = args.length ? args.shift() : null; + options = args.length ? args.shift() || {} : {}; + + // Make sure we are backward compatible + if(!(typeof finalize == 'function')) { + command = finalize; + finalize = null; + } + + if (!Array.isArray(keys) && keys instanceof Object && typeof(keys) !== 'function' && !(keys instanceof Code)) { + keys = Object.keys(keys); + } + + if(typeof reduce === 'function') { + reduce = reduce.toString(); + } + + if(typeof finalize === 'function') { + finalize = finalize.toString(); + } + + // Set up the command as default + command = command == null ? true : command; + + // Execute using the command + if(command) { + var reduceFunction = reduce instanceof Code + ? reduce + : new Code(reduce); + + var selector = { + group: { + 'ns': this.collectionName + , '$reduce': reduceFunction + , 'cond': condition + , 'initial': initial + , 'out': "inline" + } + }; + + // if finalize is defined + if(finalize != null) selector.group['finalize'] = finalize; + // Set up group selector + if ('function' === typeof keys || keys instanceof Code) { + selector.group.$keyf = keys instanceof Code + ? keys + : new Code(keys); + } else { + var hash = {}; + keys.forEach(function (key) { + hash[key] = 1; + }); + selector.group.key = hash; + } + + var cmd = DbCommand.createDbSlaveOkCommand(this.db, selector); + // Set read preference if we set one + var readPreference = shared._getReadConcern(this, options); + // Execute the command + this.db._executeQueryCommand(cmd + , {read:readPreference} + , utils.handleSingleCommandResultReturn(null, null, function(err, result) { + if(err) return callback(err, null); + callback(null, result.retval); + })); + } else { + // Create execution scope + var scope = reduce != null && reduce instanceof Code + ? reduce.scope + : {}; + + scope.ns = this.collectionName; + scope.keys = keys; + scope.condition = condition; + scope.initial = initial; + + // Pass in the function text to execute within mongodb. + var groupfn = groupFunction.replace(/ reduce;/, reduce.toString() + ';'); + + this.db.eval(new Code(groupfn, scope), function (err, results) { + if (err) return callback(err, null); + callback(null, results.result || results); + }); + } +}; + +var aggregate = function(pipeline, options, callback) { + var args = Array.prototype.slice.call(arguments, 0); + callback = args.pop(); + var self = this; + + // If we have any of the supported options in the options object + var opts = args[args.length - 1]; + options = opts.readPreference + || opts.explain + || opts.cursor + || opts.out + || opts.allowDiskUsage ? args.pop() : {} + // If the callback is the option (as for cursor override it) + if(typeof callback == 'object' && callback != null) options = callback; + + // Convert operations to an array + if(!Array.isArray(args[0])) { + pipeline = []; + // Push all the operations to the pipeline + for(var i = 0; i < args.length; i++) pipeline.push(args[i]); + } + + // Is the user requesting a cursor + if(options.cursor != null && options.out == null) { + // Set the aggregation cursor options + var agg_cursor_options = options.cursor; + agg_cursor_options.pipe = pipeline; + agg_cursor_options.allowDiskUsage = options.allowDiskUsage == null ? false : options.allowDiskUsage; + // Return the aggregation cursor + return new AggregationCursor(this, this.serverCapabilities, agg_cursor_options); + } + + // If out was specified + if(typeof options.out == 'string') { + pipeline.push({$out: options.out}); + } + + // Build the command + var command = { aggregate : this.collectionName, pipeline : pipeline}; + // If we have allowDiskUsage defined + if(options.allowDiskUsage) command.allowDiskUsage = options.allowDiskUsage; + + // Ensure we have the right read preference inheritance + options.readPreference = shared._getReadConcern(this, options); + // If explain has been specified add it + if(options.explain) command.explain = options.explain; + // Execute the command + this.db.command(command, options, function(err, result) { + if(err) { + callback(err); + } else if(result['err'] || result['errmsg']) { + callback(utils.toError(result)); + } else if(typeof result == 'object' && result['serverPipeline']) { + callback(null, result['serverPipeline']); + } else if(typeof result == 'object' && result['stages']) { + callback(null, result['stages']); + } else { + callback(null, result.result); + } + }); +} + +exports.mapReduce = mapReduce; +exports.group = group; +exports.aggregate = aggregate; +exports.pipe = pipe; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/commands.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/commands.js new file mode 100644 index 0000000..046f009 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/commands.js @@ -0,0 +1,136 @@ +var shared = require('./shared') + , utils = require('../utils') + , DbCommand = require('../commands/db_command').DbCommand; + +var stats = function stats(options, callback) { + var args = Array.prototype.slice.call(arguments, 0); + callback = args.pop(); + // Fetch all commands + options = args.length ? args.shift() || {} : {}; + + // Build command object + var commandObject = { + collStats:this.collectionName, + } + + // Check if we have the scale value + if(options['scale'] != null) commandObject['scale'] = options['scale']; + + // Ensure we have the right read preference inheritance + options.readPreference = shared._getReadConcern(this, options); + + // Execute the command + this.db.command(commandObject, options, callback); +} + +var count = function count(query, options, callback) { + var args = Array.prototype.slice.call(arguments, 0); + callback = args.pop(); + query = args.length ? args.shift() || {} : {}; + options = args.length ? args.shift() || {} : {}; + var skip = options.skip; + var limit = options.limit; + var maxTimeMS = options.maxTimeMS; + + // Final query + var commandObject = { + 'count': this.collectionName + , 'query': query + , 'fields': null + }; + + // Add limit and skip if defined + if(typeof skip == 'number') commandObject.skip = skip; + if(typeof limit == 'number') commandObject.limit = limit; + if(typeof maxTimeMS == 'number') commandObject['$maxTimeMS'] = maxTimeMS; + + // Set read preference if we set one + var readPreference = shared._getReadConcern(this, options); + // Execute the command + this.db._executeQueryCommand(DbCommand.createDbSlaveOkCommand(this.db, commandObject) + , {read: readPreference} + , utils.handleSingleCommandResultReturn(null, null, function(err, result) { + if(err) return callback(err, null); + if(result == null) return callback(new Error("no result returned for count"), null); + callback(null, result.n); + })); +}; + +var distinct = function distinct(key, query, options, callback) { + var args = Array.prototype.slice.call(arguments, 1); + callback = args.pop(); + query = args.length ? args.shift() || {} : {}; + options = args.length ? args.shift() || {} : {}; + + var mapCommandHash = { + 'distinct': this.collectionName + , 'query': query + , 'key': key + }; + + // Set read preference if we set one + var readPreference = options['readPreference'] ? options['readPreference'] : false; + // Create the command + var cmd = DbCommand.createDbSlaveOkCommand(this.db, mapCommandHash); + + this.db._executeQueryCommand(cmd, {read:readPreference}, function (err, result) { + if(err) + return callback(err); + if(result.documents[0].ok != 1) + return callback(new Error(result.documents[0].errmsg)); + callback(null, result.documents[0].values); + }); +}; + +var rename = function rename (newName, options, callback) { + var self = this; + if(typeof options == 'function') { + callback = options; + options = {} + } + + // Get collection class + var Collection = require('../collection').Collection; + // Ensure the new name is valid + shared.checkCollectionName(newName); + + // Execute the command, return the new renamed collection if successful + self.db._executeQueryCommand(DbCommand.createRenameCollectionCommand(self.db, self.collectionName, newName, options) + , utils.handleSingleCommandResultReturn(true, false, function(err, result) { + if(err) return callback(err, null) + try { + if(options.new_collection) + return callback(null, new Collection(self.db, newName, self.db.pkFactory)); + self.collectionName = newName; + callback(null, self); + } catch(err) { + callback(err, null); + } + })); +}; + +var options = function options(callback) { + this.db.collectionsInfo(this.collectionName, function (err, cursor) { + if (err) return callback(err); + cursor.nextObject(function (err, document) { + callback(err, document && document.options || null); + }); + }); +}; + +var isCapped = function isCapped(callback) { + this.options(function(err, document) { + if(err != null) { + callback(err); + } else { + callback(null, document && document.capped); + } + }); +}; + +exports.stats = stats; +exports.count = count; +exports.distinct = distinct; +exports.rename = rename; +exports.options = options; +exports.isCapped = isCapped; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/core.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/core.js new file mode 100644 index 0000000..208506e --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/core.js @@ -0,0 +1,727 @@ +var InsertCommand = require('../commands/insert_command').InsertCommand + , DeleteCommand = require('../commands/delete_command').DeleteCommand + , UpdateCommand = require('../commands/update_command').UpdateCommand + , DbCommand = require('../commands/db_command').DbCommand + , utils = require('../utils') + , hasWriteCommands = require('../utils').hasWriteCommands + , shared = require('./shared'); + +/** + * Precompiled regexes + * @ignore + **/ +var eErrorMessages = /No matching object found/; + +// *************************************************** +// Insert function +// *************************************************** +var insert = function insert (docs, options, callback) { + if ('function' === typeof options) callback = options, options = {}; + if(options == null) options = {}; + if(!('function' === typeof callback)) callback = null; + + // Get a connection + var connection = this.db.serverConfig.checkoutWriter(); + var useLegacyOps = options.useLegacyOps == null || options.useLegacyOps == false ? false : true; + // If we support write commands let's perform the insert using it + if(!useLegacyOps && hasWriteCommands(connection) + && !Buffer.isBuffer(docs) + && (!Array.isArray(docs) && docs.length > 0 && !Buffer.isBuffer(docs[0]))) { + insertWithWriteCommands(this, Array.isArray(docs) ? docs : [docs], options, callback); + return this + } + + // Backwards compatibility + insertAll(this, Array.isArray(docs) ? docs : [docs], options, callback); + return this; +}; + +// +// Uses the new write commands available from 2.6 > +// +var insertWithWriteCommands = function(self, docs, options, callback) { + // Get the intended namespace for the operation + var namespace = self.collectionName; + + // Ensure we have no \x00 bytes in the name causing wrong parsing + if(!!~namespace.indexOf("\x00")) { + return callback(new Error("namespace cannot contain a null character"), null); + } + + // Check if we have passed in continue on error + var continueOnError = typeof options['keepGoing'] == 'boolean' + ? options['keepGoing'] : false; + continueOnError = typeof options['continueOnError'] == 'boolean' + ? options['continueOnError'] : continueOnError; + + // Do we serialzie functions + var serializeFunctions = typeof options.serializeFunctions != 'boolean' + ? self.serializeFunctions : options.serializeFunctions; + + // Checkout a write connection + var connection = self.db.serverConfig.checkoutWriter(); + + // Collect errorOptions + var errorOptions = shared._getWriteConcern(self, options); + + // If we have a write command with no callback and w:0 fail + if(errorOptions.w && errorOptions.w != 0 && callback == null) { + throw new Error("writeConcern requires callback") + } + + // Add the documents and decorate them with id's if they have none + for(var index = 0, len = docs.length; index < len; ++index) { + var doc = docs[index]; + + // Add id to each document if it's not already defined + if (!(Buffer.isBuffer(doc)) + && doc['_id'] == null + && self.db.forceServerObjectId != true + && options.forceServerObjectId != true) { + doc['_id'] = self.pkFactory.createPk(); + } + } + + // Create the write command + var write_command = { + insert: namespace + , writeConcern: errorOptions + , ordered: !continueOnError + , documents: docs + } + + // Execute the write command + self.db.command(write_command + , { connection:connection + , checkKeys: true + , serializeFunctions: serializeFunctions + , writeCommand: true } + , function(err, result) { + if(errorOptions.w == 0 && typeof callback == 'function') return callback(null, null); + if(errorOptions.w == 0) return; + if(callback == null) return; + if(err != null) { + // Rewrite for backward compatibility + if(Array.isArray(err.errDetails)) err.code = err.errDetails[0].errCode; + // Return the error + return callback(err, null); + } + + // Result has an error + if(!result.ok && (result.err != null || result.errmsg != null)) { + // Map the error + var error = utils.toError(result); + // Backwards compatibility mapping + if(Array.isArray(error.errDetails)) error.code = error.errDetails[0].errCode; + // Return the error + return callback(error, null); + } + + // Return the results for a whole batch + callback(null, docs) + }); +} + +// +// Uses pre 2.6 OP_INSERT wire protocol +// +var insertAll = function insertAll (self, docs, options, callback) { + if('function' === typeof options) callback = options, options = {}; + if(options == null) options = {}; + if(!('function' === typeof callback)) callback = null; + + // Insert options (flags for insert) + var insertFlags = {}; + // If we have a mongodb version >= 1.9.1 support keepGoing attribute + if(options['keepGoing'] != null) { + insertFlags['keepGoing'] = options['keepGoing']; + } + + // If we have a mongodb version >= 1.9.1 support keepGoing attribute + if(options['continueOnError'] != null) { + insertFlags['continueOnError'] = options['continueOnError']; + } + + // DbName + var dbName = options['dbName']; + // If no dbname defined use the db one + if(dbName == null) { + dbName = self.db.databaseName; + } + + // Either use override on the function, or go back to default on either the collection + // level or db + if(options['serializeFunctions'] != null) { + insertFlags['serializeFunctions'] = options['serializeFunctions']; + } else { + insertFlags['serializeFunctions'] = self.serializeFunctions; + } + + // Get checkKeys value + var checkKeys = typeof options.checkKeys != 'boolean' ? true : options.checkKeys; + + // Pass in options + var insertCommand = new InsertCommand( + self.db + , dbName + "." + self.collectionName, checkKeys, insertFlags); + + // Add the documents and decorate them with id's if they have none + for(var index = 0, len = docs.length; index < len; ++index) { + var doc = docs[index]; + + // Add id to each document if it's not already defined + if (!(Buffer.isBuffer(doc)) + && doc['_id'] == null + && self.db.forceServerObjectId != true + && options.forceServerObjectId != true) { + doc['_id'] = self.pkFactory.createPk(); + } + + insertCommand.add(doc); + } + + // Collect errorOptions + var errorOptions = shared._getWriteConcern(self, options); + // Default command options + var commandOptions = {}; + // If safe is defined check for error message + if(shared._hasWriteConcern(errorOptions) && typeof callback == 'function') { + // Insert options + commandOptions['read'] = false; + // If we have safe set set async to false + if(errorOptions == null) commandOptions['async'] = true; + + // Set safe option + commandOptions['safe'] = errorOptions; + // If we have an error option + if(typeof errorOptions == 'object') { + var keys = Object.keys(errorOptions); + for(var i = 0; i < keys.length; i++) { + commandOptions[keys[i]] = errorOptions[keys[i]]; + } + } + + // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) + self.db._executeInsertCommand(insertCommand, commandOptions, function (err, error) { + error = error && error.documents; + if(!callback) return; + + if (err) { + callback(err); + } else if(error[0].err || error[0].errmsg) { + callback(utils.toError(error[0])); + } else if(error[0].jnote || error[0].wnote || error[0].wtimeout) { + callback(utils.toError(error[0])); + } else { + callback(null, docs); + } + }); + } else if(shared._hasWriteConcern(errorOptions) && callback == null) { + throw new Error("Cannot use a writeConcern without a provided callback"); + } else { + // Execute the call without a write concern + var result = self.db._executeInsertCommand(insertCommand, commandOptions); + // If no callback just return + if(!callback) return; + // If error return error + if(result instanceof Error) { + return callback(result); + } + + // Otherwise just return + return callback(null, docs); + } +}; + +// *************************************************** +// Remove function +// *************************************************** +var removeWithWriteCommands = function(self, selector, options, callback) { + if ('function' === typeof selector) { + callback = selector; + selector = options = {}; + } else if ('function' === typeof options) { + callback = options; + options = {}; + } + + // Get the intended namespace for the operation + var namespace = self.collectionName; + + // Ensure we have no \x00 bytes in the name causing wrong parsing + if(!!~namespace.indexOf("\x00")) { + return callback(new Error("namespace cannot contain a null character"), null); + } + + // Set default empty selector if none + selector = selector == null ? {} : selector; + + // Check if we have passed in continue on error + var continueOnError = typeof options['keepGoing'] == 'boolean' + ? options['keepGoing'] : false; + continueOnError = typeof options['continueOnError'] == 'boolean' + ? options['continueOnError'] : continueOnError; + + // Do we serialzie functions + var serializeFunctions = typeof options.serializeFunctions != 'boolean' + ? self.serializeFunctions : options.serializeFunctions; + + // Checkout a write connection + var connection = self.db.serverConfig.checkoutWriter(); + + // Figure out the value of top + var limit = options.single == true ? 1 : 0; + var upsert = typeof options.upsert == 'boolean' ? options.upsert : false; + + // Collect errorOptions + var errorOptions = shared._getWriteConcern(self, options); + + // If we have a write command with no callback and w:0 fail + if(errorOptions.w && errorOptions.w != 0 && callback == null) { + throw new Error("writeConcern requires callback") + } + + // Create the write command + var write_command = { + delete: namespace, + writeConcern: errorOptions, + ordered: !continueOnError, + deletes: [{ + q : selector, + limit: limit + }] + } + + // Execute the write command + self.db.command(write_command + , { connection:connection + , checkKeys: true + , serializeFunctions: serializeFunctions + , writeCommand: true } + , function(err, result) { + if(errorOptions.w == 0 && typeof callback == 'function') return callback(null, null); + if(errorOptions.w == 0) return; + if(callback == null) return; + if(err != null) { + if(Array.isArray(err.errDetails)) err.code = err.errDetails[0].errCode; + // Return the error + return callback(err, null); + } + + // Result has an error + if(!result.ok && (result.err != null || result.errmsg != null)) { + // Map the error + var error = utils.toError(result); + // Backwards compatibility mapping + if(Array.isArray(error.errDetails)) error.code = error.errDetails[0].errCode; + // Return the error + return callback(error, null); + } + + // Backward compatibility format + var r = backWardsCompatibiltyResults(result, 'remove'); + // Return the results for a whole batch + callback(null, r.n, r) + }); +} + +var remove = function remove(selector, options, callback) { + if('function' === typeof options) callback = options, options = null; + if(options == null) options = {}; + if(!('function' === typeof callback)) callback = null; + // Get a connection + var connection = this.db.serverConfig.checkoutWriter(); + var useLegacyOps = options.useLegacyOps == null || options.useLegacyOps == false ? false : true; + // If we support write commands let's perform the insert using it + if(!useLegacyOps && hasWriteCommands(connection) && !Buffer.isBuffer(selector)) { + return removeWithWriteCommands(this, selector, options, callback); + } + + if ('function' === typeof selector) { + callback = selector; + selector = options = {}; + } else if ('function' === typeof options) { + callback = options; + options = {}; + } + + // Ensure options + if(options == null) options = {}; + if(!('function' === typeof callback)) callback = null; + // Ensure we have at least an empty selector + selector = selector == null ? {} : selector; + // Set up flags for the command, if we have a single document remove + var flags = 0 | (options.single ? 1 : 0); + + // DbName + var dbName = options['dbName']; + // If no dbname defined use the db one + if(dbName == null) { + dbName = this.db.databaseName; + } + + // Create a delete command + var deleteCommand = new DeleteCommand( + this.db + , dbName + "." + this.collectionName + , selector + , flags); + + var self = this; + var errorOptions = shared._getWriteConcern(self, options); + // Execute the command, do not add a callback as it's async + if(shared._hasWriteConcern(errorOptions) && typeof callback == 'function') { + // Insert options + var commandOptions = {read:false}; + // If we have safe set set async to false + if(errorOptions == null) commandOptions['async'] = true; + // Set safe option + commandOptions['safe'] = true; + // If we have an error option + if(typeof errorOptions == 'object') { + var keys = Object.keys(errorOptions); + for(var i = 0; i < keys.length; i++) { + commandOptions[keys[i]] = errorOptions[keys[i]]; + } + } + + // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) + this.db._executeRemoveCommand(deleteCommand, commandOptions, function (err, error) { + error = error && error.documents; + if(!callback) return; + + if(err) { + callback(err); + } else if(error[0].err || error[0].errmsg) { + callback(utils.toError(error[0])); + } else if(error[0].jnote || error[0].wnote || error[0].wtimeout) { + callback(utils.toError(error[0])); + } else { + callback(null, error[0].n); + } + }); + } else if(shared._hasWriteConcern(errorOptions) && callback == null) { + throw new Error("Cannot use a writeConcern without a provided callback"); + } else { + var result = this.db._executeRemoveCommand(deleteCommand); + // If no callback just return + if (!callback) return; + // If error return error + if (result instanceof Error) { + return callback(result); + } + // Otherwise just return + return callback(); + } +}; + +// *************************************************** +// Save function +// *************************************************** +var save = function save(doc, options, callback) { + if('function' === typeof options) callback = options, options = null; + if(options == null) options = {}; + if(!('function' === typeof callback)) callback = null; + // Throw an error if attempting to perform a bulk operation + if(Array.isArray(doc)) throw new Error("doc parameter must be a single document"); + // Extract the id, if we have one we need to do a update command + var id = doc['_id']; + var commandOptions = shared._getWriteConcern(this, options); + + if(id != null) { + commandOptions.upsert = true; + this.update({ _id: id }, doc, commandOptions, callback); + } else { + this.insert(doc, commandOptions, callback && function (err, docs) { + if(err) return callback(err, null); + + if(Array.isArray(docs)) { + callback(err, docs[0]); + } else { + callback(err, docs); + } + }); + } +}; + +// *************************************************** +// Update document function +// *************************************************** +var updateWithWriteCommands = function(self, selector, document, options, callback) { + if('function' === typeof options) callback = options, options = null; + if(options == null) options = {}; + if(!('function' === typeof callback)) callback = null; + + // Get the intended namespace for the operation + var namespace = self.collectionName; + + // Ensure we have no \x00 bytes in the name causing wrong parsing + if(!!~namespace.indexOf("\x00")) { + return callback(new Error("namespace cannot contain a null character"), null); + } + + // If we are not providing a selector or document throw + if(selector == null || typeof selector != 'object') + return callback(new Error("selector must be a valid JavaScript object")); + if(document == null || typeof document != 'object') + return callback(new Error("document must be a valid JavaScript object")); + + // Check if we have passed in continue on error + var continueOnError = typeof options['keepGoing'] == 'boolean' + ? options['keepGoing'] : false; + continueOnError = typeof options['continueOnError'] == 'boolean' + ? options['continueOnError'] : continueOnError; + + // Do we serialzie functions + var serializeFunctions = typeof options.serializeFunctions != 'boolean' + ? self.serializeFunctions : options.serializeFunctions; + + // Checkout a write connection + var connection = self.db.serverConfig.checkoutWriter(); + + // Figure out the value of top + var multi = typeof options.multi == 'boolean' ? options.multi : false; + var upsert = typeof options.upsert == 'boolean' ? options.upsert : false; + + // Collect errorOptions + var errorOptions = shared._getWriteConcern(self, options); + + // If we have a write command with no callback and w:0 fail + if(errorOptions.w && errorOptions.w != 0 && callback == null) { + throw new Error("writeConcern requires callback") + } + + // Create the write command + var write_command = { + update: namespace, + writeConcern: errorOptions, + ordered: !continueOnError, + updates: [{ + q : selector, + u: document, + multi: multi, + upsert: upsert + }] + } + + // Check if we have a checkKeys override + var checkKeys = typeof options.checkKeys == 'boolean' ? options.checkKeys : false; + + // Execute the write command + self.db.command(write_command + , { connection:connection + , checkKeys: checkKeys + , serializeFunctions: serializeFunctions + , writeCommand: true } + , function(err, result) { + if(errorOptions.w == 0 && typeof callback == 'function') return callback(null, null); + if(errorOptions.w == 0) return; + if(callback == null) return; + if(err != null) { + if(Array.isArray(err.errDetails)) err.code = err.errDetails[0].errCode; + // Return the error + return callback(err, null); + } + + // Result has an error + if(!result.ok && (result.err != null || result.errmsg != null)) { + // Map the error + var error = utils.toError(result); + // Backwards compatibility mapping + if(Array.isArray(error.errDetails)) error.code = error.errDetails[0].errCode; + // Return the error + return callback(error, null); + } + + // Backward compatibility format + var r = backWardsCompatibiltyResults(result, 'update'); + // Return the results for a whole batch + callback(null, r.n, r) + }); +} + +var backWardsCompatibiltyResults = function(result, op) { + // Upserted + var upsertedValue = null; + var finalResult = null; + var updatedExisting = true; + + // We have a single document upserted result + if(Array.isArray(result.upserted) || result.upserted != null) { + updatedExisting = false; + upsertedValue = result.upserted; + } + + // Final result + if(op == 'remove' || op == 'insert') { + finalResult = {ok: true, n: result.n} + } else { + finalResult = {ok: true, n: result.n, updatedExisting: updatedExisting} + } + + if(upsertedValue != null) finalResult.upserted = upsertedValue; + return finalResult; +} + +var update = function update(selector, document, options, callback) { + if('function' === typeof options) callback = options, options = null; + if(options == null) options = {}; + if(!('function' === typeof callback)) callback = null; + + // Get a connection + var connection = this.db.serverConfig.checkoutWriter(); + var useLegacyOps = options.useLegacyOps == null || options.useLegacyOps == false ? false : true; + // If we support write commands let's perform the insert using it + if(!useLegacyOps && hasWriteCommands(connection) && !Buffer.isBuffer(selector) && !Buffer.isBuffer(document)) { + return updateWithWriteCommands(this, selector, document, options, callback); + } + + // DbName + var dbName = options['dbName']; + // If no dbname defined use the db one + if(dbName == null) { + dbName = this.db.databaseName; + } + + // If we are not providing a selector or document throw + if(selector == null || typeof selector != 'object') return callback(new Error("selector must be a valid JavaScript object")); + if(document == null || typeof document != 'object') return callback(new Error("document must be a valid JavaScript object")); + + // Either use override on the function, or go back to default on either the collection + // level or db + if(options['serializeFunctions'] != null) { + options['serializeFunctions'] = options['serializeFunctions']; + } else { + options['serializeFunctions'] = this.serializeFunctions; + } + + // Build the options command + var updateCommand = new UpdateCommand( + this.db + , dbName + "." + this.collectionName + , selector + , document + , options); + + var self = this; + // Unpack the error options if any + var errorOptions = shared._getWriteConcern(this, options); + // If safe is defined check for error message + if(shared._hasWriteConcern(errorOptions) && typeof callback == 'function') { + // Insert options + var commandOptions = {read:false}; + // If we have safe set set async to false + if(errorOptions == null) commandOptions['async'] = true; + // Set safe option + commandOptions['safe'] = errorOptions; + // If we have an error option + if(typeof errorOptions == 'object') { + var keys = Object.keys(errorOptions); + for(var i = 0; i < keys.length; i++) { + commandOptions[keys[i]] = errorOptions[keys[i]]; + } + } + + // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) + this.db._executeUpdateCommand(updateCommand, commandOptions, function (err, error) { + error = error && error.documents; + if(!callback) return; + + if(err) { + callback(err); + } else if(error[0].err || error[0].errmsg) { + callback(utils.toError(error[0])); + } else if(error[0].jnote || error[0].wnote || error[0].wtimeout) { + callback(utils.toError(error[0])); + } else { + callback(null, error[0].n, error[0]); + } + }); + } else if(shared._hasWriteConcern(errorOptions) && callback == null) { + throw new Error("Cannot use a writeConcern without a provided callback"); + } else { + // Execute update + var result = this.db._executeUpdateCommand(updateCommand); + // If no callback just return + if (!callback) return; + // If error return error + if (result instanceof Error) { + return callback(result); + } + // Otherwise just return + return callback(); + } +}; + +// *************************************************** +// findAndModify function +// *************************************************** +var findAndModify = function findAndModify (query, sort, doc, options, callback) { + var args = Array.prototype.slice.call(arguments, 1); + callback = args.pop(); + sort = args.length ? args.shift() || [] : []; + doc = args.length ? args.shift() : null; + options = args.length ? args.shift() || {} : {}; + var self = this; + + var queryObject = { + 'findandmodify': this.collectionName + , 'query': query + , 'sort': utils.formattedOrderClause(sort) + }; + + queryObject.new = options.new ? 1 : 0; + queryObject.remove = options.remove ? 1 : 0; + queryObject.upsert = options.upsert ? 1 : 0; + + if (options.fields) { + queryObject.fields = options.fields; + } + + if (doc && !options.remove) { + queryObject.update = doc; + } + + // Checkout a write connection + options.connection = self.db.serverConfig.checkoutWriter(); + + // Either use override on the function, or go back to default on either the collection + // level or db + if(options['serializeFunctions'] != null) { + options['serializeFunctions'] = options['serializeFunctions']; + } else { + options['serializeFunctions'] = this.serializeFunctions; + } + + // No check on the documents + options.checkKeys = false + + // Execute the command + this.db.command(queryObject + , options, function(err, result) { + if(err) return callback(err, null); + return callback(null, result.value, result); + }); +} + +// *************************************************** +// findAndRemove function +// *************************************************** +var findAndRemove = function(query, sort, options, callback) { + var args = Array.prototype.slice.call(arguments, 1); + callback = args.pop(); + sort = args.length ? args.shift() || [] : []; + options = args.length ? args.shift() || {} : {}; + // Add the remove option + options['remove'] = true; + // Execute the callback + this.findAndModify(query, sort, null, options, callback); +} + +// Map methods +exports.insert = insert; +exports.remove = remove; +exports.save = save; +exports.update = update; +exports.findAndModify = findAndModify; +exports.findAndRemove = findAndRemove; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/geo.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/geo.js new file mode 100644 index 0000000..d2d3f9e --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/geo.js @@ -0,0 +1,78 @@ +var shared = require('./shared') + , utils = require('../utils'); + +var geoNear = function geoNear(x, y, options, callback) { + var args = Array.prototype.slice.call(arguments, 2); + callback = args.pop(); + // Fetch all commands + options = args.length ? args.shift() || {} : {}; + + // Build command object + var commandObject = { + geoNear:this.collectionName, + near: [x, y] + } + + // Decorate object if any with known properties + if(options['num'] != null) commandObject['num'] = options['num']; + if(options['maxDistance'] != null) commandObject['maxDistance'] = options['maxDistance']; + if(options['distanceMultiplier'] != null) commandObject['distanceMultiplier'] = options['distanceMultiplier']; + if(options['query'] != null) commandObject['query'] = options['query']; + if(options['spherical'] != null) commandObject['spherical'] = options['spherical']; + if(options['uniqueDocs'] != null) commandObject['uniqueDocs'] = options['uniqueDocs']; + if(options['includeLocs'] != null) commandObject['includeLocs'] = options['includeLocs']; + + // Ensure we have the right read preference inheritance + options.readPreference = shared._getReadConcern(this, options); + + // Execute the command + this.db.command(commandObject, options, function (err, res) { + if (err) { + callback(err); + } else if (res.err || res.errmsg) { + callback(utils.toError(res)); + } else { + // should we only be returning res.results here? Not sure if the user + // should see the other return information + callback(null, res); + } + }); +} + +var geoHaystackSearch = function geoHaystackSearch(x, y, options, callback) { + var args = Array.prototype.slice.call(arguments, 2); + callback = args.pop(); + // Fetch all commands + options = args.length ? args.shift() || {} : {}; + + // Build command object + var commandObject = { + geoSearch:this.collectionName, + near: [x, y] + } + + // Decorate object if any with known properties + if(options['maxDistance'] != null) commandObject['maxDistance'] = options['maxDistance']; + if(options['query'] != null) commandObject['search'] = options['query']; + if(options['search'] != null) commandObject['search'] = options['search']; + if(options['limit'] != null) commandObject['limit'] = options['limit']; + + // Ensure we have the right read preference inheritance + options.readPreference = shared._getReadConcern(this, options); + + // Execute the command + this.db.command(commandObject, options, function (err, res) { + if (err) { + callback(err); + } else if (res.err || res.errmsg) { + callback(utils.toError(res)); + } else { + // should we only be returning res.results here? Not sure if the user + // should see the other return information + callback(null, res); + } + }); +} + +exports.geoNear = geoNear; +exports.geoHaystackSearch = geoHaystackSearch; diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/index.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/index.js new file mode 100644 index 0000000..dda9cc8 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/index.js @@ -0,0 +1,72 @@ +var _getWriteConcern = require('./shared')._getWriteConcern; + +var createIndex = function createIndex (fieldOrSpec, options, callback) { + // Clean up call + var args = Array.prototype.slice.call(arguments, 1); + callback = args.pop(); + options = args.length ? args.shift() || {} : {}; + options = typeof callback === 'function' ? options : callback; + options = options == null ? {} : options; + + // Collect errorOptions + var errorOptions = _getWriteConcern(this, options); + // Execute create index + this.db.createIndex(this.collectionName, fieldOrSpec, options, callback); +}; + +var indexExists = function indexExists(indexes, callback) { + this.indexInformation(function(err, indexInformation) { + // If we have an error return + if(err != null) return callback(err, null); + // Let's check for the index names + if(Array.isArray(indexes)) { + for(var i = 0; i < indexes.length; i++) { + if(indexInformation[indexes[i]] == null) { + return callback(null, false); + } + } + + // All keys found return true + return callback(null, true); + } else { + return callback(null, indexInformation[indexes] != null); + } + }); +} + +var dropAllIndexes = function dropIndexes (callback) { + this.db.dropIndex(this.collectionName, '*', function (err, result) { + if(err) return callback(err, false); + callback(null, true); + }); +}; + +var indexInformation = function indexInformation (options, callback) { + // Unpack calls + var args = Array.prototype.slice.call(arguments, 0); + callback = args.pop(); + options = args.length ? args.shift() || {} : {}; + // Call the index information + this.db.indexInformation(this.collectionName, options, callback); +}; + +var ensureIndex = function ensureIndex (fieldOrSpec, options, callback) { + // Clean up call + if (typeof callback === 'undefined' && typeof options === 'function') { + callback = options; + options = {}; + } + + if (options == null) { + options = {}; + } + + // Execute create index + this.db.ensureIndex(this.collectionName, fieldOrSpec, options, callback); +}; + +exports.createIndex = createIndex; +exports.indexExists = indexExists; +exports.dropAllIndexes = dropAllIndexes; +exports.indexInformation = indexInformation; +exports.ensureIndex = ensureIndex; diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/query.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/query.js new file mode 100644 index 0000000..6f6efc7 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/query.js @@ -0,0 +1,153 @@ +var ObjectID = require('bson').ObjectID + , Scope = require('../scope').Scope + , shared = require('./shared') + , utils = require('../utils'); + +var testForFields = { + limit: 1, sort: 1, fields:1, skip: 1, hint: 1, explain: 1, snapshot: 1, timeout: 1, tailable: 1, tailableRetryInterval: 1 + , numberOfRetries: 1, awaitdata: 1, exhaust: 1, batchSize: 1, returnKey: 1, maxScan: 1, min: 1, max: 1, showDiskLoc: 1 + , comment: 1, raw: 1, readPreference: 1, partial: 1, read: 1, dbName: 1, oplogReplay: 1 +}; + +// +// Find method +// +var find = function find () { + var options + , args = Array.prototype.slice.call(arguments, 0) + , has_callback = typeof args[args.length - 1] === 'function' + , has_weird_callback = typeof args[0] === 'function' + , callback = has_callback ? args.pop() : (has_weird_callback ? args.shift() : null) + , len = args.length + , selector = len >= 1 ? args[0] : {} + , fields = len >= 2 ? args[1] : undefined; + + if(len === 1 && has_weird_callback) { + // backwards compat for callback?, options case + selector = {}; + options = args[0]; + } + + if(len === 2 && !Array.isArray(fields)) { + var fieldKeys = Object.getOwnPropertyNames(fields); + var is_option = false; + + for(var i = 0; i < fieldKeys.length; i++) { + if(testForFields[fieldKeys[i]] != null) { + is_option = true; + break; + } + } + + if(is_option) { + options = fields; + fields = undefined; + } else { + options = {}; + } + } else if(len === 2 && Array.isArray(fields) && !Array.isArray(fields[0])) { + var newFields = {}; + // Rewrite the array + for(var i = 0; i < fields.length; i++) { + newFields[fields[i]] = 1; + } + // Set the fields + fields = newFields; + } + + if(3 === len) { + options = args[2]; + } + + // Ensure selector is not null + selector = selector == null ? {} : selector; + // Validate correctness off the selector + var object = selector; + if(Buffer.isBuffer(object)) { + var object_size = object[0] | object[1] << 8 | object[2] << 16 | object[3] << 24; + if(object_size != object.length) { + var error = new Error("query selector raw message size does not match message header size [" + object.length + "] != [" + object_size + "]"); + error.name = 'MongoError'; + throw error; + } + } + + // Validate correctness of the field selector + var object = fields; + if(Buffer.isBuffer(object)) { + var object_size = object[0] | object[1] << 8 | object[2] << 16 | object[3] << 24; + if(object_size != object.length) { + var error = new Error("query fields raw message size does not match message header size [" + object.length + "] != [" + object_size + "]"); + error.name = 'MongoError'; + throw error; + } + } + + // Check special case where we are using an objectId + if(selector instanceof ObjectID || (selector != null && selector._bsontype == 'ObjectID')) { + selector = {_id:selector}; + } + + // If it's a serialized fields field we need to just let it through + // user be warned it better be good + if(options && options.fields && !(Buffer.isBuffer(options.fields))) { + fields = {}; + + if(Array.isArray(options.fields)) { + if(!options.fields.length) { + fields['_id'] = 1; + } else { + for (var i = 0, l = options.fields.length; i < l; i++) { + fields[options.fields[i]] = 1; + } + } + } else { + fields = options.fields; + } + } + + if (!options) options = {}; + options.skip = len > 3 ? args[2] : options.skip ? options.skip : 0; + options.limit = len > 3 ? args[3] : options.limit ? options.limit : 0; + options.raw = options.raw != null && typeof options.raw === 'boolean' ? options.raw : this.raw; + options.hint = options.hint != null ? shared.normalizeHintField(options.hint) : this.internalHint; + options.timeout = len == 5 ? args[4] : typeof options.timeout === 'undefined' ? undefined : options.timeout; + // If we have overridden slaveOk otherwise use the default db setting + options.slaveOk = options.slaveOk != null ? options.slaveOk : this.db.slaveOk; + + // Set option + var o = options; + // Support read/readPreference + if(o["read"] != null) o["readPreference"] = o["read"]; + // Set the read preference + o.read = o["readPreference"] ? o.readPreference : this.readPreference; + // Adjust slave ok if read preference is secondary or secondary only + if(o.read == "secondary" || o.read == "secondaryOnly") options.slaveOk = true; + + // Set the selector + o.selector = selector; + + // Create precursor + var scope = new Scope(this, {}, fields, o); + // Callback for backward compatibility + if(callback) return callback(null, scope.find(selector)); + // Return the pre cursor object + return scope.find(selector); +}; + +var findOne = function findOne () { + var self = this; + var args = Array.prototype.slice.call(arguments, 0); + var callback = args.pop(); + var cursor = this.find.apply(this, args).limit(-1).batchSize(1); + + // Return the item + cursor.nextObject(function(err, item) { + if(err != null) return callback(utils.toError(err), null); + callback(null, item); + }); +}; + + +exports.find = find; +exports.findOne = findOne; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/shared.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/shared.js new file mode 100644 index 0000000..77eae03 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/shared.js @@ -0,0 +1,120 @@ +// *************************************************** +// Write concerns +// *************************************************** +var _hasWriteConcern = function(errorOptions) { + return errorOptions == true + || errorOptions.w > 0 + || errorOptions.w == 'majority' + || errorOptions.j == true + || errorOptions.journal == true + || errorOptions.fsync == true +} + +var _setWriteConcernHash = function(options) { + var finalOptions = {}; + if(options.w != null) finalOptions.w = options.w; + if(options.journal == true) finalOptions.j = options.journal; + if(options.j == true) finalOptions.j = options.j; + if(options.fsync == true) finalOptions.fsync = options.fsync; + if(options.wtimeout != null) finalOptions.wtimeout = options.wtimeout; + return finalOptions; +} + +var _getWriteConcern = function(self, options) { + // Final options + var finalOptions = {w:1}; + // Local options verification + if(options.w != null || typeof options.j == 'boolean' || typeof options.journal == 'boolean' || typeof options.fsync == 'boolean') { + finalOptions = _setWriteConcernHash(options); + } else if(typeof options.safe == "boolean") { + finalOptions = {w: (options.safe ? 1 : 0)}; + } else if(options.safe != null && typeof options.safe == 'object') { + finalOptions = _setWriteConcernHash(options.safe); + } else if(self.opts.w != null || typeof self.opts.j == 'boolean' || typeof self.opts.journal == 'boolean' || typeof self.opts.fsync == 'boolean') { + finalOptions = _setWriteConcernHash(self.opts); + } else if(typeof self.opts.safe == "boolean") { + finalOptions = {w: (self.opts.safe ? 1 : 0)}; + } else if(self.db.safe.w != null || typeof self.db.safe.j == 'boolean' || typeof self.db.safe.journal == 'boolean' || typeof self.db.safe.fsync == 'boolean') { + finalOptions = _setWriteConcernHash(self.db.safe); + } else if(self.db.options.w != null || typeof self.db.options.j == 'boolean' || typeof self.db.options.journal == 'boolean' || typeof self.db.options.fsync == 'boolean') { + finalOptions = _setWriteConcernHash(self.db.options); + } else if(typeof self.db.safe == "boolean") { + finalOptions = {w: (self.db.safe ? 1 : 0)}; + } + + // Ensure we don't have an invalid combination of write concerns + if(finalOptions.w < 1 + && (finalOptions.journal == true || finalOptions.j == true || finalOptions.fsync == true)) throw new Error("No acknowlegement using w < 1 cannot be combined with journal:true or fsync:true"); + + // Return the options + return finalOptions; +} + +var _getReadConcern = function(self, options) { + if(options.readPreference) return options.readPreference; + if(self.readPreference) return self.readPreference; + if(self.db.readPreference) return self.readPreference; + return 'primary'; +} + +/** + * @ignore + */ +var checkCollectionName = function checkCollectionName (collectionName) { + if('string' !== typeof collectionName) { + throw Error("collection name must be a String"); + } + + if(!collectionName || collectionName.indexOf('..') != -1) { + throw Error("collection names cannot be empty"); + } + + if(collectionName.indexOf('$') != -1 && + collectionName.match(/((^\$cmd)|(oplog\.\$main))/) == null) { + throw Error("collection names must not contain '$'"); + } + + if(collectionName.match(/^\.|\.$/) != null) { + throw Error("collection names must not start or end with '.'"); + } + + // Validate that we are not passing 0x00 in the colletion name + if(!!~collectionName.indexOf("\x00")) { + throw new Error("collection names cannot contain a null character"); + } +}; + + +/** + * Normalizes a `hint` argument. + * + * @param {String|Object|Array} hint + * @return {Object} + * @api private + */ +var normalizeHintField = function normalizeHintField(hint) { + var finalHint = null; + + if(typeof hint == 'string') { + finalHint = hint; + } else if(Array.isArray(hint)) { + finalHint = {}; + + hint.forEach(function(param) { + finalHint[param] = 1; + }); + } else if(hint != null && typeof hint == 'object') { + finalHint = {}; + for (var name in hint) { + finalHint[name] = hint[name]; + } + } + + return finalHint; +}; + +exports._getWriteConcern = _getWriteConcern; +exports._hasWriteConcern = _hasWriteConcern; +exports._getReadConcern = _getReadConcern; +exports.checkCollectionName = checkCollectionName; +exports.normalizeHintField = normalizeHintField; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/command_cursor.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/command_cursor.js new file mode 100644 index 0000000..e973e2c --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/command_cursor.js @@ -0,0 +1,309 @@ +var Long = require('bson').Long + , GetMoreCommand = require('./commands/get_more_command').GetMoreCommand; + +var CommandCursor = function(db, collection, command, options) { + // Ensure empty options if no options passed + options = options || {}; + + // Default cursor id is 0 + var cursorId = Long.fromInt(0); + var zeroCursor = Long.fromInt(0); + var state = 'init'; + + // Hardcode batch size + command.cursor.batchSize = 1; + + // BatchSize + var batchSize = command.cursor.batchSize || 0; + var raw = options.raw || false; + var readPreference = options.readPreference || 'primary'; + + // Checkout a connection + var connection = db.serverConfig.checkoutReader(readPreference); + // MaxTimeMS + var maxTimeMS = options.maxTimeMS; + + // Contains all the items + var items = null; + + // Execute getmore + var getMore = function(callback) { + // Resolve more of the cursor using the getMore command + var getMoreCommand = new GetMoreCommand(db + , db.databaseName + "." + collection.collectionName + , batchSize + , cursorId + ); + + // Set up options + var command_options = { connection:connection }; + + // Execute the getMore Command + db._executeQueryCommand(getMoreCommand, command_options, function(err, result) { + if(err) { + items = []; + state = 'closed'; + return callback(err); + } + + // Return all the documents + callback(null, result); + }); + } + + var exhaustGetMore = function(callback) { + getMore(function(err, result) { + if(err) { + items = []; + state = 'closed'; + return callback(err, null); + } + + // Add the items + items = items.concat(result.documents); + + // Set the cursor id + cursorId = result.cursorId; + if(typeof cursorId == 'number') cursorId = Long.fromNumber(cursorId); + + // If the cursor is done + if(result.cursorId.equals(zeroCursor)) { + return callback(null, items); + } + + // Check the cursor id + exhaustGetMore(callback); + }); + } + + var exhaustGetMoreEach = function(callback) { + getMore(function(err, result) { + if(err) { + items = []; + state = 'closed'; + return callback(err, null); + } + + // Add the items + items = result.documents; + + // Emit all the items in the first batch + while(items.length > 0) { + callback(null, items.shift()); + } + + // Set the cursor id + cursorId = result.cursorId; + if(typeof cursorId == 'number') cursorId = Long.fromNumber(cursorId); + + // If the cursor is done + if(result.cursorId.equals(zeroCursor)) { + state = "closed"; + return callback(null, null); + } + + // Check the cursor id + exhaustGetMoreEach(callback); + }); + } + + // + // Get all the elements + // + this.get = function(options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // Set the connection to the passed in one if it's provided + connection = options.connection ? options.connection : connection; + + // Command options + var _options = {connection:connection}; + if(typeof maxTimeMS == 'number') _options.maxTimeMS = maxTimeMS; + + // Execute the internal command first + db.command(command, _options, function(err, result) { + if(err) { + state = 'closed'; + return callback(err, null); + } + + // Retrieve the cursor id + cursorId = result.cursor.id; + if(typeof cursorId == 'number') cursorId = Long.fromNumber(cursorId); + + // Validate cursorId + if(cursorId.equals(zeroCursor)) { + return callback(null, result.cursor.firstBatch); + }; + + // Add to the items + items = result.cursor.firstBatch; + // Execute the getMore + exhaustGetMore(callback); + }); + } + + // + // Iterate over all the items + // + this.each = function(options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // If it's a closed cursor return error + if(this.isClosed()) return callback(new Error("cursor is closed")); + // Set the connection to the passed in one if it's provided + connection = options.connection ? options.connection : connection; + + // Command options + var _options = {connection:connection}; + if(typeof maxTimeMS == 'number') _options.maxTimeMS = maxTimeMS; + + // Execute the internal command first + db.command(command, _options, function(err, result) { + if(err) { + state = 'closed'; + return callback(err, null); + } + + // Get all the items + items = result.cursor.firstBatch; + + // Emit all the items in the first batch + while(items.length > 0) { + callback(null, items.shift()); + } + + // Retrieve the cursor id + cursorId = result.cursor.id; + if(typeof cursorId == 'number') cursorId = Long.fromNumber(cursorId); + + // If no cursor we just finish up the current batch of items + if(cursorId.equals(zeroCursor)) { + state = 'closed'; + return callback(null, null); + } + + // Emit each until no more getMore's + exhaustGetMoreEach(callback); + }); + } + + // + // Get the next object + // + this.next = function(options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // If it's a closed cursor return error + if(this.isClosed()) return callback(new Error("cursor is closed")); + + // Set the connection to the passed in one if it's provided + connection = options.connection ? options.connection : connection; + + // Command options + var _options = {connection:connection}; + if(typeof maxTimeMS == 'number') _options.maxTimeMS = maxTimeMS; + + // Execute the internal command first + if(!items) { + db.command(command, _options, function(err, result) { + if(err) { + state = 'closed'; + return callback(err, null); + } + + // Retrieve the cursor id + cursorId = result.cursor.id; + if(typeof cursorId == 'number') cursorId = Long.fromNumber(cursorId); + // Get the first batch results + items = result.cursor.firstBatch; + // We have items return the first one + if(items.length > 0) { + callback(null, items.shift()); + } else { + state = 'closed'; + callback(null, null); + } + }); + } else if(items.length > 0) { + callback(null, items.shift()); + } else if(items.length == 0 && cursorId.equals(zeroCursor)) { + state = 'closed'; + callback(null, null); + } else { + // Execute a getMore + getMore(function(err, result) { + if(err) { + state = 'closed'; + return callback(err, null); + } + + // Set the cursor id + cursorId = result.cursorId; + if(typeof cursorId == 'number') cursorId = Long.fromNumber(cursorId); + + // Add the items + items = items.concat(result.documents); + // If no more items + if(items.length == 0) { + state = 'closed'; + return callback(null, null); + } + + // Return the item + return callback(null, items.shift()); + }) + } + } + + // Validate if the cursor is closed + this.isClosed = function() { + return state == 'closed'; + } + + // Allow us to set the MaxTimeMS + this.maxTimeMS = function(_maxTimeMS) { + maxTimeMS = _maxTimeMS; + } + + // Close the cursor sending a kill cursor command if needed + this.close = function(options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // Close the cursor if not needed + if(cursorId instanceof Long && cursorId.greaterThan(Long.fromInt(0))) { + try { + var command = new KillCursorCommand(this.db, [cursorId]); + // Added an empty callback to ensure we don't throw any null exceptions + db._executeQueryCommand(command, {connection:connection}); + } catch(err) {} + } + + // Null out the connection + connection = null; + // Reset cursor id + cursorId = Long.fromInt(0); + // Set to closed status + state = 'closed'; + // Clear out all the items + items = null; + + if(callback) { + callback(null, null); + } + } +} + +exports.CommandCursor = CommandCursor; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/db_command.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/db_command.js index b7019c8..1f5b065 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/db_command.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/db_command.js @@ -17,12 +17,17 @@ var DbCommand = exports.DbCommand = function(dbInstance, collectionName, queryOp this.returnFieldSelector = returnFieldSelector; this.db = dbInstance; + // Set the slave ok bit if(this.db && this.db.slaveOk) { this.queryOptions |= QueryCommand.OPTS_SLAVE; } // Make sure we don't get a null exception options = options == null ? {} : options; + + // Allow for overriding the BSON checkKeys function + this.checkKeys = typeof options['checkKeys'] == 'boolean' ? options["checkKeys"] : true; + // Let us defined on a command basis if we want functions to be serialized or not if(options['serializeFunctions'] != null && options['serializeFunctions']) { this.serializeFunctions = true; @@ -229,6 +234,7 @@ DbCommand.createDropDatabaseCommand = function(db) { DbCommand.createDbCommand = function(db, command_hash, options, auth_db) { var db_name = (auth_db ? auth_db : db.databaseName) + "." + DbCommand.SYSTEM_COMMAND_COLLECTION; + options = options == null ? {checkKeys: false} : options; return new DbCommand(db, db_name, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, command_hash, null, options); }; @@ -241,5 +247,7 @@ DbCommand.createAdminDbCommandSlaveOk = function(db, command_hash) { }; DbCommand.createDbSlaveOkCommand = function(db, command_hash, options) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT | QueryCommand.OPTS_SLAVE, 0, -1, command_hash, null, options); + options = options == null ? {checkKeys: false} : options; + var dbName = options.dbName ? options.dbName : db.databaseName; + return new DbCommand(db, dbName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT | QueryCommand.OPTS_SLAVE, 0, -1, command_hash, null, options); }; diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/delete_command.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/delete_command.js index c2765a7..61a37ed 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/delete_command.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/delete_command.js @@ -113,7 +113,7 @@ DeleteCommand.prototype.toBinary = function(bsonSettings) { // Copy the data into the current buffer this.selector.copy(_command, _index); } else { - documentLength = this.db.bson.serializeWithBufferAndIndex(this.selector, this.checkKeys, _command, _index) - _index + 1; + documentLength = this.db.bson.serializeWithBufferAndIndex(this.selector, false, _command, _index) - _index + 1; } // Write the length to the document diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/query_command.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/query_command.js index 16045b8..1218206 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/query_command.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/commands/query_command.js @@ -49,6 +49,9 @@ var QueryCommand = exports.QueryCommand = function(db, collectionName, queryOpti this.queryOptions |= QueryCommand.OPTS_SLAVE; } + // If checkKeys set + this.checkKeys = typeof options.checkKeys == 'boolean' ? options.checkKeys : false; + // Let us defined on a command basis if we want functions to be serialized or not if(options['serializeFunctions'] != null && options['serializeFunctions']) { this.serializeFunctions = true; @@ -273,7 +276,7 @@ QueryCommand.prototype.toBinary = function(bsonSettings) { QueryCommand.OPTS_NONE = 0; QueryCommand.OPTS_TAILABLE_CURSOR = 2; QueryCommand.OPTS_SLAVE = 4; -QueryCommand.OPTS_OPLOG_REPLY = 8; +QueryCommand.OPTS_OPLOG_REPLAY = 8; QueryCommand.OPTS_NO_CURSOR_TIMEOUT = 16; QueryCommand.OPTS_AWAIT_DATA = 32; QueryCommand.OPTS_EXHAUST = 64; diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/base.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/base.js index 30cdc5f..8fbeabf 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/base.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/base.js @@ -1,8 +1,11 @@ var EventEmitter = require('events').EventEmitter , inherits = require('util').inherits + , utils = require('../utils') , mongodb_cr_authenticate = require('../auth/mongodb_cr.js').authenticate , mongodb_gssapi_authenticate = require('../auth/mongodb_gssapi.js').authenticate - , mongodb_sspi_authenticate = require('../auth/mongodb_sspi.js').authenticate; + , mongodb_sspi_authenticate = require('../auth/mongodb_sspi.js').authenticate + , mongodb_plain_authenticate = require('../auth/mongodb_plain.js').authenticate + , mongodb_x509_authenticate = require('../auth/mongodb_x509.js').authenticate; var id = 0; @@ -36,62 +39,96 @@ CallbackStore.prototype.callbackInfo = function(id) { * @ignore */ var NonExecutedOperationStore = function(config) { - this.config = config; - this.commands = { + var commands = { read: [] , write_reads: [] , write: [] }; -} -NonExecutedOperationStore.prototype.write = function(op) { - this.commands.write.push(op); -} + // Execute all callbacks + var fireCallbacksWithError = function(error, commands) { + while(commands.length > 0) { + var command = commands.shift(); + if(typeof command.callback == 'function') { + command.callback(error); + } + } + } -NonExecutedOperationStore.prototype.read_from_writer = function(op) { - this.commands.write_reads.push(op); -} + this.count = function() { + return commands.read.length + + commands.write_reads.length + + commands.write.length; + } -NonExecutedOperationStore.prototype.read = function(op) { - this.commands.read.push(op); -} + this.write = function(op) { + commands.write.push(op); + } -NonExecutedOperationStore.prototype.execute_queries = function(executeInsertCommand) { - var connection = this.config.checkoutReader(); - if(connection == null || connection instanceof Error) return; - - // Write out all the queries - while(this.commands.read.length > 0) { - // Get the next command - var command = this.commands.read.shift(); - command.options.connection = connection; - // Execute the next command - command.executeQueryCommand(command.db, command.db_command, command.options, command.callback); + this.read_from_writer = function(op) { + commands.write_reads.push(op); } -} -NonExecutedOperationStore.prototype.execute_writes = function() { - var connection = this.config.checkoutWriter(); - if(connection == null || connection instanceof Error) return; - - // Write out all the queries to the primary - while(this.commands.write_reads.length > 0) { - // Get the next command - var command = this.commands.write_reads.shift(); - command.options.connection = connection; - // Execute the next command - command.executeQueryCommand(command.db, command.db_command, command.options, command.callback); + this.read = function(op) { + commands.read.push(op); + } + + this.validateBufferLimit = function(numberToFailOn) { + if(numberToFailOn == -1 || numberToFailOn == null) + return true; + + // Error passed back + var error = utils.toError("No connection operations buffering limit of " + numberToFailOn + " reached"); + + // If we have passed the number of items to buffer we need to fail + if(numberToFailOn < this.count()) { + // Fail all of the callbacks + fireCallbacksWithError(error, commands.read); + fireCallbacksWithError(error, commands.write_reads); + fireCallbacksWithError(error, commands.write); + } + + // Return false + return false; } - // Execute all write operations - while(this.commands.write.length > 0) { - // Get the next command - var command = this.commands.write.shift(); - // Set the connection - command.options.connection = connection; - // Execute the next command - command.executeInsertCommand(command.db, command.db_command, command.options, command.callback); - } + this.execute_queries = function(executeInsertCommand) { + var connection = config.checkoutReader(); + if(connection == null || connection instanceof Error) return; + + // Write out all the queries + while(commands.read.length > 0) { + // Get the next command + var command = commands.read.shift(); + command.options.connection = connection; + // Execute the next command + command.executeQueryCommand(command.db, command.db_command, command.options, command.callback); + } + } + + this.execute_writes = function() { + var connection = config.checkoutWriter(); + if(connection == null || connection instanceof Error) return; + + // Write out all the queries to the primary + while(commands.write_reads.length > 0) { + // Get the next command + var command = commands.write_reads.shift(); + command.options.connection = connection; + // Execute the next command + command.executeQueryCommand(command.db, command.db_command, command.options, command.callback); + } + + // Execute all write operations + while(commands.write.length > 0) { + // Get the next command + var command = commands.write.shift(); + // Set the connection + command.options.connection = connection; + // Execute the next command + command.executeInsertCommand(command.db, command.db_command, command.options, command.callback); + } + } } /** @@ -99,61 +136,61 @@ NonExecutedOperationStore.prototype.execute_writes = function() { * @ignore */ var AuthStore = function() { - this._auths = []; -} + var _auths = []; + + this.add = function(authMechanism, dbName, username, password, authdbName, gssapiServiceName) { + // Check for duplicates + if(!this.contains(dbName)) { + // Base config + var config = { + 'username':username + , 'password':password + , 'db': dbName + , 'authMechanism': authMechanism + , 'gssapiServiceName': gssapiServiceName + }; + + // Add auth source if passed in + if(typeof authdbName == 'string') { + config['authdb'] = authdbName; + } -AuthStore.prototype.add = function(authMechanism, dbName, username, password, authdbName, gssapiServiceName) { - // Check for duplicates - if(!this.contains(dbName)) { - // Base config - var config = { - 'username':username - , 'password':password - , 'db': dbName - , 'authMechanism': authMechanism - , 'gssapiServiceName': gssapiServiceName - }; - - // Add auth source if passed in - if(typeof authdbName == 'string') { - config['authdb'] = authdbName; + // Push the config + _auths.push(config); } + } - // Push the config - this._auths.push(config); - } -} + this.contains = function(dbName) { + for(var i = 0; i < _auths.length; i++) { + if(_auths[i].db == dbName) return true; + } -AuthStore.prototype.contains = function(dbName) { - for(var i = 0; i < this._auths.length; i++) { - if(this._auths[i].db == dbName) return true; + return false; } - return false; -} + this.remove = function(dbName) { + var newAuths = []; -AuthStore.prototype.remove = function(dbName) { - var newAuths = []; + // Filter out all the login details + for(var i = 0; i < _auths.length; i++) { + if(_auths[i].db != dbName) newAuths.push(_auths[i]); + } - // Filter out all the login details - for(var i = 0; i < this._auths.length; i++) { - if(this._auths[i].db != dbName) newAuths.push(this._auths[i]); + // Set the filtered list + _auths = newAuths; } - // Set the filtered list - this._auths = newAuths; -} - -AuthStore.prototype.get = function(index) { - return this._auths[index]; -} + this.get = function(index) { + return _auths[index]; + } -AuthStore.prototype.length = function() { - return this._auths.length; -} + this.length = function() { + return _auths.length; + } -AuthStore.prototype.toArray = function() { - return this._auths.slice(0); + this.toArray = function() { + return _auths.slice(0); + } } /** @@ -161,66 +198,72 @@ AuthStore.prototype.toArray = function() { * @ignore */ var DbStore = function() { - this._dbs = []; -} + var _dbs = []; + + this.add = function(db) { + var found = false; + + // Only add if it does not exist already + for(var i = 0; i < _dbs.length; i++) { + if(db.databaseName == _dbs[i].databaseName) found = true; + } -DbStore.prototype.add = function(db) { - var found = false; - - // Only add if it does not exist already - for(var i = 0; i < this._dbs.length; i++) { - if(db.databaseName == this._dbs[i].databaseName) found = true; + // Only add if it does not already exist + if(!found) { + _dbs.push(db); + } } - // Only add if it does not already exist - if(!found) { - this._dbs.push(db); - } -} + this.reset = function() { + _dbs = []; + } -DbStore.prototype.reset = function() { - this._dbs = []; -} + this.db = function() { + return _dbs; + } -DbStore.prototype.fetch = function(databaseName) { - // Only add if it does not exist already - for(var i = 0; i < this._dbs.length; i++) { - if(databaseName == this._dbs[i].databaseName) - return this._dbs[i]; - } + this.fetch = function(databaseName) { + // Only add if it does not exist already + for(var i = 0; i < _dbs.length; i++) { + if(databaseName == _dbs[i].databaseName) + return _dbs[i]; + } - return null; -} + return null; + } -DbStore.prototype.emit = function(event, message, object, reset, filterDb, rethrow_if_no_listeners) { - var emitted = false; + this.emit = function(event, message, object, reset, filterDb, rethrow_if_no_listeners) { + var emitted = false; - // Emit the events - for(var i = 0; i < this._dbs.length; i++) { - if(this._dbs[i].listeners(event).length > 0) { - if(filterDb == null || filterDb.databaseName !== this._dbs[i].databaseName - || filterDb.tag !== this._dbs[i].tag) { - this._dbs[i].emit(event, message, object == null ? this._dbs[i] : object); - emitted = true; - } + // Not emitted and we have enabled rethrow, let process.uncaughtException + // deal with the issue + if(!emitted && rethrow_if_no_listeners) { + return process.nextTick(function() { + throw message; + }) } - } - // Emit error message - if(message - && event == 'error' - && !emitted - && rethrow_if_no_listeners - && object && object.db) { - process.nextTick(function() { - object.db.emit(event, message, null); - }) - } + // Emit the events + for(var i = 0; i < _dbs.length; i++) { + if(_dbs[i].listeners(event).length > 0) { + if(filterDb == null || filterDb.databaseName !== _dbs[i].databaseName + || filterDb.tag !== _dbs[i].tag) { + _dbs[i].emit(event, message, object == null ? _dbs[i] : object); + emitted = true; + } + } + } - // Not emitted and we have enabled rethrow, let process.uncaughtException - // deal with the issue - if(!emitted && rethrow_if_no_listeners) { - throw message; + // Emit error message + if(message + && event == 'error' + && !emitted + && rethrow_if_no_listeners + && object && object.db) { + process.nextTick(function() { + object.db.emit(event, message, null); + }) + } } } @@ -271,6 +314,10 @@ var _apply_auths_serially = function(self, db, auths, callback) { } } else if(auth.authMechanism == 'MONGODB-CR') { mongodb_cr_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); + } else if(auth.authMechanism == 'PLAIN') { + mongodb_plain_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); + } else if(auth.authMechanism == 'MONGODB-X509') { + mongodb_x509_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); } } @@ -354,6 +401,19 @@ Base.prototype._reRegisterHandler = function(newId, object, callback) { this._callBackStore._notReplied[newId] = object.info; } +/** + * + * @ignore + * @api private + */ +Base.prototype._flushAllCallHandlers = function(err) { + var keys = Object.keys(this._callBackStore._notReplied); + + for(var i = 0; i < keys.length; i++) { + this._callHandler(keys[i], null, err); + } +} + /** * * @ignore @@ -381,7 +441,7 @@ Base.prototype._callHandler = function(id, document, err) { // Execute the callback if one was provided if(typeof callback == 'function') callback(err, document, info.connection); } catch(err) { - self._emitAcrossAllDbInstances(self, null, "error", err, self, true, true); + self._emitAcrossAllDbInstances(self, null, "error", utils.toError(err), self, true, true); } } } @@ -429,9 +489,11 @@ Base.prototype._findHandler = function(id) { */ Base.prototype._emitAcrossAllDbInstances = function(server, filterDb, event, message, object, resetConnection, rethrow_if_no_listeners) { if(resetConnection) { - for(var i = 0; i < this._dbStore._dbs.length; i++) { - if(typeof this._dbStore._dbs[i].openCalled != 'undefined') - this._dbStore._dbs[i].openCalled = false; + var dbs = this._dbStore.db(); + + for(var i = 0; i < dbs.length; i++) { + if(typeof dbs[i].openCalled != 'undefined') + dbs[i].openCalled = false; } } diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/connection.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/connection.js index 8f4d4c0..45f69ad 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/connection.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/connection.js @@ -7,6 +7,7 @@ var utils = require('./connection_utils'), tls = require('tls'); var Connection = exports.Connection = function(id, socketOptions) { + var self = this; // Set up event emitter EventEmitter.call(this); // Store all socket options @@ -20,6 +21,10 @@ var Connection = exports.Connection = function(id, socketOptions) { // Set if this is a domain socket this.domainSocket = this.socketOptions.domainSocket; + // Supported min and max wire protocol + this.minWireVersion = 0; + this.maxWireVersion = 2; + // // Connection parsing state // @@ -44,7 +49,20 @@ var Connection = exports.Connection = function(id, socketOptions) { disableDriverBSONSizeCheck: this.socketOptions['disableDriverBSONSizeCheck'] || false , maxBsonSize: this.maxBsonSize , maxMessageSizeBytes: this.maxMessageSizeBytes - } + } + + // Allow setting the socketTimeoutMS on all connections + // to work around issues such as secondaries blocking due to compaction + Object.defineProperty(this, "socketTimeoutMS", { + enumerable: true + , get: function () { return self.socketOptions.socketTimeoutMS; } + , set: function (value) { + // Set the socket timeoutMS value + self.socketOptions.socketTimeoutMS = value; + // Set the physical connection timeout + self.connection.setTimeout(self.socketOptions.socketTimeoutMS); + } + }); } // Set max bson size @@ -69,6 +87,7 @@ Connection.prototype.start = function() { if(this.logger != null && this.logger.doDebug){ this.logger.debug("opened connection", this.socketOptions); } + // Set options on the socket this.connection.setTimeout(this.socketOptions.connectTimeoutMS != null ? this.socketOptions.connectTimeoutMS : this.socketOptions.timeout); // Work around for 0.4.X @@ -185,6 +204,21 @@ Connection.prototype.isConnected = function() { return this.connected && !this.connection.destroyed && this.connection.writable && this.connection.readable; } +// Validate if the driver supports this server +Connection.prototype.isCompatible = function() { + if(this.serverCapabilities == null) return true; + // Is compatible with backward server + if(this.serverCapabilities.minWireVersion == 0 + && this.serverCapabilities.maxWireVersion ==0) return true; + + // Check if we overlap + if(this.serverCapabilities.minWireVersion >= this.minWireVersion + && this.serverCapabilities.maxWireVersion <= this.maxWireVersion) return true; + + // Not compatible + return false; +} + // Write the data out to the socket Connection.prototype.write = function(command, callback) { try { @@ -207,10 +241,10 @@ Connection.prototype.write = function(command, callback) { try { // Pass in the bson validation settings (validate early) var binaryCommand = command.toBinary(this.maxBsonSettings) - + // Do we have a logger active log the event if(this.logger != null && this.logger.doDebug) this.logger.debug("writing command to mongodb", {binary: binaryCommand, json: command[i]}); - + // Write the binary command out to socket this.writeSteam.write(binaryCommand); } catch(err) { return callback(err, null) diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/mongos.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/mongos.js index 47075bd..01a9c32 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/mongos.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/mongos.js @@ -3,6 +3,7 @@ var ReadPreference = require('./read_preference').ReadPreference , Server = require('./server').Server , format = require('util').format , timers = require('timers') + , utils = require('../utils') , inherits = require('util').inherits; // Set processor, setImmediate if 0.10 otherwise nextTick @@ -75,6 +76,10 @@ var Mongos = function Mongos(servers, options) { // Set socket options server.socketOptions = socketOptions; } + + // Allow setting the socketTimeoutMS on all connections + // to work around issues such as secondaries blocking due to compaction + utils.setSocketTimeoutProperty(this, this.socketOptions); } /** @@ -140,6 +145,8 @@ Mongos.prototype.connect = function(db, options, callback) { // Error handler var errorOrCloseHandler = function(_server) { return function(err, result) { + // Emit left event, signaling mongos left the ha + self.emit('left', 'mongos', _server); // Execute all the callbacks with errors self.__executeAllCallbacksWithError(err); // Check if we have the server @@ -358,6 +365,9 @@ Mongos.prototype.connect = function(db, options, callback) { * Add a server to the list of up servers and sort them by ping time */ var add_server = function(self, _server) { + // Emit a new server joined + self.emit('joined', "mongos", null, _server); + // Get the server url var server_key = format("%s:%s", _server.host, _server.port); // Push to list of valid server self.upServers[server_key] = _server; @@ -500,6 +510,9 @@ Mongos.prototype.close = function(callback) { self._emitAcrossAllDbInstances(self, null, "close", null, null, true) }); + // Flush out any remaining call handlers + self._flushAllCallHandlers(utils.toError("Connection Closed By Application")); + // Close all the up servers for(var name in this.upServers) { this.upServers[name].close(function(err, result) { diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/ha.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/ha.js index b89e7ba..e3e8f32 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/ha.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/ha.js @@ -209,7 +209,7 @@ var _reconnect_servers = function(self, reconnect_servers) { // Unpack connection options var connectTimeoutMS = self.options.connectTimeoutMS || 10000; - var socketTimeoutMS = self.options.socketTimeoutMS || 30000; + var socketTimeoutMS = self.options.socketTimeoutMS || 0; // Server class var Db = require('../../db').Db @@ -273,6 +273,10 @@ var _reconnect_servers = function(self, reconnect_servers) { self.replset.__executeAllServerSpecificErrorCallbacks(_server.socketOptions.host, _server.socketOptions.port, err); if(doc.ismaster) { + // Emit primary added + self.replset.emit('joined', "primary", doc, _server); + + // If it was a secondary remove it if(state.secondaries[doc.me]) { delete state.secondaries[doc.me]; } @@ -284,6 +288,9 @@ var _reconnect_servers = function(self, reconnect_servers) { // Execute any waiting writes self.replset._commandsStore.execute_writes(); } else if(doc.secondary) { + // Emit secondary added + self.replset.emit('joined', "secondary", doc, _server); + // Add the secondary to the state state.secondaries[doc.me] = _server; // Override any server in list of addresses state.addresses[doc.me] = _server; diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js index 3254df9..c2d1df4 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js @@ -12,16 +12,16 @@ var ReadPreference = require('../read_preference').ReadPreference , HighAvailabilityProcess = require('./ha').HighAvailabilityProcess , Base = require('../base').Base; -const STATE_STARTING_PHASE_1 = 0; -const STATE_PRIMARY = 1; -const STATE_SECONDARY = 2; -const STATE_RECOVERING = 3; -const STATE_FATAL_ERROR = 4; -const STATE_STARTING_PHASE_2 = 5; -const STATE_UNKNOWN = 6; -const STATE_ARBITER = 7; -const STATE_DOWN = 8; -const STATE_ROLLBACK = 9; +var STATE_STARTING_PHASE_1 = 0; +var STATE_PRIMARY = 1; +var STATE_SECONDARY = 2; +var STATE_RECOVERING = 3; +var STATE_FATAL_ERROR = 4; +var STATE_STARTING_PHASE_2 = 5; +var STATE_UNKNOWN = 6; +var STATE_ARBITER = 7; +var STATE_DOWN = 8; +var STATE_ROLLBACK = 9; // Set processor, setImmediate if 0.10 otherwise nextTick var processor = require('../../utils').processor(); @@ -80,7 +80,6 @@ var ReplSet = exports.ReplSet = function(servers, options) { // Add high availability process this._haProcess = new HighAvailabilityProcess(this, this.options); - // Let's iterate over all the provided server objects and decorate them this.servers = this.options.decorateAndClean(servers, this._callBackStore); // Throw error if no seed servers @@ -99,7 +98,7 @@ var ReplSet = exports.ReplSet = function(servers, options) { this.emitOpen = this.options.emitOpen || true; // Set up a clean state - this._state = new ReplSetState(); + this._state = new ReplSetState(this); // Current round robin selected server this._currentServerChoice = 0; // Ensure up the server callbacks @@ -110,6 +109,10 @@ var ReplSet = exports.ReplSet = function(servers, options) { this.servers[i].options.auto_reconnect = false; this.servers[i].inheritReplSetOptionsFrom(this); } + + // Allow setting the socketTimeoutMS on all connections + // to work around issues such as secondaries blocking due to compaction + utils.setSocketTimeoutProperty(this, this.options.socketOptions); } /** @@ -236,13 +239,16 @@ ReplSet.prototype.close = function(callback) { } // Clean out the state - this._state = new ReplSetState(); + this._state = new ReplSetState(this); // Emit close event processor(function() { self._emitAcrossAllDbInstances(self, null, "close", null, null, true) }); + // Flush out any remaining call handlers + self._flushAllCallHandlers(utils.toError("Connection Closed By Application")); + // Callback if(typeof callback == 'function') return callback(null, null); @@ -304,7 +310,10 @@ var _handler = function(event, self, server) { return function(err, doc) { // The event happened to a primary // Remove it from play - if(self._state.isPrimary(server)) { + if(self._state.isPrimary(server)) { + // Emit that the primary left the replicaset + self.emit('left', 'primary', server); + // Get the current master var current_master = self._state.master; self._state.master = null; self._serverState = ReplSet.REPLSET_READ_ONLY; @@ -318,6 +327,9 @@ var _handler = function(event, self, server) { self.__executeAllServerSpecificErrorCallbacks(host, port, err); } } else if(self._state.isSecondary(server)) { + // Emit that a secondary left the replicaset + self.emit('left', 'secondary', server); + // Delete from the list delete self._state.secondaries[server.name]; } diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js index 6f9e143..1fbd9c0 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js @@ -3,7 +3,7 @@ * * @ignore */ -var ReplSetState = function ReplSetState () { +var ReplSetState = function ReplSetState (replset) { this.errorMessages = []; this.secondaries = {}; this.addresses = {}; @@ -13,6 +13,7 @@ var ReplSetState = function ReplSetState () { this.errors = {}; this.setName = null; this.master = null; + this.replset = replset; } ReplSetState.prototype.hasValidServers = function() { @@ -46,12 +47,15 @@ ReplSetState.prototype.addServer = function(server, master) { if(master.ismaster) { this.master = server; this.addresses[server.name] = server; + this.replset.emit('joined', "primary", master, server); } else if(master.secondary) { this.secondaries[server.name] = server; this.addresses[server.name] = server; + this.replset.emit('joined', "secondary", master, server); } else if(master.arbiters) { this.arbiters[server.name] = server; this.addresses[server.name] = server; + this.replset.emit('joined', "arbiter", master, server); } } diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js index 76990e2..15a3a88 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js @@ -241,12 +241,12 @@ PingStrategy.prototype._pingServer = function(callback) { slaveOk: true, poolSize: 1, socketOptions: { connectTimeoutMS: connectTimeoutMS }, - ssl: self.replicaset.ssl, - sslValidate: self.replicaset.sslValidate, - sslCA: self.replicaset.sslCA, - sslCert: self.replicaset.sslCert, - sslKey: self.replicaset.sslKey, - sslPass: self.replicaset.sslPass + ssl: self.replicaset.options.ssl, + sslValidate: self.replicaset.options.sslValidate, + sslCA: self.replicaset.options.sslCA, + sslCert: self.replicaset.options.sslCert, + sslKey: self.replicaset.options.sslKey, + sslPass: self.replicaset.options.sslPass }); // Create Db instance @@ -261,7 +261,7 @@ PingStrategy.prototype._pingServer = function(callback) { return; } - __db.open(function(err, db) { + __db.open(function(err, db) { if(self.state == 'disconnected' && __db != null) { return __db.close(); } diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/server.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/server.js index f80f6f6..36a3bc0 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/server.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/server.js @@ -4,6 +4,7 @@ var Connection = require('./connection').Connection, MongoReply = require('../responses/mongo_reply').MongoReply, ConnectionPool = require('./connection_pool').ConnectionPool, EventEmitter = require('events').EventEmitter, + ServerCapabilities = require('./server_capabilities').ServerCapabilities, Base = require('./base').Base, format = require('util').format, utils = require('../utils'), @@ -74,6 +75,8 @@ function Server(host, port, options) { this.sslKey = this.options.sslKey; // Password to unlock private key this.sslPass = this.options.sslPass; + // Server capabilities + this.serverCapabilities = null; // Set server name this.name = format("%s:%s", host, port); @@ -136,6 +139,10 @@ function Server(host, port, options) { this._state = {'runtimeStats': {'queryStats':new RunningStats()}}; // Do we record server stats or not this.recordQueryStats = false; + + // Allow setting the socketTimeoutMS on all connections + // to work around issues such as secondaries blocking due to compaction + utils.setSocketTimeoutProperty(this, this.socketOptions); }; /** @@ -194,6 +201,9 @@ Server.prototype.close = function(callback) { processor(function() { self._emitAcrossAllDbInstances(self, null, "close", null, null, true) }) + + // Flush out any remaining call handlers + self._flushAllCallHandlers(utils.toError("Connection Closed By Application")); } // Peform callback if present @@ -375,6 +385,9 @@ Server.prototype.connect = function(dbInstance, options, callback) { _server._emitAcrossAllDbInstances(_server, eventReceiver, "reconnect", null, returnIsMasterResults ? reply : null, null); } + // Set server capabilities + server.serverCapabilities = new ServerCapabilities(_server.isMasterDoc); + // If we have it set to returnIsMasterResults if(returnIsMasterResults) { internalCallback(null, reply, _server); @@ -443,17 +456,17 @@ Server.prototype.connect = function(dbInstance, options, callback) { var internalCallback = callback; callback = null; // Perform callback - internalCallback(new Error("connection closed due to parseError"), null, server); + internalCallback(err, null, server); } else if(server.isSetMember()) { - if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", new Error("connection closed due to parseError"), server); + if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", utils.toError(err), server); } else { - if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", new Error("connection closed due to parseError"), server); + if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", utils.toError(err), server); } // If we are a single server connection fire errors correctly if(!server.isSetMember()) { // Fire all callback errors - server.__executeAllCallbacksWithError(new Error("connection closed due to parseError")); + server.__executeAllCallbacksWithError(err); // Emit error server._emitAcrossAllDbInstances(server, eventReceiver, "parseError", server, null, true); } @@ -655,7 +668,7 @@ Server.prototype.connect = function(dbInstance, options, callback) { // If we have a parser error we are in an unknown state, close everything and emit // error - connectionPool.on("parseError", function(message) { + connectionPool.on("parseError", function(err) { // If pool connection is already closed if(server._serverState === 'disconnected' || server._serverState === 'destroyed') return; @@ -667,17 +680,17 @@ Server.prototype.connect = function(dbInstance, options, callback) { var internalCallback = callback; callback = null; // Perform callback - internalCallback(new Error("connection closed due to parseError"), null, server); + internalCallback(utils.toError(err), null, server); } else if(server.isSetMember()) { - if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", new Error("connection closed due to parseError"), server); + if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", utils.toError(err), server); } else { - if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", new Error("connection closed due to parseError"), server); + if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", utils.toError(err), server); } // If we are a single server connection fire errors correctly if(!server.isSetMember()) { // Fire all callback errors - server.__executeAllCallbacksWithError(new Error("connection closed due to parseError")); + server.__executeAllCallbacksWithError(utils.toError(err)); // Emit error server._emitAcrossAllDbInstances(server, eventReceiver, "parseError", server, null, true); } @@ -691,7 +704,7 @@ Server.prototype.connect = function(dbInstance, options, callback) { * @ignore */ Server.prototype.allRawConnections = function() { - return this.connectionPool.getAllConnections(); + return this.connectionPool != null ? this.connectionPool.getAllConnections() : []; } /** @@ -723,7 +736,11 @@ Server.prototype.checkoutWriter = function(read) { var result = canCheckoutWriter(this, read); // If the result is null check out a writer if(result == null && this.connectionPool != null) { - return this.connectionPool.checkoutConnection(); + var connection = this.connectionPool.checkoutConnection(); + // Add server capabilities to the connection + if(connection) + connection.serverCapabilities = this.serverCapabilities; + return connection; } else if(result == null) { return null; } else { @@ -762,7 +779,11 @@ Server.prototype.checkoutReader = function(read) { var result = canCheckoutReader(this); // If the result is null check out a writer if(result == null && this.connectionPool != null) { - return this.connectionPool.checkoutConnection(); + var connection = this.connectionPool.checkoutConnection(); + // Add server capabilities to the connection + if(connection) + connection.serverCapabilities = this.serverCapabilities; + return connection; } else if(result == null) { return null; } else { diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/server_capabilities.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/server_capabilities.js new file mode 100644 index 0000000..88bdf9f --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/server_capabilities.js @@ -0,0 +1,48 @@ +var ServerCapabilities = function(isMasterResult) { + // Capabilities + var aggregationCursor = false; + var writeCommands = false; + var textSearch = false; + var authCommands = false; + var maxNumberOfDocsInBatch = 1000; + + if(isMasterResult.minWireVersion >= 0) { + textSearch = true; + } + + if(isMasterResult.maxWireVersion >= 1) { + aggregationCursor = true; + authCommands = true; + } + + if(isMasterResult.maxWireVersion >= 2) { + writeCommands = true; + } + + // If no min or max wire version set to 0 + if(isMasterResult.minWireVersion == null) { + isMasterResult.minWireVersion = 0; + } + + if(isMasterResult.maxWireVersion == null) { + isMasterResult.maxWireVersion = 0; + } + + // Map up read only parameters + setup_get_property(this, "hasAggregationCursor", aggregationCursor); + setup_get_property(this, "hasWriteCommands", writeCommands); + setup_get_property(this, "hasTextSearch", textSearch); + setup_get_property(this, "hasAuthCommands", authCommands); + setup_get_property(this, "minWireVersion", isMasterResult.minWireVersion); + setup_get_property(this, "maxWireVersion", isMasterResult.maxWireVersion); + setup_get_property(this, "maxNumberOfDocsInBatch", maxNumberOfDocsInBatch); +} + +var setup_get_property = function(object, name, value) { + Object.defineProperty(object, name, { + enumerable: true + , get: function () { return value; } + }); +} + +exports.ServerCapabilities = ServerCapabilities; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/url_parser.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/url_parser.js index 347aee0..1d32b6a 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/url_parser.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/url_parser.js @@ -189,13 +189,16 @@ exports.parse = function(url, options) { } else { object.auth.user = decodeURIComponent(object.auth.user); } + } else if(value == 'MONGODB-X509') { + object.auth = {user: decodeURIComponent(authPart)}; } // Only support GSSAPI or MONGODB-CR for now if(value != 'GSSAPI' + && value != 'MONGODB-X509' && value != 'MONGODB-CR' && value != 'PLAIN') - throw new Error("only GSSAPI, PLAIN or MONGODB-CR is supported by authMechanism"); + throw new Error("only GSSAPI, PLAIN, MONGODB-X509 or MONGODB-CR is supported by authMechanism"); // Authentication mechanism dbOptions.authMechanism = value; diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/cursor.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/cursor.js index 7beca60..d54754e 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/cursor.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/cursor.js @@ -25,6 +25,7 @@ var processor = require('./utils').processor(); * - **timeout** {Boolean}, timeout allow the query to timeout. * - **tailable** {Boolean}, tailable allow the cursor to be tailable. * - **awaitdata** {Boolean}, awaitdata allow the cursor to wait for data, only applicable for tailable cursor. + * - **oplogReplay** {Boolean}, sets an internal flag, only applicable for tailable cursor. * - **batchSize** {Number}, batchSize the number of the subset of results to request the database to return for every request. This should initially be greater than 1 otherwise the database will automatically close the cursor. The batch size can be set to 1 with cursorInstance.batchSize after performing the initial query to the database. * - **raw** {Boolean}, raw return all query documents as raw buffers (default false). * - **read** {Boolean}, read specify override of read from source (primary/secondary). @@ -32,6 +33,7 @@ var processor = require('./utils').processor(); * - **maxScan** {Number}, maxScan limit the number of items to scan. * - **min** {Number}, min set index bounds. * - **max** {Number}, max set index bounds. + * - **maxTimeMS** {Number}, number of miliseconds to wait before aborting the query. * - **showDiskLoc** {Boolean}, showDiskLoc show disk location of results. * - **comment** {String}, comment you can put a $comment field on a query to make looking in the profiler logs simpler. * - **numberOfRetries** {Number}, numberOfRetries if using awaidata specifies the number of times to retry on timeout. @@ -63,6 +65,7 @@ function Cursor(db, collection, selector, fields, options) { this.timeout = options.timeout == null ? true : options.timeout; this.tailable = options.tailable; this.awaitdata = options.awaitdata; + this.oplogReplay = options.oplogReplay; this.numberOfRetries = options.numberOfRetries == null ? 5 : options.numberOfRetries; this.currentNumberOfRetries = this.numberOfRetries; this.batchSizeValue = options.batchSize == null ? 0 : options.batchSize; @@ -78,6 +81,7 @@ function Cursor(db, collection, selector, fields, options) { this.exhaust = options.exhaust || false; this.partial = options.partial || false; this.slaveOk = options.slaveOk || false; + this.maxTimeMSValue = options.maxTimeMS; this.totalNumberOfRecords = 0; this.items = []; @@ -201,7 +205,7 @@ var getAllByGetMore = function(self, callback) { if(self.cursorId.toString() == "0") return callback(null, null); getAllByGetMore(self, callback); }) -} +}; /** * Iterates over all the documents for this cursor. As with **{cursor.toArray}**, @@ -248,7 +252,7 @@ Cursor.prototype.each = function(callback) { } else { callback(new Error("Cursor is closed"), null); } -} +}; // Special for exhaust command as we don't initiate the actual result sets // the server just sends them as they arrive meaning we need to get the IO event @@ -306,6 +310,9 @@ Cursor.prototype.count = function(applySkipLimit, callback) { if(typeof this.limitValue == 'number') options.limit = this.limitValue; } + // If maxTimeMS set + if(typeof this.maxTimeMSValue == 'number') options.maxTimeMS = this.maxTimeMSValue; + // Call count command this.collection.count(this.selector, options, callback); }; @@ -381,6 +388,27 @@ Cursor.prototype.limit = function(limit, callback) { return this; }; +/** + * Specifies a time limit for a query operation. After the specified + * time is exceeded, the operation will be aborted and an error will be + * returned to the client. If maxTimeMS is null, no limit is applied. + * + * @param {Number} maxTimeMS the maxTimeMS for the query. + * @param {Function} [callback] this optional callback will be called after executing this method. The first parameter will contain an error object when the limit given is not a valid number or when the cursor is already closed while the second parameter will contain a reference to this object upon successful execution. + * @return {Cursor} an instance of this object. + * @api public + */ +Cursor.prototype.maxTimeMS = function(maxTimeMS, callback) { + if(typeof maxTimeMS != 'number') { + throw new Error("maxTimeMS must be a number"); + } + + // Save the maxTimeMS option + this.maxTimeMSValue = maxTimeMS; + // Return the cursor for chaining + return this; +}; + /** * Sets the read preference for the cursor * @@ -512,6 +540,12 @@ var generateQueryCommand = function(self) { if(self.awaitdata != null) { queryOptions |= QueryCommand.OPTS_AWAIT_DATA; } + + // This sets an internal undocumented flag. Clients should not depend on its + // behavior! + if(self.oplogReplay != null) { + queryOptions |= QueryCommand.OPTS_OPLOG_REPLAY; + } } if(self.exhaust) { @@ -544,7 +578,7 @@ var generateQueryCommand = function(self) { // Check if we need a special selector if(self.sortValue != null || self.explainValue != null || self.hint != null || self.snapshot != null || self.returnKey != null || self.maxScan != null || self.min != null || self.max != null - || self.showDiskLoc != null || self.comment != null) { + || self.showDiskLoc != null || self.comment != null || typeof self.maxTimeMSValue == 'number') { // Build special selector var specialSelector = {'$query':self.selector}; @@ -557,6 +591,17 @@ var generateQueryCommand = function(self) { if(self.max != null) specialSelector['$max'] = self.max; if(self.showDiskLoc != null) specialSelector['$showDiskLoc'] = self.showDiskLoc; if(self.comment != null) specialSelector['$comment'] = self.comment; + + // If we are querying the $cmd collection we need to add maxTimeMS as a field + // otherwise for a normal query it's a "special selector" $maxTimeMS + if(typeof self.maxTimeMSValue == 'number' + && self.collectionName.indexOf('.$cmd') != -1) { + specialSelector['maxTimeMS'] = self.maxTimeMSValue; + } else if(typeof self.maxTimeMSValue == 'number' + && self.collectionName.indexOf('.$cmd') == -1) { + specialSelector['$maxTimeMS'] = self.maxTimeMSValue; + } + // If we have explain set only return a single document with automatic cursor close if(self.explainValue != null) { numberToReturn = (-1)*Math.abs(numberToReturn); @@ -617,7 +662,13 @@ Cursor.prototype.nextObject = function(options, callback) { return callback(err, null); } - var queryOptions = {exhaust: self.exhaust, raw:self.raw, read:self.read, connection:self.connection}; + // No need to check the keys + var queryOptions = {exhaust: self.exhaust + , raw:self.raw + , read:self.read + , connection:self.connection + , checkKeys: false}; + // Execute command var commandHandler = function(err, result) { // If on reconnect, the command got given a different connection, switch @@ -634,6 +685,10 @@ Cursor.prototype.nextObject = function(options, callback) { return self.close(function() {callback(utils.toError(result.documents[0]['$err']), null);}); } + if(err == null && result && result.documents[0] && result.documents[0]['errmsg']) { + return self.close(function() {callback(utils.toError(result.documents[0]), null);}); + } + self.queryRun = true; self.state = Cursor.OPEN; // Adjust the state of the cursor self.cursorId = result.cursorId; @@ -845,6 +900,7 @@ Cursor.prototype.explain = function(callback) { , showDiskLoc: this.showDiskLoc , comment: this.comment , awaitdata: this.awaitdata + , oplogReplay: this.oplogReplay , numberOfRetries: this.numberOfRetries , dbName: this.dbName }); diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/db.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/db.js index 7dc2e47..ebf7a03 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/db.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/db.js @@ -17,10 +17,13 @@ var QueryCommand = require('./commands/query_command').QueryCommand , crypto = require('crypto') , timers = require('timers') , utils = require('./utils') + + // Authentication methods , mongodb_cr_authenticate = require('./auth/mongodb_cr.js').authenticate , mongodb_gssapi_authenticate = require('./auth/mongodb_gssapi.js').authenticate , mongodb_sspi_authenticate = require('./auth/mongodb_sspi.js').authenticate - , mongodb_plain_authenticate = require('./auth/mongodb_plain.js').authenticate; + , mongodb_plain_authenticate = require('./auth/mongodb_plain.js').authenticate + , mongodb_x509_authenticate = require('./auth/mongodb_x509.js').authenticate; var hasKerberos = false; // Check if we have a the kerberos library @@ -36,22 +39,23 @@ var processor = require('./utils').processor(); * Create a new Db instance. * * Options - * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **native_parser** {Boolean, default:false}, use c++ bson parser. * - **forceServerObjectId** {Boolean, default:false}, force server to create _id fields instead of client. * - **pkFactory** {Object}, object overriding the basic ObjectID primary key generation. * - **serializeFunctions** {Boolean, default:false}, serialize functions. - * - **raw** {Boolean, default:false}, peform operations using raw bson buffers. + * - **raw** {Boolean, default:false}, perform operations using raw bson buffers. * - **recordQueryStats** {Boolean, default:false}, record query statistics during execution. - * - **retryMiliSeconds** {Number, default:5000}, number of miliseconds between retries. + * - **retryMiliSeconds** {Number, default:5000}, number of milliseconds between retries. * - **numberOfRetries** {Number, default:5}, number of retries off connection. * - **logger** {Object, default:null}, an object representing a logger that you want to use, needs to support functions debug, log, error **({error:function(message, object) {}, log:function(message, object) {}, debug:function(message, object) {}})**. * - **slaveOk** {Number, default:null}, force setting of SlaveOk flag on queries (only use when explicitly connecting to a secondary server). * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits + * - **bufferMaxEntries** {Boolean, default: -1}, sets a cap on how many operations the driver will buffer up before giving up on getting a working connection, default is -1 which is unlimited * * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. @@ -64,7 +68,6 @@ var processor = require('./utils').processor(); function Db(databaseName, serverConfig, options) { if(!(this instanceof Db)) return new Db(databaseName, serverConfig, options); EventEmitter.call(this); - var self = this; this.databaseName = databaseName; this.serverConfig = serverConfig; @@ -76,16 +79,19 @@ function Db(databaseName, serverConfig, options) { // Verify that nobody is using this config if(!overrideUsedFlag && this.serverConfig != null && typeof this.serverConfig == 'object' && this.serverConfig._isUsed && this.serverConfig._isUsed()) { - throw new Error("A Server or ReplSet instance cannot be shared across multiple Db instances"); + throw new Error('A Server or ReplSet instance cannot be shared across multiple Db instances'); } else if(!overrideUsedFlag && typeof this.serverConfig == 'object'){ // Set being used this.serverConfig._used = true; } // Allow slaveOk override - this.slaveOk = this.options["slave_ok"] == null ? false : this.options["slave_ok"]; - this.slaveOk = this.options["slaveOk"] == null ? this.slaveOk : this.options["slaveOk"]; + this.slaveOk = this.options['slave_ok'] == null ? false : this.options['slave_ok']; + this.slaveOk = this.options['slaveOk'] == null ? this.slaveOk : this.options['slaveOk']; + // Number of operations to buffer before failure + this.bufferMaxEntries = typeof this.options['bufferMaxEntries'] == 'number' ? this.options['bufferMaxEntries'] : -1; + // Ensure we have a valid db name validateDatabaseName(databaseName); @@ -109,8 +115,8 @@ function Db(databaseName, serverConfig, options) { this.bson_deserializer.promoteLongs = this.options.promoteLongs == null ? true : this.options.promoteLongs; } catch (err) { // If we tried to instantiate the native driver - var msg = "Native bson parser not compiled, please compile " - + "or avoid using native_parser=true"; + var msg = 'Native bson parser not compiled, please compile ' + + 'or avoid using native_parser=true'; throw Error(msg); } @@ -130,9 +136,9 @@ function Db(databaseName, serverConfig, options) { console.log("= one of the options ="); console.log("= ="); console.log("= w: (value of > -1 or the string 'majority'), where < 1 means ="); - console.log("= no write acknowlegement ="); - console.log("= journal: true/false, wait for flush to journal before acknowlegement ="); - console.log("= fsync: true/false, wait for flush to file system before acknowlegement ="); + console.log("= no write acknowledgement ="); + console.log("= journal: true/false, wait for flush to journal before acknowledgement ="); + console.log("= fsync: true/false, wait for flush to file system before acknowledgement ="); console.log("= ="); console.log("= For backward compatibility safe is still supported and ="); console.log("= allows values of [true | false | {j:true} | {w:n, wtimeout:n} | {fsync:true}] ="); @@ -143,7 +149,7 @@ function Db(databaseName, serverConfig, options) { console.log("= ="); console.log("= http://www.mongodb.org/display/DOCS/getLastError+Command ="); console.log("= ="); - console.log("= The default of no acknowlegement will change in the very near future ="); + console.log("= The default of no acknowledgement will change in the very near future ="); console.log("= ="); console.log("= This message will disappear when the default safe is set on the driver Db ="); console.log("========================================================================================"); @@ -225,7 +231,7 @@ inherits(Db, EventEmitter); /** * Initialize the database connection. * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the index information or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the index information or null if an error occurred. * @return {null} * @api public */ @@ -261,10 +267,11 @@ Db.prototype.open = function(callback) { // Attempt to connect self.serverConfig.connect(self, connect_options, function(err, result) { if(err != null) { - // Set that db has been closed - self.openCalled = false; - // Return error from connection - return callback(err, null); + // Close db to reset connection + return self.close(function () { + // Return error from connection + return callback(err, null); + }); } // Set the status of the server self._state = 'connected'; @@ -316,13 +323,13 @@ Db.prototype.db = function(dbName) { // Return the db object return db; -} +}; /** * Close the current db connection, including all the child db instances. Emits close event if no callback is provided. * * @param {Boolean} [forceClose] connection can never be reused. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results or null if an error occurred. * @return {null} * @api public */ @@ -361,7 +368,7 @@ Db.prototype.admin = function(callback) { * Returns a cursor to all the collection information. * * @param {String} [collectionName] the collection name we wish to retrieve the information from. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the options or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the options or null if an error occurred. * @return {null} * @api public */ @@ -389,7 +396,7 @@ Db.prototype.collectionsInfo = function(collectionName, callback) { * * @param {String} [collectionName] the collection name we wish to filter by. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the collection names or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the collection names or null if an error occurred. * @return {null} * @api public */ @@ -434,14 +441,14 @@ Db.prototype.collectionNames = function(collectionName, options, callback) { * can use it without a callback in the following way. var collection = db.collection('mycollection'); * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write +* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning * - **serializeFunctions** {Boolean, default:false}, serialize functions on the document. * - **raw** {Boolean, default:false}, perform all operations using raw bson objects. * - **pkFactory** {Object}, object overriding the basic ObjectID primary key generation. - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **strict**, (Boolean, default:false) returns an error if the collection does not exist * * Deprecated Options @@ -449,7 +456,7 @@ Db.prototype.collectionNames = function(collectionName, options, callback) { * * @param {String} collectionName the collection name we wish to access. * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the collection or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the collection or null if an error occurred. * @return {null} * @api public */ @@ -492,7 +499,7 @@ Db.prototype.collection = function(collectionName, options, callback) { /** * Fetch all collections for the current db. * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the collections or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the collections or null if an error occurred. * @return {null} * @api public */ @@ -519,7 +526,7 @@ Db.prototype.collections = function(callback) { * @param {Code} code javascript to execute on server. * @param {Object|Array} [parameters] the parameters for the call. * @param {Object} [options] the options - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from eval or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from eval or null if an error occurred. * @return {null} * @api public */ @@ -572,7 +579,7 @@ Db.prototype.eval = function(code, parameters, options, callback) { * Dereference a dbref, against a db * * @param {DBRef} dbRef db reference object we wish to resolve. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from dereference or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from dereference or null if an error occurred. * @return {null} * @api public */ @@ -590,7 +597,7 @@ Db.prototype.dereference = function(dbRef, callback) { /** * Logout user from server, fire off on all connections and remove all auth info * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from logout or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from logout or null if an error occurred. * @return {null} * @api public */ @@ -621,27 +628,25 @@ Db.prototype.logout = function(options, callback) { utils.handleSingleCommandResultReturn(true, false, internalCallback)(err, result); } }); -} +}; /** * Authenticate a user against the server. * authMechanism * Options - * - **authSource** {String}, The database that the credentials are for, - * different from the name of the current DB, for example admin * - **authMechanism** {String, default:MONGODB-CR}, The authentication mechanism to use, GSSAPI or MONGODB-CR * * @param {String} username username. * @param {String} password password. * @param {Object} [options] the options - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from authentication or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from authentication or null if an error occurred. * @return {null} * @api public */ Db.prototype.authenticate = function(username, password, options, callback) { var self = this; - if(typeof callback === 'undefined') { + if(typeof options == 'function') { callback = options; options = {}; } @@ -651,8 +656,9 @@ Db.prototype.authenticate = function(username, password, options, callback) { options.authMechanism = 'MONGODB-CR'; } else if(options.authMechanism != 'GSSAPI' && options.authMechanism != 'MONGODB-CR' + && options.authMechanism != 'MONGODB-X509' && options.authMechanism != 'PLAIN') { - return callback(new Error("only GSSAPI, PLAIN or MONGODB-CR is supported by authMechanism")); + return callback(new Error("only GSSAPI, PLAIN, MONGODB-X509 or MONGODB-CR is supported by authMechanism")); } // the default db to authenticate against is 'this' @@ -675,6 +681,8 @@ Db.prototype.authenticate = function(username, password, options, callback) { mongodb_cr_authenticate(self, username, password, authdb, options, _callback); } else if(options.authMechanism == 'PLAIN') { mongodb_plain_authenticate(self, username, password, options, _callback); + } else if(options.authMechanism == 'MONGODB-X509') { + mongodb_x509_authenticate(self, username, password, options, _callback); } else if(options.authMechanism == 'GSSAPI') { // // Kerberos library is not installed, throw and error @@ -703,10 +711,12 @@ Db.prototype.authenticate = function(username, password, options, callback) { * Add a user to the database. * * Options - * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **customData**, (Object, default:{}) custom data associated with the user (only Mongodb 2.6 or higher) + * - **roles**, (Array, default:[]) roles associated with the created user (only Mongodb 2.6 or higher) * * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. @@ -714,18 +724,25 @@ Db.prototype.authenticate = function(username, password, options, callback) { * @param {String} username username. * @param {String} password password. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from addUser or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from addUser or null if an error occurred. * @return {null} * @api public */ Db.prototype.addUser = function(username, password, options, callback) { + // Checkout a write connection to get the server capabilities + var connection = this.serverConfig.checkoutWriter(); + if(connection != null && connection.serverCapabilities != null && connection.serverCapabilities.hasAuthCommands) { + return _executeAuthCreateUserCommand(this, username, password, options, callback); + } + + // Unpack the parameters var self = this; var args = Array.prototype.slice.call(arguments, 2); callback = args.pop(); options = args.length ? args.shift() || {} : {}; // Get the error options - var errorOptions = _getWriteConcern(this, options, callback); + var errorOptions = _getWriteConcern(this, options); errorOptions.w = errorOptions.w == null ? 1 : errorOptions.w; // Use node md5 generator var md5 = crypto.createHash('md5'); @@ -748,7 +765,7 @@ Db.prototype.addUser = function(username, password, options, callback) { commandOptions.upsert = true; // We have a user, let's update the password or upsert if not - collection.update({user: username},{$set: {user: username, pwd: userPassword}}, commandOptions, function(err, results) { + collection.update({user: username},{$set: {user: username, pwd: userPassword}}, commandOptions, function(err, results, full) { if(count == 0 && err) { callback(null, [{user:username, pwd:userPassword}]); } else if(err) { @@ -761,11 +778,90 @@ Db.prototype.addUser = function(username, password, options, callback) { }); }; +/** + * @ignore + */ +var _executeAuthCreateUserCommand = function(self, username, password, options, callback) { + // Special case where there is no password ($external users) + if(typeof username == 'string' + && password != null && typeof password == 'object') { + callback = options; + options = password; + password = null; + } + + // Unpack all options + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // Error out if we digestPassword set + if(options.digestPassword != null) { + throw utils.toError("The digestPassword option is not supported via add_user. Please use db.command('createUser', ...) instead for this option."); + } + + // Get additional values + var customData = options.customData != null ? options.customData : {}; + var roles = Array.isArray(options.roles) ? options.roles : []; + var maxTimeMS = typeof options.maxTimeMS == 'number' ? options.maxTimeMS : null; + + // If not roles defined print deprecated message + if(roles.length == 0) { + console.log("Creating a user without roles is deprecated in MongoDB >= 2.6"); + } + + // Get the error options + var writeConcern = _getWriteConcern(self, options); + var commandOptions = {writeCommand:true}; + if(options['dbName']) commandOptions.dbName = options['dbName']; + + // Add maxTimeMS to options if set + if(maxTimeMS != null) commandOptions.maxTimeMS = maxTimeMS; + + // Check the db name and add roles if needed + if((self.databaseName.toLowerCase() == 'admin' || options.dbName == 'admin') && !Array.isArray(options.roles)) { + roles = ['root'] + } else if(!Array.isArray(options.roles)) { + roles = ['dbOwner'] + } + + // Build the command to execute + var command = { + createUser: username + , customData: customData + , roles: roles + , digestPassword:false + , writeConcern: writeConcern + } + + // Use node md5 generator + var md5 = crypto.createHash('md5'); + // Generate keys used for authentication + md5.update(username + ":mongo:" + password); + var userPassword = md5.digest('hex'); + + // No password + if(typeof password == 'string') { + command.pwd = userPassword; + } + + // console.log("================================== add user") + // console.dir(command) + + // Execute the command + self.command(command, commandOptions, function(err, result) { + if(err) return callback(err, null); + callback(!result.ok ? utils.toError("Failed to add user " + username) : null + , result.ok ? [{user: username, pwd: ''}] : null); + }) +} + /** * Remove a user from a database * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning @@ -775,11 +871,18 @@ Db.prototype.addUser = function(username, password, options, callback) { * * @param {String} username username. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from removeUser or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from removeUser or null if an error occurred. * @return {null} * @api public */ Db.prototype.removeUser = function(username, options, callback) { + // Checkout a write connection to get the server capabilities + var connection = this.serverConfig.checkoutWriter(); + if(connection != null && connection.serverCapabilities != null && connection.serverCapabilities.hasAuthCommands) { + return _executeAuthRemoveUserCommand(this, username, options, callback); + } + + // Unpack the parameters var self = this; var args = Array.prototype.slice.call(arguments, 1); callback = args.pop(); @@ -809,11 +912,42 @@ Db.prototype.removeUser = function(username, options, callback) { }); }; +var _executeAuthRemoveUserCommand = function(self, username, options, callback) { + // Unpack all options + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // Get the error options + var writeConcern = _getWriteConcern(self, options); + var commandOptions = {writeCommand:true}; + if(options['dbName']) commandOptions.dbName = options['dbName']; + + // Get additional values + var maxTimeMS = typeof options.maxTimeMS == 'number' ? options.maxTimeMS : null; + + // Add maxTimeMS to options if set + if(maxTimeMS != null) commandOptions.maxTimeMS = maxTimeMS; + + // Build the command to execute + var command = { + dropUser: username + , writeConcern: writeConcern + } + + // Execute the command + self.command(command, commandOptions, function(err, result) { + if(err) return callback(err, null); + callback(null, result.ok ? true : false); + }) +} + /** * Creates a collection on a server pre-allocating space, need to create f.ex capped collections. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write +* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning @@ -824,7 +958,7 @@ Db.prototype.removeUser = function(username, options, callback) { * - **size** {Number}, the size of the capped collection in bytes. * - **max** {Number}, the maximum number of documents in the capped collection. * - **autoIndexId** {Boolean, default:true}, create an index on the _id field of the document, True by default on MongoDB 2.2 or higher off for version < 2.2. - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **strict**, (Boolean, default:false) throws an error if collection already exists * * Deprecated Options @@ -832,15 +966,16 @@ Db.prototype.removeUser = function(username, options, callback) { * * @param {String} collectionName the collection name we wish to access. * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from createCollection or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from createCollection or null if an error occurred. * @return {null} * @api public */ Db.prototype.createCollection = function(collectionName, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() : null; var self = this; + if(typeof options == 'function') { + callback = options; + options = {}; + } // Figure out the safe mode settings var safe = self.safe != null && self.safe == false ? {w: 1} : self.safe; @@ -894,28 +1029,28 @@ var _getReadConcern = function(self, options) { /** * Execute a command hash against MongoDB. This lets you acess any commands not available through the api on the server. * + * Options + * - **maxTimeMS** {Number}, number of miliseconds to wait before aborting the query. + * - **ignoreCommandFilter** {Boolean}, overrides the default redirection of certain commands to primary. + * - **writeCommand** {Boolean, default: false}, signals this is a write command and to ignore read preferences + * - **checkKeys** {Boolean, default: false}, overrides the default not to check the key names for the command + * * @param {Object} selector the command hash to send to the server, ex: {ping:1}. + * @param {Object} [options] additional options for the command. * @param {Function} callback this will be called after executing this method. The command always return the whole result of the command as the second parameter. * @return {null} * @api public */ Db.prototype.command = function(selector, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; + if(typeof options == 'function') { + callback = options; + options = {}; + } + // Ignore command preference (I know what I'm doing) var ignoreCommandFilter = options.ignoreCommandFilter ? options.ignoreCommandFilter : false; - - // Set up the options - var cursor = new Cursor(this - , new Collection(this, DbCommand.SYSTEM_COMMAND_COLLECTION), selector, {}, { - limit: -1, timeout: QueryCommand.OPTS_NO_CURSOR_TIMEOUT, dbName: options['dbName'] - }); - // Set read preference if we set one - var readPreference = options['readPreference'] ? options['readPreference'] : false; - // If we have a connection passed in - cursor.connection = options.connection; + var readPreference = _getReadConcern(this, options); // Ensure only commands who support read Prefrences are exeuted otherwise override and use Primary if(readPreference != false && ignoreCommandFilter == false) { @@ -924,20 +1059,43 @@ Db.prototype.command = function(selector, options, callback) { || selector['geoWalk'] || selector['text'] || (selector['mapreduce'] && (selector.out == 'inline' || selector.out.inline))) { // Set the read preference - cursor.setReadPreference(readPreference); + options.readPreference = readPreference; } else { - cursor.setReadPreference(ReadPreference.PRIMARY); + options.readPreference = ReadPreference.PRIMARY; } } else if(readPreference != false) { - // Force setting the command filter - cursor.setReadPreference(readPreference); + options.readPreference = readPreference; + } + + // Add the maxTimeMS option to the command if specified + if(typeof options.maxTimeMS == 'number') { + selector.maxTimeMS = options.maxTimeMS + } + + // Command options + var command_options = {}; + + // Do we have an override for checkKeys + if(typeof options['checkKeys'] == 'boolean') command_options['checkKeys'] = options['checkKeys']; + command_options['checkKeys'] = typeof options['checkKeys'] == 'boolean' ? options['checkKeys'] : false; + if(typeof options['serializeFunctions'] == 'boolean') command_options['serializeFunctions'] = options['serializeFunctions']; + if(options['dbName']) command_options['dbName'] = options['dbName']; + + // If we have a write command, remove readPreference as an option + if((options.writeCommand + || selector['findAndModify'] + || selector['insert'] || selector['update'] || selector['delete'] + || selector['createUser'] || selector['updateUser'] || selector['removeUser']) + && options.readPreference) { + delete options['readPreference']; } - // Get the next result - cursor.nextObject(function(err, result) { + // Execute a query command + this._executeQueryCommand(DbCommand.createDbSlaveOkCommand(this, selector, command_options), options, function(err, results) { if(err) return callback(err, null); - if(result == null) return callback(new Error("no result returned from command"), null); - callback(null, result); + if(results.documents[0].errmsg) + return callback(utils.toError(results.documents[0]), null); + callback(null, results.documents[0]); }); }; @@ -945,7 +1103,7 @@ Db.prototype.command = function(selector, options, callback) { * Drop a collection from the database, removing it permanently. New accesses will create a new collection. * * @param {String} collectionName the name of the collection we wish to drop. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from dropCollection or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from dropCollection or null if an error occurred. * @return {null} * @api public */ @@ -968,7 +1126,7 @@ Db.prototype.dropCollection = function(collectionName, callback) { * @param {String} fromCollection the name of the current collection we wish to rename. * @param {String} toCollection the new name of the collection. * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from renameCollection or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from renameCollection or null if an error occurred. * @return {null} * @api public */ @@ -1001,7 +1159,7 @@ Db.prototype.renameCollection = function(fromCollection, toCollection, options, * * @param {Object} [options] returns option results. * @param {Object} [connectionOptions] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from lastError or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from lastError or null if an error occurred. * @return {null} * @api public */ @@ -1033,7 +1191,7 @@ Db.prototype.lastStatus = Db.prototype.lastError; * - **connection** {Connection}, fire the getLastError down a specific connection. * * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from previousErrors or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from previousErrors or null if an error occurred. * @return {null} * @api public */ @@ -1087,7 +1245,7 @@ Db.prototype.executeDbAdminCommand = function(command_hash, options, callback) { * - **connection** {Connection}, fire the getLastError down a specific connection. * * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from resetErrorHistory or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from resetErrorHistory or null if an error occurred. * @return {null} * @api public */ @@ -1106,7 +1264,7 @@ Db.prototype.resetErrorHistory = function(options, callback) { * Creates an index on the collection. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write +* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning @@ -1127,7 +1285,7 @@ Db.prototype.resetErrorHistory = function(options, callback) { * @param {String} collectionName name of the collection to create the index on. * @param {Object} fieldOrSpec fieldOrSpec that defines the index. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from createIndex or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from createIndex or null if an error occurred. * @return {null} * @api public */ @@ -1140,7 +1298,7 @@ Db.prototype.createIndex = function(collectionName, fieldOrSpec, options, callba options = options == null ? {} : options; // Get the error options - var errorOptions = _getWriteConcern(this, options, callback); + var errorOptions = _getWriteConcern(this, options); // Create command var command = DbCommand.createCreateIndexCommand(this, collectionName, fieldOrSpec, options); // Default command options @@ -1194,7 +1352,7 @@ Db.prototype.createIndex = function(collectionName, fieldOrSpec, options, callba * Ensures that an index exists, if it does not it creates it * * Options - * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) * - **fsync**, (Boolean, default:false) write waits for fsync before returning * - **journal**, (Boolean, default:false) write waits for journal sync before returning @@ -1214,7 +1372,7 @@ Db.prototype.createIndex = function(collectionName, fieldOrSpec, options, callba * @param {String} collectionName name of the collection to create the index on. * @param {Object} fieldOrSpec fieldOrSpec that defines the index. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from ensureIndex or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from ensureIndex or null if an error occurred. * @return {null} * @api public */ @@ -1231,7 +1389,7 @@ Db.prototype.ensureIndex = function(collectionName, fieldOrSpec, options, callba } // Get the error options - var errorOptions = _getWriteConcern(this, options, callback); + var errorOptions = _getWriteConcern(this, options); // Make sure we don't try to do a write concern without a callback if(_hasWriteConcern(errorOptions) && callback == null) throw new Error("Cannot use a writeConcern without a provided callback"); @@ -1301,10 +1459,10 @@ Db.prototype.ensureIndex = function(collectionName, fieldOrSpec, options, callba * Returns the information available on allocated cursors. * * Options - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from cursorInfo or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from cursorInfo or null if an error occurred. * @return {null} * @api public */ @@ -1323,7 +1481,7 @@ Db.prototype.cursorInfo = function(options, callback) { * * @param {String} collectionName the name of the collection where the command will drop an index. * @param {String} indexName name of the index to drop. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from dropIndex or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from dropIndex or null if an error occurred. * @return {null} * @api public */ @@ -1337,7 +1495,7 @@ Db.prototype.dropIndex = function(collectionName, indexName, callback) { * Warning: reIndex is a blocking operation (indexes are rebuilt in the foreground) and will be slow for large collections. * * @param {String} collectionName the name of the collection. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from reIndex or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from reIndex or null if an error occurred. * @api public **/ Db.prototype.reIndex = function(collectionName, callback) { @@ -1354,7 +1512,7 @@ Db.prototype.reIndex = function(collectionName, callback) { * * @param {String} collectionName the name of the collection. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from indexInformation or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from indexInformation or null if an error occurred. * @return {null} * @api public */ @@ -1407,7 +1565,7 @@ Db.prototype.indexInformation = function(collectionName, options, callback) { /** * Drop a database. * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from dropDatabase or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from dropDatabase or null if an error occurred. * @return {null} * @api public */ @@ -1424,7 +1582,7 @@ Db.prototype.dropDatabase = function(callback) { * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). * * @param {Objects} [options] options for the stats command - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from stats or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from stats or null if an error occurred. * @return {null} * @api public */ @@ -1436,8 +1594,8 @@ Db.prototype.stats = function stats(options, callback) { // Build command object var commandObject = { - dbStats:this.collectionName, - } + dbStats:this.collectionName + }; // Check if we have the scale value if(options['scale'] != null) commandObject['scale'] = options['scale']; @@ -1451,7 +1609,8 @@ Db.prototype.stats = function stats(options, callback) { */ var __executeQueryCommand = function(self, db_command, options, callback) { // Options unpacking - var read = options['read'] != null ? options['read'] : false; + var read = options['read'] != null ? options['read'] : false; + read = options['readPreference'] != null && options['read'] == null ? options['readPreference'] : read; var raw = options['raw'] != null ? options['raw'] : self.raw; var onAll = options['onAll'] != null ? options['onAll'] : false; var specifiedConnection = options['connection'] != null ? options['connection'] : null; @@ -1494,38 +1653,6 @@ var __executeQueryCommand = function(self, db_command, options, callback) { // Register the handler in the data structure self.serverConfig._registerHandler(db_command, raw, connection, exhaust, callback); - // Ensure the connection is valid - if(!connection.isConnected()) { - if(read == ReadPreference.PRIMARY - || read == ReadPreference.PRIMARY_PREFERRED - || (read != null && typeof read == 'object' && read.mode) - || read == null) { - - // Save the command - self.serverConfig._commandsStore.read_from_writer( - { type: 'query' - , db_command: db_command - , options: options - , callback: callback - , db: self - , executeQueryCommand: __executeQueryCommand - , executeInsertCommand: __executeInsertCommand - } - ); - } else { - self.serverConfig._commandsStore.read( - { type: 'query' - , db_command: db_command - , options: options - , callback: callback - , db: self - , executeQueryCommand: __executeQueryCommand - , executeInsertCommand: __executeInsertCommand - } - ); - } - } - // Write the message out and handle any errors if there are any connection.write(db_command, function(err) { if(err != null) { @@ -1589,7 +1716,7 @@ var __executeQueryCommand = function(self, db_command, options, callback) { } }); } -} +}; /** * Execute db query command (not safe) @@ -1632,6 +1759,10 @@ Db.prototype._executeQueryCommand = function(db_command, options, callback) { // Get the configuration var config = this.serverConfig; var read = options.read; + // Allow for the usage of the readPreference model + if(read == null) { + read = options.readPreference; + } if(!connection && !config.canRead(read) && !config.canWrite() && config.isAutoReconnect()) { if(read == ReadPreference.PRIMARY @@ -1662,6 +1793,11 @@ Db.prototype._executeQueryCommand = function(db_command, options, callback) { } ); } + + // If we have blown through the number of items let's + if(!self.serverConfig._commandsStore.validateBufferLimit(self.bufferMaxEntries)) { + self.close(); + } } else if(!connection && !config.canRead(read) && !config.canWrite() && !config.isAutoReconnect()) { return callback(new Error("no open connections"), null); } else { @@ -1688,6 +1824,11 @@ var __executeInsertCommand = function(self, db_command, options, callback) { // Override connection if needed connection = specifiedConnection != null ? specifiedConnection : connection; + // Validate if we can use this server 2.6 wire protocol + if(!connection.isCompatible()) { + return callback(utils.toError("driver is incompatible with this server version"), null); + } + // Ensure we have a valid connection if(typeof callback === 'function') { // Ensure we have a valid connection @@ -1697,7 +1838,7 @@ var __executeInsertCommand = function(self, db_command, options, callback) { return callback(connection); } - var errorOptions = _getWriteConcern(self, options, callback); + var errorOptions = _getWriteConcern(self, options); if(errorOptions.w > 0 || errorOptions.w == 'majority' || errorOptions.j || errorOptions.journal || errorOptions.fsync) { // db command is now an array of commands (original command + lastError) db_command = [db_command, DbCommand.createGetLastErrorCommand(safe, self)]; @@ -1712,20 +1853,6 @@ var __executeInsertCommand = function(self, db_command, options, callback) { if(connection instanceof Error) return null; if(connection == null && typeof callback == 'function') return callback(new Error("no primary server found"), null); - // Ensure we truly are connected - if(!connection.isConnected()) { - return self.serverConfig._commandsStore.write( - { type:'insert' - , 'db_command':db_command - , 'options':options - , 'callback':callback - , db: self - , executeQueryCommand: __executeQueryCommand - , executeInsertCommand: __executeInsertCommand - } - ); - } - // Write the message out connection.write(db_command, function(err) { // Return the callback if it's not a safe operation and the callback is defined @@ -1742,7 +1869,7 @@ var __executeInsertCommand = function(self, db_command, options, callback) { self.emit("error", err); } }); -} +}; /** * Execute an insert Command @@ -1792,12 +1919,17 @@ Db.prototype._executeInsertCommand = function(db_command, options, callback) { , executeInsertCommand: __executeInsertCommand } ); + + // If we have blown through the number of items let's + if(!self.serverConfig._commandsStore.validateBufferLimit(self.bufferMaxEntries)) { + self.close(); + } } else if(!connection && !config.canWrite() && !config.isAutoReconnect()) { return callback(new Error("no open connections"), null); } else { __executeInsertCommand(self, db_command, options, callback); } -} +}; /** * Update command is the same @@ -1843,7 +1975,7 @@ Db.DEFAULT_URL = 'mongodb://localhost:27017/default'; * * @param {String} url connection url for MongoDB. * @param {Object} [options] optional options for insert command - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the db instance or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the db instance or null if an error occurred. * @return {null} * @api public */ @@ -1864,7 +1996,7 @@ Db.connect = function(url, options, callback) { var MongoClient = require('./mongo_client.js').MongoClient; // Attempt to connect MongoClient.connect.call(MongoClient, url, options, callback); -} +}; /** * State of the db connection @@ -1886,7 +2018,7 @@ var _hasWriteConcern = function(errorOptions) { || errorOptions.j == true || errorOptions.journal == true || errorOptions.fsync == true -} +}; /** * @ignore @@ -1899,7 +2031,7 @@ var _setWriteConcernHash = function(options) { if(options.fsync == true) finalOptions.fsync = options.fsync; if(options.wtimeout != null) finalOptions.wtimeout = options.wtimeout; return finalOptions; -} +}; /** * @ignore @@ -1924,11 +2056,11 @@ var _getWriteConcern = function(self, options, callback) { // Ensure we don't have an invalid combination of write concerns if(finalOptions.w < 1 - && (finalOptions.journal == true || finalOptions.j == true || finalOptions.fsync == true)) throw new Error("No acknowlegement using w < 1 cannot be combined with journal:true or fsync:true"); + && (finalOptions.journal == true || finalOptions.j == true || finalOptions.fsync == true)) throw new Error("No acknowledgement using w < 1 cannot be combined with journal:true or fsync:true"); // Return the options return finalOptions; -} +}; /** * Legacy support @@ -1951,4 +2083,4 @@ Db.prototype.removeAllEventListeners = function() { this.removeAllListeners("parseError"); this.removeAllListeners("poolReady"); this.removeAllListeners("message"); -} +}; diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js index edf6c74..57767ae 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js @@ -141,8 +141,8 @@ GridStore.prototype.open = function(callback) { } var self = this; - - if((self.mode == "w" || self.mode == "w+") && self.db.serverConfig.primary != null) { + // If we are writing we need to ensure we have the right indexes for md5's + if((self.mode == "w" || self.mode == "w+")) { // Get files collection self.collection(function(err, collection) { if(err) return callback(err); @@ -460,19 +460,7 @@ var writeBuffer = function(self, buffer, close, callback) { * @api private */ var buildMongoObject = function(self, callback) { - // // Keeps the final chunk number - // var chunkNumber = 0; - // var previousChunkSize = 0; - // // Get the correct chunk Number, if we have an empty chunk return the previous chunk number - // if(null != self.currentChunk && self.currentChunk.chunkNumber > 0 && self.currentChunk.position == 0) { - // chunkNumber = self.currentChunk.chunkNumber - 1; - // } else { - // chunkNumber = self.currentChunk.chunkNumber; - // previousChunkSize = self.currentChunk.position; - // } - - // // Calcuate the length - // var length = self.currentChunk != null ? (chunkNumber * self.chunkSize + previousChunkSize) : 0; + // Calcuate the length var mongoObject = { '_id': self.fileId, 'filename': self.filename, diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/gridfs/readstream.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/gridfs/readstream.js index 30ea725..83ed96c 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/gridfs/readstream.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/gridfs/readstream.js @@ -36,7 +36,8 @@ function ReadStream(autoclose, gstore) { this.readable = true; this.pendingChunk = null; this.executing = false; - + this.destroyed = false; + // Calculate the number of chunks this.numberOfChunks = Math.ceil(gstore.length/gstore.chunkSize); @@ -115,14 +116,17 @@ ReadStream.prototype._execute = function() { if(gstore.mode[0] == "w") { gstore.close(function(err, doc) { if (err) { + console.log("############################## 0") self.emit("error", err); return; } - self.readable = false; + self.readable = false; + self.destroyed = true; self.emit("close", doc); }); } else { self.readable = false; + self.destroyed = true; self.emit("close"); } } @@ -130,7 +134,8 @@ ReadStream.prototype._execute = function() { gstore._nthChunk(gstore.currentChunk.chunkNumber + 1, function(err, chunk) { if(err) { self.readable = false; - self.emit("error", err); + if(self.listeners("error").length > 0) + self.emit("error", err); self.executing = false; return; } @@ -166,6 +171,8 @@ ReadStream.prototype.pause = function() { * @api public */ ReadStream.prototype.destroy = function() { + if(this.destroyed) return; + this.destroyed = true; this.readable = false; // Emit close event this.emit("close"); diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/mongo_client.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/mongo_client.js index a7372bf..0b855b3 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/mongo_client.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/mongo_client.js @@ -24,6 +24,7 @@ var Db = require('./db').Db * - **recordQueryStats** {Boolean, default:false}, record query statistics during execution. * - **retryMiliSeconds** {Number, default:5000}, number of miliseconds between retries. * - **numberOfRetries** {Number, default:5}, number of retries off connection. + * - **bufferMaxEntries** {Boolean, default: -1}, sets a cap on how many operations the driver will buffer up before giving up on getting a working connection, default is -1 which is unlimited * * Deprecated Options * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. @@ -210,7 +211,13 @@ MongoClient.connect = function(url, options, callback) { // Connect to all servers and run ismaster for(var i = 0; i < object.servers.length; i++) { // Set up socket options - var _server_options = {poolSize:1, socketOptions:{connectTimeoutMS:1000}, auto_reconnect:false}; + var _server_options = { + poolSize:1 + , socketOptions: { + connectTimeoutMS:30000 + , socketTimeoutMS: 30000 + } + , auto_reconnect:false}; // Ensure we have ssl setup for the servers if(object.rs_options.ssl) { @@ -346,6 +353,18 @@ var _finishConnecting = function(serverConfig, object, options, callback) { // Add the safe object object.db_options.safe = safe; + // Get the socketTimeoutMS + var socketTimeoutMS = object.server_options.socketOptions.socketTimeoutMS || 0; + + // If we have a replset, override with replicaset socket timeout option if available + if(serverConfig instanceof ReplSet) { + socketTimeoutMS = object.rs_options.socketOptions.socketTimeoutMS || socketTimeoutMS; + } + + // Set socketTimeout to the same as the connectTimeoutMS or 30 sec + serverConfig.connectTimeoutMS = serverConfig.connectTimeoutMS || 30000; + serverConfig.socketTimeoutMS = serverConfig.connectTimeoutMS; + // Set up the db options var db = new Db(object.dbName, serverConfig, object.db_options); // Open the db @@ -361,6 +380,10 @@ var _finishConnecting = function(serverConfig, object, options, callback) { }); } + // Reset the socket timeout + serverConfig.socketTimeoutMS = socketTimeoutMS || 0; + + // Set the provided write concern or fall back to w:1 as default if(db.options !== null && !db.options.safe && !db.options.journal && !db.options.w && !db.options.fsync && typeof db.options.w != 'number' && (db.options.safe == false && object.db_options.url.indexOf("safe=") == -1)) { @@ -415,5 +438,4 @@ var _finishConnecting = function(serverConfig, object, options, callback) { }); } - exports.MongoClient = MongoClient; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/scope.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/scope.js new file mode 100644 index 0000000..aaf3221 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/scope.js @@ -0,0 +1,199 @@ +var Cursor2 = require('./cursor').Cursor + , Readable = require('stream').Readable + , utils = require('./utils') + , inherits = require('util').inherits; + +var Cursor = function Cursor(_scope_options, _cursor) { + // + // Backward compatible methods + this.toArray = function(callback) { + return _cursor.toArray(callback); + } + + this.each = function(callback) { + return _cursor.each(callback); + } + + this.next = function(callback) { + this.nextObject(callback); + } + + this.nextObject = function(callback) { + return _cursor.nextObject(callback); + } + + this.setReadPreference = function(readPreference, callback) { + _scope_options.readPreference = {readPreference: readPreference}; + _cursor.setReadPreference(readPreference, callback); + return this; + } + + this.batchSize = function(batchSize, callback) { + _scope_options.batchSize = batchSize; + _cursor.batchSize(_scope_options.batchSize, callback); + return this; + } + + this.count = function(applySkipLimit, callback) { + return _cursor.count(applySkipLimit, callback); + } + + this.stream = function(options) { + return _cursor.stream(options); + } + + this.close = function(callback) { + return _cursor.close(callback); + } + + this.explain = function(callback) { + return _cursor.explain(callback); + } + + this.isClosed = function(callback) { + return _cursor.isClosed(); + } + + this.rewind = function() { + return _cursor.rewind(); + } + + // Internal methods + this.limit = function(limit, callback) { + _cursor.limit(limit, callback); + _scope_options.limit = limit; + return this; + } + + this.skip = function(skip, callback) { + _cursor.skip(skip, callback); + _scope_options.skip = skip; + return this; + } + + this.hint = function(hint) { + _scope_options.hint = hint; + _cursor.hint = _scope_options.hint; + return this; + } + + this.maxTimeMS = function(maxTimeMS) { + _cursor.maxTimeMS(maxTimeMS) + _scope_options.maxTimeMS = maxTimeMS; + return this; + }, + + this.sort = function(keyOrList, direction, callback) { + _cursor.sort(keyOrList, direction, callback); + _scope_options.sort = keyOrList; + return this; + }, + + this.fields = function(fields) { + _fields = fields; + _cursor.fields = _fields; + return this; + } + + // + // Backward compatible settings + Object.defineProperty(this, "timeout", { + get: function() { + return _cursor.timeout; + } + }); + + Object.defineProperty(this, "read", { + get: function() { + return _cursor.read; + } + }); + + Object.defineProperty(this, "items", { + get: function() { + return _cursor.items; + } + }); +} + +var Scope = function(collection, _selector, _fields, _scope_options) { + var self = this; + + // Ensure we have at least an empty cursor options object + _scope_options = _scope_options || {}; + var _write_concern = _scope_options.write_concern || null; + + // Ensure default read preference + if(!_scope_options.readPreference) _scope_options.readPreference = {readPreference: 'primary'}; + + // Set up the cursor + var _cursor = new Cursor2( + collection.db, collection, _selector + , _fields, _scope_options + ); + + // Write branch options + var writeOptions = { + insert: function(documents, callback) { + // Merge together options + var options = _write_concern || {}; + // Execute insert + collection.insert(documents, options, callback); + }, + + save: function(document, callback) { + // Merge together options + var save_options = _write_concern || {}; + // Execute save + collection.save(document, save_options, function(err, result) { + if(typeof result == 'number' && result == 1) { + return callback(null, document); + } + + return callback(null, document); + }); + }, + + find: function(selector) { + _selector = selector; + return writeOptions; + }, + + // + // Update is implicit multiple document update + update: function(operations, callback) { + // Merge together options + var update_options = _write_concern || {}; + + // Set up options, multi is default operation + update_options.multi = _scope_options.multi ? _scope_options.multi : true; + if(_scope_options.upsert) update_options.upsert = _scope_options.upsert; + + // Execute options + collection.update(_selector, operations, update_options, function(err, result, obj) { + callback(err, obj); + }); + }, + } + + // Set write concern + this.withWriteConcern = function(write_concern) { + // Save the current write concern to the Scope + _scope_options.write_concern = write_concern; + _write_concern = write_concern; + // Only allow legal options + return writeOptions; + } + + // Start find + this.find = function(selector, options) { + // Save the current selector + _selector = selector; + // Set the cursor + _cursor.selector = selector; + // Return only legal read options + return new Cursor(_scope_options, _cursor); + } +} + +exports.Scope = Scope; \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/utils.js b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/utils.js index 1e8c623..4eca8c0 100644 --- a/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/utils.js +++ b/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/utils.js @@ -106,7 +106,7 @@ exports.isRegExp = function (arg) { var toError = function(error) { if (error instanceof Error) return error; - var msg = error.err || error.errmsg || error; + var msg = error.err || error.errmsg || error.errMessage || error; var e = new Error(msg); e.name = 'MongoError'; @@ -145,16 +145,16 @@ exports.objectToArray = function(object) { */ exports.handleSingleCommandResultReturn = function(override_value_true, override_value_false, callback) { return function(err, result, connection) { - if(err) return callback(err, null); + if(err && typeof callback == 'function') return callback(err, null); if(!result || !result.documents || result.documents.length == 0) - if(callback) return callback(toError("command failed to return results"), null) - if(result.documents[0].ok == 1) { + if(typeof callback == 'function') return callback(toError("command failed to return results"), null) + if(result && result.documents[0].ok == 1) { if(override_value_true) return callback(null, override_value_true) - if(callback) return callback(null, result.documents[0]); + if(typeof callback == 'function') return callback(null, result.documents[0]); } // Return the error from the document - if(callback) return callback(toError(result.documents[0]), override_value_false); + if(typeof callback == 'function') return callback(toError(result.documents[0]), override_value_false); } } @@ -166,8 +166,37 @@ exports.handleSingleCommandResultReturn = function(override_value_true, override exports.processor = function() { // Set processor, setImmediate if 0.10 otherwise nextTick process.maxTickDepth = Infinity; - var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; - // processor = process.nextTick; - return processor; + // Only use nextTick + return process.nextTick; } +/** + * Allow setting the socketTimeoutMS on all connections + * to work around issues such as secondaries blocking due to compaction + * + * @ignore + * @api private + */ +exports.setSocketTimeoutProperty = function(self, options) { + Object.defineProperty(self, "socketTimeoutMS", { + enumerable: true + , get: function () { return options.socketTimeoutMS; } + , set: function (value) { + // Set the socket timeoutMS value + options.socketTimeoutMS = value; + + // Get all the connections + var connections = self.allRawConnections(); + for(var i = 0; i < connections.length; i++) { + connections[i].socketTimeoutMS = value; + } + } + }); +} + +exports.hasWriteCommands = function(connection) { + return connection != null && connection.serverCapabilities != null && connection.serverCapabilities.hasWriteCommands; +} + + + diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/binding.gyp b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/binding.gyp index 42445d3..4917301 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/binding.gyp +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/binding.gyp @@ -3,6 +3,7 @@ { 'target_name': 'bson', 'sources': [ 'ext/bson.cc' ], + 'include_dirs': ["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�ccwAi-GeVfGooEfh-ZLEW-Ify1LmJ zEmV?-{=Xt4gmjyd5(uMZm~K?kg)8C{(j`X<6RwhBLb|9(e8OTGCZs!q#3#Ha!*th> zuJv`cB7p*Q6_11n>8c!s3F!_Tg$b9-Fx^|D+g-#bJRrk_U&%1xH5sN0IV(Y_Z=$t; zt&&xx#ak-BlriU3L~^#HX@T8Ffw==U2hz0x3KP=n{OX+on<7jF(<^;?ZBJoBdP7fP z!U-ud47>&!uv;w*{9gS~bs8J}pAxMQ20nF^R9x zV1UDd4F@hf_}Jlq69QZjB0`J=DRLB0c;bZ)JqAS5QLgfoue3?eZVN_3cY9tk%zlf# Bi_ri8 diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/bson.pdb b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/bson.pdb index bd3d7e67fb86b6c672e80322b6c8d4e67ceb393e..8bc979ebb313c0621e3f0bfc31025de30f3af0df 100644 GIT binary patch literal 1518592 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

hBeLB1M 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

gXU8ZSJ`XU8)S$nb6jQT%krF4o#omV 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�gwKu)VQ_F>x-EI2=2hN}T1w!}g}{KwDw-)>=O9 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%0A26SW7NZV(M-x$vp?a*dI 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 literal 1502208 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�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� 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

uz-C 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%0A)6MgyAGFMy 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 CBPOH( diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/CL.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/CL.write.1.tlog index 6b21251bc2ae3aa827044f2b6f787a2e3822f26c..e913d4bb95b9b424becbc9141109351ce4ea4b1f 100644 GIT binary patch delta 72 xcmZo+UBN2+|6d$~3xgFy3_~!3CqoE>D?{+agL5Y?k>bY?y^kq$dU76<7y!>(6OI4? delta 36 lcmZ3%+QQ2I|6d$~GlSK{n{y{_kYWb2?n9{4lP58W0RRNz4l@7% diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.lastbuildstate b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.lastbuildstate index 23b6836..0de98a9 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.lastbuildstate +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.lastbuildstate @@ -1,2 +1,2 @@ #v4.0:v100:false -Release|x64|C:\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\bson\build\| +Release|x64|D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\bson\build\| diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.obj b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/bson.obj index 31aba9756a41d85a2f198e4b12382547527bca10..519c8c37809eb8b3ac9099c02177a94690828be2 100644 GIT binary patch delta 198061 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 aYLpWCv&2Z>xuS-YehlvpT>rzB@Bat9L)bh3 delta 151389 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�s~_I~7$5}pG) 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 wUA?H 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 delta 50 zcmeyvGl`r1|Gzi}X9lauM_IQ|JQc=hGFg!^7D(1JmIBGIjOv@;F`ZyyhN=Jn;7bxT diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/link.command.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/link.command.1.tlog index 5a7ce4036ab29f937f96cd7a6011827bdac824a5..cc95e8c242c3ea4dddf630c8f56936099a5ffd1d 100644 GIT binary patch delta 81 zcmcb{^NUCL|Gzi}7X~Ya7=~a5PlgZ%SBBt??1GH^5V2y0OokGMREFZo`&kZezQ?$T SkBeOMz{O0{E(-{GWb``1s delta 41 rcmeyxbB%}n|Gzi}X9lZ{!h(#y2N))4+2|Gzi}7X~Ya7=~a5PlgZ%SBBupyBV)eyu-zhE_|Bl@Z>d&Jm}(^cQf)b Lq660lFwaA2ppeYuEld_r?%~P%n7IJw7ZCvf diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/mt.command.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/mt.command.1.tlog index 03eb9af7d69619732b81ba349e42bd52107333db..83c3ea121771990d3636b6f8dfb6adc9618f5db7 100644 GIT binary patch delta 49 zcmZ3%dVp2<|Gzi}7X~Ya7=~a5PlgZ%SBBt??17B@5V2y0OokGMREFZs(Tu)~070<} Ay8r+H delta 25 fcmX@Wx`LJc|Gzi}X9lZ{!hwv;KzegAqc0->Zw3cl diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/mt.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/Release/obj/bson/mt.read.1.tlog index 72117f6445933bca6978f818615b6824bdfe2558..e77dc178fc81e9071040e1adb069e7e77bb1152b 100644 GIT binary patch delta 52 scmdnMeu7>2|Gzi}7X~Ya7=~a5PlgZ%SBBup51DpuJRrx!k12j00F_n_%>V!Z delta 28 gcmX@XzJZ|z(xYgw^( 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 delta 26592 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 TqmmDd`D<%y@_km#Z*Beu57PJ~ diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/binding.sln b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/binding.sln index 37b8546..b625e01 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/binding.sln +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/binding.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bson", "bson.vcxproj", "{6A1AA256-DAE5-4498-A532-94C25BB4B6F0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bson", "bson.vcxproj", "{AD9CB282-A1BD-E94D-DAD0-D8C90F932757}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -8,10 +8,10 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6A1AA256-DAE5-4498-A532-94C25BB4B6F0}.Debug|x64.ActiveCfg = Debug|x64 - {6A1AA256-DAE5-4498-A532-94C25BB4B6F0}.Debug|x64.Build.0 = Debug|x64 - {6A1AA256-DAE5-4498-A532-94C25BB4B6F0}.Release|x64.ActiveCfg = Release|x64 - {6A1AA256-DAE5-4498-A532-94C25BB4B6F0}.Release|x64.Build.0 = Release|x64 + {AD9CB282-A1BD-E94D-DAD0-D8C90F932757}.Debug|x64.ActiveCfg = Debug|x64 + {AD9CB282-A1BD-E94D-DAD0-D8C90F932757}.Debug|x64.Build.0 = Debug|x64 + {AD9CB282-A1BD-E94D-DAD0-D8C90F932757}.Release|x64.ActiveCfg = Release|x64 + {AD9CB282-A1BD-E94D-DAD0-D8C90F932757}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/bson.vcxproj b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/bson.vcxproj index c236c1a..b58fc4b 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/bson.vcxproj +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/bson.vcxproj @@ -11,7 +11,7 @@ - {6A1AA256-DAE5-4498-A532-94C25BB4B6F0} + {AD9CB282-A1BD-E94D-DAD0-D8C90F932757} Win32Proj bson @@ -41,7 +41,7 @@ - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\bson\node_modules\nan;%(AdditionalIncludeDirectories) EnableFastChecks true ProgramDatabase @@ -58,7 +58,7 @@ Level3 - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.24\$(Configuration)\node.lib + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.25\$(Configuration)\node.lib true true true @@ -69,13 +69,13 @@ MachineX64 - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\bson\node_modules\nan;%(AdditionalIncludeDirectories) WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;BUILDING_V8_SHARED=1;BUILDING_UV_SHARED=1;BUILDING_NODE_EXTENSION;DEBUG;_DEBUG;%(PreprocessorDefinitions);%(PreprocessorDefinitions) - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\bson\node_modules\nan;%(AdditionalIncludeDirectories) /MP %(AdditionalOptions) true ProgramDatabase @@ -100,7 +100,7 @@ /LTCG %(AdditionalOptions) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.24\$(Configuration)\node.lib + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.25\$(Configuration)\node.lib true true true @@ -114,7 +114,7 @@ MachineX64 - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\bson\node_modules\nan;%(AdditionalIncludeDirectories) WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;BUILDING_V8_SHARED=1;BUILDING_UV_SHARED=1;BUILDING_NODE_EXTENSION;%(PreprocessorDefinitions);%(PreprocessorDefinitions) diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/config.gypi b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/config.gypi index 2e7f4dc..0b6e248 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/config.gypi +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/build/config.gypi @@ -31,7 +31,7 @@ "v8_no_strict_aliasing": 1, "v8_use_snapshot": "true", "visibility": "", - "nodedir": "C:\\Users\\Christopher\\.node-gyp\\0.10.24", + "nodedir": "C:\\Users\\Christopher\\.node-gyp\\0.10.25", "copy_dev_lib": "true", "standalone_static_library": 1, "registry": "https://registry.npmjs.org/", @@ -39,6 +39,7 @@ "always_auth": "", "bin_links": "true", "browser": "", + "ca": "", "cache": "C:\\Users\\Christopher\\AppData\\Roaming\\npm-cache", "cache_lock_stale": "60000", "cache_lock_retries": "10", @@ -76,7 +77,7 @@ "local_address": "", "long": "", "message": "%s", - "node_version": "v0.10.24", + "node_version": "v0.10.25", "npat": "", "onload_script": "", "optional": "true", @@ -84,7 +85,7 @@ "production": "", "proprietary_attribs": "true", "https_proxy": "", - "user_agent": "node/v0.10.24 win32 x64", + "user_agent": "node/v0.10.25 win32 x64", "rebuild_bundle": "true", "rollback": "true", "save": "", diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/bson.cc b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/bson.cc index 35c1709..422fc3e 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/bson.cc +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/bson.cc @@ -200,56 +200,56 @@ template void BSONSerializer::SerializeValue(void* typeLocation, else if(value->IsObject()) { const Local& object = value->ToObject(); - if(object->Has(bson->_bsontypeString)) + if(object->Has(NanPersistentToLocal(bson->_bsontypeString))) { const Local& constructorString = object->GetConstructorName(); - if(bson->longString->StrictEquals(constructorString)) + if(NanPersistentToLocal(bson->longString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_LONG); - this->WriteInt32(object, bson->_longLowString); - this->WriteInt32(object, bson->_longHighString); + this->WriteInt32(object, NanPersistentToLocal(bson->_longLowString)); + this->WriteInt32(object, NanPersistentToLocal(bson->_longHighString)); } - else if(bson->timestampString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->timestampString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_TIMESTAMP); - this->WriteInt32(object, bson->_longLowString); - this->WriteInt32(object, bson->_longHighString); + this->WriteInt32(object, NanPersistentToLocal(bson->_longLowString)); + this->WriteInt32(object, NanPersistentToLocal(bson->_longHighString)); } - else if(bson->objectIDString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->objectIDString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_OID); - this->WriteObjectId(object, bson->_objectIDidString); + this->WriteObjectId(object, NanPersistentToLocal(bson->_objectIDidString)); } - else if(bson->binaryString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->binaryString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_BINARY); - uint32_t length = object->Get(bson->_binaryPositionString)->Uint32Value(); - Local bufferObj = object->Get(bson->_binaryBufferString)->ToObject(); + uint32_t length = object->Get(NanPersistentToLocal(bson->_binaryPositionString))->Uint32Value(); + Local bufferObj = object->Get(NanPersistentToLocal(bson->_binaryBufferString))->ToObject(); this->WriteInt32(length); - this->WriteByte(object, bson->_binarySubTypeString); // write subtype + this->WriteByte(object, NanPersistentToLocal(bson->_binarySubTypeString)); // write subtype // If type 0x02 write the array length aswell - if(object->Get(bson->_binarySubTypeString)->Int32Value() == 0x02) { + if(object->Get(NanPersistentToLocal(bson->_binarySubTypeString))->Int32Value() == 0x02) { this->WriteInt32(length); } // Write the actual data this->WriteData(Buffer::Data(bufferObj), length); } - else if(bson->doubleString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->doubleString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_NUMBER); - this->WriteDouble(object, bson->_doubleValueString); + this->WriteDouble(object, NanPersistentToLocal(bson->_doubleValueString)); } - else if(bson->symbolString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->symbolString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_SYMBOL); - this->WriteLengthPrefixedString(object->Get(bson->_symbolValueString)->ToString()); + this->WriteLengthPrefixedString(object->Get(NanPersistentToLocal(bson->_symbolValueString))->ToString()); } - else if(bson->codeString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->codeString)->StrictEquals(constructorString)) { - const Local& function = object->Get(bson->_codeCodeString)->ToString(); - const Local& scope = object->Get(bson->_codeScopeString)->ToObject(); + const Local& function = object->Get(NanPersistentToLocal(bson->_codeCodeString))->ToString(); + const Local& scope = object->Get(NanPersistentToLocal(bson->_codeScopeString))->ToObject(); // For Node < 0.6.X use the GetPropertyNames #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 6 @@ -272,7 +272,7 @@ template void BSONSerializer::SerializeValue(void* typeLocation, this->WriteLengthPrefixedString(function->ToString()); } } - else if(bson->dbrefString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->dbrefString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_OBJECT); @@ -280,13 +280,13 @@ template void BSONSerializer::SerializeValue(void* typeLocation, void* refType = this->BeginWriteType(); this->WriteData("$ref", 5); - SerializeValue(refType, object->Get(bson->_dbRefNamespaceString)); + SerializeValue(refType, object->Get(NanPersistentToLocal(bson->_dbRefNamespaceString))); void* idType = this->BeginWriteType(); this->WriteData("$id", 4); - SerializeValue(idType, object->Get(bson->_dbRefOidString)); + SerializeValue(idType, object->Get(NanPersistentToLocal(bson->_dbRefOidString))); - const Local& refDbValue = object->Get(bson->_dbRefDbString); + const Local& refDbValue = object->Get(NanPersistentToLocal(bson->_dbRefDbString)); if(!refDbValue->IsUndefined()) { void* dbType = this->BeginWriteType(); @@ -297,11 +297,11 @@ template void BSONSerializer::SerializeValue(void* typeLocation, this->WriteByte(0); this->CommitSize(dbRefSize); } - else if(bson->minKeyString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->minKeyString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_MIN_KEY); } - else if(bson->maxKeyString->StrictEquals(constructorString)) + else if(NanPersistentToLocal(bson->maxKeyString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_MAX_KEY); } @@ -311,7 +311,7 @@ template void BSONSerializer::SerializeValue(void* typeLocation, this->CommitType(typeLocation, BSON_TYPE_BINARY); #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 3 - Buffer *buffer = ObjectWrap::Unwrap(value->ToObject()); + Local buffer = ObjectWrap::Unwrap(value->ToObject()); uint32_t length = object->length(); #else uint32_t length = Buffer::Length(value->ToObject()); @@ -354,10 +354,13 @@ BSONDeserializer::BSONDeserializer(BSONDeserializer& parentSerializer, size_t le if(*pEnd != '\0') ThrowAllocatedStringException(64, "Missing end of document marker '\\0'"); } -Local BSONDeserializer::ReadCString() +Handle BSONDeserializer::ReadCString() { char* start = p; - while(*p++) { } + while(*p++ && (p < pEnd)) { } + if(p > pEnd) { + return Null(); + } return String::New(start, (int32_t) (p-start-1) ); } @@ -422,7 +425,9 @@ Handle BSONDeserializer::DeserializeDocumentInternal(bool promoteLongs) while(HasMoreData()) { BsonType type = (BsonType) ReadByte(); - const Local& name = ReadCString(); + const Handle& name = ReadCString(); + if(name->IsNull()) ThrowAllocatedStringException(64, "Bad BSON Document: illegal CString"); + // name->Is const Handle& value = DeserializeValue(type, promoteLongs); returnObject->ForceSet(name, value); } @@ -430,10 +435,10 @@ Handle BSONDeserializer::DeserializeDocumentInternal(bool promoteLongs) // From JavaScript: // if(object['$id'] != null) object = new DBRef(object['$ref'], object['$id'], object['$db']); - if(returnObject->Has(bson->_dbRefIdRefString)) + if(returnObject->Has(NanPersistentToLocal(bson->_dbRefIdRefString))) { - Local argv[] = { returnObject->Get(bson->_dbRefRefString), returnObject->Get(bson->_dbRefIdRefString), returnObject->Get(bson->_dbRefDbRefString) }; - return bson->dbrefConstructor->NewInstance(3, argv); + Local argv[] = { returnObject->Get(NanPersistentToLocal(bson->_dbRefRefString)), returnObject->Get(NanPersistentToLocal(bson->_dbRefIdRefString)), returnObject->Get(NanPersistentToLocal(bson->_dbRefDbRefString)) }; + return NanPersistentToLocal(bson->dbrefConstructor)->NewInstance(3, argv); } else { @@ -490,7 +495,7 @@ Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLong int32_t lowBits = ReadInt32(); int32_t highBits = ReadInt32(); Local argv[] = { Int32::New(lowBits), Int32::New(highBits) }; - return bson->timestampConstructor->NewInstance(2, argv); + return NanPersistentToLocal(bson->timestampConstructor)->NewInstance(2, argv); } case BSON_TYPE_BOOLEAN: @@ -498,9 +503,10 @@ Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLong case BSON_TYPE_REGEXP: { - const Local& regex = ReadCString(); + const Handle& regex = ReadCString(); + if(regex->IsNull()) ThrowAllocatedStringException(64, "Bad BSON Document: illegal CString"); int32_t options = ReadRegexOptions(); - return RegExp::New(regex, (RegExp::Flags) options); + return RegExp::New(regex->ToString(), (RegExp::Flags) options); } case BSON_TYPE_CODE: @@ -508,7 +514,7 @@ Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLong const Local& code = ReadString(); const Local& scope = Object::New(); Local argv[] = { code, scope }; - return bson->codeConstructor->NewInstance(2, argv); + return NanPersistentToLocal(bson->codeConstructor)->NewInstance(2, argv); } case BSON_TYPE_CODE_W_SCOPE: @@ -517,13 +523,13 @@ Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLong const Local& code = ReadString(); const Handle& scope = DeserializeDocument(promoteLongs); Local argv[] = { code, scope->ToObject() }; - return bson->codeConstructor->NewInstance(2, argv); + return NanPersistentToLocal(bson->codeConstructor)->NewInstance(2, argv); } case BSON_TYPE_OID: { Local argv[] = { ReadObjectId() }; - return bson->objectIDConstructor->NewInstance(1, argv); + return NanPersistentToLocal(bson->objectIDConstructor)->NewInstance(1, argv); } case BSON_TYPE_BINARY: @@ -534,11 +540,11 @@ Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLong length = ReadInt32(); } - Buffer* buffer = Buffer::New(p, length); + Local buffer = NanNewBufferHandle(p, length); p += length; - Handle argv[] = { buffer->handle_, Uint32::New(subType) }; - return bson->binaryConstructor->NewInstance(2, argv); + Handle argv[] = { buffer, Uint32::New(subType) }; + return NanPersistentToLocal(bson->binaryConstructor)->NewInstance(2, argv); } case BSON_TYPE_LONG: @@ -556,12 +562,12 @@ Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLong // Read the 64 bit value int64_t finalValue = (int64_t) ReadInt64(); return Number::New(finalValue); - } + } } // Decode the Long value Local argv[] = { Int32::New(lowBits), Int32::New(highBits) }; - return bson->longConstructor->NewInstance(2, argv); + return NanPersistentToLocal(bson->longConstructor)->NewInstance(2, argv); } case BSON_TYPE_DATE: @@ -577,14 +583,14 @@ Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLong { const Local& string = ReadString(); Local argv[] = { string }; - return bson->symbolConstructor->NewInstance(1, argv); + return NanPersistentToLocal(bson->symbolConstructor)->NewInstance(1, argv); } case BSON_TYPE_MIN_KEY: - return bson->minKeyConstructor->NewInstance(); + return NanPersistentToLocal(bson->minKeyConstructor)->NewInstance(); case BSON_TYPE_MAX_KEY: - return bson->maxKeyConstructor->NewInstance(); + return NanPersistentToLocal(bson->maxKeyConstructor)->NewInstance(); default: ThrowAllocatedStringException(64, "Unhandled BSON Type: %d", type); @@ -593,73 +599,67 @@ Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLong return v8::Null(); } - -static Handle VException(const char *msg) -{ - HandleScope scope; - return ThrowException(Exception::Error(String::New(msg))); -} - Persistent BSON::constructor_template; BSON::BSON() : ObjectWrap() { // Setup pre-allocated comparision objects - _bsontypeString = Persistent::New(String::New("_bsontype")); - _longLowString = Persistent::New(String::New("low_")); - _longHighString = Persistent::New(String::New("high_")); - _objectIDidString = Persistent::New(String::New("id")); - _binaryPositionString = Persistent::New(String::New("position")); - _binarySubTypeString = Persistent::New(String::New("sub_type")); - _binaryBufferString = Persistent::New(String::New("buffer")); - _doubleValueString = Persistent::New(String::New("value")); - _symbolValueString = Persistent::New(String::New("value")); - _dbRefRefString = Persistent::New(String::New("$ref")); - _dbRefIdRefString = Persistent::New(String::New("$id")); - _dbRefDbRefString = Persistent::New(String::New("$db")); - _dbRefNamespaceString = Persistent::New(String::New("namespace")); - _dbRefDbString = Persistent::New(String::New("db")); - _dbRefOidString = Persistent::New(String::New("oid")); - _codeCodeString = Persistent::New(String::New("code")); - _codeScopeString = Persistent::New(String::New("scope")); - _toBSONString = Persistent::New(String::New("toBSON")); - - longString = Persistent::New(String::New("Long")); - objectIDString = Persistent::New(String::New("ObjectID")); - binaryString = Persistent::New(String::New("Binary")); - codeString = Persistent::New(String::New("Code")); - dbrefString = Persistent::New(String::New("DBRef")); - symbolString = Persistent::New(String::New("Symbol")); - doubleString = Persistent::New(String::New("Double")); - timestampString = Persistent::New(String::New("Timestamp")); - minKeyString = Persistent::New(String::New("MinKey")); - maxKeyString = Persistent::New(String::New("MaxKey")); + NanAssignPersistent(String, _bsontypeString, String::New("_bsontype")); + NanAssignPersistent(String, _longLowString, String::New("low_")); + NanAssignPersistent(String, _longHighString, String::New("high_")); + NanAssignPersistent(String, _objectIDidString, String::New("id")); + NanAssignPersistent(String, _binaryPositionString, String::New("position")); + NanAssignPersistent(String, _binarySubTypeString, String::New("sub_type")); + NanAssignPersistent(String, _binaryBufferString, String::New("buffer")); + NanAssignPersistent(String, _doubleValueString, String::New("value")); + NanAssignPersistent(String, _symbolValueString, String::New("value")); + NanAssignPersistent(String, _dbRefRefString, String::New("$ref")); + NanAssignPersistent(String, _dbRefIdRefString, String::New("$id")); + NanAssignPersistent(String, _dbRefDbRefString, String::New("$db")); + NanAssignPersistent(String, _dbRefNamespaceString, String::New("namespace")); + NanAssignPersistent(String, _dbRefDbString, String::New("db")); + NanAssignPersistent(String, _dbRefOidString, String::New("oid")); + NanAssignPersistent(String, _codeCodeString, String::New("code")); + NanAssignPersistent(String, _codeScopeString, String::New("scope")); + NanAssignPersistent(String, _toBSONString, String::New("toBSON")); + + NanAssignPersistent(String, longString, String::New("Long")); + NanAssignPersistent(String, objectIDString, String::New("ObjectID")); + NanAssignPersistent(String, binaryString, String::New("Binary")); + NanAssignPersistent(String, codeString, String::New("Code")); + NanAssignPersistent(String, dbrefString, String::New("DBRef")); + NanAssignPersistent(String, symbolString, String::New("Symbol")); + NanAssignPersistent(String, doubleString, String::New("Double")); + NanAssignPersistent(String, timestampString, String::New("Timestamp")); + NanAssignPersistent(String, minKeyString, String::New("MinKey")); + NanAssignPersistent(String, maxKeyString, String::New("MaxKey")); } void BSON::Initialize(v8::Handle target) { // Grab the scope of the call from Node - HandleScope scope; + NanScope(); // Define a new function template Local t = FunctionTemplate::New(New); - constructor_template = Persistent::New(t); - constructor_template->InstanceTemplate()->SetInternalFieldCount(1); - constructor_template->SetClassName(String::NewSymbol("BSON")); + t->InstanceTemplate()->SetInternalFieldCount(1); + t->SetClassName(String::NewSymbol("BSON")); // Instance methods - NODE_SET_PROTOTYPE_METHOD(constructor_template, "calculateObjectSize", CalculateObjectSize); - NODE_SET_PROTOTYPE_METHOD(constructor_template, "serialize", BSONSerialize); - NODE_SET_PROTOTYPE_METHOD(constructor_template, "serializeWithBufferAndIndex", SerializeWithBufferAndIndex); - NODE_SET_PROTOTYPE_METHOD(constructor_template, "deserialize", BSONDeserialize); - NODE_SET_PROTOTYPE_METHOD(constructor_template, "deserializeStream", BSONDeserializeStream); + NODE_SET_PROTOTYPE_METHOD(t, "calculateObjectSize", CalculateObjectSize); + NODE_SET_PROTOTYPE_METHOD(t, "serialize", BSONSerialize); + NODE_SET_PROTOTYPE_METHOD(t, "serializeWithBufferAndIndex", SerializeWithBufferAndIndex); + NODE_SET_PROTOTYPE_METHOD(t, "deserialize", BSONDeserialize); + NODE_SET_PROTOTYPE_METHOD(t, "deserializeStream", BSONDeserializeStream); - target->ForceSet(String::NewSymbol("BSON"), constructor_template->GetFunction()); + NanAssignPersistent(FunctionTemplate, constructor_template, t); + + target->ForceSet(String::NewSymbol("BSON"), t->GetFunction()); } // Create a new instance of BSON and passing it the existing context -Handle BSON::New(const Arguments &args) +NAN_METHOD(BSON::New) { - HandleScope scope; + NanScope(); // Check that we have an array if(args.Length() == 1 && args[0]->IsArray()) @@ -681,35 +681,35 @@ Handle BSON::New(const Arguments &args) Local functionName = func->GetName()->ToString(); // Save the functions making them persistant handles (they don't get collected) - if(functionName->StrictEquals(bson->longString)) { - bson->longConstructor = Persistent::New(func); + if(functionName->StrictEquals(NanPersistentToLocal(bson->longString))) { + NanAssignPersistent(Function, bson->longConstructor, func); foundClassesMask |= 1; - } else if(functionName->StrictEquals(bson->objectIDString)) { - bson->objectIDConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->objectIDString))) { + NanAssignPersistent(Function, bson->objectIDConstructor, func); foundClassesMask |= 2; - } else if(functionName->StrictEquals(bson->binaryString)) { - bson->binaryConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->binaryString))) { + NanAssignPersistent(Function, bson->binaryConstructor, func); foundClassesMask |= 4; - } else if(functionName->StrictEquals(bson->codeString)) { - bson->codeConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->codeString))) { + NanAssignPersistent(Function, bson->codeConstructor, func); foundClassesMask |= 8; - } else if(functionName->StrictEquals(bson->dbrefString)) { - bson->dbrefConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->dbrefString))) { + NanAssignPersistent(Function, bson->dbrefConstructor, func); foundClassesMask |= 0x10; - } else if(functionName->StrictEquals(bson->symbolString)) { - bson->symbolConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->symbolString))) { + NanAssignPersistent(Function, bson->symbolConstructor, func); foundClassesMask |= 0x20; - } else if(functionName->StrictEquals(bson->doubleString)) { - bson->doubleConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->doubleString))) { + NanAssignPersistent(Function, bson->doubleConstructor, func); foundClassesMask |= 0x40; - } else if(functionName->StrictEquals(bson->timestampString)) { - bson->timestampConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->timestampString))) { + NanAssignPersistent(Function, bson->timestampConstructor, func); foundClassesMask |= 0x80; - } else if(functionName->StrictEquals(bson->minKeyString)) { - bson->minKeyConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->minKeyString))) { + NanAssignPersistent(Function, bson->minKeyConstructor, func); foundClassesMask |= 0x100; - } else if(functionName->StrictEquals(bson->maxKeyString)) { - bson->maxKeyConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanPersistentToLocal(bson->maxKeyString))) { + NanAssignPersistent(Function, bson->maxKeyConstructor, func); foundClassesMask |= 0x200; } } @@ -717,20 +717,20 @@ Handle BSON::New(const Arguments &args) // Check if we have the right number of constructors otherwise throw an error if(foundClassesMask != 0x3ff) { delete bson; - return VException("Missing function constructor for either [Long/ObjectID/Binary/Code/DbRef/Symbol/Double/Timestamp/MinKey/MaxKey]"); + return NanThrowError("Missing function constructor for either [Long/ObjectID/Binary/Code/DbRef/Symbol/Double/Timestamp/MinKey/MaxKey]"); } else { bson->Wrap(args.This()); - return args.This(); + NanReturnValue(args.This()); } } else { - return VException("No types passed in"); + return NanThrowError("No types passed in"); } } else { - return VException("Argument passed in must be an array of types"); + return NanThrowTypeError("Argument passed in must be an array of types"); } } @@ -739,13 +739,13 @@ Handle BSON::New(const Arguments &args) //------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------ -Handle BSON::BSONDeserialize(const Arguments &args) +NAN_METHOD(BSON::BSONDeserialize) { - HandleScope scope; + NanScope(); // Fail if the first argument is not a string or a buffer if(args.Length() > 1 && !args[0]->IsString() && !Buffer::HasInstance(args[0])) - return VException("First Argument must be a Buffer or String."); + return NanThrowError("First Argument must be a Buffer or String."); // Promote longs bool promoteLongs = true; @@ -757,7 +757,7 @@ Handle BSON::BSONDeserialize(const Arguments &args) if(options->Has(String::New("promoteLongs"))) { promoteLongs = options->Get(String::New("promoteLongs"))->ToBoolean()->Value(); } - } + } // Define pointer to data Local obj = args[0]->ToObject(); @@ -769,7 +769,7 @@ Handle BSON::BSONDeserialize(const Arguments &args) if(Buffer::HasInstance(obj)) { #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 3 - Buffer *buffer = ObjectWrap::Unwrap(obj); + Local buffer = ObjectWrap::Unwrap(obj); char* data = buffer->data(); size_t length = buffer->length(); #else @@ -778,19 +778,19 @@ Handle BSON::BSONDeserialize(const Arguments &args) #endif // Validate that we have at least 5 bytes - if(length < 5) return VException("corrupt bson message < 5 bytes long"); + if(length < 5) return NanThrowError("corrupt bson message < 5 bytes long"); try { BSONDeserializer deserializer(bson, data, length); // deserializer.promoteLongs = promoteLongs; - return deserializer.DeserializeDocument(promoteLongs); + NanReturnValue(deserializer.DeserializeDocument(promoteLongs)); } catch(char* exception) { - Handle error = VException(exception); + Local error = String::New(exception); free(exception); - return error; + return NanThrowError(error); } } @@ -800,7 +800,7 @@ Handle BSON::BSONDeserialize(const Arguments &args) ssize_t len = DecodeBytes(args[0], BINARY); // Validate that we have at least 5 bytes - if(len < 5) return VException("corrupt bson message < 5 bytes long"); + if(len < 5) return NanThrowError("corrupt bson message < 5 bytes long"); // Let's define the buffer size char* data = (char *)malloc(len); @@ -812,15 +812,15 @@ Handle BSON::BSONDeserialize(const Arguments &args) // deserializer.promoteLongs = promoteLongs; Handle result = deserializer.DeserializeDocument(promoteLongs); free(data); - return result; + NanReturnValue(result); } catch(char* exception) { - Handle error = VException(exception); + Local error = String::New(exception); free(exception); free(data); - return error; + return NanThrowError(error); } } } @@ -828,9 +828,9 @@ Handle BSON::BSONDeserialize(const Arguments &args) Local BSON::GetSerializeObject(const Handle& argValue) { Local object = argValue->ToObject(); - if(object->Has(_toBSONString)) + if(object->Has(NanPersistentToLocal(_toBSONString))) { - const Local& toBSON = object->Get(_toBSONString); + const Local& toBSON = object->Get(NanPersistentToLocal(_toBSONString)); if(!toBSON->IsFunction()) ThrowAllocatedStringException(64, "toBSON is not a function"); Local result = Local::Cast(toBSON)->Call(object, 0, NULL); @@ -843,18 +843,18 @@ Local BSON::GetSerializeObject(const Handle& argValue) } } -Handle BSON::BSONSerialize(const Arguments &args) +NAN_METHOD(BSON::BSONSerialize) { - HandleScope scope; + NanScope(); - if(args.Length() == 1 && !args[0]->IsObject()) return VException("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); - if(args.Length() == 2 && !args[0]->IsObject() && !args[1]->IsBoolean()) return VException("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); - if(args.Length() == 3 && !args[0]->IsObject() && !args[1]->IsBoolean() && !args[2]->IsBoolean()) return VException("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); - if(args.Length() == 4 && !args[0]->IsObject() && !args[1]->IsBoolean() && !args[2]->IsBoolean() && !args[3]->IsBoolean()) return VException("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean] or [object, boolean, boolean, boolean]"); - if(args.Length() > 4) return VException("One, two, tree or four arguments required - [object] or [object, boolean] or [object, boolean, boolean] or [object, boolean, boolean, boolean]"); + if(args.Length() == 1 && !args[0]->IsObject()) return NanThrowError("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); + if(args.Length() == 2 && !args[0]->IsObject() && !args[1]->IsBoolean()) return NanThrowError("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); + if(args.Length() == 3 && !args[0]->IsObject() && !args[1]->IsBoolean() && !args[2]->IsBoolean()) return NanThrowError("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); + if(args.Length() == 4 && !args[0]->IsObject() && !args[1]->IsBoolean() && !args[2]->IsBoolean() && !args[3]->IsBoolean()) return NanThrowError("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean] or [object, boolean, boolean, boolean]"); + if(args.Length() > 4) return NanThrowError("One, two, tree or four arguments required - [object] or [object, boolean] or [object, boolean, boolean] or [object, boolean, boolean, boolean]"); // Check if we have an array as the object - if(args[0]->IsArray()) return VException("Only javascript objects supported"); + if(args[0]->IsArray()) return NanThrowError("Only javascript objects supported"); // Unpack the BSON parser instance BSON *bson = ObjectWrap::Unwrap(args.This()); @@ -884,33 +884,33 @@ Handle BSON::BSONSerialize(const Arguments &args) catch(char *err_msg) { free(serialized_object); - Handle error = VException(err_msg); + Local error = String::New(err_msg); free(err_msg); - return error; + return NanThrowError(error); } // If we have 3 arguments if(args.Length() == 3 || args.Length() == 4) { - Buffer *buffer = Buffer::New(serialized_object, object_size); + Local buffer = NanNewBufferHandle(serialized_object, object_size); free(serialized_object); - return scope.Close(buffer->handle_); + NanReturnValue(buffer); } else { Local bin_value = Encode(serialized_object, object_size, BINARY)->ToString(); free(serialized_object); - return bin_value; + NanReturnValue(bin_value); } } -Handle BSON::CalculateObjectSize(const Arguments &args) +NAN_METHOD(BSON::CalculateObjectSize) { - HandleScope scope; + NanScope(); // Ensure we have a valid object - if(args.Length() == 1 && !args[0]->IsObject()) return VException("One argument required - [object]"); - if(args.Length() == 2 && !args[0]->IsObject() && !args[1]->IsBoolean()) return VException("Two arguments required - [object, boolean]"); - if(args.Length() > 3) return VException("One or two arguments required - [object] or [object, boolean]"); + if(args.Length() == 1 && !args[0]->IsObject()) return NanThrowError("One argument required - [object]"); + if(args.Length() == 2 && !args[0]->IsObject() && !args[1]->IsBoolean()) return NanThrowError("Two arguments required - [object, boolean]"); + if(args.Length() > 3) return NanThrowError("One or two arguments required - [object] or [object, boolean]"); // Unpack the BSON parser instance BSON *bson = ObjectWrap::Unwrap(args.This()); @@ -919,18 +919,18 @@ Handle BSON::CalculateObjectSize(const Arguments &args) countSerializer.SerializeDocument(args[0]); // Return the object size - return scope.Close(Uint32::New((uint32_t) countSerializer.GetSerializeSize())); + NanReturnValue(Uint32::New((uint32_t) countSerializer.GetSerializeSize())); } -Handle BSON::SerializeWithBufferAndIndex(const Arguments &args) +NAN_METHOD(BSON::SerializeWithBufferAndIndex) { - HandleScope scope; + NanScope(); //BSON.serializeWithBufferAndIndex = function serializeWithBufferAndIndex(object, ->, buffer, index) { // Ensure we have the correct values - if(args.Length() > 5) return VException("Four or five parameters required [object, boolean, Buffer, int] or [object, boolean, Buffer, int, boolean]"); - if(args.Length() == 4 && !args[0]->IsObject() && !args[1]->IsBoolean() && !Buffer::HasInstance(args[2]) && !args[3]->IsUint32()) return VException("Four parameters required [object, boolean, Buffer, int]"); - if(args.Length() == 5 && !args[0]->IsObject() && !args[1]->IsBoolean() && !Buffer::HasInstance(args[2]) && !args[3]->IsUint32() && !args[4]->IsBoolean()) return VException("Four parameters required [object, boolean, Buffer, int, boolean]"); + if(args.Length() > 5) return NanThrowError("Four or five parameters required [object, boolean, Buffer, int] or [object, boolean, Buffer, int, boolean]"); + if(args.Length() == 4 && !args[0]->IsObject() && !args[1]->IsBoolean() && !Buffer::HasInstance(args[2]) && !args[3]->IsUint32()) return NanThrowError("Four parameters required [object, boolean, Buffer, int]"); + if(args.Length() == 5 && !args[0]->IsObject() && !args[1]->IsBoolean() && !Buffer::HasInstance(args[2]) && !args[3]->IsUint32() && !args[4]->IsBoolean()) return NanThrowError("Four parameters required [object, boolean, Buffer, int, boolean]"); uint32_t index; size_t object_size; @@ -951,37 +951,37 @@ Handle BSON::SerializeWithBufferAndIndex(const Arguments &args) dataSerializer.SerializeDocument(bson->GetSerializeObject(args[0])); object_size = dataSerializer.GetSerializeSize(); - if(object_size + index > length) return VException("Serious error - overflowed buffer!!"); + if(object_size + index > length) return NanThrowError("Serious error - overflowed buffer!!"); } catch(char *exception) { - Handle error = VException(exception); + Local error = String::New(exception); free(exception); - return error; + return NanThrowError(error); } - return scope.Close(Uint32::New((uint32_t) (index + object_size - 1))); + NanReturnValue(Uint32::New((uint32_t) (index + object_size - 1))); } -Handle BSON::BSONDeserializeStream(const Arguments &args) +NAN_METHOD(BSON::BSONDeserializeStream) { - HandleScope scope; + NanScope(); // At least 3 arguments required - if(args.Length() < 5) return VException("Arguments required (Buffer(data), Number(index in data), Number(number of documents to deserialize), Array(results), Number(index in the array), Object(optional))"); + if(args.Length() < 5) return NanThrowError("Arguments required (Buffer(data), Number(index in data), Number(number of documents to deserialize), Array(results), Number(index in the array), Object(optional))"); // If the number of argumets equals 3 if(args.Length() >= 5) { - if(!Buffer::HasInstance(args[0])) return VException("First argument must be Buffer instance"); - if(!args[1]->IsUint32()) return VException("Second argument must be a positive index number"); - if(!args[2]->IsUint32()) return VException("Third argument must be a positive number of documents to deserialize"); - if(!args[3]->IsArray()) return VException("Fourth argument must be an array the size of documents to deserialize"); - if(!args[4]->IsUint32()) return VException("Sixth argument must be a positive index number"); + if(!Buffer::HasInstance(args[0])) return NanThrowError("First argument must be Buffer instance"); + if(!args[1]->IsUint32()) return NanThrowError("Second argument must be a positive index number"); + if(!args[2]->IsUint32()) return NanThrowError("Third argument must be a positive number of documents to deserialize"); + if(!args[3]->IsArray()) return NanThrowError("Fourth argument must be an array the size of documents to deserialize"); + if(!args[4]->IsUint32()) return NanThrowError("Sixth argument must be a positive index number"); } // If we have 4 arguments - if(args.Length() == 6 && !args[5]->IsObject()) return VException("Fifth argument must be an object with options"); + if(args.Length() == 6 && !args[5]->IsObject()) return NanThrowError("Fifth argument must be an object with options"); // Define pointer to data Local obj = args[0]->ToObject(); @@ -1005,7 +1005,7 @@ Handle BSON::BSONDeserializeStream(const Arguments &args) // Unpack the buffer variable #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 3 - Buffer *buffer = ObjectWrap::Unwrap(obj); + Local buffer = ObjectWrap::Unwrap(obj); char* data = buffer->data(); size_t length = buffer->length(); #else @@ -1025,20 +1025,20 @@ Handle BSON::BSONDeserializeStream(const Arguments &args) } catch (char* exception) { - Handle error = VException(exception); + Local error = String::New(exception); free(exception); - return error; + return NanThrowError(error); } } // Return new index of parsing - return scope.Close(Uint32::New((uint32_t) (index + deserializer.GetSerializeSize()))); + NanReturnValue(Uint32::New((uint32_t) (index + deserializer.GetSerializeSize()))); } // Exporting function extern "C" void init(Handle target) { - HandleScope scope; + NanScope(); BSON::Initialize(target); } diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/bson.h b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/bson.h index 3638f82..dad8412 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/bson.h +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/bson.h @@ -14,6 +14,7 @@ #include #include #include +#include "nan.h" using namespace v8; using namespace node; @@ -48,26 +49,26 @@ enum BsonType template class BSONSerializer; class BSON : public ObjectWrap { -public: +public: BSON(); ~BSON() {} static void Initialize(Handle target); - static Handle BSONDeserializeStream(const Arguments &args); + static NAN_METHOD(BSONDeserializeStream); // JS based objects - static Handle BSONSerialize(const Arguments &args); - static Handle BSONDeserialize(const Arguments &args); + static NAN_METHOD(BSONSerialize); + static NAN_METHOD(BSONDeserialize); - // Calculate size of function - static Handle CalculateObjectSize(const Arguments &args); - static Handle SerializeWithBufferAndIndex(const Arguments &args); + // Calculate size of function + static NAN_METHOD(CalculateObjectSize); + static NAN_METHOD(SerializeWithBufferAndIndex); // Constructor used for creating new BSON objects from C++ static Persistent constructor_template; private: - static Handle New(const Arguments &args); + static NAN_METHOD(New); static Handle deserialize(BSON *bson, char *data, uint32_t dataLength, uint32_t startIndex, bool is_array_item); // BSON type instantiate functions @@ -237,7 +238,7 @@ class BSONDeserializer Handle DeserializeDocument(bool promoteLongs); bool HasMoreData() const { return p < pEnd; } - Local ReadCString(); + Handle ReadCString(); uint32_t ReadIntegerString(); int32_t ReadRegexOptions(); Local ReadString(); diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/index.js b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/index.js index 85e243c..65affae 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/index.js +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/ext/index.js @@ -1,12 +1,17 @@ var bson = null; -// Load the precompiled win32 binary -if(process.platform == "win32" && process.arch == "x64") { - bson = require('./win32/x64/bson'); -} else if(process.platform == "win32" && process.arch == "ia32") { - bson = require('./win32/ia32/bson'); -} else { - bson = require('../build/Release/bson'); +try { + // Load the precompiled win32 binary + if(process.platform == "win32" && process.arch == "x64") { + bson = require('./win32/x64/bson'); + } else if(process.platform == "win32" && process.arch == "ia32") { + bson = require('./win32/ia32/bson'); + } else { + bson = require('../build/Release/bson'); + } +} catch(err) { + console.error("Failed to load c++ bson extension, using pure JS version"); + bson = require('../lib/bson/bson'); } exports.BSON = bson.BSON; diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/lib/bson/bson.js b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/lib/bson/bson.js index 3004d84..7df6896 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/lib/bson/bson.js +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/lib/bson/bson.js @@ -1169,7 +1169,11 @@ BSON.deserialize = function(buffer, options, isArray) { // Get the start search index var i = index; // Locate the end of the c string - while(buffer[i] !== 0x00) { i++ } + 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") // Grab utf8 encoded string var string = supportsBuffer && Buffer.isBuffer(buffer) ? buffer.toString('utf8', index, i) : convertUint8ArrayToUtf8String(buffer, index, i); // Update index position diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js index 183bbc3..844763c 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js @@ -22,8 +22,8 @@ var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$"); * @param {String|Number} id Can be a 24 byte hex string, 12 byte binary string or a Number. * @return {Object} instance of ObjectID. */ -var ObjectID = function ObjectID(id, _hex) { - if(!(this instanceof ObjectID)) return new ObjectID(id, _hex); +var ObjectID = function ObjectID(id) { + if(!(this instanceof ObjectID)) return new ObjectID(id); this._bsontype = 'ObjectID'; var __id = null; @@ -104,19 +104,15 @@ ObjectID.prototype.getInc = function() { * @api private */ ObjectID.prototype.generate = function(time) { - if ('number' == typeof time) { - var time4Bytes = BinaryParser.encodeInt(time, 32, true, true); - /* for time-based ObjectID the bytes following the time will be zeroed */ - var machine3Bytes = BinaryParser.encodeInt(MACHINE_ID, 24, false); - var pid2Bytes = BinaryParser.fromShort(typeof process === 'undefined' ? Math.floor(Math.random() * 100000) : process.pid); - var index3Bytes = BinaryParser.encodeInt(this.get_inc(), 24, false, true); - } else { - var unixTime = parseInt(Date.now()/1000,10); - var time4Bytes = BinaryParser.encodeInt(unixTime, 32, true, true); - var machine3Bytes = BinaryParser.encodeInt(MACHINE_ID, 24, false); - var pid2Bytes = BinaryParser.fromShort(typeof process === 'undefined' ? Math.floor(Math.random() * 100000) : process.pid); - var index3Bytes = BinaryParser.encodeInt(this.get_inc(), 24, false, true); + if ('number' != typeof time) { + time = parseInt(Date.now()/1000,10); } + + var time4Bytes = BinaryParser.encodeInt(time, 32, true, true); + /* for time-based ObjectID the bytes following the time will be zeroed */ + var machine3Bytes = BinaryParser.encodeInt(MACHINE_ID, 24, false); + var pid2Bytes = BinaryParser.fromShort(typeof process === 'undefined' ? Math.floor(Math.random() * 100000) : process.pid); + var index3Bytes = BinaryParser.encodeInt(this.get_inc(), 24, false, true); return time4Bytes + machine3Bytes + pid2Bytes + index3Bytes; }; @@ -180,7 +176,7 @@ ObjectID.prototype.getTimestamp = function() { * @ignore * @api private */ -ObjectID.index = 0; +ObjectID.index = parseInt(Math.random() * 0xFFFFFF, 10); ObjectID.createPk = function createPk () { return new ObjectID(); diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/.index.js b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/.index.js new file mode 100644 index 0000000..68da1f3 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/.index.js @@ -0,0 +1 @@ +//noop \ No newline at end of file diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/LICENSE b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/LICENSE new file mode 100644 index 0000000..352c287 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/LICENSE @@ -0,0 +1,43 @@ +Copyright 2013, NAN contributors: + - Rod Vagg + - Benjamin Byholm + - Trevor Norris +(the "Original Author") +All rights reserved. + +MIT +no-false-attribs License + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +Distributions of all or part of the Software intended to be used +by the recipients as they would use the unmodified Software, +containing modifications that substantially alter, remove, or +disable functionality of the Software, outside of the documented +configuration mechanisms provided by the Software, shall be +modified such that the Original Author's bug reporting email +addresses and urls are either replaced with the contact information +of the parties responsible for the changes, or removed entirely. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +Except where noted, this license applies to any and all software +programs and associated documentation files created by the +Original Author, when distributed with the Software. diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/README.md b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/README.md new file mode 100644 index 0000000..62c3c85 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/README.md @@ -0,0 +1,735 @@ +Native Abstractions for Node.js +=============================== + +**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10 and 0.11, and eventually 0.12.** + +***Current version: 0.4.4*** *(See [nan.h](https://github.com/rvagg/nan/blob/master/nan.h) for complete ChangeLog)* + +[![NPM](https://nodei.co/npm/nan.png?downloads=true&stars=true)](https://nodei.co/npm/nan/) [![NPM](https://nodei.co/npm-dl/nan.png?months=6)](https://nodei.co/npm/nan/) + +Thanks to the crazy changes in V8 (and some in Node core), keeping native addons compiling happily across versions, particularly 0.10 to 0.11/0.12, is a minor nightmare. The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect `NODE_MODULE_VERSION` and get yourself into a macro-tangle. + +This project also contains some helper utilities that make addon development a bit more pleasant. + + * **[Usage](#usage)** + * **[Example](#example)** + * **[API](#api)** + + +## Usage + +Simply add **NAN** as a dependency in the *package.json* of your Node addon: + +```js +"dependencies": { + ... + "nan" : "~0.4.4" + ... +} +``` + +Pull in the path to **NAN** in your *binding.gyp* so that you can use `#include "nan.h"` in your *.cpp*: + +```js +"include_dirs" : [ + "` when compiling your addon. + + +## Example + +See **[LevelDOWN](https://github.com/rvagg/node-leveldown/pull/48)** for a full example of **NAN** in use. + +For a simpler example, see the **[async pi estimation example](https://github.com/rvagg/nan/tree/master/examples/async_pi_estimate)** in the examples directory for full code and an explanation of what this Monte Carlo Pi estimation example does. Below are just some parts of the full example that illustrate the use of **NAN**. + +Compare to the current 0.10 version of this example, found in the [node-addon-examples](https://github.com/rvagg/node-addon-examples/tree/master/9_async_work) repository and also a 0.11 version of the same found [here](https://github.com/kkoopa/node-addon-examples/tree/5c01f58fc993377a567812597e54a83af69686d7/9_async_work). + +Note that there is no embedded version sniffing going on here and also the async work is made much simpler, see below for details on the `NanAsyncWorker` class. + +```c++ +// addon.cc +#include +#include "nan.h" +// ... + +using namespace v8; + +void InitAll(Handle exports) { + exports->Set(NanSymbol("calculateSync"), + FunctionTemplate::New(CalculateSync)->GetFunction()); + + exports->Set(NanSymbol("calculateAsync"), + FunctionTemplate::New(CalculateAsync)->GetFunction()); +} + +NODE_MODULE(addon, InitAll) +``` + +```c++ +// sync.h +#include +#include "nan.h" + +NAN_METHOD(CalculateSync); +``` + +```c++ +// sync.cc +#include +#include "nan.h" +#include "sync.h" +// ... + +using namespace v8; + +// Simple synchronous access to the `Estimate()` function +NAN_METHOD(CalculateSync) { + NanScope(); + + // expect a number as the first argument + int points = args[0]->Uint32Value(); + double est = Estimate(points); + + NanReturnValue(Number::New(est)); +} +``` + +```c++ +// async.cc +#include +#include "nan.h" +#include "async.h" + +// ... + +using namespace v8; + +class PiWorker : public NanAsyncWorker { + public: + PiWorker(NanCallback *callback, int points) + : NanAsyncWorker(callback), points(points) {} + ~PiWorker() {} + + // Executed inside the worker-thread. + // It is not safe to access V8, or V8 data structures + // here, so everything we need for input and output + // should go on `this`. + void Execute () { + estimate = Estimate(points); + } + + // Executed when the async work is complete + // this function will be run inside the main event loop + // so it is safe to use V8 again + void HandleOKCallback () { + NanScope(); + + Local argv[] = { + Local::New(Null()) + , Number::New(estimate) + }; + + callback->Call(2, argv); + }; + + private: + int points; + double estimate; +}; + +// Asynchronous access to the `Estimate()` function +NAN_METHOD(CalculateAsync) { + NanScope(); + + int points = args[0]->Uint32Value(); + NanCallback *callback = new NanCallback(args[1].As()); + + NanAsyncQueueWorker(new PiWorker(callback, points)); + NanReturnUndefined(); +} +``` + + +## API + + * NAN_METHOD + * NAN_GETTER + * NAN_SETTER + * NAN_PROPERTY_GETTER + * NAN_PROPERTY_SETTER + * NAN_PROPERTY_ENUMERATOR + * NAN_PROPERTY_DELETER + * NAN_PROPERTY_QUERY + * NAN_WEAK_CALLBACK + * NAN_DEPRECATED + * NAN_INLINE + * NanReturnValue + * NanReturnUndefined + * NanReturnNull + * NanReturnEmptyString + * NanScope + * NanLocker + * NanUnlocker + * NanGetInternalFieldPointer + * NanSetInternalFieldPointer + * NanObjectWrapHandle + * NanMakeWeak + * NanSymbol + * NanGetPointerSafe + * NanSetPointerSafe + * NanFromV8String + * NanBooleanOptionValue + * NanUInt32OptionValue + * NanError, NanTypeError, NanRangeError + * NanThrowError, NanThrowTypeError, NanThrowRangeError, NanThrowError(Handle), NanThrowError(Handle, int) + * NanNewBufferHandle(char *, size_t, FreeCallback, void *), NanNewBufferHandle(char *, uint32_t), NanNewBufferHandle(uint32_t) + * NanBufferUse(char *, uint32_t) + * NanNewContextHandle + * NanHasInstance + * NanPersistentToLocal + * NanDispose + * NanAssignPersistent + * NanInitPersistent + * NanCallback + * NanAsyncWorker + * NanAsyncQueueWorker + + +### NAN_METHOD(methodname) + +Use `NAN_METHOD` to define your V8 accessible methods: + +```c++ +// .h: +class Foo : public node::ObjectWrap { + ... + + static NAN_METHOD(Bar); + static NAN_METHOD(Baz); +} + + +// .cc: +NAN_METHOD(Foo::Bar) { + ... +} + +NAN_METHOD(Foo::Baz) { + ... +} +``` + +The reason for this macro is because of the method signature change in 0.11: + +```c++ +// 0.10 and below: +Handle name(const Arguments& args) + +// 0.11 and above +void name(const FunctionCallbackInfo& args) +``` + +The introduction of `FunctionCallbackInfo` brings additional complications: + + +### NAN_GETTER(methodname) + +Use `NAN_GETTER` to declare your V8 accessible getters. You get a `Local` `property` and an appropriately typed `args` object that can act like the `args` argument to a `NAN_METHOD` call. + +You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_GETTER`. + + +### NAN_SETTER(methodname) + +Use `NAN_SETTER` to declare your V8 accessible setters. Same as `NAN_GETTER` but you also get a `Local` `value` object to work with. + +You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_SETTER`. + + +### NAN_PROPERTY_GETTER(cbname) +Use `NAN_PROPERTY_GETTER` to declare your V8 accessible property getters. You get a `Local` `property` and an appropriately typed `args` object that can act similar to the `args` argument to a `NAN_METHOD` call. + +You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_GETTER`. + + +### NAN_PROPERTY_SETTER(cbname) +Use `NAN_PROPERTY_SETTER` to declare your V8 accessible property setters. Same as `NAN_PROPERTY_GETTER` but you also get a `Local` `value` object to work with. + +You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_SETTER`. + + +### NAN_PROPERTY_ENUMERATOR(cbname) +Use `NAN_PROPERTY_ENUMERATOR` to declare your V8 accessible property enumerators. You get an appropriately typed `args` object like the `args` argument to a `NAN_PROPERTY_GETTER` call. + +You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_ENUMERATOR`. + + +### NAN_PROPERTY_DELETER(cbname) +Use `NAN_PROPERTY_DELETER` to declare your V8 accessible property deleters. Same as `NAN_PROPERTY_GETTER`. + +You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_DELETER`. + + +### NAN_PROPERTY_QUERY(cbname) +Use `NAN_PROPERTY_QUERY` to declare your V8 accessible property queries. Same as `NAN_PROPERTY_GETTER`. + +You can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_QUERY`. + + +### NAN_WEAK_CALLBACK(type, cbname) + +Use `NAN_WEAK_CALLBACK` to declare your V8 WeakReference callbacks. There is an object argument accessible through `NAN_WEAK_CALLBACK_OBJECT`. The `type` argument gives the type of the `data` argument, accessible through `NAN_WEAK_CALLBACK_DATA(type)`. + +```c++ +static NAN_WEAK_CALLBACK(BufferReference*, WeakCheck) { + if (NAN_WEAK_CALLBACK_DATA(BufferReference*)->noLongerNeeded_) { + delete NAN_WEAK_CALLBACK_DATA(BufferReference*); + } else { + // Still in use, revive, prevent GC + NanMakeWeak(NAN_WEAK_CALLBACK_OBJECT, NAN_WEAK_CALLBACK_DATA(BufferReference*), &WeakCheck); + } +} +``` + + +### NAN_DEPRECATED(declarator) +Declares a function as deprecated. Identical to `V8_DEPRECATED`. + +```c++ +static NAN_DEPRECATED(NAN_METHOD(foo)) { + ... +} +``` + + +### NAN_INLINE(declarator) +Inlines a function. Identical to `V8_INLINE`. + +```c++ +static NAN_INLINE(int foo(int bar)) { + ... +} +``` + + +### NanReturnValue(Handle<Value>) + +Use `NanReturnValue` when you want to return a value from your V8 accessible method: + +```c++ +NAN_METHOD(Foo::Bar) { + ... + + NanReturnValue(String::New("FooBar!")); +} +``` + +No `return` statement required. + + +### NanReturnUndefined() + +Use `NanReturnUndefined` when you don't want to return anything from your V8 accessible method: + +```c++ +NAN_METHOD(Foo::Baz) { + ... + + NanReturnUndefined(); +} +``` + + +### NanReturnNull() + +Use `NanReturnNull` when you want to return `Null` from your V8 accessible method: + +```c++ +NAN_METHOD(Foo::Baz) { + ... + + NanReturnNull(); +} +``` + + +### NanReturnEmptyString() + +Use `NanReturnEmptyString` when you want to return an empty `String` from your V8 accessible method: + +```c++ +NAN_METHOD(Foo::Baz) { + ... + + NanReturnEmptyString(); +} +``` + + +### NanScope() + +The introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanScope()` necessary, use it in place of `HandleScope scope`: + +```c++ +NAN_METHOD(Foo::Bar) { + NanScope(); + + NanReturnValue(String::New("FooBar!")); +} +``` + + +### NanLocker() + +The introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanLocker()` necessary, use it in place of `Locker locker`: + +```c++ +NAN_METHOD(Foo::Bar) { + NanLocker(); + ... + NanUnlocker(); +} +``` + + +### NanUnlocker() + +The introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanUnlocker()` necessary, use it in place of `Unlocker unlocker`: + +```c++ +NAN_METHOD(Foo::Bar) { + NanLocker(); + ... + NanUnlocker(); +} +``` + + +### void * NanGetInternalFieldPointer(Handle<Object>, int) + +Gets a pointer to the internal field with at `index` from a V8 `Object` handle. + +```c++ +Local obj; +... +NanGetInternalFieldPointer(obj, 0); +``` + +### void NanSetInternalFieldPointer(Handle<Object>, int, void *) + +Sets the value of the internal field at `index` on a V8 `Object` handle. + +```c++ +static Persistent dataWrapperCtor; +... +Local wrapper = NanPersistentToLocal(dataWrapperCtor)->NewInstance(); +NanSetInternalFieldPointer(wrapper, 0, this); +``` + + +### Local<Object> NanObjectWrapHandle(Object) + +When you want to fetch the V8 object handle from a native object you've wrapped with Node's `ObjectWrap`, you should use `NanObjectWrapHandle`: + +```c++ +NanObjectWrapHandle(iterator)->Get(String::NewSymbol("end")) +``` + + +### NanMakeWeak(Persistent<T>, parameter, callback) + +Make a persistent reference weak. + + +### String NanSymbol(char *) + +This isn't strictly about compatibility, it's just an easier way to create string symbol objects (i.e. `String::NewSymbol(x)`), for getting and setting object properties, or names of objects. + +```c++ +bool foo = false; +if (obj->Has(NanSymbol("foo"))) + foo = optionsObj->Get(NanSymbol("foo"))->BooleanValue() +``` + + +### Type NanGetPointerSafe(Type *[, Type]) + +A helper for getting values from optional pointers. If the pointer is `NULL`, the function returns the optional default value, which defaults to `0`. Otherwise, the function returns the value the pointer points to. + +```c++ +char *plugh(uint32_t *optional) { + char res[] = "xyzzy"; + uint32_t param = NanGetPointerSafe(optional, 0x1337); + switch (param) { + ... + } + NanSetPointerSafe(optional, 0xDEADBEEF); +} +``` + + +### bool NanSetPointerSafe(Type *, Type) + +A helper for setting optional argument pointers. If the pointer is `NULL`, the function simply return `false`. Otherwise, the value is assigned to the variable the pointer points to. + +```c++ +const char *plugh(size_t *outputsize) { + char res[] = "xyzzy"; + if !(NanSetPointerSafe(outputsize, strlen(res) + 1)) { + ... + } + + ... +} +``` + + +### char* NanFromV8String(Handle<Value>[, enum Nan::Encoding, size_t *, char *, size_t, int]) + +When you want to convert a V8 `String` to a `char*` use `NanFromV8String`. It is possible to define an encoding that defaults to `Nan::UTF8` as well as a pointer to a variable that will be assigned the number of bytes in the returned string. It is also possible to supply a buffer and its length to the function in order not to have a new buffer allocated. The final argument allows optionally setting `String::WriteOptions`, which default to `String::HINT_MANY_WRITES_EXPECTED | String::NO_NULL_TERMINATION`. +Just remember that you'll end up with an object that you'll need to `delete[]` at some point unless you supply your own buffer: + +```c++ +size_t count; +char* name = NanFromV8String(args[0]); +char* decoded = NanFromV8String(args[1], Nan::BASE64, &count, NULL, 0, String::HINT_MANY_WRITES_EXPECTED); +char param_copy[count]; +memcpy(param_copy, decoded, count); +delete[] decoded; +``` + + +### bool NanBooleanOptionValue(Handle<Value>, Handle<String>[, bool]) + +When you have an "options" object that you need to fetch properties from, boolean options can be fetched with this pair. They check first if the object exists (`IsEmpty`), then if the object has the given property (`Has`) then they get and convert/coerce the property to a `bool`. + +The optional last parameter is the *default* value, which is `false` if left off: + +```c++ +// `foo` is false unless the user supplies a truthy value for it +bool foo = NanBooleanOptionValue(optionsObj, NanSymbol("foo")); +// `bar` is true unless the user supplies a falsy value for it +bool bar = NanBooleanOptionValueDefTrue(optionsObj, NanSymbol("bar"), true); +``` + + +### uint32_t NanUInt32OptionValue(Handle<Value>, Handle<String>, uint32_t) + +Similar to `NanBooleanOptionValue`, use `NanUInt32OptionValue` to fetch an integer option from your options object. Can be any kind of JavaScript `Number` and it will be coerced to an unsigned 32-bit integer. + +Requires all 3 arguments as a default is not optional: + +```c++ +uint32_t count = NanUInt32OptionValue(optionsObj, NanSymbol("count"), 1024); +``` + + +### NanError(message), NanTypeError(message), NanRangeError(message) + +For making `Error`, `TypeError` and `RangeError` objects. + +```c++ +Local res = NanError("you must supply a callback argument"); +``` + + +### NanThrowError(message), NanThrowTypeError(message), NanThrowRangeError(message), NanThrowError(Local<Value>), NanThrowError(Local<Value>, int) + +For throwing `Error`, `TypeError` and `RangeError` objects. You should `return` this call: + +```c++ +return NanThrowError("you must supply a callback argument"); +``` + +Can also handle any custom object you may want to throw. If used with the error code argument, it will add the supplied error code to the error object as a property called `code`. + + +### Local<Object> NanNewBufferHandle(char *, uint32_t), Local<Object> NanNewBufferHandle(uint32_t) + +The `Buffer` API has changed a little in Node 0.11, this helper provides consistent access to `Buffer` creation: + +```c++ +NanNewBufferHandle((char*)value.data(), value.size()); +``` + +Can also be used to initialize a `Buffer` with just a `size` argument. + +Can also be supplied with a `NAN_WEAK_CALLBACK` and a hint for the garbage collector, when dealing with weak references. + + +### Local<Object> NanBufferUse(char*, uint32_t) + +`Buffer::New(char*, uint32_t)` prior to 0.11 would make a copy of the data. +While it was possible to get around this, it required a shim by passing a +callback. So the new API `Buffer::Use(char*, uint32_t)` was introduced to remove +needing to use this shim. + +`NanBufferUse` uses the `char*` passed as the backing data, and will free the +memory automatically when the weak callback is called. Keep this in mind, as +careless use can lead to "double free or corruption" and other cryptic failures. + + +### bool NanHasInstance(Persistent<FunctionTemplate>&, Handle<Value>) + +Can be used to check the type of an object to determine it is of a particular class you have already defined and have a `Persistent` handle for. + + +### Local<Type> NanPersistentToLocal(Persistent<Type>&) + +Aside from `FunctionCallbackInfo`, the biggest and most painful change to V8 in Node 0.11 is the many restrictions now placed on `Persistent` handles. They are difficult to assign and difficult to fetch the original value out of. + +Use `NanPersistentToLocal` to convert a `Persistent` handle back to a `Local` handle. + +```c++ +Local handle = NanPersistentToLocal(persistentHandle); +``` + + +### Local<Context> NanNewContextHandle([ExtensionConfiguration*, Handle<ObjectTemplate>, Handle<Value>]) +Creates a new `Local` handle. + +```c++ +Local ftmpl = FunctionTemplate::New(); +Local otmpl = ftmpl->InstanceTemplate(); +Local ctx = NanNewContextHandle(NULL, otmpl); +``` + + +### void NanDispose(Persistent<T> &) + +Use `NanDispose` to dispose a `Persistent` handle. + +```c++ +NanDispose(persistentHandle); +``` + + +### NanAssignPersistent(type, handle, object) + +Use `NanAssignPersistent` to assign a non-`Persistent` handle to a `Persistent` one. You can no longer just declare a `Persistent` handle and assign directly to it later, you have to `Reset` it in Node 0.11, so this makes it easier. + +In general it is now better to place anything you want to protect from V8's garbage collector as properties of a generic `Object` and then assign that to a `Persistent`. This works in older versions of Node also if you use `NanAssignPersistent`: + +```c++ +Persistent persistentHandle; + +... + +Local obj = Object::New(); +obj->Set(NanSymbol("key"), keyHandle); // where keyHandle might be a Local +NanAssignPersistent(Object, persistentHandle, obj) +``` + + +### NanInitPersistent(type, name, object) + +User `NanInitPersistent` to declare and initialize a new `Persistent` with the supplied object. The assignment operator for `Persistent` is no longer public in Node 0.11, so this macro makes it easier to declare and initializing a new `Persistent`. See NanAssignPersistent for more information. + +```c++ +Local obj = Object::New(); +obj->Set(NanSymbol("key"), keyHandle); // where keyHandle might be a Local +NanInitPersistent(Object, persistentHandle, obj); +``` + + +### NanCallback + +Because of the difficulties imposed by the changes to `Persistent` handles in V8 in Node 0.11, creating `Persistent` versions of your `Local` handles is annoyingly tricky. `NanCallback` makes it easier by taking your `Local` handle, making it persistent until the `NanCallback` is deleted and even providing a handy `Call()` method to fetch and execute the callback `Function`. + +```c++ +Local callbackHandle = callback = args[0].As(); +NanCallback *callback = new NanCallback(callbackHandle); +// pass `callback` around and it's safe from GC until you: +delete callback; +``` + +You can execute the callback like so: + +```c++ +// no arguments: +callback->Call(0, NULL); + +// an error argument: +Local argv[] = { + Exception::Error(String::New("fail!")) +}; +callback->Call(1, argv); + +// a success argument: +Local argv[] = { + Local::New(Null()), + String::New("w00t!") +}; +callback->Call(2, argv); +``` + +`NanCallback` also has a `Local GetCallback()` method that you can use to fetch a local handle to the underlying callback function if you need it. + + +### NanAsyncWorker + +`NanAsyncWorker` is an abstract class that you can subclass to have much of the annoying async queuing and handling taken care of for you. It can even store arbitrary V8 objects for you and have them persist while the async work is in progress. + +See a rough outline of the implementation: + +```c++ +class NanAsyncWorker { +public: + NanAsyncWorker (NanCallback *callback); + + // Clean up persistent handles and delete the *callback + virtual ~NanAsyncWorker (); + + // Check the `char *errmsg` property and call HandleOKCallback() + // or HandleErrorCallback depending on whether it has been set or not + virtual void WorkComplete (); + + // You must implement this to do some async work. If there is an + // error then allocate `errmsg` to to a message and the callback will + // be passed that string in an Error object + virtual void Execute (); + +protected: + // Set this if there is an error, otherwise it's NULL + const char *errmsg; + + // Save a V8 object in a Persistent handle to protect it from GC + void SavePersistent(const char *key, Local &obj); + + // Fetch a stored V8 object (don't call from within `Execute()`) + Local GetFromPersistent(const char *key); + + // Default implementation calls the callback function with no arguments. + // Override this to return meaningful data + virtual void HandleOKCallback (); + + // Default implementation calls the callback function with an Error object + // wrapping the `errmsg` string + virtual void HandleErrorCallback (); +}; +``` + + +### NanAsyncQueueWorker(NanAsyncWorker *) + +`NanAsyncQueueWorker` will run a `NanAsyncWorker` asynchronously via libuv. Both the *execute* and *after_work* steps are taken care of for you—most of the logic for this is embedded in `NanAsyncWorker`. + +### Contributors + +NAN is only possible due to the excellent work of the following contributors: + + + + + +
Rod VaggGitHub/rvaggTwitter/@rvagg
Benjamin ByholmGitHub/kkoopa
Trevor NorrisGitHub/trevnorrisTwitter/@trevnorris
+ +Licence & copyright +----------------------- + +Copyright (c) 2013 NAN contributors (listed above). + +Native Abstractions for Node.js is licensed under an MIT +no-false-attribs license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details. diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/nan.h b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/nan.h new file mode 100644 index 0000000..263ff2a --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/nan.h @@ -0,0 +1,978 @@ +/********************************************************************************** + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2013 NAN contributors: + * - Rod Vagg + * - Benjamin Byholm + * - Trevor Norris + * + * MIT +no-false-attribs License + * + * Version 0.4.2 (current Node unstable: 0.11.8, Node stable: 0.10.21) + * + * ChangeLog: + * * 0.4.4 Nov 2 2013 + * - Isolate argument from v8::Persistent::MakeWeak removed for 0.11.8+ + * + * * 0.4.3 Nov 2 2013 + * - Include node_object_wrap.h, removed from node.h for Node 0.11.8. + * + * * 0.4.2 Nov 2 2013 + * - Handle deprecation of v8::Persistent::Dispose(v8::Isolate* isolate)) for + * Node 0.11.8 release. + * + * * 0.4.1 Sep 16 2013 + * - Added explicit `#include ` as it was removed from node.h for v0.11.8 + * + * * 0.4.0 Sep 2 2013 + * - Added NAN_INLINE and NAN_DEPRECATED and made use of them + * - Added NanError, NanTypeError and NanRangeError + * - Cleaned up code + * + * * 0.3.2 Aug 30 2013 + * - Fix missing scope declaration in GetFromPersistent() and SaveToPersistent + * in NanAsyncWorker + * + * * 0.3.1 Aug 20 2013 + * - fix "not all control paths return a value" compile warning on some platforms + * + * * 0.3.0 Aug 19 2013 + * - Made NAN work with NPM + * - Lots of fixes to NanFromV8String, pulling in features from new Node core + * - Changed node::encoding to Nan::Encoding in NanFromV8String to unify the API + * - Added optional error number argument for NanThrowError() + * - Added NanInitPersistent() + * - Added NanReturnNull() and NanReturnEmptyString() + * - Added NanLocker and NanUnlocker + * - Added missing scopes + * - Made sure to clear disposed Persistent handles + * - Changed NanAsyncWorker to allocate error messages on the heap + * - Changed NanThrowError(Local) to NanThrowError(Handle) + * - Fixed leak in NanAsyncWorker when errmsg is used + * + * * 0.2.2 Aug 5 2013 + * - Fixed usage of undefined variable with node::BASE64 in NanFromV8String() + * + * * 0.2.1 Aug 5 2013 + * - Fixed 0.8 breakage, node::BUFFER encoding type not available in 0.8 for + * NanFromV8String() + * + * * 0.2.0 Aug 5 2013 + * - Added NAN_PROPERTY_GETTER, NAN_PROPERTY_SETTER, NAN_PROPERTY_ENUMERATOR, + * NAN_PROPERTY_DELETER, NAN_PROPERTY_QUERY + * - Extracted _NAN_METHOD_ARGS, _NAN_GETTER_ARGS, _NAN_SETTER_ARGS, + * _NAN_PROPERTY_GETTER_ARGS, _NAN_PROPERTY_SETTER_ARGS, + * _NAN_PROPERTY_ENUMERATOR_ARGS, _NAN_PROPERTY_DELETER_ARGS, + * _NAN_PROPERTY_QUERY_ARGS + * - Added NanGetInternalFieldPointer, NanSetInternalFieldPointer + * - Added NAN_WEAK_CALLBACK, NAN_WEAK_CALLBACK_OBJECT, + * NAN_WEAK_CALLBACK_DATA, NanMakeWeak + * - Renamed THROW_ERROR to _NAN_THROW_ERROR + * - Added NanNewBufferHandle(char*, size_t, node::smalloc::FreeCallback, void*) + * - Added NanBufferUse(char*, uint32_t) + * - Added NanNewContextHandle(v8::ExtensionConfiguration*, + * v8::Handle, v8::Handle) + * - Fixed broken NanCallback#GetFunction() + * - Added optional encoding and size arguments to NanFromV8String() + * - Added NanGetPointerSafe() and NanSetPointerSafe() + * - Added initial test suite (to be expanded) + * - Allow NanUInt32OptionValue to convert any Number object + * + * * 0.1.0 Jul 21 2013 + * - Added `NAN_GETTER`, `NAN_SETTER` + * - Added `NanThrowError` with single Local argument + * - Added `NanNewBufferHandle` with single uint32_t argument + * - Added `NanHasInstance(Persistent&, Handle)` + * - Added `Local NanCallback#GetFunction()` + * - Added `NanCallback#Call(int, Local[])` + * - Deprecated `NanCallback#Run(int, Local[])` in favour of Call + * + * See https://github.com/rvagg/nan for the latest update to this file + **********************************************************************************/ + +#ifndef NAN_H +#define NAN_H + +#include +#include +#include +#include +#include +#include + +#if defined(__GNUC__) && !defined(DEBUG) +#define NAN_INLINE(declarator) inline __attribute__((always_inline)) declarator +#elif defined(_MSC_VER) && !defined(DEBUG) +#define NAN_INLINE(declarator) __forceinline declarator +#else +#define NAN_INLINE(declarator) inline declarator +#endif + +#if defined(__GNUC__) && !V8_DISABLE_DEPRECATIONS +#define NAN_DEPRECATED(declarator) declarator __attribute__ ((deprecated)) +#elif defined(_MSC_VER) && !V8_DISABLE_DEPRECATIONS +#define NAN_DEPRECATED(declarator) __declspec(deprecated) declarator +#else +#define NAN_DEPRECATED(declarator) declarator +#endif + + +// some generic helpers + +template static NAN_INLINE(bool NanSetPointerSafe(T *var, T val)) { + if (var) { + *var = val; + return true; + } else { + return false; + } +} + +template static NAN_INLINE(T NanGetPointerSafe( + T *var, + T fallback = reinterpret_cast(0))) { + if (var) { + return *var; + } else { + return fallback; + } +} + +#define NanSymbol(value) v8::String::NewSymbol(value) + +static NAN_INLINE(bool NanBooleanOptionValue( + v8::Local optionsObj + , v8::Handle opt, bool def)) { + + if (def) { + return optionsObj.IsEmpty() + || !optionsObj->Has(opt) + || optionsObj->Get(opt)->BooleanValue(); + } else { + return !optionsObj.IsEmpty() + && optionsObj->Has(opt) + && optionsObj->Get(opt)->BooleanValue(); + } +} + +static NAN_INLINE(bool NanBooleanOptionValue( + v8::Local optionsObj + , v8::Handle opt)) { + return NanBooleanOptionValue(optionsObj, opt, false); +} + +static NAN_INLINE(uint32_t NanUInt32OptionValue( + v8::Local optionsObj + , v8::Handle opt + , uint32_t def)) { + + return !optionsObj.IsEmpty() + && optionsObj->Has(opt) + && optionsObj->Get(opt)->IsNumber() + ? optionsObj->Get(opt)->Uint32Value() + : def; +} + +#if (NODE_MODULE_VERSION > 0x000B) +// Node 0.11+ (0.11.3 and below won't compile with these) + +static v8::Isolate* nan_isolate = v8::Isolate::GetCurrent(); + +# define _NAN_METHOD_ARGS const v8::FunctionCallbackInfo& args +# define NAN_METHOD(name) void name(_NAN_METHOD_ARGS) +# define _NAN_GETTER_ARGS const v8::PropertyCallbackInfo& args +# define NAN_GETTER(name) \ + void name(v8::Local property, _NAN_GETTER_ARGS) +# define _NAN_SETTER_ARGS const v8::PropertyCallbackInfo& args +# define NAN_SETTER(name) \ + void name( \ + v8::Local property \ + , v8::Local value \ + , _NAN_SETTER_ARGS) +# define _NAN_PROPERTY_GETTER_ARGS \ + const v8::PropertyCallbackInfo& args +# define NAN_PROPERTY_GETTER(name) \ + void name(v8::Local property \ + , _NAN_PROPERTY_GETTER_ARGS) +# define _NAN_PROPERTY_SETTER_ARGS \ + const v8::PropertyCallbackInfo& args +# define NAN_PROPERTY_SETTER(name) \ + void name(v8::Local property \ + , v8::Local value \ + , _NAN_PROPERTY_SETTER_ARGS) +# define _NAN_PROPERTY_ENUMERATOR_ARGS \ + const v8::PropertyCallbackInfo& args +# define NAN_PROPERTY_ENUMERATOR(name) \ + void name(_NAN_PROPERTY_ENUMERATOR_ARGS) +# define _NAN_PROPERTY_DELETER_ARGS \ + const v8::PropertyCallbackInfo& args +# define NAN_PROPERTY_DELETER(name) \ + void name( \ + v8::Local property \ + , _NAN_PROPERTY_DELETER_ARGS) +# define _NAN_PROPERTY_QUERY_ARGS \ + const v8::PropertyCallbackInfo& args +# define NAN_PROPERTY_QUERY(name) \ + void name(v8::Local property, _NAN_PROPERTY_QUERY_ARGS) +# define NanGetInternalFieldPointer(object, index) \ + object->GetAlignedPointerFromInternalField(index) +# define NanSetInternalFieldPointer(object, index, value) \ + object->SetAlignedPointerInInternalField(index, value) + +# define NAN_WEAK_CALLBACK(type, name) \ + void name( \ + v8::Isolate* isolate, \ + v8::Persistent* object, \ + type data) +# define NAN_WEAK_CALLBACK_OBJECT (*object) +# define NAN_WEAK_CALLBACK_DATA(type) ((type) data) + +# define NanScope() v8::HandleScope scope(nan_isolate) +# define NanLocker() v8::Locker locker(nan_isolate) +# define NanUnlocker() v8::Unlocker unlocker(nan_isolate) +# define NanReturnValue(value) return args.GetReturnValue().Set(value) +# define NanReturnUndefined() return +# define NanReturnNull() return args.GetReturnValue().SetNull() +# define NanReturnEmptyString() return args.GetReturnValue().SetEmptyString() +# define NanAssignPersistent(type, handle, obj) handle.Reset(nan_isolate, obj) +# define NanInitPersistent(type, name, obj) \ + v8::Persistent name(nan_isolate, obj) +# define NanObjectWrapHandle(obj) obj->handle() + +//TODO: remove <0.11.8 support when 0.12 is released +#if NODE_VERSION_AT_LEAST(0, 11, 8) +# define NanMakeWeak(handle, parameter, callback) \ + handle.MakeWeak(parameter, callback) +#else +# define NanMakeWeak(handle, parameter, callback) \ + handle.MakeWeak(nan_isolate, parameter, callback) +#endif + +# define _NAN_ERROR(fun, errmsg) \ + fun(v8::String::New(errmsg)) + +# define _NAN_THROW_ERROR(fun, errmsg) \ + do { \ + NanScope(); \ + v8::ThrowException(_NAN_ERROR(fun, errmsg)); \ + } while (0); + + static NAN_INLINE(v8::Handle NanError(const char* errmsg)) { + return _NAN_ERROR(v8::Exception::Error, errmsg); + } + + static NAN_INLINE(void NanThrowError(const char* errmsg)) { + _NAN_THROW_ERROR(v8::Exception::Error, errmsg); + } + + static NAN_INLINE(void NanThrowError(v8::Handle error)) { + NanScope(); + v8::ThrowException(error); + } + + static NAN_INLINE(v8::Handle NanError( + const char *msg, + const int errorNumber)) { + v8::Local err = v8::Exception::Error(v8::String::New(msg)); + v8::Local obj = err.As(); + obj->Set(v8::String::New("code"), v8::Int32::New(errorNumber)); + return err; + } + + static NAN_INLINE(void NanThrowError( + const char *msg, + const int errorNumber)) { + NanThrowError(NanError(msg, errorNumber)); + } + + static NAN_INLINE(v8::Handle NanTypeError(const char* errmsg)) { + return _NAN_ERROR(v8::Exception::TypeError, errmsg); + } + + static NAN_INLINE(void NanThrowTypeError(const char* errmsg)) { + _NAN_THROW_ERROR(v8::Exception::TypeError, errmsg); + } + + static NAN_INLINE(v8::Handle NanRangeError(const char* errmsg)) { + return _NAN_ERROR(v8::Exception::RangeError, errmsg); + } + + static NAN_INLINE(void NanThrowRangeError(const char* errmsg)) { + _NAN_THROW_ERROR(v8::Exception::RangeError, errmsg); + } + + template static NAN_INLINE(void NanDispose(v8::Persistent &handle)) { +//TODO: remove <0.11.8 support when 0.12 is released +#if NODE_VERSION_AT_LEAST(0, 11, 8) + handle.Reset(); +#else + handle.Dispose(nan_isolate); +#endif + handle.Clear(); + } + + static NAN_INLINE(v8::Local NanNewBufferHandle ( + char *data, + size_t length, + node::smalloc::FreeCallback callback, + void *hint)) { + return node::Buffer::New(data, length, callback, hint); + } + + static NAN_INLINE(v8::Local NanNewBufferHandle ( + char *data, uint32_t size)) { + return node::Buffer::New(data, size); + } + + static NAN_INLINE(v8::Local NanNewBufferHandle (uint32_t size)) { + return node::Buffer::New(size); + } + + static NAN_INLINE(v8::Local NanBufferUse(char* data, uint32_t size)) { + return node::Buffer::Use(data, size); + } + + template + static NAN_INLINE(v8::Local NanPersistentToLocal( + const v8::Persistent& persistent)) { + if (persistent.IsWeak()) { + return v8::Local::New(nan_isolate, persistent); + } else { + return *reinterpret_cast*>( + const_cast*>(&persistent)); + } + } + + static NAN_INLINE(bool NanHasInstance( + v8::Persistent& function_template + , v8::Handle value)) { + return NanPersistentToLocal(function_template)->HasInstance(value); + } + + static NAN_INLINE(v8::Local NanNewContextHandle( + v8::ExtensionConfiguration* extensions = NULL, + v8::Handle tmpl = v8::Handle(), + v8::Handle obj = v8::Handle())) { + return v8::Local::New(nan_isolate, v8::Context::New( + nan_isolate, extensions, tmpl, obj)); + } + +#else +// Node 0.8 and 0.10 + +# define _NAN_METHOD_ARGS const v8::Arguments& args +# define NAN_METHOD(name) v8::Handle name(_NAN_METHOD_ARGS) +# define _NAN_GETTER_ARGS const v8::AccessorInfo &args +# define NAN_GETTER(name) \ + v8::Handle name(v8::Local property, _NAN_GETTER_ARGS) +# define _NAN_SETTER_ARGS const v8::AccessorInfo &args +# define NAN_SETTER(name) \ + void name( \ + v8::Local property \ + , v8::Local value \ + , _NAN_SETTER_ARGS) +# define _NAN_PROPERTY_GETTER_ARGS const v8::AccessorInfo& args +# define NAN_PROPERTY_GETTER(name) \ + v8::Handle name(v8::Local property \ + , _NAN_PROPERTY_GETTER_ARGS) +# define _NAN_PROPERTY_SETTER_ARGS const v8::AccessorInfo& args +# define NAN_PROPERTY_SETTER(name) \ + v8::Handle name(v8::Local property \ + , v8::Local value \ + , _NAN_PROPERTY_SETTER_ARGS) +# define _NAN_PROPERTY_ENUMERATOR_ARGS const v8::AccessorInfo& args +# define NAN_PROPERTY_ENUMERATOR(name) \ + v8::Handle name(_NAN_PROPERTY_ENUMERATOR_ARGS) +# define _NAN_PROPERTY_DELETER_ARGS const v8::AccessorInfo& args +# define NAN_PROPERTY_DELETER(name) \ + v8::Handle name( \ + v8::Local property \ + , _NAN_PROPERTY_DELETER_ARGS) +# define _NAN_PROPERTY_QUERY_ARGS const v8::AccessorInfo& args +# define NAN_PROPERTY_QUERY(name) \ + v8::Handle name( \ + v8::Local property \ + , _NAN_PROPERTY_QUERY_ARGS) + +# define NanGetInternalFieldPointer(object, index) \ + object->GetPointerFromInternalField(index) +# define NanSetInternalFieldPointer(object, index, value) \ + object->SetPointerInInternalField(index, value) +# define NAN_WEAK_CALLBACK(type, name) void name( \ + v8::Persistent object, \ + void *data) +# define NAN_WEAK_CALLBACK_OBJECT object +# define NAN_WEAK_CALLBACK_DATA(type) ((type) data) + +# define NanScope() v8::HandleScope scope +# define NanLocker() v8::Locker locker +# define NanUnlocker() v8::Unlocker unlocker +# define NanReturnValue(value) return scope.Close(value) +# define NanReturnUndefined() return v8::Undefined() +# define NanReturnNull() return v8::Null() +# define NanReturnEmptyString() return v8::String::Empty() +# define NanInitPersistent(type, name, obj) \ + v8::Persistent name = v8::Persistent::New(obj) +# define NanAssignPersistent(type, handle, obj) \ + handle = v8::Persistent::New(obj) +# define NanObjectWrapHandle(obj) obj->handle_ +# define NanMakeWeak(handle, parameters, callback) \ + handle.MakeWeak(parameters, callback) + +# define _NAN_ERROR(fun, errmsg) \ + fun(v8::String::New(errmsg)) + +# define _NAN_THROW_ERROR(fun, errmsg) \ + do { \ + NanScope(); \ + return v8::ThrowException(_NAN_ERROR(fun, errmsg)); \ + } while (0); + + static NAN_INLINE(v8::Handle NanError(const char* errmsg)) { + return _NAN_ERROR(v8::Exception::Error, errmsg); + } + + static NAN_INLINE(v8::Handle NanThrowError(const char* errmsg)) { + _NAN_THROW_ERROR(v8::Exception::Error, errmsg); + } + + static NAN_INLINE(v8::Handle NanThrowError( + v8::Handle error)) { + NanScope(); + return v8::ThrowException(error); + } + + static NAN_INLINE(v8::Handle NanError( + const char *msg, + const int errorNumber)) { + v8::Local err = v8::Exception::Error(v8::String::New(msg)); + v8::Local obj = err.As(); + obj->Set(v8::String::New("code"), v8::Int32::New(errorNumber)); + return err; + } + + static NAN_INLINE(v8::Handle NanThrowError( + const char *msg, + const int errorNumber)) { + return NanThrowError(NanError(msg, errorNumber)); + } + + static NAN_INLINE(v8::Handle NanTypeError(const char* errmsg)) { + return _NAN_ERROR(v8::Exception::TypeError, errmsg); + } + + static NAN_INLINE(v8::Handle NanThrowTypeError(const char* errmsg)) { + _NAN_THROW_ERROR(v8::Exception::TypeError, errmsg); + } + + static NAN_INLINE(v8::Handle NanRangeError(const char* errmsg)) { + return _NAN_ERROR(v8::Exception::RangeError, errmsg); + } + + static NAN_INLINE(v8::Handle NanThrowRangeError(const char* errmsg)) { + _NAN_THROW_ERROR(v8::Exception::RangeError, errmsg); + } + + template static NAN_INLINE(void NanDispose(v8::Persistent &handle)) { + handle.Dispose(); + handle.Clear(); + } + + static NAN_INLINE(v8::Local NanNewBufferHandle ( + char *data, + size_t length, + node::Buffer::free_callback callback, + void *hint)) { + return v8::Local::New( + node::Buffer::New(data, length, callback, hint)->handle_); + } + + static NAN_INLINE(v8::Local NanNewBufferHandle ( + char *data, uint32_t size)) { + return v8::Local::New(node::Buffer::New(data, size)->handle_); + } + + static NAN_INLINE(v8::Local NanNewBufferHandle (uint32_t size)) { + return v8::Local::New(node::Buffer::New(size)->handle_); + } + + static NAN_INLINE(void FreeData(char *data, void *hint)) { + delete[] data; + } + + static NAN_INLINE(v8::Local NanBufferUse(char* data, uint32_t size)) { + return v8::Local::New( + node::Buffer::New(data, size, FreeData, NULL)->handle_); + } + + template + static NAN_INLINE(v8::Local NanPersistentToLocal( + const v8::Persistent& persistent)) { + if (persistent.IsWeak()) { + return v8::Local::New(persistent); + } else { + return *reinterpret_cast*>( + const_cast*>(&persistent)); + } + } + + static NAN_INLINE(bool NanHasInstance( + v8::Persistent& function_template + , v8::Handle value)) { + return function_template->HasInstance(value); + } + + static NAN_INLINE(v8::Local NanNewContextHandle( + v8::ExtensionConfiguration* extensions = NULL + , v8::Handle tmpl = + v8::Handle() + , v8::Handle obj = v8::Handle() + )) { + v8::Persistent ctx = + v8::Context::New(extensions, tmpl, obj); + v8::Local lctx = v8::Local::New(ctx); + ctx.Dispose(); + return lctx; + } + +#endif // node version + +class NanCallback { + public: + NanCallback(const v8::Local &fn) { + NanScope(); + v8::Local obj = v8::Object::New(); + obj->Set(NanSymbol("callback"), fn); + NanAssignPersistent(v8::Object, handle, obj); + } + + ~NanCallback() { + if (handle.IsEmpty()) return; + handle.Dispose(); + handle.Clear(); + } + + NAN_INLINE(v8::Local GetFunction ()) { + return NanPersistentToLocal(handle)->Get(NanSymbol("callback")) + .As(); + } + + // deprecated + NAN_DEPRECATED(void Run(int argc, v8::Local argv[])) { + Call(argc, argv); + } + + void Call(int argc, v8::Local argv[]) { + NanScope(); + + v8::Local callback = NanPersistentToLocal(handle)-> + Get(NanSymbol("callback")).As(); + v8::TryCatch try_catch; + callback->Call(v8::Context::GetCurrent()->Global(), argc, argv); + if (try_catch.HasCaught()) { + node::FatalException(try_catch); + } + } + + private: + v8::Persistent handle; +}; + +/* abstract */ class NanAsyncWorker { +public: + NanAsyncWorker (NanCallback *callback) : callback(callback) { + request.data = this; + errmsg = NULL; + } + + virtual ~NanAsyncWorker () { + NanScope(); + + if (!persistentHandle.IsEmpty()) + NanDispose(persistentHandle); + if (callback) + delete callback; + if (errmsg) + delete errmsg; + } + + virtual void WorkComplete () { + NanScope(); + + if (errmsg == NULL) + HandleOKCallback(); + else + HandleErrorCallback(); + delete callback; + callback = NULL; + } + + virtual void Execute () =0; + + uv_work_t request; + +protected: + v8::Persistent persistentHandle; + NanCallback *callback; + const char *errmsg; + + void SavePersistent(const char *key, v8::Local &obj) { + NanScope(); + + v8::Local handle = NanPersistentToLocal(persistentHandle); + handle->Set(NanSymbol(key), obj); + } + + v8::Local GetFromPersistent(const char *key) { + NanScope(); + + v8::Local handle = NanPersistentToLocal(persistentHandle); + return handle->Get(NanSymbol(key)).As(); + } + + virtual void HandleOKCallback () { + NanScope(); + + callback->Call(0, NULL); + }; + + virtual void HandleErrorCallback () { + NanScope(); + + v8::Local argv[] = { + v8::Exception::Error(v8::String::New(errmsg)) + }; + callback->Call(1, argv); + } +}; + +NAN_INLINE(void NanAsyncExecute (uv_work_t* req)) { + NanAsyncWorker *worker = static_cast(req->data); + worker->Execute(); +} + +NAN_INLINE(void NanAsyncExecuteComplete (uv_work_t* req)) { + NanAsyncWorker* worker = static_cast(req->data); + worker->WorkComplete(); + delete worker; +} + +NAN_INLINE(void NanAsyncQueueWorker (NanAsyncWorker* worker)) { + uv_queue_work( + uv_default_loop() + , &worker->request + , NanAsyncExecute + , (uv_after_work_cb)NanAsyncExecuteComplete + ); +} + +//// Base 64 //// + +#define _nan_base64_encoded_size(size) ((size + 2 - ((size + 2) % 3)) / 3 * 4) + + +// Doesn't check for padding at the end. Can be 1-2 bytes over. +static NAN_INLINE(size_t _nan_base64_decoded_size_fast(size_t size)) { + size_t remainder = size % 4; + + size = (size / 4) * 3; + if (remainder) { + if (size == 0 && remainder == 1) { + // special case: 1-byte input cannot be decoded + size = 0; + } else { + // non-padded input, add 1 or 2 extra bytes + size += 1 + (remainder == 3); + } + } + + return size; +} + +template +static NAN_INLINE(size_t _nan_base64_decoded_size(const TypeName* src, size_t size)) { + if (size == 0) + return 0; + + if (src[size - 1] == '=') + size--; + if (size > 0 && src[size - 1] == '=') + size--; + + return _nan_base64_decoded_size_fast(size); +} + + +// supports regular and URL-safe base64 +static const int _nan_unbase64_table[] = + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -2, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63, + -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }; + +#define _nan_unbase64(x) _nan_unbase64_table[(uint8_t)(x)] + + +template +static size_t _nan_base64_decode(char* buf, + size_t len, + const TypeName* src, + const size_t srcLen) { + char* dst = buf; + char* dstEnd = buf + len; + const TypeName* srcEnd = src + srcLen; + + while (src < srcEnd && dst < dstEnd) { + int remaining = srcEnd - src; + char a, b, c, d; + + while (_nan_unbase64(*src) < 0 && src < srcEnd) src++, remaining--; + if (remaining == 0 || *src == '=') break; + a = _nan_unbase64(*src++); + + while (_nan_unbase64(*src) < 0 && src < srcEnd) src++, remaining--; + if (remaining <= 1 || *src == '=') break; + b = _nan_unbase64(*src++); + + *dst++ = (a << 2) | ((b & 0x30) >> 4); + if (dst == dstEnd) break; + + while (_nan_unbase64(*src) < 0 && src < srcEnd) src++, remaining--; + if (remaining <= 2 || *src == '=') break; + c = _nan_unbase64(*src++); + + *dst++ = ((b & 0x0F) << 4) | ((c & 0x3C) >> 2); + if (dst == dstEnd) break; + + while (_nan_unbase64(*src) < 0 && src < srcEnd) src++, remaining--; + if (remaining <= 3 || *src == '=') break; + d = _nan_unbase64(*src++); + + *dst++ = ((c & 0x03) << 6) | (d & 0x3F); + } + + return dst - buf; +} + +//// HEX //// + +template +unsigned _nan_hex2bin(TypeName c) { + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'A' && c <= 'F') return 10 + (c - 'A'); + if (c >= 'a' && c <= 'f') return 10 + (c - 'a'); + return static_cast(-1); +} + + +template +static size_t _nan_hex_decode(char* buf, + size_t len, + const TypeName* src, + const size_t srcLen) { + size_t i; + for (i = 0; i < len && i * 2 + 1 < srcLen; ++i) { + unsigned a = _nan_hex2bin(src[i * 2 + 0]); + unsigned b = _nan_hex2bin(src[i * 2 + 1]); + if (!~a || !~b) return i; + buf[i] = a * 16 + b; + } + + return i; +} + +static bool _NanGetExternalParts( + v8::Handle val + , const char** data + , size_t* len) { + + if (node::Buffer::HasInstance(val)) { + *data = node::Buffer::Data(val.As()); + *len = node::Buffer::Length(val.As()); + return true; + + } + + assert(val->IsString()); + v8::Local str = v8::Local::New(val.As()); + + if (str->IsExternalAscii()) { + const v8::String::ExternalAsciiStringResource* ext; + ext = str->GetExternalAsciiStringResource(); + *data = ext->data(); + *len = ext->length(); + return true; + + } else if (str->IsExternal()) { + const v8::String::ExternalStringResource* ext; + ext = str->GetExternalStringResource(); + *data = reinterpret_cast(ext->data()); + *len = ext->length(); + return true; + } + + return false; +} + +namespace Nan { + enum Encoding {ASCII, UTF8, BASE64, UCS2, BINARY, HEX, BUFFER}; +} + +static NAN_INLINE(char* NanFromV8String( + v8::Handle from + , enum Nan::Encoding encoding = Nan::UTF8 + , size_t *datalen = NULL + , char *buf = NULL + , size_t buflen = 0 + , int flags = v8::String::NO_NULL_TERMINATION + | v8::String::HINT_MANY_WRITES_EXPECTED)) { + + NanScope(); + + size_t sz_; + size_t term_len = !(flags & v8::String::NO_NULL_TERMINATION); + char *data = NULL; + size_t len; + bool is_extern = _NanGetExternalParts( + from + , const_cast(&data) + , &len); + + if (is_extern && !term_len) { + NanSetPointerSafe(datalen, len); + return data; + } + + v8::Local toStr = from->ToString(); + + char *to = buf; + + v8::String::AsciiValue value(toStr); + switch(encoding) { + case Nan::ASCII: +#if NODE_MODULE_VERSION < 0x0C + sz_ = toStr->Length(); + if (to == NULL) { + to = new char[sz_ + term_len]; + } else { + assert(buflen >= sz_ + term_len && "too small buffer"); + } + NanSetPointerSafe( + datalen + , toStr->WriteAscii(to, 0, sz_ + term_len, flags)); + return to; +#endif + case Nan::BINARY: + case Nan::BUFFER: + sz_ = toStr->Length(); + if (to == NULL) { + to = new char[sz_ + term_len]; + } else { + assert(buflen >= sz_ + term_len && "too small buffer"); + } +#if NODE_MODULE_VERSION < 0x0C + // TODO(isaacs): THIS IS AWFUL!!! + // AGREE(kkoopa) + { + uint16_t* twobytebuf = new uint16_t[sz_ + term_len]; + + size_t len = toStr->Write(twobytebuf, 0, sz_ + term_len, flags); + + for (size_t i = 0; i < sz_ + term_len && i < len + term_len; i++) { + unsigned char *b = reinterpret_cast(&twobytebuf[i]); + to[i] = *b; + } + + NanSetPointerSafe(datalen, len); + + delete[] twobytebuf; + return to; + } +#else + NanSetPointerSafe( + datalen, + toStr->WriteOneByte( + reinterpret_cast(to) + , 0 + , sz_ + term_len + , flags)); + return to; +#endif + case Nan::UTF8: + sz_ = toStr->Utf8Length(); + if (to == NULL) { + to = new char[sz_ + term_len]; + } else { + assert(buflen >= sz_ + term_len && "too small buffer"); + } + NanSetPointerSafe( + datalen + , toStr->WriteUtf8(to, sz_ + term_len, NULL, flags) - term_len); + return to; + case Nan::BASE64: + sz_ = _nan_base64_decoded_size(*value, toStr->Length()); + if (to == NULL) { + to = new char[sz_ + term_len]; + } else { + assert(buflen >= sz_ + term_len); + } + NanSetPointerSafe( + datalen + , _nan_base64_decode(to, sz_, *value, value.length())); + if (term_len) { + to[sz_] = '\0'; + } + return to; + case Nan::UCS2: + { + sz_ = toStr->Length(); + if (to == NULL) { + to = new char[(sz_ + term_len) * 2]; + } else { + assert(buflen >= (sz_ + term_len) * 2 && "too small buffer"); + } + + int bc = 2 * toStr->Write( + reinterpret_cast(to) + , 0 + , sz_ + term_len + , flags); + NanSetPointerSafe(datalen, bc); + return to; + } + case Nan::HEX: + sz_ = toStr->Length(); + assert(!(sz_ & 1) && "bad hex data"); + if (to == NULL) { + to = new char[sz_ / 2 + term_len]; + } else { + assert(buflen >= sz_ / 2 + term_len && "too small buffer"); + } + + NanSetPointerSafe( + datalen + , _nan_hex_decode(to, sz_ / 2, *value, value.length())); + if (term_len) { + to[sz_ / 2] = '\0'; + } + return to; + default: + assert(0 && "unknown encoding"); + } + return to; +} + +#endif diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/package.json b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/package.json new file mode 100644 index 0000000..60389b8 --- /dev/null +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/node_modules/nan/package.json @@ -0,0 +1,40 @@ +{ + "name": "nan", + "version": "0.4.4", + "description": "Native Abstractions for Node.js: C++ header for Node 0.8->0.12 compatibility", + "main": ".index.js", + "repository": { + "type": "git", + "url": "git://github.com/rvagg/nan.git" + }, + "contributors": [ + { + "name": "Rod Vagg", + "email": "r@va.gg", + "url": "https://github.com/rvagg" + }, + { + "name": "Benjamin Byholm", + "email": "bbyholm@abo.fi", + "url": "https://github.com/kkoopa/" + }, + { + "name": "Trevor Norris", + "email": "trev.norris@gmail.com", + "url": "https://github.com/trevnorris" + } + ], + "license": "MIT", + "readme": "Native Abstractions for Node.js\n===============================\n\n**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10 and 0.11, and eventually 0.12.**\n\n***Current version: 0.4.4*** *(See [nan.h](https://github.com/rvagg/nan/blob/master/nan.h) for complete ChangeLog)*\n\n[![NPM](https://nodei.co/npm/nan.png?downloads=true&stars=true)](https://nodei.co/npm/nan/) [![NPM](https://nodei.co/npm-dl/nan.png?months=6)](https://nodei.co/npm/nan/)\n\nThanks to the crazy changes in V8 (and some in Node core), keeping native addons compiling happily across versions, particularly 0.10 to 0.11/0.12, is a minor nightmare. The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect `NODE_MODULE_VERSION` and get yourself into a macro-tangle.\n\nThis project also contains some helper utilities that make addon development a bit more pleasant.\n\n * **[Usage](#usage)**\n * **[Example](#example)**\n * **[API](#api)**\n\n\n## Usage\n\nSimply add **NAN** as a dependency in the *package.json* of your Node addon:\n\n```js\n\"dependencies\": {\n ...\n \"nan\" : \"~0.4.4\"\n ...\n}\n```\n\nPull in the path to **NAN** in your *binding.gyp* so that you can use `#include \"nan.h\"` in your *.cpp*:\n\n```js\n\"include_dirs\" : [\n \"` when compiling your addon.\n\n\n## Example\n\nSee **[LevelDOWN](https://github.com/rvagg/node-leveldown/pull/48)** for a full example of **NAN** in use.\n\nFor a simpler example, see the **[async pi estimation example](https://github.com/rvagg/nan/tree/master/examples/async_pi_estimate)** in the examples directory for full code and an explanation of what this Monte Carlo Pi estimation example does. Below are just some parts of the full example that illustrate the use of **NAN**.\n\nCompare to the current 0.10 version of this example, found in the [node-addon-examples](https://github.com/rvagg/node-addon-examples/tree/master/9_async_work) repository and also a 0.11 version of the same found [here](https://github.com/kkoopa/node-addon-examples/tree/5c01f58fc993377a567812597e54a83af69686d7/9_async_work).\n\nNote that there is no embedded version sniffing going on here and also the async work is made much simpler, see below for details on the `NanAsyncWorker` class.\n\n```c++\n// addon.cc\n#include \n#include \"nan.h\"\n// ...\n\nusing namespace v8;\n\nvoid InitAll(Handle exports) {\n exports->Set(NanSymbol(\"calculateSync\"),\n FunctionTemplate::New(CalculateSync)->GetFunction());\n\n exports->Set(NanSymbol(\"calculateAsync\"),\n FunctionTemplate::New(CalculateAsync)->GetFunction());\n}\n\nNODE_MODULE(addon, InitAll)\n```\n\n```c++\n// sync.h\n#include \n#include \"nan.h\"\n\nNAN_METHOD(CalculateSync);\n```\n\n```c++\n// sync.cc\n#include \n#include \"nan.h\"\n#include \"sync.h\"\n// ...\n\nusing namespace v8;\n\n// Simple synchronous access to the `Estimate()` function\nNAN_METHOD(CalculateSync) {\n NanScope();\n\n // expect a number as the first argument\n int points = args[0]->Uint32Value();\n double est = Estimate(points);\n\n NanReturnValue(Number::New(est));\n}\n```\n\n```c++\n// async.cc\n#include \n#include \"nan.h\"\n#include \"async.h\"\n\n// ...\n\nusing namespace v8;\n\nclass PiWorker : public NanAsyncWorker {\n public:\n PiWorker(NanCallback *callback, int points)\n : NanAsyncWorker(callback), points(points) {}\n ~PiWorker() {}\n\n // Executed inside the worker-thread.\n // It is not safe to access V8, or V8 data structures\n // here, so everything we need for input and output\n // should go on `this`.\n void Execute () {\n estimate = Estimate(points);\n }\n\n // Executed when the async work is complete\n // this function will be run inside the main event loop\n // so it is safe to use V8 again\n void HandleOKCallback () {\n NanScope();\n\n Local argv[] = {\n Local::New(Null())\n , Number::New(estimate)\n };\n\n callback->Call(2, argv);\n };\n\n private:\n int points;\n double estimate;\n};\n\n// Asynchronous access to the `Estimate()` function\nNAN_METHOD(CalculateAsync) {\n NanScope();\n\n int points = args[0]->Uint32Value();\n NanCallback *callback = new NanCallback(args[1].As());\n\n NanAsyncQueueWorker(new PiWorker(callback, points));\n NanReturnUndefined();\n}\n```\n\n\n## API\n\n * NAN_METHOD\n * NAN_GETTER\n * NAN_SETTER\n * NAN_PROPERTY_GETTER\n * NAN_PROPERTY_SETTER\n * NAN_PROPERTY_ENUMERATOR\n * NAN_PROPERTY_DELETER\n * NAN_PROPERTY_QUERY\n * NAN_WEAK_CALLBACK\n * NAN_DEPRECATED\n * NAN_INLINE \n * NanReturnValue\n * NanReturnUndefined\n * NanReturnNull\n * NanReturnEmptyString\n * NanScope\n * NanLocker\n * NanUnlocker\n * NanGetInternalFieldPointer\n * NanSetInternalFieldPointer\n * NanObjectWrapHandle\n * NanMakeWeak\n * NanSymbol\n * NanGetPointerSafe\n * NanSetPointerSafe\n * NanFromV8String\n * NanBooleanOptionValue\n * NanUInt32OptionValue\n * NanError, NanTypeError, NanRangeError\n * NanThrowError, NanThrowTypeError, NanThrowRangeError, NanThrowError(Handle), NanThrowError(Handle, int)\n * NanNewBufferHandle(char *, size_t, FreeCallback, void *), NanNewBufferHandle(char *, uint32_t), NanNewBufferHandle(uint32_t)\n * NanBufferUse(char *, uint32_t)\n * NanNewContextHandle\n * NanHasInstance\n * NanPersistentToLocal\n * NanDispose\n * NanAssignPersistent\n * NanInitPersistent\n * NanCallback\n * NanAsyncWorker\n * NanAsyncQueueWorker\n\n\n### NAN_METHOD(methodname)\n\nUse `NAN_METHOD` to define your V8 accessible methods:\n\n```c++\n// .h:\nclass Foo : public node::ObjectWrap {\n ...\n\n static NAN_METHOD(Bar);\n static NAN_METHOD(Baz);\n}\n\n\n// .cc:\nNAN_METHOD(Foo::Bar) {\n ...\n}\n\nNAN_METHOD(Foo::Baz) {\n ...\n}\n```\n\nThe reason for this macro is because of the method signature change in 0.11:\n\n```c++\n// 0.10 and below:\nHandle name(const Arguments& args)\n\n// 0.11 and above\nvoid name(const FunctionCallbackInfo& args)\n```\n\nThe introduction of `FunctionCallbackInfo` brings additional complications:\n\n\n### NAN_GETTER(methodname)\n\nUse `NAN_GETTER` to declare your V8 accessible getters. You get a `Local` `property` and an appropriately typed `args` object that can act like the `args` argument to a `NAN_METHOD` call.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_GETTER`.\n\n\n### NAN_SETTER(methodname)\n\nUse `NAN_SETTER` to declare your V8 accessible setters. Same as `NAN_GETTER` but you also get a `Local` `value` object to work with.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_SETTER`.\n\n\n### NAN_PROPERTY_GETTER(cbname)\nUse `NAN_PROPERTY_GETTER` to declare your V8 accessible property getters. You get a `Local` `property` and an appropriately typed `args` object that can act similar to the `args` argument to a `NAN_METHOD` call.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_GETTER`.\n\n\n### NAN_PROPERTY_SETTER(cbname)\nUse `NAN_PROPERTY_SETTER` to declare your V8 accessible property setters. Same as `NAN_PROPERTY_GETTER` but you also get a `Local` `value` object to work with.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_SETTER`.\n\n\n### NAN_PROPERTY_ENUMERATOR(cbname)\nUse `NAN_PROPERTY_ENUMERATOR` to declare your V8 accessible property enumerators. You get an appropriately typed `args` object like the `args` argument to a `NAN_PROPERTY_GETTER` call.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_ENUMERATOR`.\n\n\n### NAN_PROPERTY_DELETER(cbname)\nUse `NAN_PROPERTY_DELETER` to declare your V8 accessible property deleters. Same as `NAN_PROPERTY_GETTER`.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_DELETER`.\n\n\n### NAN_PROPERTY_QUERY(cbname)\nUse `NAN_PROPERTY_QUERY` to declare your V8 accessible property queries. Same as `NAN_PROPERTY_GETTER`.\n\nYou can use `NanReturnNull()`, `NanReturnEmptyString()`, `NanReturnUndefined()` and `NanReturnValue()` in a `NAN_PROPERTY_QUERY`.\n\n\n### NAN_WEAK_CALLBACK(type, cbname)\n\nUse `NAN_WEAK_CALLBACK` to declare your V8 WeakReference callbacks. There is an object argument accessible through `NAN_WEAK_CALLBACK_OBJECT`. The `type` argument gives the type of the `data` argument, accessible through `NAN_WEAK_CALLBACK_DATA(type)`.\n\n```c++\nstatic NAN_WEAK_CALLBACK(BufferReference*, WeakCheck) {\n if (NAN_WEAK_CALLBACK_DATA(BufferReference*)->noLongerNeeded_) {\n delete NAN_WEAK_CALLBACK_DATA(BufferReference*);\n } else {\n // Still in use, revive, prevent GC\n NanMakeWeak(NAN_WEAK_CALLBACK_OBJECT, NAN_WEAK_CALLBACK_DATA(BufferReference*), &WeakCheck);\n }\n}\n```\n\n\n### NAN_DEPRECATED(declarator)\nDeclares a function as deprecated. Identical to `V8_DEPRECATED`.\n\n```c++\nstatic NAN_DEPRECATED(NAN_METHOD(foo)) {\n ...\n}\n```\n\n\n### NAN_INLINE(declarator)\nInlines a function. Identical to `V8_INLINE`.\n\n```c++\nstatic NAN_INLINE(int foo(int bar)) {\n ...\n}\n```\n\n\n### NanReturnValue(Handle<Value>)\n\nUse `NanReturnValue` when you want to return a value from your V8 accessible method:\n\n```c++\nNAN_METHOD(Foo::Bar) {\n ...\n\n NanReturnValue(String::New(\"FooBar!\"));\n}\n```\n\nNo `return` statement required.\n\n\n### NanReturnUndefined()\n\nUse `NanReturnUndefined` when you don't want to return anything from your V8 accessible method:\n\n```c++\nNAN_METHOD(Foo::Baz) {\n ...\n\n NanReturnUndefined();\n}\n```\n\n\n### NanReturnNull()\n\nUse `NanReturnNull` when you want to return `Null` from your V8 accessible method:\n\n```c++\nNAN_METHOD(Foo::Baz) {\n ...\n\n NanReturnNull();\n}\n```\n\n\n### NanReturnEmptyString()\n\nUse `NanReturnEmptyString` when you want to return an empty `String` from your V8 accessible method:\n\n```c++\nNAN_METHOD(Foo::Baz) {\n ...\n\n NanReturnEmptyString();\n}\n```\n\n\n### NanScope()\n\nThe introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanScope()` necessary, use it in place of `HandleScope scope`:\n\n```c++\nNAN_METHOD(Foo::Bar) {\n NanScope();\n\n NanReturnValue(String::New(\"FooBar!\"));\n}\n```\n\n\n### NanLocker()\n\nThe introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanLocker()` necessary, use it in place of `Locker locker`:\n\n```c++\nNAN_METHOD(Foo::Bar) {\n NanLocker();\n ...\n NanUnlocker();\n}\n```\n\n\n### NanUnlocker()\n\nThe introduction of `isolate` references for many V8 calls in Node 0.11 makes `NanUnlocker()` necessary, use it in place of `Unlocker unlocker`:\n\n```c++\nNAN_METHOD(Foo::Bar) {\n NanLocker();\n ...\n NanUnlocker();\n}\n```\n\n\n### void * NanGetInternalFieldPointer(Handle<Object>, int)\n\nGets a pointer to the internal field with at `index` from a V8 `Object` handle.\n\n```c++\nLocal obj;\n...\nNanGetInternalFieldPointer(obj, 0);\n```\n\n### void NanSetInternalFieldPointer(Handle<Object>, int, void *)\n\nSets the value of the internal field at `index` on a V8 `Object` handle.\n\n```c++\nstatic Persistent dataWrapperCtor;\n...\nLocal wrapper = NanPersistentToLocal(dataWrapperCtor)->NewInstance();\nNanSetInternalFieldPointer(wrapper, 0, this);\n```\n\n\n### Local<Object> NanObjectWrapHandle(Object)\n\nWhen you want to fetch the V8 object handle from a native object you've wrapped with Node's `ObjectWrap`, you should use `NanObjectWrapHandle`:\n\n```c++\nNanObjectWrapHandle(iterator)->Get(String::NewSymbol(\"end\"))\n```\n\n\n### NanMakeWeak(Persistent<T>, parameter, callback)\n\nMake a persistent reference weak.\n\n\n### String NanSymbol(char *)\n\nThis isn't strictly about compatibility, it's just an easier way to create string symbol objects (i.e. `String::NewSymbol(x)`), for getting and setting object properties, or names of objects.\n\n```c++\nbool foo = false;\nif (obj->Has(NanSymbol(\"foo\")))\n foo = optionsObj->Get(NanSymbol(\"foo\"))->BooleanValue()\n```\n\n\n### Type NanGetPointerSafe(Type *[, Type])\n\nA helper for getting values from optional pointers. If the pointer is `NULL`, the function returns the optional default value, which defaults to `0`. Otherwise, the function returns the value the pointer points to.\n\n```c++\nchar *plugh(uint32_t *optional) {\n char res[] = \"xyzzy\";\n uint32_t param = NanGetPointerSafe(optional, 0x1337);\n switch (param) {\n ...\n }\n NanSetPointerSafe(optional, 0xDEADBEEF);\n} \n```\n\n\n### bool NanSetPointerSafe(Type *, Type)\n\nA helper for setting optional argument pointers. If the pointer is `NULL`, the function simply return `false`. Otherwise, the value is assigned to the variable the pointer points to.\n\n```c++\nconst char *plugh(size_t *outputsize) {\n char res[] = \"xyzzy\";\n if !(NanSetPointerSafe(outputsize, strlen(res) + 1)) {\n ...\n }\n\n ...\n}\n```\n\n\n### char* NanFromV8String(Handle<Value>[, enum Nan::Encoding, size_t *, char *, size_t, int])\n\nWhen you want to convert a V8 `String` to a `char*` use `NanFromV8String`. It is possible to define an encoding that defaults to `Nan::UTF8` as well as a pointer to a variable that will be assigned the number of bytes in the returned string. It is also possible to supply a buffer and its length to the function in order not to have a new buffer allocated. The final argument allows optionally setting `String::WriteOptions`, which default to `String::HINT_MANY_WRITES_EXPECTED | String::NO_NULL_TERMINATION`.\nJust remember that you'll end up with an object that you'll need to `delete[]` at some point unless you supply your own buffer:\n\n```c++\nsize_t count;\nchar* name = NanFromV8String(args[0]);\nchar* decoded = NanFromV8String(args[1], Nan::BASE64, &count, NULL, 0, String::HINT_MANY_WRITES_EXPECTED);\nchar param_copy[count];\nmemcpy(param_copy, decoded, count);\ndelete[] decoded;\n```\n\n\n### bool NanBooleanOptionValue(Handle<Value>, Handle<String>[, bool])\n\nWhen you have an \"options\" object that you need to fetch properties from, boolean options can be fetched with this pair. They check first if the object exists (`IsEmpty`), then if the object has the given property (`Has`) then they get and convert/coerce the property to a `bool`.\n\nThe optional last parameter is the *default* value, which is `false` if left off:\n\n```c++\n// `foo` is false unless the user supplies a truthy value for it\nbool foo = NanBooleanOptionValue(optionsObj, NanSymbol(\"foo\"));\n// `bar` is true unless the user supplies a falsy value for it\nbool bar = NanBooleanOptionValueDefTrue(optionsObj, NanSymbol(\"bar\"), true);\n```\n\n\n### uint32_t NanUInt32OptionValue(Handle<Value>, Handle<String>, uint32_t)\n\nSimilar to `NanBooleanOptionValue`, use `NanUInt32OptionValue` to fetch an integer option from your options object. Can be any kind of JavaScript `Number` and it will be coerced to an unsigned 32-bit integer.\n\nRequires all 3 arguments as a default is not optional:\n\n```c++\nuint32_t count = NanUInt32OptionValue(optionsObj, NanSymbol(\"count\"), 1024);\n```\n\n\n### NanError(message), NanTypeError(message), NanRangeError(message)\n\nFor making `Error`, `TypeError` and `RangeError` objects.\n\n```c++\nLocal res = NanError(\"you must supply a callback argument\");\n```\n\n\n### NanThrowError(message), NanThrowTypeError(message), NanThrowRangeError(message), NanThrowError(Local<Value>), NanThrowError(Local<Value>, int)\n\nFor throwing `Error`, `TypeError` and `RangeError` objects. You should `return` this call:\n\n```c++\nreturn NanThrowError(\"you must supply a callback argument\");\n```\n\nCan also handle any custom object you may want to throw. If used with the error code argument, it will add the supplied error code to the error object as a property called `code`.\n\n\n### Local<Object> NanNewBufferHandle(char *, uint32_t), Local<Object> NanNewBufferHandle(uint32_t)\n\nThe `Buffer` API has changed a little in Node 0.11, this helper provides consistent access to `Buffer` creation:\n\n```c++\nNanNewBufferHandle((char*)value.data(), value.size());\n```\n\nCan also be used to initialize a `Buffer` with just a `size` argument.\n\nCan also be supplied with a `NAN_WEAK_CALLBACK` and a hint for the garbage collector, when dealing with weak references.\n\n\n### Local<Object> NanBufferUse(char*, uint32_t)\n\n`Buffer::New(char*, uint32_t)` prior to 0.11 would make a copy of the data.\nWhile it was possible to get around this, it required a shim by passing a\ncallback. So the new API `Buffer::Use(char*, uint32_t)` was introduced to remove\nneeding to use this shim.\n\n`NanBufferUse` uses the `char*` passed as the backing data, and will free the\nmemory automatically when the weak callback is called. Keep this in mind, as\ncareless use can lead to \"double free or corruption\" and other cryptic failures.\n\n\n### bool NanHasInstance(Persistent<FunctionTemplate>&, Handle<Value>)\n\nCan be used to check the type of an object to determine it is of a particular class you have already defined and have a `Persistent` handle for.\n\n\n### Local<Type> NanPersistentToLocal(Persistent<Type>&)\n\nAside from `FunctionCallbackInfo`, the biggest and most painful change to V8 in Node 0.11 is the many restrictions now placed on `Persistent` handles. They are difficult to assign and difficult to fetch the original value out of.\n\nUse `NanPersistentToLocal` to convert a `Persistent` handle back to a `Local` handle.\n\n```c++\nLocal handle = NanPersistentToLocal(persistentHandle);\n```\n\n\n### Local<Context> NanNewContextHandle([ExtensionConfiguration*, Handle<ObjectTemplate>, Handle<Value>])\nCreates a new `Local` handle.\n\n```c++\nLocal ftmpl = FunctionTemplate::New();\nLocal otmpl = ftmpl->InstanceTemplate();\nLocal ctx = NanNewContextHandle(NULL, otmpl);\n```\n\n\n### void NanDispose(Persistent<T> &)\n\nUse `NanDispose` to dispose a `Persistent` handle.\n\n```c++\nNanDispose(persistentHandle);\n```\n\n\n### NanAssignPersistent(type, handle, object)\n\nUse `NanAssignPersistent` to assign a non-`Persistent` handle to a `Persistent` one. You can no longer just declare a `Persistent` handle and assign directly to it later, you have to `Reset` it in Node 0.11, so this makes it easier.\n\nIn general it is now better to place anything you want to protect from V8's garbage collector as properties of a generic `Object` and then assign that to a `Persistent`. This works in older versions of Node also if you use `NanAssignPersistent`:\n\n```c++\nPersistent persistentHandle;\n\n...\n\nLocal obj = Object::New();\nobj->Set(NanSymbol(\"key\"), keyHandle); // where keyHandle might be a Local\nNanAssignPersistent(Object, persistentHandle, obj)\n```\n\n\n### NanInitPersistent(type, name, object)\n\nUser `NanInitPersistent` to declare and initialize a new `Persistent` with the supplied object. The assignment operator for `Persistent` is no longer public in Node 0.11, so this macro makes it easier to declare and initializing a new `Persistent`. See NanAssignPersistent for more information.\n\n```c++\nLocal obj = Object::New();\nobj->Set(NanSymbol(\"key\"), keyHandle); // where keyHandle might be a Local\nNanInitPersistent(Object, persistentHandle, obj);\n```\n\n\n### NanCallback\n\nBecause of the difficulties imposed by the changes to `Persistent` handles in V8 in Node 0.11, creating `Persistent` versions of your `Local` handles is annoyingly tricky. `NanCallback` makes it easier by taking your `Local` handle, making it persistent until the `NanCallback` is deleted and even providing a handy `Call()` method to fetch and execute the callback `Function`.\n\n```c++\nLocal callbackHandle = callback = args[0].As();\nNanCallback *callback = new NanCallback(callbackHandle);\n// pass `callback` around and it's safe from GC until you:\ndelete callback;\n```\n\nYou can execute the callback like so:\n\n```c++\n// no arguments:\ncallback->Call(0, NULL);\n\n// an error argument:\nLocal argv[] = {\n Exception::Error(String::New(\"fail!\"))\n};\ncallback->Call(1, argv);\n\n// a success argument:\nLocal argv[] = {\n Local::New(Null()),\n String::New(\"w00t!\")\n};\ncallback->Call(2, argv);\n```\n\n`NanCallback` also has a `Local GetCallback()` method that you can use to fetch a local handle to the underlying callback function if you need it.\n\n\n### NanAsyncWorker\n\n`NanAsyncWorker` is an abstract class that you can subclass to have much of the annoying async queuing and handling taken care of for you. It can even store arbitrary V8 objects for you and have them persist while the async work is in progress.\n\nSee a rough outline of the implementation:\n\n```c++\nclass NanAsyncWorker {\npublic:\n NanAsyncWorker (NanCallback *callback);\n\n // Clean up persistent handles and delete the *callback\n virtual ~NanAsyncWorker ();\n\n // Check the `char *errmsg` property and call HandleOKCallback()\n // or HandleErrorCallback depending on whether it has been set or not\n virtual void WorkComplete ();\n\n // You must implement this to do some async work. If there is an\n // error then allocate `errmsg` to to a message and the callback will\n // be passed that string in an Error object\n virtual void Execute ();\n\nprotected:\n // Set this if there is an error, otherwise it's NULL\n const char *errmsg;\n\n // Save a V8 object in a Persistent handle to protect it from GC\n void SavePersistent(const char *key, Local &obj);\n\n // Fetch a stored V8 object (don't call from within `Execute()`)\n Local GetFromPersistent(const char *key);\n\n // Default implementation calls the callback function with no arguments.\n // Override this to return meaningful data\n virtual void HandleOKCallback ();\n\n // Default implementation calls the callback function with an Error object\n // wrapping the `errmsg` string\n virtual void HandleErrorCallback ();\n};\n```\n\n\n### NanAsyncQueueWorker(NanAsyncWorker *)\n\n`NanAsyncQueueWorker` will run a `NanAsyncWorker` asynchronously via libuv. Both the *execute* and *after_work* steps are taken care of for you—most of the logic for this is embedded in `NanAsyncWorker`.\n\n### Contributors\n\nNAN is only possible due to the excellent work of the following contributors:\n\n\n\n\n\n
Rod VaggGitHub/rvaggTwitter/@rvagg
Benjamin ByholmGitHub/kkoopa
Trevor NorrisGitHub/trevnorrisTwitter/@trevnorris
\n\nLicence & copyright\n-----------------------\n\nCopyright (c) 2013 NAN contributors (listed above).\n\nNative Abstractions for Node.js is licensed under an MIT +no-false-attribs license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/rvagg/nan/issues" + }, + "homepage": "https://github.com/rvagg/nan", + "_id": "nan@0.4.4", + "dist": { + "shasum": "12d2fa62f5892490893fdf1290ccf00100cb6af1" + }, + "_from": "nan@~0.4.1", + "_resolved": "https://registry.npmjs.org/nan/-/nan-0.4.4.tgz" +} diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/package.json b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/package.json index 650b3cd..f692260 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/package.json +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/bson/package.json @@ -6,7 +6,7 @@ "bson", "parser" ], - "version": "0.2.2", + "version": "0.2.3", "author": { "name": "Christian Amor Kvalheim", "email": "christkv@gmail.com" @@ -19,6 +19,9 @@ "bugs": { "url": "https://github.com/mongodb/js-bson/issues" }, + "dependencies": { + "nan": "~0.4.1" + }, "devDependencies": { "nodeunit": "0.7.3", "gleak": "0.2.3", @@ -38,6 +41,7 @@ "install": "(node-gyp rebuild 2> builderror.log) || (exit 0)", "test": "nodeunit ./test/node && TEST_NATIVE=TRUE nodeunit ./test/node" }, + "browser": "lib/bson/bson.js", "licenses": [ { "type": "Apache License, Version 2.0", @@ -47,10 +51,10 @@ "readme": "Javascript + C++ BSON parser\n============================\n\nThis BSON parser is primarily meant for usage with the `mongodb` node.js driver. However thanks to such wonderful tools at `onejs` we are able to package up a BSON parser that will work in the browser aswell. The current build is located in the `browser_build/bson.js` file.\n\nA simple example on how to use it\n\n \n \n \n \n \n \n\n It's got two simple methods to use in your application.\n\n * BSON.serialize(object, checkKeys, asBuffer, serializeFunctions)\n * @param {Object} object the Javascript object to serialize.\n * @param {Boolean} checkKeys the serializer will check if keys are valid.\n * @param {Boolean} asBuffer return the serialized object as a Buffer object **(ignore)**.\n * @param {Boolean} serializeFunctions serialize the javascript functions **(default:false)**\n * @return {TypedArray/Array} returns a TypedArray or Array depending on what your browser supports\n \n * BSON.deserialize(buffer, options, isArray)\n * Options\n * **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized.\n * **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse.\n * **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function.\n * @param {TypedArray/Array} a TypedArray/Array containing the BSON data\n * @param {Object} [options] additional options used for the deserialization.\n * @param {Boolean} [isArray] ignore used for recursive parsing.\n * @return {Object} returns the deserialized Javascript Object.\n", "readmeFilename": "README.md", "homepage": "https://github.com/mongodb/js-bson", - "_id": "bson@0.2.2", + "_id": "bson@0.2.3", "dist": { - "shasum": "16f2c649101ea298a49dcd2047417becb8a5cf6e" + "shasum": "34992251e7ebd189eef20bad72c504721dc3abde" }, - "_from": "bson@0.2.2", - "_resolved": "https://registry.npmjs.org/bson/-/bson-0.2.2.tgz" + "_from": "bson@0.2.3", + "_resolved": "https://registry.npmjs.org/bson/-/bson-0.2.3.tgz" } diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/kerberos.exp b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/kerberos.exp index b8da65ebf0b3078a9c4c190ec9486b003809271a..c88bbd3152e3fd6cb981373032ef9d5102c8c85c 100644 GIT binary patch delta 85 zcmcb1it*7YM$VKrCWfk7=HTv$oX(7%6MdywK)j7P_mo9!r5G5h85ji_fWXBnrZ}@C fwRrMhmGH^yRh$KPG1v++B$ubaWj6m+iF5z}e;*qk delta 73 zcmaEKit*YhM$VKrCI)7+w?Xw2Ih`48C;CdWfOs2o?kV#bN-;2$GB64<0D-gBxjk?_P{+{3Sdp^(E<(07I zm9X1!oA&2r<>lrafHkmw>)2!0{+|ETUMdevWBU4mY@5WQc4F*FbG}q+L=bwMN zfoxng7D%WzMli^C&{&fI<<-AxzS_dsm-&X8G--2taxXuHl?&$yn%E}}t1gz(VX(mh z&4cD>#*t<)7{UzU2FNT<0N<4u@OErdf&O|6l+-G?0>o`(xYeB*Fjbo*F~Y%GZG}9u zKxwmCQPXqjL-ia;VssrzWKMoj!GXFDRItBZ5U1Bm;&u!C&?tzX)Spzb&_5x-uFDdP z#NHMGUb!q)u<-4@;=|d76T}j15G>Cc-c=7##uk<*C&nLR2=|-p;JYZJR|IiH4kC;U zkqjnxGT9@dyGuB0aBH1e;QJ}@;f1?IH2@}Wq)mKqUpcIP&?+$-!l7)NP71ffsw!Fc zG#yv%V5v!j^|DDr#!JLoz=gtNv9$h@c&N&bhM2ra2sFzWl>%{SK0+-VYKJt>F4cuU zBn?)S=QF3kYAZoxi8i-{mWWS6AyRJ#W6KVBTw+E4x=zI4L=3i8SsHCO1X^V`unZd2 z4BFa?RhepPdAU;1Up(qGrN?0?F<@#m6VB5uylwyZlzOO5e-13>29h61XaDZ9?~l|mD2kQJ^GB|taCA$C?*3vy-a<3JnL}LqOSH+zyMwIzfJQ-1|RUf7~|@>#}xZ zTrB3%Vd`YuC|owXT8iP$@J`%(CU`PTcZb~Efg5sjD>YEM%6gN$AQ=_dxTw`OZ0hnei@W+@!T8gCaBWZN>Avkec_8P;CO)HpV zh&hdS^`?Vh1@bHRjq?swi9K5QxEw~C3grDUG8dLX*A438<~TdzDiQZ*;Vv+{_5OeV zN{Ij2PniN2h(2tBZi;A4J&eCQpgFX{;@#JIch;htvus>mRa9vGi1n-V$IZ`Wx#i<) zTt2?AO4OQxaSED|yfz`UrcB7{(M9xlg6;+Va60bkhm&4f3-_cJTC0vpxtmDf;v@;w zZNN*I)xJYE@J`9BvUb8Nlc$7bzK*3N^GuQsgv=bkN?6YT8F4vKIT2Dr^1y-4-ojp)GSlWH(Z1A*=yfQ}of1!l`+n4gz#xCQA z2hp&T87^7VVC8Fly_jU2r>*RDeiVUM5m*Sbv*{4DL?K$bX;%i=fuJsotNJJ-qtASC MZh0tV?0RVX2W5T_GXMYp delta 3538 zcmaJ^-&2%T7+w)ZP-M5(*bS6l#fl0nC_=3ZENY^|7)UvgX#$Gkg0Mgk!oorZq2Pl1 z8VD&YR?axnINNx`*bH&u1s4=uc4e0}rVRZ7S?@XD`QGz=8+Ezod*0`L-k;~}(sIPo za>RJzrrf;+1^WwfVGXR`Id<8#zaM>SFP8_dx_DUq$P}|N|3#&7gTW9DEp_>i3eP^- zKsK&A3nbSXqZs6SXsk%OiJPmb4k4+Raa4`P^B8ru2!!n)Bs!7;;;n zWzZbUII;`|LxdsH0J){f;J+LPzRqnbFwkIuvU&wqgt(0ix3VJ#rt4EBMmSijuaajL zC~q+~#Mup!xWfWJHVWd$4JTAA^iK+~>yiW` zv9DEtmoG^bEPQ*f_;A{NoLE9`!SdAoj(UhPwy-=oG5$D1WWZzx|9Kg`B8VgQBf`iK z>0oL~CwoNnbPH$hCap6I{4gy(JZ~yf4S>lTX%`=wE+0}qXqA`^kx;QsCxzQ#Rh6uJ znvbb=u-GiZT5Z;l@e=VCaG~&cEN!4H32O3UA+8`Af-N#er9d27h)@fM+9Au6rn(4( zrNN5w{N@Z;X(Na%(dO3h67fkWM(PAGwr+=qWmfdB>qHDr#9(WarO|dnuuXOY%b-!s zpsl@Bm8qtdmn#GPC817Jb|Qun2c||d;XFOUTf)chsfXJ1r=VTaTXtCU$}DvVlkAR@ zWTLJ8dpG(7hD6NY!iel3uZ?l-{5B>NAS7&c)=Sm>l%9n)&8>nrX2t^~zSF z{rPSm?N8C|d?47+?_+CmPX$Z9F0%rsh^qEUQi|ZIk0OAd2Sgb>{p5)qa_RffO#wf-kgTM$GNVn0W(k*V2zefdo|7b0-YtQ3v$aC~c6ZP#4*_NzeiGF1wvoZ1$*h4i% zsc_1ls^z5jL&z_0ZWmZ!*O(CD8XHp$z%*-t7h?)(Ig-AQq_MFF;rO`hHHI0RQ7}gl za}w|BO$WdVm{r~Z` z5dTYnG6gOWeb@{=6w#V`m~?AEb7+NyTd(r&tVcJe*|@x{s?z!q>sRTI>tD!n%g5J* ze0*V*s5OHV6f`4wWm0I(n3UC{i|FAb-3$8RbllbtC%v@hZ%Zw-RvlAvH<7@FDH5pL zfEO^UeFtseo0eH+?Sxk*PYKKXMV6A>Q>i)-GIIbcVFLr?B<_dm$*>x#_sX*`X)CjJ zP=80{!Fxx_5^G1vvgxi2nXWAVU71Z}p?;2^k^L-MQenA2bB+paniVZkG^;(tP-m3} zK8BHaFdY?#o#305>7X2Xf+Us&f$n*8y3no-?G_L3gNhm1`AkXgoPsGsOgqQC2BA56 zgfJRo>fmP;dXAhK4mUjOc8$4+zuZ$7@Unt@K{*}D7vCFvO z0W|DlhKtrLSpG&|FD4o1X)Al3A3@+11Qx^GTsDL(F^HCKI+Ou+AgCMTsy)KU=rdoO MTkZ=PY4>ga0LNe;fB*mh diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/kerberos.node b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/kerberos.node index 0920845448bd677eac684216834ac2a2083a3fb1..be87e582420e69520aec1717baa3508bef9d3503 100644 GIT binary patch delta 7744 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 NKpSma)%8L9{|EM%-9!KY delta 126878 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 J^Y0_g{~yuG&ieoW diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.11524.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17064.read.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.11524.read.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17064.read.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.11524.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17064.write.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.11524.write.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17064.write.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.11820.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17288.read.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.11820.read.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17288.read.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.11820.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17288.write.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.11820.write.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17288.write.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.13448.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17880.read.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.13448.read.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17880.read.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.13448.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17880.write.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.13448.write.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17880.write.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.15984.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.21324.read.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.15984.read.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.21324.read.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.15984.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.21324.write.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.15984.write.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.21324.write.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17228.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.21692.read.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17228.read.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.21692.read.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17228.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.21692.write.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.17228.write.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.21692.write.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.2476.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.2800.read.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.2476.read.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.2800.read.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.2476.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.2800.write.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.2476.write.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.2800.write.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.4768.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.5900.read.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.4768.read.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.5900.read.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.4768.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.5900.write.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.4768.write.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.5900.write.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.7700.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.7212.read.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.7700.read.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.7212.read.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.7700.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.7212.write.1.tlog similarity index 100% rename from node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.7700.write.1.tlog rename to node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.7212.write.1.tlog diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.read.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.read.1.tlog index 1e3ace990ede2332367641c868307a9c90b83356..55f8e671abb1ae314edd20c76a109ae1c288d2d7 100644 GIT binary patch delta 1271 zcmaE{f%DF0PT~Lm;uu^QtQcY#f*Cv+LKs{bf+sVsy*s%oNn-lD2*w~r)9H?pjHw_h zm{EOuf*7M1E2HUl!$XWG%^`x5A(Z9h3r;CO=ELcXm5ipF4VPbL0`d-qGa64{_m9yF z!WP}m_n+~IG(UD5RhEAUU}Bv7W{nUQ1-mD&+lV1P-B6b4wjhQNK*A>{zf0pnHwP>+ z-E1Nw-{c1zE+B_f=r?o=wgYVrW}N;&h*1DtYV*R?v5e?~z_9*^F19^UkdYmm%DaH z1Qd2W(>I7Pa-atw(3Rk{ICl@GX59QI6#;l+ik&!US# n59!XPG0(+h){zOw)T$qZnq delta 956 zcmcb!ne)X4PWJ!*;uxG6thO6&XZ+2|Xfk=@67|Uk-Ul(7Y~Hx!FXQ9`i(D8@rvEQt zOa+P@WIWF}*&*u}P=s+aqviHHRg4F?CNDVVviY2loAl%aF0;*f`ceE)>B$S;MM0Qz zfmHl2###s^y7`Xt5ouHLOC(Z_>w@q$Xp#h?&&kJRe0;#w)J*J3}XL8>fIaaU_CSOe42~;G&s|WOtGXpOJ z7sy{Q(aA2UKtCZoVhi*u+!GVbp&S$^qXfleCWzxLp>A0<-9ds0>@bjnCZV_;>@qYr z!oADs0dpG2_xEAmg!lm@bQkKc4O!H1FV--JS+PcLGLKZnbOQ+{F?fiIz(e!+^b5s| z9Mc~NF@pRFi3kG+l;l8eC>kTY3km_T$sCMSi5;xIy}!9H!GsZGr&Q@ xH~oeX4IKiuV;(3aKvSg*Cwe-awf%uSlavWe4Jd8#O}`Mr#0C@D4ivFt0RTIEXuALa diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/CL.write.1.tlog index b76ab0d876da919c2af1fa0274720897a019cc4f..680eb81ba9a93b519d7b3240e01936cb2a0bcce4 100644 GIT binary patch literal 8182 zcmeHM(N2Rv5S(Wde}$+uKKNFk8f?V|imeGLKjOEmGY1K97HWL!-Q^Mr*W+MkXXkd0 z@2?|LJfcR43_Gm&TO-FCdslOhn)Bs<9GxPb9l7TG z1;^;9xobW#GxzMxQx@jE>`@UCwohm5+tc=fxC#aLY%8$DmQB{l!zIrWRJ;-|KhV(M z6`t6F{RPobe3nE=_-u)gxZxu!5?Y=c6BadnaUr&!Nu zM@l7-by{JTMiXlKJH`w9ZM{FG8H$fn*tB!_g^rC^)FJ5?3iIpAl&<>7mwBZ8WY0JU z3#?FHX0O0KDz4WSektcWJ$;KCwul+0YBt&Lj*rK&t=cj8*De2^uQ8|c#lQylqWwG@ ze(yL0Met1#h8&ox4uU%Ps1A1C8(82P3*v6i=>hjUzKi z7T@g1$;!xzF%#q?h-(n)cTSd* qgoOn#hy*5cNI|%Q?5}}rp2-T*TyW2b$Vfq*hoThKGyx==KLP;v>S$^J diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/base64.obj b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/base64.obj index 3a84181a722085ca70265152dfad77349cd74ab4..49c37e84b6c7ca857a2374b8b4b37883d4e3e22a 100644 GIT binary patch delta 444 zcmezBInhg#f#LsuMuwEOs#@k?i+`JWmfl?LyJq&aZAxmvhd!z>FbMOoGl1moPt!0>nCOm#-*i3imgCr*5+&bWKBAfqzdMFs{2KIO?)jI|stRx!nyC8@=e z1DKO1%P?sm3j|H>Q)ZhykExTXN9sSt4Vk9H7gi*Gzv3lFfbS_5^S8jPg);c z=(ltRREQC#s!#?d!~_$1E>jLw#S9b5k*#8E-uzrvn3<7z^KXSlMn>kzwMt7BrZI?$ z2Cs8D78?@h(y)JH(4;l-ubF_Mf#fxiuT@n)vWqf^3o9rp7nC&fEa3UT^M$8Tp;@6r zVY$M6-3Pk8`g432`A)v29LQA0I5|*7lrKF8Xbb}bGYB)fO%71$XS_K1fr=;qZtRYP delta 425 zcmbQ}_0?08f#LsuMuwC&X0x|J7XLQ$EWNqfcg^f;+mzIT4_#GZU=ZeEX8_3^o~Y@} zm^Cq1oz;q!f#KuCnd*$%6A!90R!)4W&bWB8AfqzdSq27%Z%UJ`7;BlFttRhh?1oT5 zlb0~{Gn!2{VOC>G28kz6KFTZ(VWw{OWI4;k#Hv17g58jbQGK#E`$k6T&41bN@-ohx zd|On5ZKgtKNAt|hoMQT{Q1)ay=`OyR3dS9c!VDS=3D?{+)`>Z=B9w=ZmoovV$3nUYHOBqc!-(>&K z#E(VgXfA8rej=aXMJtb$_yjirC~eJYmEc1X3=69<-3i5tuBant^6Yq#E`J dns@-DS_q4afbl%}oxaFq4sCQ7;W7)P8~`v`mcIZ1 delta 374 zcmX?<*p$Hj|6d$~GlSJ+MZujD&lE74OjcBj1(Jn2rHm$<1)2UcF~eo0SYb+cPu|Ct zgB7i-=927J_ncCih>|%F}QnoPTr%XH2IV&rki&&P2QmC0t*nJG8H&`oq@>YJ=z4d H0F?m%blPql diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.lastbuildstate b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.lastbuildstate index 21e6d2d..b94b57b 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.lastbuildstate +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.lastbuildstate @@ -1,2 +1,2 @@ #v4.0:v100:false -Release|x64|C:\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\kerberos\build\| +Release|x64|D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\kerberos\build\| diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.obj b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.obj index d7d3ce9835e776e7fe607eddc499f9e0606d314a..d4b45eeb703ce92c8f1496e72f3554698202b562 100644 GIT binary patch delta 19592 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 delta 19349 zcmaiccR-WJ`*`jg;6OzMAyEmEFcLxn87Nj;1QcWnVzvFWfQr@yins?Opg0j<M!o9Vw)?H`a*71Ap-XsRc_xDHN%X{~%d-mOneR-+=rc3o@0>Q_RNYHl@ z);)}E`=O-aii>L_*A<`J-o`zyqRDzJXx7k1K-WI3Es%9WsRctk>Pn6Z1TS&He0L-) z*z18772NZ{uRCx}QJXsH^#y{dTst%o2L*7mbbUEDEaQL1a;tCwGH~r`x#K?k+L2lv zkfx+w?HBGy!+n$`z%xPKoBeLdU6lvHuQuMX05ZaRG=i5$ip}s`?9<*hI4ZhRm#FBj zoQrm2$!ukA9ovYgPF+GG!$V74v;z>&;0izdk2~q#+RXCjwqwk*sR2#7>+R}tG3|sk zr{ter)t`Pg zAUs;g<;2IL4cz(o{%9NbeGem=TJokxBZQ(k+n!Nq9rt6;aI~IV)-w)(UiIvW4wS_7 zQq@Aga#{ZyfOc~K!1GB-{4bj^E^fiuCZ;1DHz9EhX#Q2=CbWxNofL=mbMKPEQ5P<> z_fM!Zx2$&zisYX6{t;M2^yz_Cam)HJ;(b!l8?Jv}Pe*$vfuMol-4!HAPwF2O7#|@J zWI8%=EBg9kp%ZtZZ+9H&#Q7w55ymjUCDkUth=`!*s2%{^(}~MZ)>5ddx0VK6(8@sP~L zf`qu_KA}k|eFrDQbTQYYzYr%oao+vCoFf5d5)#zLHh}u37zsK>M0Wz9VO&ao7nIJ; z?7yLo3N(_78sI3(VDuwS@VW>MjOr2+9u`FjWpNn; zTA>Nt!U1k5m)kp_C+fio2f9Oa1r8huCfqSljizu92D%BSGaCPz6;Jg(1E!F`k+bXP z#zhS3M720;(C}6#ovEzX%Ne)0-$tbOO&yieeauj*ntVo0E9kk;r9S2#q8q+HdIZj`BWN=v6)plK`EbqNV# z0%PMs5+W(xOz@G&6gkK;CdGw9&QEbe9Jf0~hryR#rud;(oL8y`#BaA$1p$7PW14@;{4<_9sDW!VTn=s# zFkFXYoVc{%TKiIfu@#K19~YR=D|xsevy9s@ydB-iv*9|&q0G%DFily>^nLpG&B__= z#%#%C0j?mu1T+ycqN8vsqgrm!TyS(`U|1B>-NF%`sDi5+p+c41s}Zq|W2urG2-1v5 z5Z67hdtCP}Am|Y;VWcBYa^^;j41tZ6jT8!d0vrn*1oDoj@77g^emZg@b+%!n zQi1)AQ92sN&ZA}M3>OT~YA$uO7Mm#J1JGga-gqs7c|Z+~NriEi43@Fai(jnOvfJf;TGT-b@H+(LhLr ztFr(yO+;7>$QB5)*$KI>6WiM~W^2p1=!q>{VKxky)n1o_1%iZ;!$%EG8<3LT54iIQ zv4%6^&ZXUw;o4=?h#>~0=u&aii1g8!2+0!>lK&qV_1~hPmtM7$X&^7h2w?X zyG#kNaLtm@K#t53Q4Ys4qe3qtmVGi#kUFF5EN6+tv5_n!MMHxk61nybJmLe7}$6`jU_f3!>Z z9G0ruRgmG~v^=Y3B;kj`lKL}OAlT!kd?V`14V)DK zrEPJwJ$HrtQpj;FIvpt~g%TqHubxh8YnP~Q^G-1j!<1LwCe3D(-WZ z_FelLovS7P)B+Rz$M2

RGhi1%-0P?TNI=i46Xr>^Orb4g3iPjpz(Z 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 diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.write.1.tlog index 2798e34..e944a4b 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.write.1.tlog +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos.write.1.tlog @@ -1,3 +1,3 @@ -^C:\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\kerberos\build\kerberos.vcxproj -C:\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\kerberos\build\Release\kerberos.lib -C:\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\kerberos\build\Release\kerberos.exp +^D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\kerberos\build\kerberos.vcxproj +D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\kerberos\build\Release\kerberos.lib +D:\sites\node\nodetest2\node_modules\mongoskin\node_modules\mongodb\node_modules\kerberos\build\Release\kerberos.exp diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos_sspi.obj b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/kerberos_sspi.obj index f61edb3ce9ec7b06d0ceb767dc0aeee1b400b137..7628cfa654a6d2aff4dbdf88dd352e625c433ee9 100644 GIT binary patch delta 3387 zcmZWrYgAKL7QW|3fljH`Cnkaf@DeG6goF@z6Y_v0HxH5kqL$PO+Kwnbz*k$FF_fY$ zW#L{rEk4@%Xa@(KmbBI=BHC$HM46dZt(`JXmtAAUL4|f^9J^X)pG2bV@MGtkz4!UP z@9cff<-Fk)eCQPr>tTlj-ek9t8pseNMpWI;^HmBC$AxBem2V?Amyk=ofy8J+K7+fGB60}|XBClV z-{x5p1mp(nNLG`D@Okn)q5^r!9Abe@DJAU9MEELY9+?ZXr4^*qw?%3s?6oKuNPU9L zfe2YPI~)ai*%Q>aLY7H?I%H2o-;KgeG24!?jN4hgu&{p7qUx2p>QxIF#?t~LvP9vW zM4GT16YScR)m6m{mQ~eMV^j%g@~LDA6w6;=??%BXc|L`VND~tUB&Aid-kGo|t$=hu zZ`zZ@46_vFq!T;}AsG*CiWt%jhZSd{MbjwwD|ZP~w_vf(X0g^*RlC+Lr})vZQ)!~e z*Ojrv0FR`b(Uzu5NiBHOtBDe>r`u>aOO;EB*Qt^*zE5SQz7bUdiH4~eMluLbWn@er z#!WU7W(>W24mF8C`_)FqODYCBUGDOLUBJ=fhh!F`HD#*MdT=a)GnqxS#1pd=#0mN=@$~kIbaTTyu(Zf%cb00jE~Cwg ztP1dC#iPPKS(TJSkZmOCV98D=n_*+Ni984Avggh=U~K}Tl}rSqyh#|X)~(g)wLIeq z?T28f1*>PZ>GW=wevXUQ&7C8rsK3d{Lv1}d99azi$gv`wDwjjgyj-feHCKuDlUyU( z@p%X&vkpA&h9bX`u={j&*Dv^Pp!kT@Lcp=tRP+LIw%4g4MCu%R>c%H+5Z@GhZ)d z2Ziv8{y7vMZitz7E3jaMDsq;(b$WxQl*g(mAjcphE1||9#uhgl;{i&F9{$SvcyDFS^y%tl- z!Cjn)H?y%go*t^=8T9a+Db~`uk25OqOcomB$+J*xd>WZg83tuCXh zg7*D!6TJdCrU24>Q$0@pVv>@|E#??xm|<3+qr_~&@eZ?)?&BkK0&T)q<~VkR2=19> zWC6(dO0=)>3A7_V-o(~ngco9CgqCP3QEgF(YVey7!CZgPR&BA~q6swCYneH{DiD5c zRH4S@au^FsY3HNiq=lZoI~H16iB*QS+!{m0thSo4MJKElq#ADvxKeFNl)l22Jv(&b z$0G5!4~X@SGQEQm-|t2wR{ByHZ`V3q4lJ?&`fM{}*NUjz&#?i)>bvb4tyxo~w`we? z3F++g*yh;d*_TA{lzj@@CxkV2B`r#aU5t9p*#k8lveNg|6()(4O>8t;Qa_w0f5W zTeQ?w!M2Ftv@3=l)oU&p?a{PSdSi?MyS{WOj=wGC*j5pYFH0s>kX=S)KUJm>uMMag z2*GPLR-4tR)$qo-L6Xk0L?pRfwuTsdCFSR)5HG|oofYO4mo|C5KFiX45;j1`1F&UT zbNCfHydw4`)*c%h-Z+y{G_}hgvZW?GQEd5@T`t{tS{tg=;mPW z>MzEf;{1gO-_8X^Y+h5RJk9xw(bYj+K^0$92E#8@_)VfFRG^>+($=mRcb44o_98^-l<{zbUDo38HWd)>u_vd}eG8hjenfy6{nKzOykMw8JSwknr8ajQ79TNzy z)$ODR%{#M4fzR*kL&x@A)cwsa=j8j`{?dnl!TjbA7%qCtj`sDpo(Zw93ncBPe7ht4 zYl7@S@&5XU0pxE_4(-bPcIM+S2vlQ40AHgWr``&Y3f3{G}9!s#=F zkOIj60|x~M6q3%syja9&YpNG4t6yHUvbKIX(54;ppzAc+)yJCfk#_Ic^WtsHlqt@Gx=){URq8y)-*;^3aNoceIy3s{#%DHt zi-*BbcdTSMe9EI;;!ngq;vU(>q`}xoK3;ad?68{DN zCI46cZ~WK%RsI|P8h@StCx43{;s3?o;eX(N;ysp4md%!C%V(BLmYWus)$=ZCfIsyl ZunjKwbI%m`)roaeqiMN*_BRG+{{wJqit_*f delta 3149 zcmZ8jc~p~E7Ju(Ui3h1wD;ffn1QQ~%B@hx>1Vad9`$$Lv?o!35ohqWBqE#Ejp-dgC zcxO5yZlLI>)iP$<8aI|&j|)0_hNIST+|D>I9Tjk`qjl~JYVG`yoA=%OyT5zy@4e)E zUsw9oR{BK|^717mQ>*;cckLs7_5?Qmu#5k)?%X#Kk&d>7t%ST6C?G60y(UUW%WG!I z{mY%0!_};dqzh_Vr+A`z!l3=u}i2VX)TsatqHYPNLAsq9V99<+F7btdL8OiE*b$e$;!g^ zq>-$jnxtrqA4)PaUx0cj=Etdx^f{EP)ok`AwU9o6<7zuS4xyT8S^)-4EZX^+RLt9} zku#EiXjJ&nf5b<$4Hl2c!f@+|(dY?IHlUr7oP>5Qu2;deD=SU-3dHPti73tyhC#X*cdK!{4B#dHAhK=5W9T}yl zPS~hFB86vET%UW9O!5Q~xYc3cuN_KHz;JCFR=KNXY?{nuv~x0J&~D5e$K-pK8N%p> z=)!^vMTGR~5|Glexy3VG#iW|+)ra6tg#fQhV%X(6B@%w4vvZS05Rk<>R%8uEsdKW@ z!rF1St0?KkC13}i?xCbWYuD%I^GM(l!RD+Wroy*b2QjHkAIlYsV2l1^Y&$$VOjw4M z`;hMS9I-j_3$ygu+I)+XxLd%P9Zzq-@@z3~Ph++MbI)bRq3xX$Nf$v(&TL$-&q?R7 z!lj%zu22MlhERG0q6`c>4%c^Jfq@)6 z%<$V~V9`L1+%c8ftR_ zdOkFpLfH?%CkdNwHIu|ynCWoZeTw|eJe2kO&@ABsLSTp`o_0WvWfIzLmZ41TlNM9x zJ0UFfET%fgI&69@ZshgOu{J$%-vK2b%7(G>38E{w?|sN^CZN{t&=)#%20gDOZXB|X zm(ugl!Uy9>7kPHR`sXqUGjik6&dv>E;(eZL!tf8dJnAL4`dr!8DDIsQm}B+*o$RrO z1@o`R3B(;f?{Bf`*et{y4F9r9xd9;%U}JjAZR~hCZ4tpT?7lBK{?PZ=;27(8^}moO zf>pLeHuVvkSaJvV-Y1eDPN04zu~zq%#J%&_&s~|vwq|^u?+3IbPr{YqsmfzBoXLBi z-iP~nLeYL-!Ap021({5*Dhfm(v4^rVmtl`!+7{VakE`uIvc2|1=DTT^qA$=9i>D>U zAr^M|G@XDQ;YluZIJHirj<|8mxeh7QY^@_k@W6*z3&r_^1M_V*yWZi@XAyTh+;vzv zSqP*%!`MNa=#-J0Ydx-68Pxw7TR(%H#VZBN zB)D8A@ubf_)LXDjN)qr1xOs7O87SwS$ghwkR##RAGIyucY^CnQ$%J^5MAemdauchx zW&PzC{sq(R!!-XIBScKq8_e>@Qn1Y*LaSlM{GrMfZ~T={eYtJF&Q)OU$~TzhFQjmA z{smEm%$tcVbV}c}bq>>9<1WwISvy%X=z?W97xcz8;@SU-~>ugGW8ZM*E6=w(u*QC1uglek*0(X~_11 zvAvLbjxM@N15>k|FlQcwOT z>qWR{-L(d^sq1pYZZihlX0PNZN2)R-^6}#h$8~jOg9#%I(6H_nLRZwWgpRuGL6?>2 zzO3}7zYU68KiIz>@yqKyru73TLMLos35^?4{a^9?dqX=qJR6z&`9{Z}*M;-n<|*3r zUkn#+wxMm>JVWrR7=+gc#lKFN_f~?*TZ&Jw`<~;Ayuv|Iee$55+9t2-tsH2ozmN2r z8(5L9hS{$hoVMi?u8oJATO!%lyIWH*Y}z_yaIM(F_T@CbjCzhMYL0-mtU&W9y|_i(Vto{@PIF$dUsJC+ zs`*ZHLet7WfV^f&Y^}IX+$i2IJ}5qf_*U_EnAa)omOhp~l|GZckXFblWmU3j*$UZ8 z*-_ZkJmiy2ic^XX#d*aA#SKM;a+MO4?aIr_C(4$@w!}|WXH{2J*HkxD_f!v6carWW zeWqTiu2DCto78*Nby$5rRzHG0oX|Yi)SDVi+f8os8Owdk14|3v%D3@H`D6TX{se!L zKgFNs&+;AoIsQCf`kuA)NN+#2*h2GCxd diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/link.command.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/link.command.1.tlog index 46401e739ad777c23f59c3ffcc1f8222fcfbbc83..46f8fd95365718a09c9e3641142a8652f91de44b 100644 GIT binary patch delta 260 zcmbQCFhNoH|Gzi}7X~Ya7=~a5PlgZ%SBBup@@%&!J`&@{B0TvVlYpcigFk~4gBL>$ zHjO|PDp+*Bo&17@XYxB{E*x??Sj68?W@E!}#b$XnUPg4qoAudMVS>dBnG7WisSL%F arFkxI*5X{m$Y{FxESEQi{AOvMzsvw7m^+yO delta 130 zcmbQBI75N`|Gzi}X9lau@vOHez7u1HGAF-dltN+)OlD#hf%4x@7Gi;^dplW$RR<)# tIi8i35vt(*D?{+)Lc#ZfHCRM%Pxcd#z#(&vNrfNNoZFKx zFl*otmz!K5CWphc0&xwTG9r`t*yXU9xtWW@j-AnT@9FvkT zF9R1APk+X$o{K{Qt9XGp$ayk2%mM|6+T;RJ7OZ+NFoS|b37g#J0`V8jSR@WkmXVPG E0JiaL9RL6T delta 221 zcmZp%+F`-||6d$~GlSLSc-GsKF9?aS)_{5U`9H&1uP0v+6oT^NS>H~U5a*dJAjW|r zq6Oh?j%Q_MWQG{`e)0>^~i_@% diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/link.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/link.write.1.tlog index f26f52a9456b07c27dc17ab3b342372ec0dc042e..8a19251489329c0958c1265fec4b6a26ba6a525c 100644 GIT binary patch literal 2960 zcmeH}%MOAt5Jm6W#9v`yj0<Qos+qpzMgkP z*rS0)f(kMJ4HR+Bv2ihoGNG0hOqAg0G)*i*#H0l diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/mt.write.1.tlog b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/mt.write.1.tlog index aaaf9b6f743dac907eb8ee579b9a2b6a4aca70d3..791ee5f11753ff4d0240ad15b6fc2e579eea7177 100644 GIT binary patch delta 51 rcmeBUS;iv#|6d$~3xgFy3_~!3CqoE>D?{*Pea3?mPo(f;3f~6+Y{Cs; delta 27 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 a@tzsLlc*^2@&Mj8Z2&eNdGepM>iT~!ek6$i delta 41247 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

=K;M`iA(jnos4yxv*(;BG) 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

I>d~%c$2y{-cqE+57i1ze~P2RAL?o*qTIlC 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 L@BGm}>f`+ndD+K~ delta 44224 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 H-M{|@MFMY( diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/security_context.obj b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/security_context.obj index b43aedf893e9d9f9cbc9f187faf063b82763513c..b4cc6c51b7b619dfd38710cff0c5a1186fa7b206 100644 GIT binary patch delta 69124 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 nTh3U{TFzO{TbNw&C3|cLuFbC4s2)_Rhi3d56 diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/security_credentials.obj b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/security_credentials.obj index 0eb7c1615d468d7f0e1219dde50caadb421b5094..547e15d3b0ab8079017fbddf6cf7982eff91608f 100644 GIT binary patch delta 50281 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�tUgT|mK}fLP21dQ9;< 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 diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/vc100.pdb b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/vc100.pdb index adb0159116ca6d7723afda8957d5ba63f5f99a71..54f6ff218365f156813ea3665f7fb70449efd52c 100644 GIT binary patch delta 79083 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 Kzp#Mk6aOFoBh(uJ delta 78466 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 diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/worker.obj b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/Release/obj/kerberos/worker.obj index 826ebe2d051299c8488cc12f9a421ad6c8088b96..c6e2bcabef288a9c9b2d5550b667eda7514891f5 100644 GIT binary patch delta 14718 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 z zsiKF)%|FFOD{$H@ami&%6@4HsU2TLhD87&_FX+!~siHj_2p{0`xwstRi|OwM!q+Xq z#kC&;B4 zT~Xi?J=+yIFVp5O{HePOf11ypF4J`J=@*gK*j4a@%cdc&!bAbmP5a%1lQuA!eyR`x za48g*21>ybpS;Coq*8Flrv#-SZ7~@Gv==twZ({5p-Atl6Niy z3Oe+moOb`m%LBR!`V+EJJ8NSI9fb{Bq-iiFGm=9hC1Aq73j>%l!K?IC<&;r`>_ zxTAXtbCCOdPsVMk>?ya2Ir5Gb*o{Xru}&(C1BD58LpVQOPob|MrQHVc91k5N zBtj&;G)P!yF>*{al1di^p(lPcHwdHh<+3Fr$&Wr|q(QXZV7~Mlj2z22$4QYRohC3+ z2F=06B7B<8L6fRRO`!=+<_36WvrkBsv}+f!*Z;)W$Z`G&MS0=tc1J(KKd?z^{RcYX zbXu?=?_OowE+HQ&39?PH-Lk#1Jeg5;RQ7|cSXQAvAv+_xD7z~AMfR6>h3t{6O7@5B zAKCgYiCxm^sbHZq+@gOODHaw|y@Al!skjyBu>#Qyh0m)}L^>sQAfc zo&2Utrv9EwsdAC)7S{~dJ+22`kGNiTec<}sb%{Jf{=Ga~Zj_hE&&$i?_vIJlcjVRb zC2lL-zI8k0cE#?Owfk=UMfdC858U(g*&cg53Ow$5n0j~=d6+%Q zJT7|VD$6}K>A&&J^vv-zdmi&FQ5SojQJ?a>=eb8=Run1DD2f$ZmDd!jl*g2>yzbD_ z5JA4MR9EfwRQuNJnLa^Ps#&Z`(0#4Cpj)C!&?KpHHOZ>)HOo~?d{(Hkw5wEQnl-9D z+I6bM8ltMurKqaa>s2}0RMiFzRh?IFP@U0iR4vtPQk~LlRxQ_jt9q*5qPnQwsw(qI zQ@zlptBSPSR9|bht5#}usLIqkRqHevYSkH^Ow|paEEUyctCDnisza)Ss>j+g)g{#h z)lJo7)l=15Rg(82?{B=9d0)}dEkgv^!u9H1>U8yS{bltPO}RQzw?}i@=YZy@wm_3; zDAzpHywn`hCizrrSNJ^9uk~4JNcDN6H~Qr360|3Ex!P0uO6>#P|FjqNe{0X`H|fsl zPU)WMF6yr7F6nOQvh=z7efop?L;B?gv%XY+M8CsuPG7CRp*I=+)TbEM8S>-?YB*@v zU??_hGW=-RZ1};j#jwYaW;kltYbZ3FFq9ce4d)GXLa5+slPudrlS2iS_X*i4*-r?m zv$FHD3ka+$2(4?f8wjro*q2Q*h)D-bwO5IQeh zUm<*w$_!NDyx^?CJ0^<{Orx{Zw70ext5dCukOH zzSb<&Bx{yyzR|4Itk$g4q-dySgJzTFTTQNJkLG};K=Zxkgyxi{RC8vbrc8q<;;32T zljO6)XRS}FPqvTI=d{lmpE92tJ_*_^ZH_iqyGOfEo3A~fEzlm)9@Q3UA8RYMPqi7%NxDtCeBDVzRH^PKMAikw)g|2(#MTYnP2Fu>h3>BIfvytq_ClAe z-=xpfFJyq*t>25F%R|_i5O`(;U7@~2e_VeG0eDt_PJdBfuD^y5e4>A*uhRdff2sdN z|EK;h{Tl>kqG5?)sbRTcrD3&UEy6Pe(YXPUxfxNJX4qlKG-MlgAwKsS_8IaFMnta3 za2T;#i1n>=FnY2l(mLZ0Okfo9sGs7sw#1G-%m3=GO zmxeo6B8)w2W-MbVLzb~KwjuxLeb2qAnE!k}&U?=L?9cmsp7%YcJ6AR|Dc#V-gX7-6 z2X4qTUjHDfb9GU({7W0dHZA#MR|nVV1JYQYYu(I}qqNWFdicS}xue}0Uf9NQPv_>j z!Lhmf-Qe)tyKZnzXa&vHJ{faD%R( zEoxx#k1J?}JqicGTH$B98>a|lcky_2@QgyX6we8O4|kN?@w&L<7mfYHBf1BLNAxVZ z+ELr6acFq=pn$ND9>Ud*TZN;#Uqu^3g@<}MLD zbdQLL;WALdx3@=^Fyxp9oCR-*g0GhV*F7|%J4%jW)<-sr4UGs7ijRzm;y7n3uAFK1 zLwdTfrgs617kc)QK$@}{jeR{Fav7oI98={V5f+{@Br)du)I?+ugvWiY;h4~+cML@MV8J zkE=Yczc;)T3j23~OyNd)g6Du%&5em>9xa)ovYZlCY8qf7UMEp9Bu zjX~(0pun}tO3?F>wnA}&u2nJeH0FM28toe&mpGQoC=p;#7wTr$L3*21w)T@)0zxCB zDOxhno18&kwJv44TQHI-p~B@sMHuGn!QH4!rv}^50ICMN!vUei5H%bWz8(_Q@duhP zD=y6lTy%_YOms{T>O8@e?Z%o24*w=1#0-%HJE3$)fUXQh7?w5Y=^AA6^NaWM5AX}6 zMPniXk|xq1!V9O!!|u+=<%QKYT#zgEX6s zxyjU%sKkUJT*h?4J1Goi2^mS&?W-x3JBkPnkMIwO_mA+44GRd5iI0hkM9>JrFG)FA z1YeGjPoB>r-6buEWX!sVuy>HQ&dxVp|g9j&$#l@m*EHhN^<0dAH=1H29r);u! zT2eYDrG~u$Qtme~r^>9qCDZ?)NnD}@1H!!#o=_sR9qH57%ANwL;ZjU}XmF&zZ;UT4 zT6240_{c9TTQJ%hVf4thPBYh8AHP({R z61r@cM@RGh>;+YFH@?5Ukdo}i$Jq;ulI3>ssLLY!Gj42pTJosGWG;udXiS5U2!AF= z(yCUb1lc4oFV360RV?kXgYAVGDHK=RQtVpMR&B+VG!6BOXZ`b~a5+WcSOaNqBwAu# zzwwO<2#*az=|p>>L#iA%v9MHIhdXU)JS`COF|=*Q`v*ry`o{S6;4&=jh0Ih3TBs{h zy_+`2HMHV>Y91deEFIHNnw1W&NWM4>~4Q+aNDXCI%4K_e0er(VZjupTT3w)8!g#3&z!w7HUjEm_McG)t+*Snfg3kI zJ}q%fe7blvDiQu&Wv{zu1_zJ9t`oP==oo(rvs#;|1?Fc5+VzV=#TF8w=ju2K+pn=z z)SPgl{dxq1`LZ+4-qjAgjYPPz+6`CBVh!Cyeb!KzC#{hnwx+IW&$p8Z1#8@J>eQMp zc3W_L8gs40EPiNZm`Ukcy5QZ`s^FfGyw;I|b=KOicnt2;T04mi%YLEgc3@Tv>KZ}#K$K-Y+QQc1hi_y`s3wSz$Fix5I<&I;<&{4u{bZsv{-RXKUAto3+)7r zxpp1=BBJ8I35bdgjtGwr^X*BWa5qf0=Y(^GP84nb6nbiFibIFGu8K!RaTB9TifWcU zFe*48+&?sqEqv^H4V9m9Mha@?dwhr-!)@}|*v|6r4h_m&84Hhbek&}J9PJbJS$s-3@C z*TU4wn+J=pJHo}y0l0It+oG||L&#Wh4~1)+ZJT2HMFedST5hlr=4@$>x|VNo#Lm2D zOJ^SAd9lTfrltK>>;B^LcDA@s0e$=eB7?&NBT$7i3&9-;bRRG`S_Xn31jk3nh%u=M z4G1$acaaElx7s*}P`HAJsw$cH^n9~ zDkUW~p6+BJ%!|Kj%~EuUv#-V3!NU^=k7UgK8FLUif-gM2W;X^&gfZJ%_aDlL>2FvQ zN*J1+m=^zCO4`Wy!Srl*oEiTGCF#POuqvLP+L$s>3&2)f6lS11wmSBbnlW4=RBp3r z+m~6`jQq3%e0X*KY`cx)5Jo#CdOSQKdB~_la~F)22)^6f@W~RP_jWgaphU>nZasN8 zzfj}1*p9yTgPIJU#Co#^`rkvBbQG_G2DTB7LZB+0xYTmCzVU|*!} zF_oDgS(}k6&0^F4)Sjl!iqm~XXGOIvCz+C>c}3SP@QYE}uUjQ|gPCqM*a4o2c`onw+dWDc4?;GsT&6 z4gai!ju{f{mBz@=@IDs*86!TUOtE+o0?#BnBY%b?<#1~;%{M(3{~29dd6+(KIdV99pmgD zts5EVw9Lt(w|2TRDLS&c8K=p~Y;EDraq4N^JBZ{@5ZXH!bD3oO3$}G68=EA}47FsN z)ln*py6{VDW^)w_V3pLkglW`VoGyu?@vowfG=F7M`B_8DDK4BhJ_#!-I>Hp;RK=Rf4_!345}eyK3|)f} zgEwA65CA1z(1kW`Iawk{W4z0h;j%wwDjvH~p1pN>S|U#t<$20@o-&?&b$M)&XBzTk zzo0zXlV32V(z;AiWXhq6vYJtUvzk$3`|I+!BhUXR&nsr^71MK|E{_^{W>I7Bn6Y<^ z=U{CfOW*X)$TUwFee#*?NRUm}i z%C!MVZ^g^O5n-Dx?0yfsjoHQY5keo zPYdd*&3m@4u9nc}>+1S8@1OZ~CxlfW&2)cJkEiIb7kpPZY^d^vRXmP4I#>@ldUpbc z1~^9ez%TUKqAP^c=jg9sFMa;p7f#aW3V-+&8i`%gusjgjG=v~h6ar^($PR_;5KM-I z!Cw$;=n)Ptq3<=?`EOw7H?{pLKqLoE?w1 z@vaxx!&`%G6tr&A3L8DbGf(QXEr;iDW7_3Q{qJQ%L3r@Fy0d;BztRrDl6sOdO;390gcg~1CfCO%J{Qci|=R{FIre()-v5pJ2@IgG-AT5 z$d}1rYn?4aNMy5A;wp%cm`g?^gQp{s*sg%FWHk#7@tBQDj5E!eijrYO+$oyua_YuB zoHyaRBfd1a&cSC<+j;D6MoPxbmFA^P7E1A}LN1@hIE|^HgE0>;g;}R$c=S0XBfbUD zo&1^tt*oz68i07PO~hWWc2GKH5I`Zl$W=x(#< zS(E7OF(}GZ|7EsXZX(&IL0T=VC1%mzP4t2^_|AnneA6s?fsw8;1h%9Ilu-l{-?1># zg&C=${+F6HT@p3bu>Wm1GZy+bg%bwFPq4fZRFLD@kdH&^R9J|EugvOCa*<350N_#C#>5|{TbZNQf+e}4;5|Cfws-eOibPR9GHTH z-qWGj%xgOX+|2g@GoXw4K6?iEn(hrJW}4``0nC)_QlRuM1(h}^sI*bRW$eb!wZ^05tNCC< z)C-}BL#~4A$yHE2TT#yure~J|_3R?C3qi2?v>sBu5WT1`eW8}L;cJ5Vgko}V5s*eD z3iayG_ZSA|K{tSXWW{1Ag8d|V2^;Wx`NGKu6iafl4k$e5VTm-r%aqU6uB#9v==lNk z{49FDBxl-9XBpBkGMq!l4=6%i*L;G>wH}inegQ!w)Uu(bPyXt{X~z}bRPARWMrRbF zvl#mUB3}kamDdyuR~elwIqvJ6tm}%Q{B5T!r#em1RfjtVI(dtTRba z(TiKm)mw^CbQrH_b3gfZIgD*oDaXb6hy1=ATw03vY?(LWGLIuoR>0nmXD_Tk{F~%{ zTnXN-Dk(@1Zx~Mn-Fzy@-jyIV1NG)gh(%2MtOENQursECtH4HrVi{Ew5kIrY&DDSm zm1OQJ&_N|RvI_daZQ{Hdw!vL;el_g)ytXkZ?Qk7Qt9)qFEU%Ul^6MHHE&BP2DAt1V z6MiPG{orTrT8MQsm$ES*HDP72EoXHtt)^lZ@vH<45J+ij|r0V+!rRUf#j9Z!BTeL`O)(30gwo^zA32|_Xe6|jMUqKV~km%Pz zyWW*7u9Yq#6oQYrO_djdBYgg`0m5$p z7c*QuH$a(Lpn3z$gl4rDn=IV)A@O@Q!Ix&S_nRQhEEcsHBI=24-ts}Le9H$ho2?(j zlD2*%_S?1(V)wQ|SF;7r?Qj?1ICEC!NcX5MeXy88HD(WtHG!^d546KN{Cf{8N2e03!+YdhNe#W{UPe#a zYo@m$HhaOE9Nh~)BWL73aPg$Q)0oQaV1uPC&eS^*h&Qq6n@Ozkt=v}w_@n!30I$Wv zjca2Hcr&x8hXUS{w!ep-T*eVvFY`M(^@`fmr#qSTI|ct0dIfQ`iI5U87O!m4IPw~6#S1cy!24qI5U z<2IPF1!E7zY`noX#NIc4AjyZJFBFLKo2fi~4cSZ@904NATa#@^Kw|Ylw>8N<1h(Yi z5eSxktok{sW|f{!ZIK^Of`p_Ug;lkc{l6X=1|EaWU}kqd0g~ErEh_{2b%Rbo4a0=8 zIt&J6xWzZyK=;dX_gH!%a}R-yVeM%c+W<<5Z8k`b$2}VWJJ*5QT(9c z^m(`l*5xY9`W2Pw#j5K9da^1fd;S1-t8x`RV5Q<=^e%by2dFH|RlZ1639HI{Nc;t8 zsbRuZD6H&;g7jeRD#aV)SE3pfzB81o=n)DHi0gNStiFJ+k>%v{1$>PxC-*KuVm%-H zKKS53GA^<@YyybklKC&J>$jctA7*M%OE8wDbRz=z6@%( zPxf5~0UnU(KVb%YRH#y}!3$}76^6!k*!dB$({b}{+6AGbExunxI7#Mz-8o?G4sIWe+RJnEv2PT(85)#?Mp;l4q(=GG+}}TjD;3j~G}5E=L7fQ2{+QizJuF_8#llT;Q6|Te_?SvCy#DIZlm*b0sbV} zx4^l7Jky(hkhaL5*)jPbg5Gq3FO`S*OcZ0HLyZEA z={$+Ni62Jw`*sD@{(@;Qz$UbgYCp-e=PFQpE-9%3iRE?$ zD%!3fy>3E}R_xT0!91*BxhI`(gX55EpE}zb&3tI9g4ue>Y!%~Yh&}XmcQ0EPBYoW! z&ox<2AwE;YNa#?b03E0>tlJRP6$LqXkHU+mvL**J$ssVWqUvGABq%I-k(Mxr3O zeg`_Xsg$ylbd4~5B2ITM%vYDX&(Y34gUsd=U15NoUGX@F5@-+X2^BJY}Q9H_Kdf!G4lnc z;3%r4^rNczjgV}+2ae>2zahJ(gEqVm(x$b{tM0>BHNvRyy@CW=A2 zzMRh7qK$ba>GJ?0Y(Bh`?qn{S-bqUyz*Klc{2s#O_RndlRPb-W10sp% z8$2aMlAt&61^hs==rF~w?+tZ}C%*4M3CSeo9k^K1U*-a|C8Mjs0p|?wz{hPon{#mE z{6-}vB#%oCN=q4+TFXirqf5*(x@z!(31nC`zSSg?8P%Y|VYfKktAhvD8Fo}$M z&scKbGnReg@aR2^1m6YycvlEnFa@vC3)bV+cflDp^ODYxcEEpu1<;ocA!H#PqRBaN z@-v>%deR|;OcRF#bciO^;^5PO{}#mw9YV-+Iz*FR7W~&Z%oB%lHW=D851 zF_m}J7{V??D=)q=4+n_7hWC(MWeiH(^||DP(X|n8M+Rv4si^O!hF{Vu0r{HqR(vLM zijK|E^0w&MdMz)-;kcI9AaAu6e_<3)*N>-PkGPaUBPhJhv5`qSK1goXwbHDM@zd`@ zAMrobG3_n%JW<>-xv(7>qcJx$Q^3>DG2GZuDe1NBB#^UuJ{;nSv=gsI=VCkYhg?Ok ze*c6O)YH5{bBpE;q2X1M(22JteLC~0rZDb&LV(=p%>Rh$2XtX6_^t~-#>CCzt7!co z47?AY&ciP9UDuiw2_}=e@)Gh_SNx@m7{|9%@}oEge90%77?M88aN|opuGIlkX3~&_ zWrl=ydu(7=+LN`r+~v5C?zLbC^Hh9)2UE{n7ei^0Plb93G|&?wH>eI2P6Y7@5Ji+dcpuEj@E&{?7RUV_{5-6m z$-(GoG06+YI0MLmVBXE-&3@5D0I}$aq)?(1hi`iFZusfxr=BQQKo;R7OT)3A=&u;Y z2{DWYA$)85d7QQNi_NL~#%`MuQKFt>=sBS2dHmZa$Ntx?D3TMx%i^9rePU^yu>)r_ zqzk2+q+6uhrA5*`(nHcx=`r1k=X^rG~N^i{{J(wou;(kIe?r3>(j^-Qv#e&negQl2g9?meUib+fFx$MJTW6bybn?yu*3D^ETJ5&N~&monJeb zIIoZ&bk5KncD^Jpb2iAXIxp4TbUvfVa#`k*@3Prtr%SQR?=Dp?4_q>2)h>CmDY7-P z1+uNOld^NNE3!KzBb1kfY}J*!UG7-rX3!P7Z+741{+GMKeV@D0{j__z`!>Y|_u0Dt zc@%i8_b_^tcvP!OJ!YtndffEbEH}za<>%xF6)!#Skg8B#Hu} zy=S&QLwV6_igK1VTlu?os`80?nsSR*j`En-3}un`Oyy3^Y~^jQIm%+qJmqt>p!`ca zUwKcxKxxn{RL=4u%7yAh${SvJ%Gc_}%5twI%D3vJ$}{R^%EjvC%Bh+a%4*F@nQvyYg4%PURa7Srx|H@Rzj27{*H{ zpHtmYT~(FoR;XWk8PvJj9bTClqt|&&vDX^?E3aAJ%e+r$c6t9#yT?0Izu$X{{+Rbd z{eACZ?GjCy_E$~0?qAK{+8pf--E{3$-5PDV_N4Zy_7Cl!+6&sN+GVG$fZ^!xPB^au3s^au5?^@sFV^+)s%_1E-| z^>6f9ovQUyJCRA@yi0?H(j{bVIIrw@M0!kmTv~=WIwL)YSo#CebV>RrBI>I2y0k)C zS%a##()UvGKAhhIS!7EDZ}-&$mxnHoU7otUaCzhM&ZQdhFh!Ov%aP4RJmeuN@?{%j zTM!w)$P6;0tXQ^3c35_l;p99+N~1`=a&jrI_Cfg}`C<7Hd71pA{FMAOBH+CIlKis# zPx)2(HTiXUrTn@4ANec!8+oo`zGAUrrDCn3K(S7-L9tP>NwHb6MX^n>U9nSPQ0!Lh zMb!MJIIK9LIHNeLxT?6Os8HNgR4HyN?kMgm?kOHB9w{Cxo+zFwsuj7Oa|}a!Ve`S2 zD_31sUBT6>!Zp0Bx~KYEbzk*B^-%Rl^;q>p^;Gpt^<4Fj>V@j1>XquX>W%7O)mv4y zYKD5QdZBu;dWG7cKBhjYKBK;NH zdlq5zJA&wf_7Vc=s`k3JQu~+omiBM$Lj>1zZH8{PZmDiEMb}o{FNiP$VypyFwhs|@ zSa)1krYlFZUDaLJ-O%0BJ<>hVW$Lr_GxYz{&(hCEHG5q&7^#6UW`=13q{vWJ63^D)! diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/binding.sln b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/binding.sln index 613706c..168ca65 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/binding.sln +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/binding.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kerberos", "kerberos.vcxproj", "{1B64D16F-5EFD-D4B9-21FA-9B59968ACDFE}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kerberos", "kerberos.vcxproj", "{49745038-66A3-A1AA-5013-73150849FE80}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -8,10 +8,10 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1B64D16F-5EFD-D4B9-21FA-9B59968ACDFE}.Debug|x64.ActiveCfg = Debug|x64 - {1B64D16F-5EFD-D4B9-21FA-9B59968ACDFE}.Debug|x64.Build.0 = Debug|x64 - {1B64D16F-5EFD-D4B9-21FA-9B59968ACDFE}.Release|x64.ActiveCfg = Release|x64 - {1B64D16F-5EFD-D4B9-21FA-9B59968ACDFE}.Release|x64.Build.0 = Release|x64 + {49745038-66A3-A1AA-5013-73150849FE80}.Debug|x64.ActiveCfg = Debug|x64 + {49745038-66A3-A1AA-5013-73150849FE80}.Debug|x64.Build.0 = Debug|x64 + {49745038-66A3-A1AA-5013-73150849FE80}.Release|x64.ActiveCfg = Release|x64 + {49745038-66A3-A1AA-5013-73150849FE80}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/config.gypi b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/config.gypi index 2e7f4dc..0b6e248 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/config.gypi +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/config.gypi @@ -31,7 +31,7 @@ "v8_no_strict_aliasing": 1, "v8_use_snapshot": "true", "visibility": "", - "nodedir": "C:\\Users\\Christopher\\.node-gyp\\0.10.24", + "nodedir": "C:\\Users\\Christopher\\.node-gyp\\0.10.25", "copy_dev_lib": "true", "standalone_static_library": 1, "registry": "https://registry.npmjs.org/", @@ -39,6 +39,7 @@ "always_auth": "", "bin_links": "true", "browser": "", + "ca": "", "cache": "C:\\Users\\Christopher\\AppData\\Roaming\\npm-cache", "cache_lock_stale": "60000", "cache_lock_retries": "10", @@ -76,7 +77,7 @@ "local_address": "", "long": "", "message": "%s", - "node_version": "v0.10.24", + "node_version": "v0.10.25", "npat": "", "onload_script": "", "optional": "true", @@ -84,7 +85,7 @@ "production": "", "proprietary_attribs": "true", "https_proxy": "", - "user_agent": "node/v0.10.24 win32 x64", + "user_agent": "node/v0.10.25 win32 x64", "rebuild_bundle": "true", "rollback": "true", "save": "", diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/kerberos.vcxproj b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/kerberos.vcxproj index 933692b..90a2b74 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/kerberos.vcxproj +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/build/kerberos.vcxproj @@ -11,7 +11,7 @@ - {1B64D16F-5EFD-D4B9-21FA-9B59968ACDFE} + {49745038-66A3-A1AA-5013-73150849FE80} Win32Proj kerberos @@ -41,7 +41,7 @@ - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;%(AdditionalIncludeDirectories) EnableFastChecks true ProgramDatabase @@ -58,7 +58,7 @@ Level3 - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.24\$(Configuration)\node.lib + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.25\$(Configuration)\node.lib true true true @@ -69,13 +69,13 @@ MachineX64 - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;%(AdditionalIncludeDirectories) WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;BUILDING_V8_SHARED=1;BUILDING_UV_SHARED=1;BUILDING_NODE_EXTENSION;DEBUG;_DEBUG;%(PreprocessorDefinitions);%(PreprocessorDefinitions) - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;%(AdditionalIncludeDirectories) /MP %(AdditionalOptions) true ProgramDatabase @@ -100,7 +100,7 @@ /LTCG %(AdditionalOptions) - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.24\$(Configuration)\node.lib + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;C:\Users\Christopher\.node-gyp\0.10.25\$(Configuration)\node.lib true true true @@ -114,7 +114,7 @@ MachineX64 - C:\Users\Christopher\.node-gyp\0.10.24\src;C:\Users\Christopher\.node-gyp\0.10.24\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.24\deps\v8\include;%(AdditionalIncludeDirectories) + C:\Users\Christopher\.node-gyp\0.10.25\src;C:\Users\Christopher\.node-gyp\0.10.25\deps\uv\include;C:\Users\Christopher\.node-gyp\0.10.25\deps\v8\include;%(AdditionalIncludeDirectories) WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;BUILDING_V8_SHARED=1;BUILDING_UV_SHARED=1;BUILDING_NODE_EXTENSION;%(PreprocessorDefinitions);%(PreprocessorDefinitions) diff --git a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/package.json b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/package.json index 327a528..7534d5e 100644 --- a/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/package.json +++ b/node_modules/mongoskin/node_modules/mongodb/node_modules/kerberos/package.json @@ -32,7 +32,7 @@ "homepage": "https://github.com/christkv/kerberos", "_id": "kerberos@0.0.3", "dist": { - "shasum": "100858d02e6d119b076b78b1f6e142f2a13c2168" + "shasum": "a04261785d96b7124664f202de9920b17b089652" }, "_from": "kerberos@0.0.3", "_resolved": "https://registry.npmjs.org/kerberos/-/kerberos-0.0.3.tgz" diff --git a/node_modules/mongoskin/node_modules/mongodb/package.json b/node_modules/mongoskin/node_modules/mongodb/package.json index 06dc97f..a401fe5 100644 --- a/node_modules/mongoskin/node_modules/mongodb/package.json +++ b/node_modules/mongoskin/node_modules/mongodb/package.json @@ -7,7 +7,7 @@ "driver", "db" ], - "version": "1.3.19", + "version": "1.3.20", "author": { "name": "Christian Amor Kvalheim", "email": "christkv@gmail.com" @@ -168,6 +168,9 @@ }, { "name": "Matt Self" + }, + { + "name": "Gregory Langlais" } ], "repository": { @@ -178,11 +181,11 @@ "url": "http://github.com/mongodb/node-mongodb-native/issues" }, "dependencies": { - "bson": "0.2.2", + "bson": "0.2.3", "kerberos": "0.0.3" }, "devDependencies": { - "dox": "0.2.0", + "dox": "0.4.4", "uglify-js": "1.2.5", "ejs": "0.6.1", "request": "2.12.0", @@ -217,12 +220,12 @@ "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], - "readme": "Up to date documentation\n========================\n\n[Documentation](http://mongodb.github.com/node-mongodb-native/)\n\nInstall\n=======\n\nTo install the most recent release from npm, run:\n\n npm install mongodb\n\nThat may give you a warning telling you that bugs['web'] should be bugs['url'], it would be safe to ignore it (this has been fixed in the development version)\n\nTo install the latest from the repository, run::\n\n npm install path/to/node-mongodb-native\n\nCommunity\n=========\nCheck out the google group [node-mongodb-native](http://groups.google.com/group/node-mongodb-native) for questions/answers from users of the driver.\n\nLive Examples\n============\n\n\nIntroduction\n============\n\nThis is a node.js driver for MongoDB. It's a port (or close to a port) of the library for ruby at http://github.com/mongodb/mongo-ruby-driver/.\n\nA simple example of inserting a document.\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n var collection = db.collection('test_insert');\n collection.insert({a:2}, function(err, docs) {\n \n collection.count(function(err, count) {\n console.log(format(\"count = %s\", count));\n });\n\n // Locate all the entries using find\n collection.find().toArray(function(err, results) {\n console.dir(results);\n // Let's close the db\n db.close();\n }); \n });\n })\n```\n\nData types\n==========\n\nTo store and retrieve the non-JSON MongoDb primitives ([ObjectID](http://www.mongodb.org/display/DOCS/Object+IDs), Long, Binary, [Timestamp](http://www.mongodb.org/display/DOCS/Timestamp+data+type), [DBRef](http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef), Code).\n\nIn particular, every document has a unique `_id` which can be almost any type, and by default a 12-byte ObjectID is created. ObjectIDs can be represented as 24-digit hexadecimal strings, but you must convert the string back into an ObjectID before you can use it in the database. For example:\n\n```javascript\n // Get the objectID type\n var ObjectID = require('mongodb').ObjectID;\n\n var idString = '4e4e1638c85e808431000003';\n collection.findOne({_id: new ObjectID(idString)}, console.log) // ok\n collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined\n```\n\nHere are the constructors the non-Javascript BSON primitive types:\n\n```javascript\n // Fetch the library\n var mongo = require('mongodb');\n // Create new instances of BSON types\n new mongo.Long(numberString)\n new mongo.ObjectID(hexString)\n new mongo.Timestamp() // the actual unique number is generated on insert.\n new mongo.DBRef(collectionName, id, dbName)\n new mongo.Binary(buffer) // takes a string or Buffer\n new mongo.Code(code, [context])\n new mongo.Symbol(string)\n new mongo.MinKey()\n new mongo.MaxKey()\n new mongo.Double(number)\t// Force double storage\n```\n\nThe C/C++ bson parser/serializer\n--------------------------------\n\nIf you are running a version of this library has the C/C++ parser compiled, to enable the driver to use the C/C++ bson parser pass it the option native_parser:true like below\n\n```javascript\n // using native_parser:\n MongoClient.connect('mongodb://127.0.0.1:27017/test'\n , {db: {native_parser: true}}, function(err, db) {})\n```\n\nThe C++ parser uses the js objects both for serialization and deserialization.\n\nGitHub information\n==================\n\nThe source code is available at http://github.com/mongodb/node-mongodb-native.\nYou can either clone the repository or download a tarball of the latest release.\n\nOnce you have the source you can test the driver by running\n\n $ make test\n\nin the main directory. You will need to have a mongo instance running on localhost for the integration tests to pass.\n\nExamples\n========\n\nFor examples look in the examples/ directory. You can execute the examples using node.\n\n $ cd examples\n $ node queries.js\n\nGridStore\n=========\n\nThe GridStore class allows for storage of binary files in mongoDB using the mongoDB defined files and chunks collection definition.\n\nFor more information have a look at [Gridstore](https://github.com/mongodb/node-mongodb-native/blob/master/docs/gridfs.md)\n\nReplicasets\n===========\nFor more information about how to connect to a replicaset have a look at the extensive documentation [Documentation](http://mongodb.github.com/node-mongodb-native/)\n\nPrimary Key Factories\n---------------------\n\nDefining your own primary key factory allows you to generate your own series of id's\n(this could f.ex be to use something like ISBN numbers). The generated the id needs to be a 12 byte long \"string\".\n\nSimple example below\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n // Custom factory (need to provide a 12 byte array);\n CustomPKFactory = function() {}\n CustomPKFactory.prototype = new Object();\n CustomPKFactory.createPk = function() {\n return new ObjectID(\"aaaaaaaaaaaa\");\n }\n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n db.dropDatabase(function(err, done) {\n \n db.createCollection('test_custom_key', function(err, collection) {\n \n collection.insert({'a':1}, function(err, docs) {\n \n collection.find({'_id':new ObjectID(\"aaaaaaaaaaaa\")}).toArray(function(err, items) {\n console.dir(items);\n // Let's close the db\n db.close();\n });\n });\n });\n });\n });\n```\n\nDocumentation\n=============\n\nIf this document doesn't answer your questions, see the source of\n[Collection](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js)\nor [Cursor](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/cursor.js),\nor the documentation at MongoDB for query and update formats.\n\nFind\n----\n\nThe find method is actually a factory method to create\nCursor objects. A Cursor lazily uses the connection the first time\nyou call `nextObject`, `each`, or `toArray`.\n\nThe basic operation on a cursor is the `nextObject` method\nthat fetches the next matching document from the database. The convenience\nmethods `each` and `toArray` call `nextObject` until the cursor is exhausted.\n\nSignatures:\n\n```javascript\n var cursor = collection.find(query, [fields], options);\n cursor.sort(fields).limit(n).skip(m).\n\n cursor.nextObject(function(err, doc) {});\n cursor.each(function(err, doc) {});\n cursor.toArray(function(err, docs) {});\n\n cursor.rewind() // reset the cursor to its initial state.\n```\n\nUseful chainable methods of cursor. These can optionally be options of `find` instead of method calls:\n\n * `.limit(n).skip(m)` to control paging.\n * `.sort(fields)` Order by the given fields. There are several equivalent syntaxes:\n * `.sort({field1: -1, field2: 1})` descending by field1, then ascending by field2.\n * `.sort([['field1', 'desc'], ['field2', 'asc']])` same as above\n * `.sort([['field1', 'desc'], 'field2'])` same as above\n * `.sort('field1')` ascending by field1\n\nOther options of `find`:\n\n* `fields` the fields to fetch (to avoid transferring the entire document)\n* `tailable` if true, makes the cursor [tailable](http://www.mongodb.org/display/DOCS/Tailable+Cursors).\n* `batchSize` The number of the subset of results to request the database\nto return for every request. This should initially be greater than 1 otherwise\nthe database will automatically close the cursor. The batch size can be set to 1\nwith `batchSize(n, function(err){})` after performing the initial query to the database.\n* `hint` See [Optimization: hint](http://www.mongodb.org/display/DOCS/Optimization#Optimization-Hint).\n* `explain` turns this into an explain query. You can also call\n`explain()` on any cursor to fetch the explanation.\n* `snapshot` prevents documents that are updated while the query is active\nfrom being returned multiple times. See more\n[details about query snapshots](http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database).\n* `timeout` if false, asks MongoDb not to time out this cursor after an\ninactivity period.\n\n\nFor information on how to create queries, see the\n[MongoDB section on querying](http://www.mongodb.org/display/DOCS/Querying).\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n var collection = db\n .collection('test')\n .find({})\n .limit(10)\n .toArray(function(err, docs) {\n console.dir(docs);\n });\n });\n```\n\nInsert\n------\n\nSignature:\n\n```javascript\n collection.insert(docs, options, [callback]);\n```\n\nwhere `docs` can be a single document or an array of documents.\n\nUseful options:\n\n* `safe:true` Should always set if you have a callback.\n\nSee also: [MongoDB docs for insert](http://www.mongodb.org/display/DOCS/Inserting).\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n \n db.collection('test').insert({hello: 'world'}, {w:1}, function(err, objects) {\n if (err) console.warn(err.message);\n if (err && err.message.indexOf('E11000 ') !== -1) {\n // this _id was already inserted in the database\n }\n });\n });\n```\n\nNote that there's no reason to pass a callback to the insert or update commands\nunless you use the `safe:true` option. If you don't specify `safe:true`, then\nyour callback will be called immediately.\n\nUpdate; update and insert (upsert)\n----------------------------------\n\nThe update operation will update the first document that matches your query\n(or all documents that match if you use `multi:true`).\nIf `safe:true`, `upsert` is not set, and no documents match, your callback will return 0 documents updated.\n\nSee the [MongoDB docs](http://www.mongodb.org/display/DOCS/Updating) for\nthe modifier (`$inc`, `$set`, `$push`, etc.) formats.\n\nSignature:\n\n```javascript\n collection.update(criteria, objNew, options, [callback]);\n```\n\nUseful options:\n\n* `safe:true` Should always set if you have a callback.\n* `multi:true` If set, all matching documents are updated, not just the first.\n* `upsert:true` Atomically inserts the document if no documents matched.\n\nExample for `update`:\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n db.collection('test').update({hi: 'here'}, {$set: {hi: 'there'}}, {w:1}, function(err) {\n if (err) console.warn(err.message);\n else console.log('successfully updated');\n });\n });\n```\n\nFind and modify\n---------------\n\n`findAndModify` is like `update`, but it also gives the updated document to\nyour callback. But there are a few key differences between findAndModify and\nupdate:\n\n 1. The signatures differ.\n 2. You can only findAndModify a single item, not multiple items.\n\nSignature:\n\n```javascript\n collection.findAndModify(query, sort, update, options, callback)\n```\n\nThe sort parameter is used to specify which object to operate on, if more than\none document matches. It takes the same format as the cursor sort (see\nConnection.find above).\n\nSee the\n[MongoDB docs for findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command)\nfor more details.\n\nUseful options:\n\n* `remove:true` set to a true to remove the object before returning\n* `new:true` set to true if you want to return the modified object rather than the original. Ignored for remove.\n* `upsert:true` Atomically inserts the document if no documents matched.\n\nExample for `findAndModify`:\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n db.collection('test').findAndModify({hello: 'world'}, [['_id','asc']], {$set: {hi: 'there'}}, {}, function(err, object) {\n if (err) console.warn(err.message);\n else console.dir(object); // undefined if no matching object exists.\n });\n });\n```\n\nSave\n----\n\nThe `save` method is a shorthand for upsert if the document contains an\n`_id`, or an insert if there is no `_id`.\n\nSponsors\n========\nJust as Felix Geisendörfer I'm also working on the driver for my own startup and this driver is a big project that also benefits other companies who are using MongoDB.\n\nIf your company could benefit from a even better-engineered node.js mongodb driver I would appreciate any type of sponsorship you may be able to provide. All the sponsors will get a lifetime display in this readme, priority support and help on problems and votes on the roadmap decisions for the driver. If you are interested contact me on [christkv AT g m a i l.com](mailto:christkv@gmail.com) for details.\n\nAnd I'm very thankful for code contributions. If you are interested in working on features please contact me so we can discuss API design and testing.\n\nRelease Notes\n=============\n\nSee HISTORY\n\nCredits\n=======\n\n1. [10gen](http://github.com/mongodb/mongo-ruby-driver/)\n2. [Google Closure Library](http://code.google.com/closure/library/)\n3. [Jonas Raoni Soares Silva](http://jsfromhell.com/classes/binary-parser)\n\nContributors\n============\n\nAaron Heckmann, Christoph Pojer, Pau Ramon Revilla, Nathan White, Emmerman, Seth LaForge, Boris Filipov, Stefan Schärmeli, Tedde Lundgren, renctan, Sergey Ukustov, Ciaran Jessup, kuno, srimonti, Erik Abele, Pratik Daga, Slobodan Utvic, Kristina Chodorow, Yonathan Randolph, Brian Noguchi, Sam Epstein, James Harrison Fisher, Vladimir Dronnikov, Ben Hockey, Henrik Johansson, Simon Weare, Alex Gorbatchev, Shimon Doodkin, Kyle Mueller, Eran Hammer-Lahav, Marcin Ciszak, François de Metz, Vinay Pulim, nstielau, Adam Wiggins, entrinzikyl, Jeremy Selier, Ian Millington, Public Keating, andrewjstone, Christopher Stott, Corey Jewett, brettkiefer, Rob Holland, Senmiao Liu, heroic, gitfy\n\nLicense\n=======\n\n Copyright 2009 - 2012 Christian Amor Kvalheim.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n", + "readme": "## MongoDB Node.JS Driver\n \n| what | where |\n|---------------|------------------------------------------------|\n| documentation | http://mongodb.github.io/node-mongodb-native/ |\n| apidoc | http://mongodb.github.io/node-mongodb-native/ |\n| source | https://github.com/mongodb/node-mongodb-native |\n| mongodb | http://www.mongodb.org/ |\n\n### Bugs / Feature Requests\n\nThink you’ve found a bug? Want to see a new feature in PyMongo? Please open a\ncase in our issue management tool, JIRA:\n\n- Create an account and login .\n- Navigate to the NODE project .\n- Click **Create Issue** - Please provide as much information as possible about the issue type and how to reproduce it.\n\nBug reports in JIRA for all driver projects (i.e. NODE, PYTHON, CSHARP, JAVA) and the\nCore Server (i.e. SERVER) project are **public**.\n\n### Questions and Bug Reports\n\n * mailing list: https://groups.google.com/forum/#!forum/node-mongodb-native\n * jira: http://jira.mongodb.org/\n\n### Change Log\n\nhttp://jira.mongodb.org/browse/NODE\n\n## Install\n\nTo install the most recent release from npm, run:\n\n npm install mongodb\n\nThat may give you a warning telling you that bugs['web'] should be bugs['url'], it would be safe to ignore it (this has been fixed in the development version)\n\nTo install the latest from the repository, run::\n\n npm install path/to/node-mongodb-native\n\n## Live Examples\n\n\n## Introduction\n\nThis is a node.js driver for MongoDB. It's a port (or close to a port) of the library for ruby at http://github.com/mongodb/mongo-ruby-driver/.\n\nA simple example of inserting a document.\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format;\n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n var collection = db.collection('test_insert');\n collection.insert({a:2}, function(err, docs) {\n \n collection.count(function(err, count) {\n console.log(format(\"count = %s\", count));\n });\n\n // Locate all the entries using find\n collection.find().toArray(function(err, results) {\n console.dir(results);\n // Let's close the db\n db.close();\n });\n });\n })\n```\n\n## Data types\n\nTo store and retrieve the non-JSON MongoDb primitives ([ObjectID](http://www.mongodb.org/display/DOCS/Object+IDs), Long, Binary, [Timestamp](http://www.mongodb.org/display/DOCS/Timestamp+data+type), [DBRef](http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef), Code).\n\nIn particular, every document has a unique `_id` which can be almost any type, and by default a 12-byte ObjectID is created. ObjectIDs can be represented as 24-digit hexadecimal strings, but you must convert the string back into an ObjectID before you can use it in the database. For example:\n\n```javascript\n // Get the objectID type\n var ObjectID = require('mongodb').ObjectID;\n\n var idString = '4e4e1638c85e808431000003';\n collection.findOne({_id: new ObjectID(idString)}, console.log) // ok\n collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined\n```\n\nHere are the constructors the non-Javascript BSON primitive types:\n\n```javascript\n // Fetch the library\n var mongo = require('mongodb');\n // Create new instances of BSON types\n new mongo.Long(numberString)\n new mongo.ObjectID(hexString)\n new mongo.Timestamp() // the actual unique number is generated on insert.\n new mongo.DBRef(collectionName, id, dbName)\n new mongo.Binary(buffer) // takes a string or Buffer\n new mongo.Code(code, [context])\n new mongo.Symbol(string)\n new mongo.MinKey()\n new mongo.MaxKey()\n new mongo.Double(number)\t// Force double storage\n```\n\n### The C/C++ bson parser/serializer\n\nIf you are running a version of this library has the C/C++ parser compiled, to enable the driver to use the C/C++ bson parser pass it the option native_parser:true like below\n\n```javascript\n // using native_parser:\n MongoClient.connect('mongodb://127.0.0.1:27017/test'\n , {db: {native_parser: true}}, function(err, db) {})\n```\n\nThe C++ parser uses the js objects both for serialization and deserialization.\n\n## GitHub information\n\nThe source code is available at http://github.com/mongodb/node-mongodb-native.\nYou can either clone the repository or download a tarball of the latest release.\n\nOnce you have the source you can test the driver by running\n\n $ make test\n\nin the main directory. You will need to have a mongo instance running on localhost for the integration tests to pass.\n\n## Examples\n\nFor examples look in the examples/ directory. You can execute the examples using node.\n\n $ cd examples\n $ node queries.js\n\n## GridStore\n\nThe GridStore class allows for storage of binary files in mongoDB using the mongoDB defined files and chunks collection definition.\n\nFor more information have a look at [Gridstore](https://github.com/mongodb/node-mongodb-native/blob/master/docs/gridfs.md)\n\n## Replicasets\n\nFor more information about how to connect to a replicaset have a look at the extensive documentation [Documentation](http://mongodb.github.com/node-mongodb-native/)\n\n### Primary Key Factories\n\nDefining your own primary key factory allows you to generate your own series of id's\n(this could f.ex be to use something like ISBN numbers). The generated the id needs to be a 12 byte long \"string\".\n\nSimple example below\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n // Custom factory (need to provide a 12 byte array);\n CustomPKFactory = function() {}\n CustomPKFactory.prototype = new Object();\n CustomPKFactory.createPk = function() {\n return new ObjectID(\"aaaaaaaaaaaa\");\n }\n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n db.dropDatabase(function(err, done) {\n \n db.createCollection('test_custom_key', function(err, collection) {\n \n collection.insert({'a':1}, function(err, docs) {\n \n collection.find({'_id':new ObjectID(\"aaaaaaaaaaaa\")}).toArray(function(err, items) {\n console.dir(items);\n // Let's close the db\n db.close();\n });\n });\n });\n });\n });\n```\n\n## Documentation\n\nIf this document doesn't answer your questions, see the source of\n[Collection](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js)\nor [Cursor](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/cursor.js),\nor the documentation at MongoDB for query and update formats.\n\n### Find\n\nThe find method is actually a factory method to create\nCursor objects. A Cursor lazily uses the connection the first time\nyou call `nextObject`, `each`, or `toArray`.\n\nThe basic operation on a cursor is the `nextObject` method\nthat fetches the next matching document from the database. The convenience\nmethods `each` and `toArray` call `nextObject` until the cursor is exhausted.\n\nSignatures:\n\n```javascript\n var cursor = collection.find(query, [fields], options);\n cursor.sort(fields).limit(n).skip(m).\n\n cursor.nextObject(function(err, doc) {});\n cursor.each(function(err, doc) {});\n cursor.toArray(function(err, docs) {});\n\n cursor.rewind() // reset the cursor to its initial state.\n```\n\nUseful chainable methods of cursor. These can optionally be options of `find` instead of method calls:\n\n * `.limit(n).skip(m)` to control paging.\n * `.sort(fields)` Order by the given fields. There are several equivalent syntaxes:\n * `.sort({field1: -1, field2: 1})` descending by field1, then ascending by field2.\n * `.sort([['field1', 'desc'], ['field2', 'asc']])` same as above\n * `.sort([['field1', 'desc'], 'field2'])` same as above\n * `.sort('field1')` ascending by field1\n\nOther options of `find`:\n\n* `fields` the fields to fetch (to avoid transferring the entire document)\n* `tailable` if true, makes the cursor [tailable](http://www.mongodb.org/display/DOCS/Tailable+Cursors).\n* `batchSize` The number of the subset of results to request the database\nto return for every request. This should initially be greater than 1 otherwise\nthe database will automatically close the cursor. The batch size can be set to 1\nwith `batchSize(n, function(err){})` after performing the initial query to the database.\n* `hint` See [Optimization: hint](http://www.mongodb.org/display/DOCS/Optimization#Optimization-Hint).\n* `explain` turns this into an explain query. You can also call\n`explain()` on any cursor to fetch the explanation.\n* `snapshot` prevents documents that are updated while the query is active\nfrom being returned multiple times. See more\n[details about query snapshots](http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database).\n* `timeout` if false, asks MongoDb not to time out this cursor after an\ninactivity period.\n\nFor information on how to create queries, see the\n[MongoDB section on querying](http://www.mongodb.org/display/DOCS/Querying).\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n var collection = db\n .collection('test')\n .find({})\n .limit(10)\n .toArray(function(err, docs) {\n console.dir(docs);\n });\n });\n```\n\n### Insert\n\nSignature:\n\n```javascript\n collection.insert(docs, options, [callback]);\n```\n\nwhere `docs` can be a single document or an array of documents.\n\nUseful options:\n\n* `safe:true` Should always set if you have a callback.\n\nSee also: [MongoDB docs for insert](http://www.mongodb.org/display/DOCS/Inserting).\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n \n db.collection('test').insert({hello: 'world'}, {w:1}, function(err, objects) {\n if (err) console.warn(err.message);\n if (err && err.message.indexOf('E11000 ') !== -1) {\n // this _id was already inserted in the database\n }\n });\n });\n```\n\nNote that there's no reason to pass a callback to the insert or update commands\nunless you use the `safe:true` option. If you don't specify `safe:true`, then\nyour callback will be called immediately.\n\n### Update: update and insert (upsert)\n\nThe update operation will update the first document that matches your query\n(or all documents that match if you use `multi:true`).\nIf `safe:true`, `upsert` is not set, and no documents match, your callback will return 0 documents updated.\n\nSee the [MongoDB docs](http://www.mongodb.org/display/DOCS/Updating) for\nthe modifier (`$inc`, `$set`, `$push`, etc.) formats.\n\nSignature:\n\n```javascript\n collection.update(criteria, objNew, options, [callback]);\n```\n\nUseful options:\n\n* `safe:true` Should always set if you have a callback.\n* `multi:true` If set, all matching documents are updated, not just the first.\n* `upsert:true` Atomically inserts the document if no documents matched.\n\nExample for `update`:\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n db.collection('test').update({hi: 'here'}, {$set: {hi: 'there'}}, {w:1}, function(err) {\n if (err) console.warn(err.message);\n else console.log('successfully updated');\n });\n });\n```\n\n### Find and modify\n\n`findAndModify` is like `update`, but it also gives the updated document to\nyour callback. But there are a few key differences between findAndModify and\nupdate:\n\n 1. The signatures differ.\n 2. You can only findAndModify a single item, not multiple items.\n\nSignature:\n\n```javascript\n collection.findAndModify(query, sort, update, options, callback)\n```\n\nThe sort parameter is used to specify which object to operate on, if more than\none document matches. It takes the same format as the cursor sort (see\nConnection.find above).\n\nSee the\n[MongoDB docs for findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command)\nfor more details.\n\nUseful options:\n\n* `remove:true` set to a true to remove the object before returning\n* `new:true` set to true if you want to return the modified object rather than the original. Ignored for remove.\n* `upsert:true` Atomically inserts the document if no documents matched.\n\nExample for `findAndModify`:\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n db.collection('test').findAndModify({hello: 'world'}, [['_id','asc']], {$set: {hi: 'there'}}, {}, function(err, object) {\n if (err) console.warn(err.message);\n else console.dir(object); // undefined if no matching object exists.\n });\n });\n```\n\n### Save\n\nThe `save` method is a shorthand for upsert if the document contains an\n`_id`, or an insert if there is no `_id`.\n\n## Release Notes\n\nSee HISTORY\n\n## Credits\n\n1. [10gen](http://github.com/mongodb/mongo-ruby-driver/)\n2. [Google Closure Library](http://code.google.com/closure/library/)\n3. [Jonas Raoni Soares Silva](http://jsfromhell.com/classes/binary-parser)\n\n## Contributors\n\nAaron Heckmann, Christoph Pojer, Pau Ramon Revilla, Nathan White, Emmerman, Seth LaForge, Boris Filipov, Stefan Schärmeli, Tedde Lundgren, renctan, Sergey Ukustov, Ciaran Jessup, kuno, srimonti, Erik Abele, Pratik Daga, Slobodan Utvic, Kristina Chodorow, Yonathan Randolph, Brian Noguchi, Sam Epstein, James Harrison Fisher, Vladimir Dronnikov, Ben Hockey, Henrik Johansson, Simon Weare, Alex Gorbatchev, Shimon Doodkin, Kyle Mueller, Eran Hammer-Lahav, Marcin Ciszak, François de Metz, Vinay Pulim, nstielau, Adam Wiggins, entrinzikyl, Jeremy Selier, Ian Millington, Public Keating, andrewjstone, Christopher Stott, Corey Jewett, brettkiefer, Rob Holland, Senmiao Liu, heroic, gitfy\n\n## License\n\n Copyright 2009 - 2013 MongoDb Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n", "readmeFilename": "Readme.md", - "_id": "mongodb@1.3.19", + "_id": "mongodb@1.3.20", "dist": { - "shasum": "b67c2eb6007baad915b91c2dcb155bfb481a9af4" + "shasum": "7da7d9081d368742b42d5fb44273fd715e9b68f4" }, - "_from": "mongodb@1.3.19", - "_resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.3.19.tgz" + "_from": "mongodb@1.3.20", + "_resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.3.20.tgz" } diff --git a/node_modules/mongoskin/node_modules/mongodb/t.js b/node_modules/mongoskin/node_modules/mongodb/t.js index 77b48b6..bbfd5cf 100644 --- a/node_modules/mongoskin/node_modules/mongodb/t.js +++ b/node_modules/mongoskin/node_modules/mongodb/t.js @@ -1,147 +1,99 @@ -var mongodb = require('./lib/mongodb'); - -var mongoserver = new mongodb.Server('localhost', 27017, {}); -var db_conn = new mongodb.Db('test1', mongoserver, { w : 1 }); - -db_conn.on('open', function () { - console.log("this is an open event"); -}); - -db_conn.on('close', function () { - console.log("this is a close event"); -}); - -db_conn.on('reconnect', function () { - console.log("this is a reconnect event"); -}); - -db_conn.open(function (err) { - if (err) throw err; - - var col = db_conn.collection('test'); - - var count = 0; - // Run a simple 'find' query every second - setInterval(function() { - col.findOne(function(err, item) { - if (err) { - return console.log("mongodb query not ok %d", count) - } - console.log("mongodb query ok %d", count); - count++; - }) - if (count == 40) { - db_conn.close(); - } - }, 1000) - console.log('hi'); -}); - -// var MongoClient = require('./lib/mongodb').MongoClient -// , Server = require('./lib/mongodb').Server -// , ReplSet = require('./lib/mongodb').ReplSet -// , Db = require('./lib/mongodb').Db; -// var format = require('util').format; - -// var host = process.env['MONGO_NODE_DRIVER_HOST'] || 'localhost'; -// var port = process.env['MONGO_NODE_DRIVER_PORT'] || 27017; -// var url = format("mongodb://%s:%s,%s:%s,%s:%s/node-mongo-examples" -// , host, port, host, 27018, host, 27019); -// var url = "mongodb://localhost:27017/node-mongo-examples" -// // console.dir(url) - -// // MongoClient.connect(url, function(err, db) { -// // new Db("node-mongo-examples", new Server("localhost", 27017), {w:1}).open(function(err, db) { -// var replSet = new ReplSet([new Server("localhost", 31000) -// , new Server("localhost", 31001) -// , new Server("localhost", 31002)]) -// new Db("node-mongo-examples", replSet, {safe:true}).open(function(err, db) { -// if(err) throw err; -// console.log("=========================== 0") -// db.close(); +// var MongoClient = require('./lib/mongodb').MongoClient; + +// MongoClient.connect("mongodb://localhost:27017/test", function(err, db) { + +// var t = db.collection('t'); +// var cursor = t.find() +// console.log(cursor.constructor.name) +// db.close(); // }); -// // console.log("------------------------- 0") - -// // db.on('error', function(err, db) { -// // console.log("---------------------- GOT ERROR") -// // console.dir(err) -// // db.close(function() { -// // console.log("----------------- error") -// // process.exit(1); -// // }) -// // }); -// // // throw new Error("3") - -// // console.log('connected'); - -// // db.collection('t').findOne(function(err, result) { -// // console.log("33333") -// // throw new Error("3") -// // }) - -// // thisMethodDoesNotExists('foo', 'bar', 123); - -// process.on("uncaughtException", function(err) { -// console.log("######################") -// }) - -// // var now; -// // var obj, i; -// // var count = 10000000; -// // var key = 'key'; - -// // obj = {}; -// // now = Date.now(); -// // for (i = 0; i < count; i++) { -// // obj[key] = 1; -// // obj[key] = null; -// // } -// // console.log('null assignment(`obj[key] = null`):\n %d ms', Date.now() - now); - -// // obj = {}; -// // now = Date.now(); -// // for (i = 0; i < count; i++) { -// // obj[key] = 1; -// // delete obj[key]; -// // } -// // console.log('deleting property(`delete obj[key]`):\n %d ms', Date.now() - now); - -// // // var mongodb = require('./lib/mongodb'); - -// // // // var url = 'mongodb://user:pass@host1,host2,host3/db'; -// // // var url = 'mongodb://127.0.0.1:31000,192.168.2.173:31001,127.0.0.1:31002/test'; -// // // var options = {db: {safe: true}, server: {auto_reconnect: true}}; - -// // // mongodb.connect(url, options, function (err, db) { -// // // if (err) { -// // // console.log(err); -// // // process.exit(1); -// // // } - -// // // db.collection('test', function (err, c) { -// // // if (err) { -// // // console.log(err); -// // // process.exit(2); -// // // } - -// // // var successCount = 0; -// // // var errCount = 0; -// // // var lastErr = null; -// // // setInterval(function () { -// // // c.find({}).limit(100).toArray(function (err, results) { -// // // if (err) { -// // // lastErr = err; -// // // errCount++; -// // // } else { -// // // successCount++; -// // // } -// // // }); -// // // }, 100); - -// // // setInterval(function () { -// // // console.log("STATUS", successCount, errCount); -// // // }, 1000); - -// // // }); -// // // }); \ No newline at end of file +var mongodb = require('./lib/mongodb'), + async = require('async'), + ObjectId = mongodb.ObjectID, + ReplicaSetManager = require('./test/tools/replica_set_manager').ReplicaSetManager, + dbUrl = 'mongodb://127.0.0.1:30000/mydb?replicaSet=rs0', + dbOptions = { + db: { + w: 1 + }, + server: { + auto_reconnect: true, + poolSize: 5 + } + }, + callbacksCalled = {}; + +function runTest(db, col) { + var i = 0; + + function next(cursor, id) { + cursor.nextObject(function (err, doc) { + if (err) { + console.log('nextObject', id, 'error:', err); + } else { + if (doc) { + console.log('nextObject', id, 'found:', doc); + } else { + console.log('nextObject', id, 'no document'); + } + } + + if (callbacksCalled[id]) { + console.log('callback', id, 'called twice'); + console.log('dumping the cursor nextObject was called on:'); + console.log(cursor); + process.exit(1); + } + + callbacksCalled[id] = true; + + if (cursor.isClosed()) { + console.log('cursor closed'); + // restart + i += 10; + start(); + } else { + i += 1; + next(cursor, i); + } + }); + } + + function start() { + var cursor = col.find({}, {tailable: true, numberOfRetries: -1}). + sort({$natural: 1}); + next(cursor, i); + } + + start(); +} + +RS = new ReplicaSetManager({name:"rs0", retries:120, secondary_count:0, passive_count:0, arbiter_count:1}); +RS.startSet(true, function(err, result) { + if(err != null) throw err; + + mongodb.Db.connect(dbUrl, dbOptions, function (err, db) { + if (err) { + console.log(err); + process.exit(1); + } + + console.log('database connected'); + + db.on('error', function (err) { + console.log('db.on(\'error\'):', err); + }); + + db.createCollection('testCapped', {capped: true, w: 1, size: 100000, max: 20}, function (err, col) { + if (err) { + console.log(err); + process.exit(1); + } + + console.log('collection created'); + + runTest(db, col); + }); + }); +}) \ No newline at end of file diff --git a/node_modules/mongoskin/package.json b/node_modules/mongoskin/package.json index d75fdf4..d4a3ce0 100644 --- a/node_modules/mongoskin/package.json +++ b/node_modules/mongoskin/package.json @@ -1,7 +1,7 @@ { "name": "mongoskin", "description": "The future layer above node-mongodb-native", - "version": "0.6.1", + "version": "1.3.20-alpha", "author": { "name": "Gui Lin", "email": "guileen@gmail.com" @@ -24,15 +24,26 @@ "node": ">= 0.4.0" }, "dependencies": { - "mongodb": "1.3.19" + "mongodb": "1.3.20" }, "devDependencies": { - "mocha": "*", - "jscover": "*", - "should": "*" + "mocha": "~1.17.1", + "blanket": "~1.1.6", + "coveralls": "~2.8.0", + "mocha-lcov-reporter": "0.0.1", + "travis-cov": "~0.2.5", + "should": "~3.1.2" + }, + "config": { + "blanket": { + "pattern": "mongoskin/lib" + }, + "travis-cov": { + "threshold": 95 + } }, "scripts": { - "test": "make test" + "test": "mocha -R travis-cov" }, "directories": { "example": "./examples", @@ -101,8 +112,12 @@ "url": "https://github.com/deltasquare4" } ], - "readme": "# mongoskin [![Build Status](https://secure.travis-ci.org/kissjs/node-mongoskin.png)](http://travis-ci.org/kissjs/node-mongoskin) [![Dependencies](https://david-dm.org/kissjs/node-mongoskin.png)](https://david-dm.org/kissjs/node-mongoskin)\n\n![logo](https://raw.github.com/kissjs/node-mongoskin/master/logo.png)\n\nThis project is a wrapper for [node-mongodb-native](https://github.com/mongodb/node-mongodb-native).\nThe base API is same at the node-mongodb-native, you may want to familiarise yourself with the [node-mongodb-native documentation](http://mongodb.github.com/node-mongodb-native/) first.\n\n## Compatible mongodb versions\n\nYou should use mongodb version 1.3.3. Prior mongodb versions might not work.\n\n## Automated tests\n\nYou can run the automated test by running make test. The tests have a coverage of [**89%**](http://fengmk2.github.com/coverage/mongoskin.html) and you can [browse the results](https://github.com/kissjs/node-mongoskin/blob/master/test_results.md).\n\n\n\n# Mongoskin documentation\n\n* [Nodejs mongodb driver comparison](#comparation)\n* [Install](#install)\n* [Quick Start](#quickstart)\n * [Easier to connect](#quickstart-1)\n * [Server options and BSON options](#quickstart-2)\n * [Similar API to node-mongodb-native](#quickstart-3)\n * [Easier cursor](#quickstart-4)\n * [MVC helpers](#quickstart-5)\n* [API documentation](#documentation)\n * [Module](#module)\n * [SkinServer](#skinserver)\n * [SkinDb](#skindb)\n * [SkinCollection](#skincollection)\n * [Additional methods](#additional-collection-op)\n * [Collection operation](#inherit-collection-op)\n * [Indexes](#inherit-indexes)\n * [Querying](#inherit-query)\n * [Aggregation](#inherit-aggregation)\n * [Inserting](#inherit-inserting)\n * [Updating](#inherit-updating)\n * [Removing](#inherit-removing)\n * [SkinCursor](#skincursor)\n\n\n\nNodejs mongodb driver comparison\n========\n\nnode-mongodb-native\n--------\n\nOne of the most powerful Mongo drivers is node-mongodb-native. Most other drivers build\non top of it, including mongoskin. Unfortunately, it has an awkward interface with too many \ncallbacks. Also, mongoskin provides helper method bindings on Collection instances.\n \nSee [mongodb-native](https://github.com/christkv/node-mongodb-native/tree/master/docs)\n\nmongoose\n--------\n\nMongoose provides a full blown ORM view of Collections and Models,\n and you are required to define a schema first. But why does mongodb need a schema?\n If you're like me, then you prefer to drive your schema from the application layer,\n and use fields without having had to define them beforehand.\n\n Mongoose also provides a data abstraction layer with validation support. Again, if you're like me, then\n you would prefer a lighter weight solution and to craft your own validation. I think this is the tao of mongodb.\n\nmongoskin\n--------\n\nMongoskin is an easy to use driver of mongodb for nodejs,\n it is similar with mongo shell, powerful like node-mongodb-native,\n and supports binding helper methods to Collections.\n\nIt provides the full features of [node-mongodb-native](https://github.com/christkv/node-mongodb-native),\n and makes good use of [futures](http://en.wikipedia.org/wiki/Future_%28programming%29).\n\nFor validation you can use [node-iform](https://github.com/guileen/node-iform).\n\n[Back to index](#index)\n\n\n\nInstall\n========\n\n```bash\n$ npm install mongoskin\n```\n\n[Back to index](#index)\n\n\n\n\nQuick start\n========\n\n **Is mongoskin synchronized?**\n\nNope! It is asynchronized, it use the [future pattern](http://en.wikipedia.org/wiki/Future_%28programming%29).\n**Mongoskin** is the future layer above [node-mongodb-native](https://github.com/christkv/node-mongodb-native)\n\n\n\nEasier to connect\n--------\nYou can connect to mongodb easier now.\n\n```js\nvar mongo = require('mongoskin');\nmongo.db('localhost:27017/testdb').collection('blog').find().toArray(function (err, items) {\n console.dir(items);\n})\n```\n\n\n\nServer options and BSON options\n--------\nYou can also set `auto_reconnect` options querystring.\nAnd native_parser options will automatically set if native_parser is available.\n\n```js\nvar mongo = require('mongoskin');\nvar db = mongo.db('localhost:27017/test?auto_reconnect');\n```\n\n\n\nSimilar API to node-mongodb-native\n--------\nYou can do everything that node-mongodb-native can do.\n\n```js\ndb.createCollection(...);\ndb.collection('user').ensureIndex([['username', 1]], true, function (err, replies) {});\ndb.collection('posts').hint = 'slug';\ndb.collection('posts').findOne({slug: 'whats-up'}, function (err, post) {\n // do something\n});\n```\n\n\n\nEasier cursor\n--------\n\n```js\ndb.collection('posts').find().toArray(function (err, posts) {\n // do something\n});\n```\n\n\n\nMVC helpers\n--------\n\nYou can bind **additional methods** for collection.\nIt is very useful if you want to use MVC patterns with nodejs and mongodb.\nYou can also invoke collection by properties after bind,\nit could simplfy your `require`.\n\nTo keep your code in line with DRY principles, it's possible to create your own\ndata layer by for example, setting up your own validators and/or default values\ninside the MVC methods as shown below in the config example\n\n```js\ndb.bind('posts', {\n findTop10 : function (fn) {\n this.find({}, {limit:10, sort:[['views', -1]]}).toArray(fn);\n },\n removeTagWith : function (tag, fn) {\n this.remove({tags:tag},fn);\n }\n } \n});\n\ndb.bind('settings', {\n\n getAll: function(user, fn) {\n \n \tthis.find({user: user}).toArray(function(err, settings) {\n \t\n \t // We want to set a default currency from within our app instead of storing it\n \t // for every user\n \t settings.currency = (typeof settings.currency !== \"undefined\") ? settings.currency : 'USD';\n \t\t\n \t fn(err, settings);\n \t\n \t});\n }\n});\n\n \ndb.bind('comments');\n\ndb.collection('posts').removeTagWith('delete', function (err, replies) {\n //do something\n});\n\ndb.posts.findTop10(function (err, topPosts) {\n //do something\n});\n\ndb.comments.find().toArray(function (err, comments) {\n //do something\n});\n```\n\n[Back to index](#index)\n\n\n\n\nAPI documentation\n========\n\nfor more information, see the source.\n\n[Back to index](#index)\n\n\n\n\nModule\n--------\n\n### db(serverURL[s], dbOptions, replicasetOptions)\n\nGet or create instance of [SkinDb](#skindb). \n\nParameters:\n* ```serverURLs``` can be a single mongoskin url, or an array of urls, each with the following format:\n```[*://][username:password@]host[:port][/database][?auto_reconnect[=true|false]]```\n\n* ```dbOptions``` is an object that can have following options in it:\n * ```database``` - the database to connect to. This overrides the database name passed in the url.\n * ```socketOptions``` - mongo socket options (see http://mongodb.github.com/node-mongodb-native/markdown-docs/database.html)\n * ```username``` - overrides the value set in the serverURl[s]\n * ```password``` - overrides the value set in the serverURl[s]\n * other parameters - see http://mongodb.github.io/node-mongodb-native/api-generated/db.html\n* ```replicasetOptions``` - mongodb ReplSet options (see http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html). This is only useful if an array of urls is passed.\n\nExamples:\n\n```js\nvar a = mongoskin.db('localhost:27017/testdb?auto_reconnect=true&poolSize=5');\nvar b = mongoskin.db('mongo://admin:pass@127.0.0.1:27017/blog?auto_reconnect');\nvar c = mongoskin.db('127.0.0.1?auto_reconnect=false');\n```\n\nfor ReplSet server\n\n```js\nvar db = mongoskin.db([\n '192.168.0.1:27017/?auto_reconnect=true',\n '192.168.0.2:27017/?auto_reconnect=true',\n '192.168.0.3:27017/?auto_reconnect=true'\n], {\n database: 'testdb',\n safe: true\n}, {\n connectArbiter: false,\n socketOptions: {\n timeout: 2000\n }\n});\n```\n\n### router(select)\n\nselect is `function(collectionName)` returns a database instance, means router collectionName to that database.\n\n```js\nvar db = mongo.router(function (coll_name) {\n switch(coll_name) {\n case 'user':\n case 'message':\n return mongo.db('192.168.1.3/auth_db');\n default:\n return mongo.db('192.168.1.2/app_db');\n }\n});\ndb.bind('user', require('./shared-user-methods'));\nvar users = db.user; //auth_db.user\nvar messages = db.collection('message'); // auth_db.message\nvar products = db.collection('product'); //app_db.product\n```\n\n### classes extends frome node-mongodb-native\n\n* BSONPure\n* BSONNative\n* BinaryParser\n* Binary\n* Code\n* DBRef\n* Double\n* MaxKey\n* MinKey\n* ObjectID\n* Symbol\n* Timestamp\n* Long\n* BaseCommand\n* DbCommand\n* DeleteCommand\n* GetMoreCommand\n* InsertCommand\n* KillCursorCommand\n* QueryCommand\n* UpdateCommand\n* MongoReply\n* Admin\n* Collection\n* Connection\n* Server\n* ReplSetServers\n* Cursor\n* Db\n* connect\n* Grid\n* Chunk\n* GridStore\n* native\n* pure\n\n\n[Back to index](#index)\n\n\n\nSkinServer\n--------\n\n### SkinServer(server)\n\nConstruct SkinServer from native Server instance.\n\n### db(dbname, username=null, password=null)\n\nConstruct [SkinDb](#skindb) from SkinServer.\n\n[Back to index](#index)\n\n\n\nSkinDb\n--------\n\n### SkinDb(db, username=null, password=null)\n\nConstruct SkinDb.\n\n### open(callback)\n\nConnect to database, retrieval native\n[Db](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/db.js#L17)\ninstance, callback is function(err, db).\n\n### collection(collectionName)\n\nRetrieval [SkinCollection](#skincollection) instance of specified collection name.\n\n\n\n### bind(collectionName)\n\n### bind(collectionName, SkinCollection)\n\n### bind(collectionName, extendObject1, extendObject2 ...)\n\nBind [SkinCollection](#skincollection) to db properties as a shortcut to db.collection(name).\nYou can also bind additional methods to the SkinCollection, it is useful when\nyou want to reuse a complex operation. This will also affect\ndb.collection(name) method.\n\ne.g.\n\n```js\ndb.bind('book', {\n firstBook: function (fn) {\n this.findOne(fn);\n }\n});\ndb.book.firstBook(function (err, book) {});\n```\n\n### all the methods from Db.prototype\n\nSee [Db](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/db.js#L17) of node-mongodb-native for more information.\n\n[Back to index](#index)\n\n\n\nSkinCollection\n--------\n\nSee [Collection](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L45) of node-mongodb-native for more information.\n\n\n### open(callback)\n\nRetrieval native\n[Collection](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L45)\ninstance, callback is function(err, collection).\n\n### id(hex)\n\nEquivalent to\n\n```js\ndb.bson_serializer.ObjectID.createFromHexString(hex);\n```\n\nSee [ObjectID.createFromHexString](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/bson/bson.js#L548)\n\n\n\n\n### Collection operation\n\n```js\ncheckCollectionName(collectionName)\noptions(callback)\nrename(collectionName, callback)\ndrop(callback)\n```\n\n\n\n### Indexes\n\n```js\ncreateIndex(fieldOrSpec, unique, callback)\nensureIndex(fieldOrSpec, unique, callback)\nindexInformation(callback)\ndropIndex(indexName, callback)\ndropIndexes(callback)\n```\n \nSee [mongodb-native indexes](https://github.com/christkv/node-mongodb-native/blob/master/docs/indexes.md)\n\n\n\n### Queries\n\nSee [mongodb-native queries](https://github.com/christkv/node-mongodb-native/blob/master/docs/queries.md)\n\n#### findItems(..., callback)\n\nEquivalent to\n\n```js\ncollection.find(..., function (err, cursor) {\n cursor.toArray(callback);\n});\n```\n\nSee [Collection.find](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L348)\n\n#### findEach(..., callback)\n\nEquivalent to\n\n```js\ncollection.find(..., function (err, cursor) {\n cursor.each(callback);\n});\n```\n\nSee [Collection.find](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L348)\n\n#### findById(id, ..., callback)\n\nEquivalent to\n\n```js\ncollection.findOne({_id, ObjectID.createFromHexString(id)}, ..., callback);\n```\n\nSee [Collection.findOne](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L417)\n\n#### find(...)\n\nIf the last parameter is function, it is equivalent to native\n[Collection.find](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/collection.js#L348)\nmethod, else it will return a future [SkinCursor](#skincursor).\n\ne.g.\n\n```js\n// callback\ndb.book.find({}, function (err, cursor) {/* do something */});\n// future SkinCursor\ndb.book.find().toArray(function (err, books) {/* do something */});\n```\n\n#### normalizeHintField(hint)\n\n#### find\n\n```js\n/**\n * Various argument possibilities\n * 1 callback\n * 2 selector, callback,\n * 2 callback, options // really?!\n * 3 selector, fields, callback\n * 3 selector, options, callback\n * 4,selector, fields, options, callback\n * 5 selector, fields, skip, limit, callback\n * 6 selector, fields, skip, limit, timeout, callback\n *\n * Available options:\n * limit, sort, fields, skip, hint, explain, snapshot, timeout, tailable, batchSize\n */\n```\n\n#### findAndModify(query, sort, update, options, callback) \n\n```js\n/**\n Fetch and update a collection\n query: a filter for the query\n sort: if multiple docs match, choose the first one in the specified sort order as the object to manipulate\n update: an object describing the modifications to the documents selected by the query\n options:\n remove: set to a true to remove the object before returning\n new: set to true if you want to return the modified object rather than the original. Ignored for remove.\n upsert: true/false (perform upsert operation)\n**/\n```\n\n#### findOne(queryObject, options, callback)\n\n\n\n### Aggregation\n\n#### mapReduce(map, reduce, options, callback)\n\ne.g.\n\n```js\nvar map = function () {\n emit(test(this.timestamp.getYear()), 1);\n}\n\nvar reduce = function (k, v){\n count = 0;\n for (i = 0; i < v.length; i++) {\n count += v[i];\n }\n return count;\n}\nvar options = {scope: {test: new client.bson_serializer.Code(t.toString())}};\ncollection.mapReduce(map, reduce, options, function (err, collection) {\n collection.find(function (err, cursor) {\n cursor.toArray(function (err, results) {\n test.equal(2, results[0].value)\n finished_test({test_map_reduce_functions_scope:'ok'}); \n })\n})\n```\n\n#### group(keys, condition, initial, reduce, command, callback)\n\ne.g. \n\n```js\ncollection.group([], {}, {\"count\":0}, \"function (obj, prev) { prev.count++; }\", true, function(err, results) {});\n```\n\n#### count(query, callback)\n#### distinct(key, query, callback)\n\n\n\n### Inserting\n\n#### insert(docs, options, callback)\n\n\n\n### Updating\n\n#### save(doc, options, callback)\n\n```js\n/**\n Update a single document in this collection.\n spec - a associcated array containing the fields that need to be present in\n the document for the update to succeed\n\n document - an associated array with the fields to be updated or in the case of\n a upsert operation the fields to be inserted.\n\n Options:\n upsert - true/false (perform upsert operation)\n multi - true/false (update all documents matching spec)\n strict - true/false (perform check if the operation failed, required extra call to db)\n Deprecated Options:\n safe - true/false (perform check if the operation failed, required extra call to db)\n**/\n```\n\n#### update(spec, document, options, callback)\n\n#### updateById(_id, ..., callback)\n\nEquivalent to\n\n```js\ncollection.update({_id, ObjectID.createFromHexString(id)}, ..., callback);\n```\n\nSee [Collection.update](https://github.com/christkv/node-mongodb-native/blob/master/docs/insert.md)\n\n\n\n### Removing\n\n#### remove(selector, options, callback)\n\n#### removeById(_id, options, callback)\n\n[Back to index](#index)\n\n\n\nSkinCursor\n---------\n\nSee [Cursor](https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/cursor.js#L1)\nof node-mongodb-native for more information.\n\nAll these methods will return the SkinCursor itself.\n\n```js\nsort(keyOrList, [direction], [callback])\nlimit(limit, [callback])\nskip(skip, [callback])\nbatchSize(skip, [callback])\n\ntoArray(callback)\neach(callback)\ncount(callback)\nnextObject(callback)\ngetMore(callback)\nexplain(callback)\n```\n\n[Back to index](#index)\n\n## How to validate input?\n\nI wrote a middleware to validate post data, [node-iform](https://github.com/guileen/node-iform) \nbase on [node-validator](https://github.com/chriso/node-validator)\n\n## Authors\n\nBelow is the output from `git-summary`.\n\n```\n project: node-mongoskin\n commits: 112\n active : 54 days\n files : 39\n authors: \n 49 Lin Gui 43.8%\n 34 guilin 桂林 30.4%\n 9 fengmk2 8.0%\n 5 guilin 4.5%\n 2 François de Metz 1.8%\n 2 Paul Gebheim 1.8%\n 2 Gui Lin 1.8%\n 1 humanchimp 0.9%\n 1 Aneil Mallavarapu 0.9%\n 1 wmertens 0.9%\n 1 Harvey McQueen 0.9%\n 1 Joe Faber 0.9%\n 1 Matt Perpick 0.9%\n 1 Quang Van 0.9%\n 1 Rakshit Menpara 0.9%\n 1 Wout Mertens 0.9%\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 - 2012 kissjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", + "readme": "# mongoskin\n\n[![Build Status](https://secure.travis-ci.org/kissjs/node-mongoskin.png)](http://travis-ci.org/kissjs/node-mongoskin)\n[![Dependencies](https://david-dm.org/kissjs/node-mongoskin.png)](https://david-dm.org/kissjs/node-mongoskin)\n[![Coverage Status](https://coveralls.io/repos/kissjs/node-mongoskin/badge.png?branch=1.3.20)](https://coveralls.io/r/kissjs/node-mongoskin?branch=1.3.20)\n[![NPM version](https://badge.fury.io/js/mongoskin.png)](http://badge.fury.io/js/mongoskin)\n![logo](https://raw.github.com/kissjs/node-mongoskin/master/logo.png)\n\n[![NPM](https://nodei.co/npm/mongoskin.png?downloads=true&stars=true)](https://nodei.co/npm/mongoskin/)\n\nThis project is a wrapper for [node-mongodb-native](https://github.com/mongodb/node-mongodb-native).\nThe base API is same at the node-mongodb-native, you may want to familiarise yourself with the [node-mongodb-native documentation](http://mongodb.github.com/node-mongodb-native/) first.\n\n## NOTE!! mongoskin API change from 1.3.20\n\nSince node-mongodb-native has change a lot of API, mongoskin redesign from 1.3.20. The version number keep same with node-mongodb-native. And the API appearence is also keep same with node-mongodb-native\n\nInstall\n========\n\n```bash\n$ npm install mongoskin\n```\n\nUsage\n========\n\nUse dburl\n\n```js\nvar mongo = require('mongoskin');\nvar MongoClient = mongo.MongoClient;\n\nvar db = MongoClient.connect(\"mongodb://localhost:27017/integration_tests\", {native_parser:true});\ndb.bind('article');\ndb.article.find().toArray(function(err, items) {\n db.close();\n});\n```\n\nUse ReplSet\n\n```js\nvar mongo = require('mongoskin');\nvar Server = mongo.Server;\nvar Db = mongo.Db;\n\nvar replSet = new ReplSetServers([\n new Server('localhost', 30000),\n new Server('localhost', 30001),\n new Server('localhost', 30002),\n]);\n\nvar db = new Db('integration_test_', replSet, {w:0, native_parser: (process.env['TEST_NATIVE'] != null)});\n// no need open and on('fullsetup', ...)\ndb.collection('myconnection').find().setReadPreference(ReadPreference.SECONDARY).toArray(function(err, items) {\n db.close();\n});\n```\n\n## Origin API part\nFor detail API reference see [node mongodb API](http://mongodb.github.io/node-mongodb-native/). Mongoskin is just change the API call chain.\n\nWe make some common use functioin in promise mode, we call it SkinClass of a normal Class. And the API is almost same with official API.\n\norigin:\n```js\nvar mongo = require('mongodb');\nvar Db = mongo.Db;\nvar Server = mongo.Server;\nvar MongoClient = mongo.MongoClient;\nvar ReplSetServers = mongo.ReplSetServers;\n...\n```\n\nmongoskin:\n\n```js\nvar mongo = require('mongoskin');\nvar Db = mongo.Db;\nvar Server = mongo.Server;\nvar MongoClient = mongo.MongoClient;\nvar ReplSetServers = mongo.ReplSetServers;\n...\n```\n\norigin:\n\n```js\nMongoClient.connect(..., functioin(err, db) {\n})\n```\n\nmongoskin:\n\n```js\nvar db = MongoClient.connect(...)\n```\n\norigin:\n\n```js\nvar db = new Db(...);\ndb.open(functioin(err, db) {\n db.collection('myCollection', {strict: true}, functioin(err, myCollection) {\n // myCollection.find() ...\n });\n});\n```\n\nmongoskin:\n\n```js\nvar db = new Db(...);\nvar myCollection = db.collection('myCollection', {strict: true});\n```\n\n## Promised methods\n\n### MongoClient.connect(...)\nreturns a `Db` instance\nalias origin `MongoClient.connect(..., function(err, db) { .... })`\n### db.collection\nreturns a `Collection` instance\nalias origin `db.collection(..., function(err, collection) {....})`\n### collection.find\nreturns a `Cursor` instance\nalias origin `collection.find(..., function(err, cursor) {....})`\n\n## MongoSkin API part\n\n### module.db(...)\nalias `MongoClient.connect(...)`\n### db.admin(...)\nalias `new Admin(db, ...)`\n### db.grid(...)\nalias `new Grid(db, ...)`\n### db.gridStore(...)\nalias `new GridStore(db, ...)`\n### collection.findById(id, ...)\nalias `collection.find({_id: toObjectID(id)}, ...)`\n### collection.updateById(id, ...)\nalias `collection.update({_id: toObjectID(id)}, ...)`\n### collection.removeById(id, ...)\nalias `collection.remove({_id: toObjectID(id)}, ...)`\n\n\n### Removed API from mongoskin 1.3.20\n\n* module.bind\n* module.Skin*\n* module.router\n* skinDb.toId\n* skinDb.toObjectId\n* skinDb.gridfs\n* skinCollection.bind\n\n### Modified API from mongoskin 1.3.20\n\n* module.db\n* skinDb.bind\n\n\n### Additional API from mongoskin 1.3.20\n\n* module.MongoClient\n* module.Grid\n* module.GridStore\n* module.helper.toObjectID\n\n## Authors\n\nBelow is the output from `git-summary`.\n\n```\n project : node-mongoskin\n repo age : 2 years, 10 months\n active : 84 days\n commits : 180\n files : 44\n authors :\n 49\tLin Gui 27.2%\n 44\tfengmk2 24.4%\n 34\tguilin 桂林 18.9%\n 23\tGui Lin 12.8%\n 5\tguilin 2.8%\n 2\tRaghu Katti 1.1%\n 2\tMerlyn Albery-Speyer 1.1%\n 2\tPaul Gebheim 1.1%\n 2\tJoakim B 1.1%\n 2\tFrançois de Metz 1.1%\n 1\tWout Mertens 0.6%\n 1\tYuriy Nemtsov 0.6%\n 1\tfresheneesz 0.6%\n 1\thumanchimp 0.6%\n 1\tAlan Shaw 0.6%\n 1\twmertens 0.6%\n 1\tAneil Mallavarapu 0.6%\n 1\tGustav 0.6%\n 1\tHarvey McQueen 0.6%\n 1\tJoe Faber 0.6%\n 1\tMatt Perpick 0.6%\n 1\tPhilmod 0.6%\n 1\tQuang Van 0.6%\n 1\tRakshit Menpara 0.6%\n 1\tShawn Jonnet 0.6%\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 - 2012 kissjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", "readmeFilename": "Readme.md", - "_id": "mongoskin@0.6.1", - "_from": "mongoskin@*" + "_id": "mongoskin@1.3.20-alpha", + "dist": { + "shasum": "89e258d5d0e09a1b3376716bff48f6640f0c5b28" + }, + "_from": "mongoskin@1.3.20-alpha", + "_resolved": "https://registry.npmjs.org/mongoskin/-/mongoskin-1.3.20-alpha.tgz" }