http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/58047a3d/node_modules/nopt/package.json
----------------------------------------------------------------------
diff --git a/node_modules/nopt/package.json b/node_modules/nopt/package.json
index 85bafef..0b7b64e 100644
--- a/node_modules/nopt/package.json
+++ b/node_modules/nopt/package.json
@@ -1,6 +1,6 @@
 {
   "name": "nopt",
-  "version": "3.0.1",
+  "version": "3.0.4",
   "description": "Option parsing for Node, supporting types, shorthands, etc. 
Used by npm.",
   "author": {
     "name": "Isaac Z. Schlueter",
@@ -13,29 +13,47 @@
   },
   "repository": {
     "type": "git",
-    "url": "http://github.com/isaacs/nopt";
+    "url": "git+ssh://[email protected]/isaacs/nopt.git"
   },
   "bin": {
     "nopt": "./bin/nopt.js"
   },
-  "license": {
-    "type": "MIT",
-    "url": "https://github.com/isaacs/nopt/raw/master/LICENSE";
-  },
+  "license": "ISC",
   "dependencies": {
     "abbrev": "1"
   },
   "devDependencies": {
-    "tap": "~0.4.8"
+    "tap": "^1.2.0"
   },
-  "readme": "If you want to write an option parser, and have it be good, there 
are\ntwo ways to do it.  The Right Way, and the Wrong Way.\n\nThe Wrong Way is 
to sit down and write an option parser.  We've all done\nthat.\n\nThe Right Way 
is to write some complex configurable program with so many\noptions that you go 
half-insane just trying to manage them all, and put\nit off with duct-tape 
solutions until you see exactly to the core of the\nproblem, and finally snap 
and write an awesome option parser.\n\nIf you want to write an option parser, 
don't write an option parser.\nWrite a package manager, or a source control 
system, or a service\nrestarter, or an operating system.  You probably won't 
end up with a\ngood one of those, but if you don't give up, and you are 
relentless and\ndiligent enough in your procrastination, you may just end up 
with a very\nnice option parser.\n\n## USAGE\n\n    // my-program.js\n    var 
nopt = require(\"nopt\")\n      , Stream = require(\"stream\").Strea
 m\n      , path = require(\"path\")\n      , knownOpts = { \"foo\" : [String, 
null]\n                    , \"bar\" : [Stream, Number]\n                    , 
\"baz\" : path\n                    , \"bloo\" : [ \"big\", \"medium\", 
\"small\" ]\n                    , \"flag\" : Boolean\n                    , 
\"pick\" : Boolean\n                    , \"many\" : [String, Array]\n          
          }\n      , shortHands = { \"foofoo\" : [\"--foo\", \"Mr. Foo\"]\n     
                , \"b7\" : [\"--bar\", \"7\"]\n                     , \"m\" : 
[\"--bloo\", \"medium\"]\n                     , \"p\" : [\"--pick\"]\n         
            , \"f\" : [\"--flag\"]\n                     }\n                 // 
everything is optional.\n                 // knownOpts and shorthands default 
to {}\n                 // arg list defaults to process.argv\n                 
// slice defaults to 2\n      , parsed = nopt(knownOpts, shortHands, 
process.argv, 2)\n    console.log(parsed)\n\nThis would give you su
 pport for any of the following:\n\n```bash\n$ node my-program.js --foo 
\"blerp\" --no-flag\n{ \"foo\" : \"blerp\", \"flag\" : false }\n\n$ node 
my-program.js ---bar 7 --foo \"Mr. Hand\" --flag\n{ bar: 7, foo: \"Mr. Hand\", 
flag: true }\n\n$ node my-program.js --foo \"blerp\" -f -----p\n{ foo: 
\"blerp\", flag: true, pick: true }\n\n$ node my-program.js -fp --foofoo\n{ 
foo: \"Mr. Foo\", flag: true, pick: true }\n\n$ node my-program.js --foofoo -- 
-fp  # -- stops the flag parsing.\n{ foo: \"Mr. Foo\", argv: { remain: 
[\"-fp\"] } }\n\n$ node my-program.js --blatzk -fp # unknown opts are ok.\n{ 
blatzk: true, flag: true, pick: true }\n\n$ node my-program.js --blatzk=1000 
-fp # but you need to use = if they have a value\n{ blatzk: 1000, flag: true, 
pick: true }\n\n$ node my-program.js --no-blatzk -fp # unless they start with 
\"no-\"\n{ blatzk: false, flag: true, pick: true }\n\n$ node my-program.js 
--baz b/a/z # known paths are resolved.\n{ baz: \"/Users/isaacs/b/a/z\" }\n\n# 
if Array is o
 ne of the types, then it can take many\n# values, and will always be an array. 
 The other types provided\n# specify what types are allowed in the list.\n\n$ 
node my-program.js --many 1 --many null --many foo\n{ many: [\"1\", \"null\", 
\"foo\"] }\n\n$ node my-program.js --many foo\n{ many: [\"foo\"] }\n```\n\nRead 
the tests at the bottom of `lib/nopt.js` for more examples of\nwhat this puppy 
can do.\n\n## Types\n\nThe following types are supported, and defined on 
`nopt.typeDefs`\n\n* String: A normal string.  No parsing is done.\n* path: A 
file system path.  Gets resolved against cwd if not absolute.\n* url: A url.  
If it doesn't parse, it isn't accepted.\n* Number: Must be numeric.\n* Date: 
Must parse as a date. If it does, and `Date` is one of the options,\n  then it 
will return a Date object, not a string.\n* Boolean: Must be either `true` or 
`false`.  If an option is a boolean,\n  then it does not need a value, and its 
presence will imply `true` as\n  the value.  To negate boolea
 n flags, do `--no-whatever` or `--whatever\n  false`\n* NaN: Means that the 
option is strictly not allowed.  Any value will\n  fail.\n* Stream: An object 
matching the \"Stream\" class in node.  Valuable\n  for use when validating 
programmatically.  (npm uses this to let you\n  supply any WriteStream on the 
`outfd` and `logfd` config options.)\n* Array: If `Array` is specified as one 
of the types, then the value\n  will be parsed as a list of options.  This 
means that multiple values\n  can be specified, and that the value will always 
be an array.\n\nIf a type is an array of values not on this list, then those 
are\nconsidered valid values.  For instance, in the example above, 
the\n`--bloo` option can only be one of `\"big\"`, `\"medium\"`, or 
`\"small\"`,\nand any other value will be rejected.\n\nWhen parsing unknown 
fields, `\"true\"`, `\"false\"`, and `\"null\"` will be\ninterpreted as their 
JavaScript equivalents.\n\nYou can also mix types and values, or multiple 
types, in a list.
   For\ninstance `{ blah: [Number, null] }` would allow a value to be set 
to\neither a Number or null.  When types are ordered, this implies 
a\npreference, and the first type that can be used to properly interpret\nthe 
value will be used.\n\nTo define a new type, add it to `nopt.typeDefs`.  Each 
item in that\nhash is an object with a `type` member and a `validate` method.  
The\n`type` member is an object that matches what goes in the type list.  
The\n`validate` method is a function that gets called with 
`validate(data,\nkey, val)`.  Validate methods should assign `data[key]` to the 
valid\nvalue of `val` if it can be handled properly, or return boolean\n`false` 
if it cannot.\n\nYou can also call `nopt.clean(data, types, typeDefs)` to clean 
up a\nconfig object and remove its invalid properties.\n\n## Error 
Handling\n\nBy default, nopt outputs a warning to standard error when 
invalid\noptions are found.  You can change this behavior by assigning a 
method\nto `nopt.invalidHandler`.  This
  method will be called with\nthe offending `nopt.invalidHandler(key, val, 
types)`.\n\nIf no `nopt.invalidHandler` is assigned, then it will 
console.error\nits whining.  If it is assigned to boolean `false` then the 
warning is\nsuppressed.\n\n## Abbreviations\n\nYes, they are supported.  If you 
define options like this:\n\n```javascript\n{ \"foolhardyelephants\" : 
Boolean\n, \"pileofmonkeys\" : Boolean }\n```\n\nThen this will 
work:\n\n```bash\nnode program.js --foolhar --pil\nnode program.js --no-f 
--pileofmon\n# etc.\n```\n\n## Shorthands\n\nShorthands are a hash of shorter 
option names to a snippet of args that\nthey expand to.\n\nIf multiple 
one-character shorthands are all combined, and the\ncombination does not 
unambiguously match any other option or shorthand,\nthen they will be broken up 
into their constituent parts.  For example:\n\n```json\n{ \"s\" : 
[\"--loglevel\", \"silent\"]\n, \"g\" : \"--global\"\n, \"f\" : \"--force\"\n, 
\"p\" : \"--parseable\"\n, \"l\" : \"--long\"\
 n}\n```\n\n```bash\nnpm ls -sgflp\n# just like doing this:\nnpm ls --loglevel 
silent --global --force --long --parseable\n```\n\n## The Rest of the 
args\n\nThe config object returned by nopt is given a special member 
called\n`argv`, which is an object with the following fields:\n\n* `remain`: 
The remaining args after all the parsing has occurred.\n* `original`: The args 
as they originally appeared.\n* `cooked`: The args after flags and shorthands 
are expanded.\n\n## Slicing\n\nNode programs are called with more or less the 
exact argv as it appears\nin C land, after the v8 and node-specific options 
have been plucked off.\nAs such, `argv[0]` is always `node` and `argv[1]` is 
always the\nJavaScript program being run.\n\nThat's usually not very useful to 
you.  So they're sliced off by\ndefault.  If you want them, then you can pass 
in `0` as the last\nargument, or any other number that you'd like to slice off 
the start of\nthe list.\n",
-  "readmeFilename": "README.md",
+  "gitHead": "f52626631ea1afef5a6dd9acf23ddd1466831a08",
   "bugs": {
     "url": "https://github.com/isaacs/nopt/issues";
   },
-  "homepage": "https://github.com/isaacs/nopt";,
-  "_id": "[email protected]",
-  "_shasum": "bce5c42446a3291f47622a370abbf158fbbacbfd",
-  "_from": "nopt@~3",
-  "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz";
+  "homepage": "https://github.com/isaacs/nopt#readme";,
+  "_id": "[email protected]",
+  "_shasum": "dd63bc9c72a6e4e85b85cdc0ca314598facede5e",
+  "_from": "nopt@>=3.0.4 <4.0.0",
+  "_npmVersion": "2.14.3",
+  "_nodeVersion": "2.2.2",
+  "_npmUser": {
+    "name": "zkat",
+    "email": "[email protected]"
+  },
+  "dist": {
+    "shasum": "dd63bc9c72a6e4e85b85cdc0ca314598facede5e",
+    "tarball": "http://registry.npmjs.org/nopt/-/nopt-3.0.4.tgz";
+  },
+  "maintainers": [
+    {
+      "name": "isaacs",
+      "email": "[email protected]"
+    },
+    {
+      "name": "zkat",
+      "email": "[email protected]"
+    }
+  ],
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.4.tgz";,
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/58047a3d/node_modules/nopt/test/basic.js
----------------------------------------------------------------------
diff --git a/node_modules/nopt/test/basic.js b/node_modules/nopt/test/basic.js
deleted file mode 100644
index 2f9088c..0000000
--- a/node_modules/nopt/test/basic.js
+++ /dev/null
@@ -1,251 +0,0 @@
-var nopt = require("../")
-  , test = require('tap').test
-
-
-test("passing a string results in a string", function (t) {
-  var parsed = nopt({ key: String }, {}, ["--key", "myvalue"], 0)
-  t.same(parsed.key, "myvalue")
-  t.end()
-})
-
-// https://github.com/npm/nopt/issues/31
-test("Empty String results in empty string, not true", function (t) {
-  var parsed = nopt({ empty: String }, {}, ["--empty"], 0)
-  t.same(parsed.empty, "")
-  t.end()
-})
-
-test("~ path is resolved to $HOME", function (t) {
-  var path = require("path")
-  if (!process.env.HOME) process.env.HOME = "/tmp"
-  var parsed = nopt({key: path}, {}, ["--key=~/val"], 0)
-  t.same(parsed.key, path.resolve(process.env.HOME, "val"))
-  t.end()
-})
-
-// https://github.com/npm/nopt/issues/24
-test("Unknown options are not parsed as numbers", function (t) {
-    var parsed = nopt({"parse-me": Number}, null, ['--leave-as-is=1.20', 
'--parse-me=1.20'], 0)
-    t.equal(parsed['leave-as-is'], '1.20')
-    t.equal(parsed['parse-me'], 1.2)
-    t.end()
-});
-
-test("other tests", function (t) {
-
-  var util = require("util")
-    , Stream = require("stream")
-    , path = require("path")
-    , url = require("url")
-
-    , shorthands =
-      { s : ["--loglevel", "silent"]
-      , d : ["--loglevel", "info"]
-      , dd : ["--loglevel", "verbose"]
-      , ddd : ["--loglevel", "silly"]
-      , noreg : ["--no-registry"]
-      , reg : ["--registry"]
-      , "no-reg" : ["--no-registry"]
-      , silent : ["--loglevel", "silent"]
-      , verbose : ["--loglevel", "verbose"]
-      , h : ["--usage"]
-      , H : ["--usage"]
-      , "?" : ["--usage"]
-      , help : ["--usage"]
-      , v : ["--version"]
-      , f : ["--force"]
-      , desc : ["--description"]
-      , "no-desc" : ["--no-description"]
-      , "local" : ["--no-global"]
-      , l : ["--long"]
-      , p : ["--parseable"]
-      , porcelain : ["--parseable"]
-      , g : ["--global"]
-      }
-
-    , types =
-      { aoa: Array
-      , nullstream: [null, Stream]
-      , date: Date
-      , str: String
-      , browser : String
-      , cache : path
-      , color : ["always", Boolean]
-      , depth : Number
-      , description : Boolean
-      , dev : Boolean
-      , editor : path
-      , force : Boolean
-      , global : Boolean
-      , globalconfig : path
-      , group : [String, Number]
-      , gzipbin : String
-      , logfd : [Number, Stream]
-      , loglevel : ["silent","win","error","warn","info","verbose","silly"]
-      , long : Boolean
-      , "node-version" : [false, String]
-      , npaturl : url
-      , npat : Boolean
-      , "onload-script" : [false, String]
-      , outfd : [Number, Stream]
-      , parseable : Boolean
-      , pre: Boolean
-      , prefix: path
-      , proxy : url
-      , "rebuild-bundle" : Boolean
-      , registry : url
-      , searchopts : String
-      , searchexclude: [null, String]
-      , shell : path
-      , t: [Array, String]
-      , tag : String
-      , tar : String
-      , tmp : path
-      , "unsafe-perm" : Boolean
-      , usage : Boolean
-      , user : String
-      , username : String
-      , userconfig : path
-      , version : Boolean
-      , viewer: path
-      , _exit : Boolean
-      , path: path
-      }
-
-  ; [["-v", {version:true}, []]
-    ,["---v", {version:true}, []]
-    ,["ls -s --no-reg connect -d",
-      {loglevel:"info",registry:null},["ls","connect"]]
-    ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]]
-    ,["ls --registry blargle", {}, ["ls"]]
-    ,["--no-registry", {registry:null}, []]
-    ,["--no-color true", {color:false}, []]
-    ,["--no-color false", {color:true}, []]
-    ,["--no-color", {color:false}, []]
-    ,["--color false", {color:false}, []]
-    ,["--color --logfd 7", {logfd:7,color:true}, []]
-    ,["--color=true", {color:true}, []]
-    ,["--logfd=10", {logfd:10}, []]
-    ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]]
-    ,["--tmp=tmp -tar=gtar",
-      {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]]
-    ,["--logfd x", {}, []]
-    ,["a -true -- -no-false", {true:true},["a","-no-false"]]
-    ,["a -no-false", {false:false},["a"]]
-    ,["a -no-no-true", {true:true}, ["a"]]
-    ,["a -no-no-no-false", {false:false}, ["a"]]
-    ,["---NO-no-No-no-no-no-nO-no-no"+
-      "-No-no-no-no-no-no-no-no-no"+
-      "-no-no-no-no-NO-NO-no-no-no-no-no-no"+
-      "-no-body-can-do-the-boogaloo-like-I-do"
-     ,{"body-can-do-the-boogaloo-like-I-do":false}, []]
-    ,["we are -no-strangers-to-love "+
-      "--you-know=the-rules --and=so-do-i "+
-      "---im-thinking-of=a-full-commitment "+
-      "--no-you-would-get-this-from-any-other-guy "+
-      "--no-gonna-give-you-up "+
-      "-no-gonna-let-you-down=true "+
-      "--no-no-gonna-run-around false "+
-      "--desert-you=false "+
-      "--make-you-cry false "+
-      "--no-tell-a-lie "+
-      "--no-no-and-hurt-you false"
-     ,{"strangers-to-love":false
-      ,"you-know":"the-rules"
-      ,"and":"so-do-i"
-      ,"you-would-get-this-from-any-other-guy":false
-      ,"gonna-give-you-up":false
-      ,"gonna-let-you-down":false
-      ,"gonna-run-around":false
-      ,"desert-you":false
-      ,"make-you-cry":false
-      ,"tell-a-lie":false
-      ,"and-hurt-you":false
-      },["we", "are"]]
-    ,["-t one -t two -t three"
-     ,{t: ["one", "two", "three"]}
-     ,[]]
-    ,["-t one -t null -t three four five null"
-     ,{t: ["one", "null", "three"]}
-     ,["four", "five", "null"]]
-    ,["-t foo"
-     ,{t:["foo"]}
-     ,[]]
-    ,["--no-t"
-     ,{t:["false"]}
-     ,[]]
-    ,["-no-no-t"
-     ,{t:["true"]}
-     ,[]]
-    ,["-aoa one -aoa null -aoa 100"
-     ,{aoa:["one", null, '100']}
-     ,[]]
-    ,["-str 100"
-     ,{str:"100"}
-     ,[]]
-    ,["--color always"
-     ,{color:"always"}
-     ,[]]
-    ,["--no-nullstream"
-     ,{nullstream:null}
-     ,[]]
-    ,["--nullstream false"
-     ,{nullstream:null}
-     ,[]]
-    ,["--notadate=2011-01-25"
-     ,{notadate: "2011-01-25"}
-     ,[]]
-    ,["--date 2011-01-25"
-     ,{date: new Date("2011-01-25")}
-     ,[]]
-    ,["-cl 1"
-     ,{config: true, length: 1}
-     ,[]
-     ,{config: Boolean, length: Number, clear: Boolean}
-     ,{c: "--config", l: "--length"}]
-    ,["--acount bla"
-     ,{"acount":true}
-     ,["bla"]
-     ,{account: Boolean, credentials: Boolean, options: String}
-     ,{a:"--account", c:"--credentials",o:"--options"}]
-    ,["--clear"
-     ,{clear:true}
-     ,[]
-     
,{clear:Boolean,con:Boolean,len:Boolean,exp:Boolean,add:Boolean,rep:Boolean}
-     ,{c:"--con",l:"--len",e:"--exp",a:"--add",r:"--rep"}]
-    ,["--file -"
-     ,{"file":"-"}
-     ,[]
-     ,{file:String}
-     ,{}]
-    ,["--file -"
-     ,{"file":true}
-     ,["-"]
-     ,{file:Boolean}
-     ,{}]
-    ,["--path"
-     ,{"path":null}
-     ,[]]
-    ,["--path ."
-     ,{"path":process.cwd()}
-     ,[]]
-    ].forEach(function (test) {
-      var argv = test[0].split(/\s+/)
-        , opts = test[1]
-        , rem = test[2]
-        , actual = nopt(test[3] || types, test[4] || shorthands, argv, 0)
-        , parsed = actual.argv
-      delete actual.argv
-      for (var i in opts) {
-        var e = JSON.stringify(opts[i])
-          , a = JSON.stringify(actual[i] === undefined ? null : actual[i])
-        if (e && typeof e === "object") {
-          t.deepEqual(e, a)
-        } else {
-          t.equal(e, a)
-        }
-      }
-      t.deepEqual(rem, parsed.remain)
-    })
-  t.end()
-})

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/58047a3d/node_modules/q/CHANGES.md
----------------------------------------------------------------------
diff --git a/node_modules/q/CHANGES.md b/node_modules/q/CHANGES.md
new file mode 100644
index 0000000..cd351fd
--- /dev/null
+++ b/node_modules/q/CHANGES.md
@@ -0,0 +1,786 @@
+
+## 1.4.1
+
+ - Address an issue that prevented Q from being used as a `<script>` for
+   Firefox add-ons. Q can now be used in any environment that provides `window`
+   or `self` globals, favoring `window` since add-ons have an an immutable
+   `self` that is distinct from `window`.
+
+## 1.4.0
+
+ - Add `noConflict` support for use in `<script>` (@jahnjw).
+
+## 1.3.0
+
+ - Add tracking for unhandled and handled rejections in Node.js (@benjamingr).
+
+## 1.2.1
+
+ - Fix Node.js environment detection for modern Browserify (@kahnjw).
+
+## 1.2.0
+
+ - Added Q.any(promisesArray) method (@vergara).
+   Returns a promise fulfilled with the value of the first resolved promise in
+   promisesArray. If all promises in promisesArray are rejected, it returns
+   a rejected promise.
+
+## 1.1.2
+
+ - Removed extraneous files from the npm package by using the "files"
+   whitelist in package.json instead of the .npmignore blacklist.
+   (@anton-rudeshko)
+
+## 1.1.1
+
+ - Fix a pair of regressions in bootstrapping, one which precluded
+   WebWorker support, and another that precluded support in
+   ``<script>`` usage outright. #607
+
+## 1.1.0
+
+ - Adds support for enabling long stack traces in node.js by setting
+   environment variable `Q_DEBUG=1`.
+ - Introduces the `tap` method to promises, which will see a value
+   pass through without alteration.
+ - Use instanceof to recognize own promise instances as opposed to
+   thenables.
+ - Construct timeout errors with `code === ETIMEDOUT` (Kornel Lesiński)
+ - More descriminant CommonJS module environment detection.
+ - Dropped continuous integration for Node.js 0.6 and 0.8 because of
+   changes to npm that preclude the use of new `^` version predicate
+   operator in any transitive dependency.
+ - Users can now override `Q.nextTick`.
+
+## 1.0.1
+
+ - Adds support for `Q.Promise`, which implements common usage of the
+   ES6 `Promise` constructor and its methods. `Promise` does not have
+   a valid promise constructor and a proper implementation awaits
+   version 2 of Q.
+ - Removes the console stopgap for a promise inspector. This no longer
+   works with any degree of reliability.
+ - Fixes support for content security policies that forbid eval. Now
+   using the `StopIteration` global to distinguish SpiderMonkey
+   generators from ES6 generators, assuming that they will never
+   coexist.
+
+## 1.0.0
+
+:cake: This is all but a re-release of version 0.9, which has settled
+into a gentle maintenance mode and rightly deserves an official 1.0.
+An ambitious 2.0 release is already around the corner, but 0.9/1.0
+have been distributed far and wide and demand long term support.
+
+ - Q will now attempt to post a debug message in browsers regardless
+   of whether window.Touch is defined. Chrome at least now has this
+   property regardless of whether touch is supported by the underlying
+   hardware.
+ - Remove deprecation warning from `promise.valueOf`. The function is
+   called by the browser in various ways so there is no way to
+   distinguish usage that should be migrated from usage that cannot be
+   altered.
+
+## 0.9.7
+
+ - :warning: `q.min.js` is no longer checked-in.  It is however still
+   created by Grunt and NPM.
+ - Fixes a bug that inhibited `Q.async` with implementations of the new
+   ES6 generators.
+ - Fixes a bug with `nextTick` affecting Safari 6.0.5 the first time a
+   page loads when an `iframe` is involved.
+ - Introduces `passByCopy`, `join`, and `race`.
+ - Shows stack traces or error messages on the console, instead of
+   `Error` objects.
+ - Elimintates wrapper methods for improved performance.
+ - `Q.all` now propagates progress notifications of the form you might
+   expect of ES6 iterations, `{value, index}` where the `value` is the
+   progress notification from the promise at `index`.
+
+## 0.9.6
+
+ - Fixes a bug in recognizing the difference between compatible Q
+   promises, and Q promises from before the implementation of "inspect".
+   The latter are now coerced.
+ - Fixes an infinite asynchronous coercion cycle introduced by former
+   solution, in two independently sufficient ways.  1.) All promises
+   returned by makePromise now implement "inspect", albeit a default
+   that reports that the promise has an "unknown" state.  2.) The
+   implementation of "then/when" is now in "then" instead of "when", so
+   that the responsibility to "coerce" the given promise rests solely in
+   the "when" method and the "then" method may assume that "this" is a
+   promise of the right type.
+ - Refactors `nextTick` to use an unrolled microtask within Q regardless
+   of how new ticks a requested. #316 @rkatic
+
+## 0.9.5
+
+ - Introduces `inspect` for getting the state of a promise as
+   `{state: "fulfilled" | "rejected" | "pending", value | reason}`.
+ - Introduces `allSettled` which produces an array of promises states
+   for the input promises once they have all "settled".  This is in
+   accordance with a discussion on Promises/A+ that "settled" refers to
+   a promise that is "fulfilled" or "rejected".  "resolved" refers to a
+   deferred promise that has been "resolved" to another promise,
+   "sealing its fate" to the fate of the successor promise.
+ - Long stack traces are now off by default.  Set `Q.longStackSupport`
+   to true to enable long stack traces.
+ - Long stack traces can now follow the entire asynchronous history of a
+   promise, not just a single jump.
+ - Introduces `spawn` for an immediately invoked asychronous generator.
+   @jlongster
+ - Support for *experimental* synonyms `mapply`, `mcall`, `nmapply`,
+   `nmcall` for method invocation.
+
+## 0.9.4
+
+ - `isPromise` and `isPromiseAlike` now always returns a boolean
+   (even for falsy values). #284 @lfac-pt
+ - Support for ES6 Generators in `async` #288 @andywingo
+ - Clear duplicate promise rejections from dispatch methods #238 @SLaks
+ - Unhandled rejection API #296 @domenic
+   `stopUnhandledRejectionTracking`, `getUnhandledReasons`,
+   `resetUnhandledRejections`.
+
+## 0.9.3
+
+ - Add the ability to give `Q.timeout`'s errors a custom error message. #270
+   @jgrenon
+ - Fix Q's call-stack busting behavior in Node.js 0.10, by switching from
+   `process.nextTick` to `setImmediate`. #254 #259
+ - Fix Q's behavior when used with the Mocha test runner in the browser, since
+   Mocha introduces a fake `process` global without a `nextTick` property. #267
+ - Fix some, but not all, cases wherein Q would give false positives in its
+   unhandled rejection detection (#252). A fix for other cases (#238) is
+   hopefully coming soon.
+ - Made `Q.promise` throw early if given a non-function.
+
+## 0.9.2
+
+ - Pass through progress notifications when using `timeout`. #229 @omares
+ - Pass through progress notifications when using `delay`.
+ - Fix `nbind` to actually bind the `thisArg`. #232 @davidpadbury
+
+## 0.9.1
+
+ - Made the AMD detection compatible with the RequireJS optimizer's `namespace`
+   option. #225 @terinjokes
+ - Fix side effects from `valueOf`, and thus from `isFulfilled`, `isRejected`,
+   and `isPending`. #226 @benjamn
+
+## 0.9.0
+
+This release removes many layers of deprecated methods and brings Q closer to
+alignment with Mark Miller’s TC39 [strawman][] for concurrency. At the same
+time, it fixes many bugs and adds a few features around error handling. 
Finally,
+it comes with an updated and comprehensive [API Reference][].
+
+[strawman]: http://wiki.ecmascript.org/doku.php?id=strawman:concurrency
+[API Reference]: https://github.com/kriskowal/q/wiki/API-Reference
+
+### API Cleanup
+
+The following deprecated or undocumented methods have been removed.
+Their replacements are listed here:
+
+<table>
+   <thead>
+      <tr>
+         <th>0.8.x method</th>
+         <th>0.9 replacement</th>
+      </tr>
+   </thead>
+   <tbody>
+      <tr>
+         <td><code>Q.ref</code></td>
+         <td><code>Q</code></td>
+      </tr>
+      <tr>
+         <td><code>call</code>, <code>apply</code>, <code>bind</code> (*)</td>
+         <td><code>fcall</code>/<code>invoke</code>, 
<code>fapply</code>/<code>post</code>, <code>fbind</code></td>
+      </tr>
+      <tr>
+         <td><code>ncall</code>, <code>napply</code> (*)</td>
+         <td><code>nfcall</code>/<code>ninvoke</code>, 
<code>nfapply</code>/<code>npost</code></td>
+      </tr>
+      <tr>
+         <td><code>end</code></td>
+         <td><code>done</code></td>
+      </tr>
+      <tr>
+         <td><code>put</code></td>
+         <td><code>set</code></td>
+      </tr>
+      <tr>
+         <td><code>node</code></td>
+         <td><code>nbind</code></td>
+      </tr>
+      <tr>
+         <td><code>nend</code></td>
+         <td><code>nodeify</code></td>
+      </tr>
+      <tr>
+         <td><code>isResolved</code></td>
+         <td><code>isPending</code></td>
+      </tr>
+      <tr>
+         <td><code>deferred.node</code></td>
+         <td><code>deferred.makeNodeResolver</code></td>
+      </tr>
+      <tr>
+         <td><code>Method</code>, <code>sender</code></td>
+         <td><code>dispatcher</code></td>
+      </tr>
+      <tr>
+         <td><code>send</code></td>
+         <td><code>dispatch</code></td>
+      </tr>
+      <tr>
+         <td><code>view</code>, <code>viewInfo</code></td>
+         <td>(none)</td>
+      </tr>
+   </tbody>
+</table>
+
+
+(*) Use of ``thisp`` is discouraged. For calling methods, use ``post`` or
+``invoke``.
+
+### Alignment with the Concurrency Strawman
+
+-   Q now exports a `Q(value)` function, an alias for `resolve`.
+    `Q.call`, `Q.apply`, and `Q.bind` were removed to make room for the
+    same methods on the function prototype.
+-   `invoke` has been aliased to `send` in all its forms.
+-   `post` with no method name acts like `fapply`.
+
+### Error Handling
+
+-   Long stack traces can be turned off by setting `Q.stackJumpLimit` to zero.
+    In the future, this property will be used to fine tune how many stack jumps
+    are retained in long stack traces; for now, anything nonzero is treated as
+    one (since Q only tracks one stack jump at the moment, see #144). #168
+-   In Node.js, if there are unhandled rejections when the process exits, they
+    are output to the console. #115
+
+### Other
+
+-   `delete` and `set` (née `put`) no longer have a fulfillment value.
+-   Q promises are no longer frozen, which
+    [helps with 
performance](http://code.google.com/p/v8/issues/detail?id=1858).
+-   `thenReject` is now included, as a counterpart to `thenResolve`.
+-   The included browser `nextTick` shim is now faster. #195 @rkatic.
+
+### Bug Fixes
+
+-   Q now works in Internet Explorer 10. #186 @ForbesLindesay
+-   `fbind` no longer hard-binds the returned function's `this` to `undefined`.
+    #202
+-   `Q.reject` no longer leaks memory. #148
+-   `npost` with no arguments now works. #207
+-   `allResolved` now works with non-Q promises ("thenables"). #179
+-   `keys` behavior is now correct even in browsers without native
+    `Object.keys`. #192 @rkatic
+-   `isRejected` and the `exception` property now work correctly if the
+    rejection reason is falsy. #198
+
+### Internals and Advanced
+
+-   The internal interface for a promise now uses
+    `dispatchPromise(resolve, op, operands)` instead of `sendPromise(op,
+    resolve, ...operands)`, which reduces the cases where Q needs to do
+    argument slicing.
+-   The internal protocol uses different operands. "put" is now "set".
+    "del" is now "delete". "view" and "viewInfo" have been removed.
+-   `Q.fulfill` has been added. It is distinct from `Q.resolve` in that
+    it does not pass promises through, nor coerces promises from other
+    systems. The promise becomes the fulfillment value. This is only
+    recommended for use when trying to fulfill a promise with an object that 
has
+    a `then` function that is at the same time not a promise.
+
+## 0.8.12
+- Treat foreign promises as unresolved in `Q.isFulfilled`; this lets `Q.all`
+  work on arrays containing foreign promises. #154
+- Fix minor incompliances with the [Promises/A+ spec][] and [test suite][]. 
#157
+  #158
+
+[Promises/A+ spec]: http://promises-aplus.github.com/promises-spec/
+[test suite]: https://github.com/promises-aplus/promises-tests
+
+## 0.8.11
+
+ - Added ``nfcall``, ``nfapply``, and ``nfbind`` as ``thisp``-less versions of
+   ``ncall``, ``napply``, and ``nbind``. The latter are now deprecated. #142
+ - Long stack traces no longer cause linearly-growing memory usage when 
chaining
+   promises together. #111
+ - Inspecting ``error.stack`` in a rejection handler will now give a long stack
+   trace. #103
+ - Fixed ``Q.timeout`` to clear its timeout handle when the promise is 
rejected;
+   previously, it kept the event loop alive until the timeout period expired.
+   #145 @dfilatov
+ - Added `q/queue` module, which exports an infinite promise queue
+   constructor.
+
+## 0.8.10
+
+ - Added ``done`` as a replacement for ``end``, taking the usual fulfillment,
+   rejection, and progress handlers. It's essentially equivalent to
+   ``then(f, r, p).end()``.
+ - Added ``Q.onerror``, a settable error trap that you can use to get full 
stack
+   traces for uncaught errors. #94
+ - Added ``thenResolve`` as a shortcut for returning a constant value once a
+   promise is fulfilled. #108 @ForbesLindesay
+ - Various tweaks to progress notification, including propagation and
+   transformation of progress values and only forwarding a single progress
+   object.
+ - Renamed ``nend`` to ``nodeify``. It no longer returns an always-fulfilled
+   promise when a Node callback is passed.
+ - ``deferred.resolve`` and ``deferred.reject`` no longer (sometimes) return
+   ``deferred.promise``.
+ - Fixed stack traces getting mangled if they hit ``end`` twice. #116 #121 @ef4
+ - Fixed ``ninvoke`` and ``npost`` to work on promises for objects with Node
+   methods. #134
+ - Fixed accidental coercion of objects with nontrivial ``valueOf`` methods,
+   like ``Date``s, by the promise's ``valueOf`` method. #135
+ - Fixed ``spread`` not calling the passed rejection handler if given a 
rejected
+   promise.
+
+## 0.8.9
+
+ - Added ``nend``
+ - Added preliminary progress notification support, via
+   ``promise.then(onFulfilled, onRejected, onProgress)``,
+   ``promise.progress(onProgress)``, and ``deferred.notify(...progressData)``.
+ - Made ``put`` and ``del`` return the object acted upon for easier chaining.
+   #84
+ - Fixed coercion cycles with cooperating promises. #106
+
+## 0.8.7
+
+ - Support [Montage Require](http://github.com/kriskowal/mr)
+
+## 0.8.6
+
+ - Fixed ``npost`` and ``ninvoke`` to pass the correct ``thisp``. #74
+ - Fixed various cases involving unorthodox rejection reasons. #73 #90
+   @ef4
+ - Fixed double-resolving of misbehaved custom promises. #75
+ - Sped up ``Q.all`` for arrays contain already-resolved promises or scalar
+   values. @ForbesLindesay
+ - Made stack trace filtering work when concatenating assets. #93 @ef4
+ - Added warnings for deprecated methods. @ForbesLindesay
+ - Added ``.npmignore`` file so that dependent packages get a slimmer
+   ``node_modules`` directory.
+
+## 0.8.5
+
+ - Added preliminary support for long traces (@domenic)
+ - Added ``fapply``, ``fcall``, ``fbind`` for non-thisp
+   promised function calls.
+ - Added ``return`` for async generators, where generators
+   are implemented.
+ - Rejected promises now have an "exception" property.  If an object
+   isRejected(object), then object.valueOf().exception will
+   be the wrapped error.
+ - Added Jasmine specifications
+ - Support Internet Explorers 7–9 (with multiple bug fixes @domenic)
+ - Support Firefox 12
+ - Support Safari 5.1.5
+ - Support Chrome 18
+
+## 0.8.4
+
+ - WARNING: ``promise.timeout`` is now rejected with an ``Error`` object
+   and the message now includes the duration of the timeout in
+   miliseconds.  This doesn't constitute (in my opinion) a
+   backward-incompatibility since it is a change of an undocumented and
+   unspecified public behavior, but if you happened to depend on the
+   exception being a string, you will need to revise your code.
+ - Added ``deferred.makeNodeResolver()`` to replace the more cryptic
+   ``deferred.node()`` method.
+ - Added experimental ``Q.promise(maker(resolve, reject))`` to make a
+   promise inside a callback, such that thrown exceptions in the
+   callback are converted and the resolver and rejecter are arguments.
+   This is a shorthand for making a deferred directly and inspired by
+   @gozala’s stream constructor pattern and the Microsoft Windows Metro
+   Promise constructor interface.
+ - Added experimental ``Q.begin()`` that is intended to kick off chains
+   of ``.then`` so that each of these can be reordered without having to
+   edit the new and former first step.
+
+## 0.8.3
+
+ - Added ``isFulfilled``, ``isRejected``, and ``isResolved``
+   to the promise prototype.
+ - Added ``allResolved`` for waiting for every promise to either be
+   fulfilled or rejected, without propagating an error. @utvara #53
+ - Added ``Q.bind`` as a method to transform functions that
+   return and throw into promise-returning functions. See
+   [an example](https://gist.github.com/1782808). @domenic
+ - Renamed ``node`` export to ``nbind``, and added ``napply`` to
+   complete the set. ``node`` remains as deprecated. @domenic #58
+ - Renamed ``Method`` export to ``sender``.  ``Method``
+   remains as deprecated and will be removed in the next
+   major version since I expect it has very little usage.
+ - Added browser console message indicating a live list of
+   unhandled errors.
+ - Added support for ``msSetImmediate`` (IE10) or ``setImmediate``
+   (available via [polyfill](https://github.com/NobleJS/setImmediate))
+   as a browser-side ``nextTick`` implementation. #44 #50 #59
+ - Stopped using the event-queue dependency, which was in place for
+   Narwhal support: now directly using ``process.nextTick``.
+ - WARNING: EXPERIMENTAL: added ``finally`` alias for ``fin``, ``catch``
+   alias for ``fail``, ``try`` alias for ``call``, and ``delete`` alias
+   for ``del``.  These properties are enquoted in the library for
+   cross-browser compatibility, but may be used as property names in
+   modern engines.
+
+## 0.8.2
+
+ - Deprecated ``ref`` in favor of ``resolve`` as recommended by
+   @domenic.
+ - Update event-queue dependency.
+
+## 0.8.1
+
+ - Fixed Opera bug. #35 @cadorn
+ - Fixed ``Q.all([])`` #32 @domenic
+
+## 0.8.0
+
+ - WARNING: ``enqueue`` removed.  Use ``nextTick`` instead.
+   This is more consistent with NodeJS and (subjectively)
+   more explicit and intuitive.
+ - WARNING: ``def`` removed.  Use ``master`` instead.  The
+   term ``def`` was too confusing to new users.
+ - WARNING: ``spy`` removed in favor of ``fin``.
+ - WARNING: ``wait`` removed. Do ``all(args).get(0)`` instead.
+ - WARNING: ``join`` removed. Do ``all(args).spread(callback)`` instead.
+ - WARNING: Removed the ``Q`` function module.exports alias
+   for ``Q.ref``. It conflicts with ``Q.apply`` in weird
+   ways, making it uncallable.
+ - Revised ``delay`` so that it accepts both ``(value,
+   timeout)`` and ``(timeout)`` variations based on
+   arguments length.
+ - Added ``ref().spread(cb(...args))``, a variant of
+   ``then`` that spreads an array across multiple arguments.
+   Useful with ``all()``.
+ - Added ``defer().node()`` Node callback generator.  The
+   callback accepts ``(error, value)`` or ``(error,
+   ...values)``.  For multiple value arguments, the
+   fulfillment value is an array, useful in conjunction with
+   ``spread``.
+ - Added ``node`` and ``ncall``, both with the signature
+   ``(fun, thisp_opt, ...args)``.  The former is a decorator
+   and the latter calls immediately.  ``node`` optional
+   binds and partially applies.  ``ncall`` can bind and pass
+   arguments.
+
+## 0.7.2
+
+ - Fixed thenable promise assimilation.
+
+## 0.7.1
+
+ - Stopped shimming ``Array.prototype.reduce``. The
+   enumerable property has bad side-effects.  Libraries that
+   depend on this (for example, QQ) will need to be revised.
+
+## 0.7.0 - BACKWARD INCOMPATIBILITY
+
+ - WARNING: Removed ``report`` and ``asap``
+ - WARNING: The ``callback`` argument of the ``fin``
+   function no longer receives any arguments. Thus, it can
+   be used to call functions that should not receive
+   arguments on resolution.  Use ``when``, ``then``, or
+   ``fail`` if you need a value.
+ - IMPORTANT: Fixed a bug in the use of ``MessageChannel``
+   for ``nextTick``.
+ - Renamed ``enqueue`` to ``nextTick``.
+ - Added experimental ``view`` and ``viewInfo`` for creating
+   views of promises either when or before they're
+   fulfilled.
+ - Shims are now externally applied so subsequent scripts or
+   dependees can use them.
+ - Improved minification results.
+ - Improved readability.
+
+## 0.6.0 - BACKWARD INCOMPATIBILITY
+
+ - WARNING: In practice, the implementation of ``spy`` and
+   the name ``fin`` were useful.  I've removed the old
+   ``fin`` implementation and renamed/aliased ``spy``.
+ - The "q" module now exports its ``ref`` function as a "Q"
+   constructor, with module systems that support exports
+   assignment including NodeJS, RequireJS, and when used as
+   a ``<script>`` tag. Notably, strictly compliant CommonJS
+   does not support this, but UncommonJS does.
+ - Added ``async`` decorator for generators that use yield
+   to "trampoline" promises. In engines that support
+   generators (SpiderMonkey), this will greatly reduce the
+   need for nested callbacks.
+ - Made ``when`` chainable.
+ - Made ``all`` chainable.
+
+## 0.5.3
+
+ - Added ``all`` and refactored ``join`` and ``wait`` to use
+   it.  All of these will now reject at the earliest
+   rejection.
+
+## 0.5.2
+
+ - Minor improvement to ``spy``; now waits for resolution of
+   callback promise.
+
+## 0.5.1
+
+ - Made most Q API methods chainable on promise objects, and
+   turned the previous promise-methods of ``join``,
+   ``wait``, and ``report`` into Q API methods.
+ - Added ``apply`` and ``call`` to the Q API, and ``apply``
+   as a promise handler.
+ - Added ``fail``, ``fin``, and ``spy`` to Q and the promise
+   prototype for convenience when observing rejection,
+   fulfillment and rejection, or just observing without
+   affecting the resolution.
+ - Renamed ``def`` (although ``def`` remains shimmed until
+   the next major release) to ``master``.
+ - Switched to using ``MessageChannel`` for next tick task
+   enqueue in browsers that support it.
+
+## 0.5.0 - MINOR BACKWARD INCOMPATIBILITY
+
+ - Exceptions are no longer reported when consumed.
+ - Removed ``error`` from the API.  Since exceptions are
+   getting consumed, throwing them in an errback causes the
+   exception to silently disappear.  Use ``end``.
+ - Added ``end`` as both an API method and a promise-chain
+   ending method.  It causes propagated rejections to be
+   thrown, which allows Node to write stack traces and
+   emit ``uncaughtException`` events, and browsers to
+   likewise emit ``onerror`` and log to the console.
+ - Added ``join`` and ``wait`` as promise chain functions,
+   so you can wait for variadic promises, returning your own
+   promise back, or join variadic promises, resolving with a
+   callback that receives variadic fulfillment values.
+
+## 0.4.4
+
+ - ``end`` no longer returns a promise. It is the end of the
+   promise chain.
+ - Stopped reporting thrown exceptions in ``when`` callbacks
+   and errbacks.  These must be explicitly reported through
+   ``.end()``, ``.then(null, Q.error)``, or some other
+   mechanism.
+ - Added ``report`` as an API method, which can be used as
+   an errback to report and propagate an error.
+ - Added ``report`` as a promise-chain method, so an error
+   can be reported if it passes such a gate.
+
+## 0.4.3
+
+ - Fixed ``<script>`` support that regressed with 0.4.2
+   because of "use strict" in the module system
+   multi-plexer.
+
+## 0.4.2
+
+ - Added support for RequireJS (jburke)
+
+## 0.4.1
+
+ - Added an "end" method to the promise prototype,
+   as a shorthand for waiting for the promise to
+   be resolved gracefully, and failing to do so,
+   to dump an error message.
+
+## 0.4.0 - BACKWARD INCOMPATIBLE*
+
+ - *Removed the utility modules. NPM and Node no longer
+   expose any module except the main module.  These have
+   been moved and merged into the "qq" package.
+ - *In a non-CommonJS browser, q.js can be used as a script.
+   It now creates a Q global variable.
+ - Fixed thenable assimilation.
+ - Fixed some issues with asap, when it resolves to
+   undefined, or throws an exception.
+
+## 0.3.0 - BACKWARD-INCOMPATIBLE
+
+ - The `post` method has been reverted to its original
+   signature, as provided in Tyler Close's `ref_send` API.
+   That is, `post` accepts two arguments, the second of
+   which is an arbitrary object, but usually invocation
+   arguments as an `Array`.  To provide variadic arguments
+   to `post`, there is a new `invoke` function that posts
+   the variadic arguments to the value given in the first
+   argument.
+ - The `defined` method has been moved from `q` to `q/util`
+   since it gets no use in practice but is still
+   theoretically useful.
+ - The `Promise` constructor has been renamed to
+   `makePromise` to be consistent with the convention that
+   functions that do not require the `new` keyword to be
+   used as constructors have camelCase names.
+ - The `isResolved` function has been renamed to
+   `isFulfilled`.  There is a new `isResolved` function that
+   indicates whether a value is not a promise or, if it is a
+   promise, whether it has been either fulfilled or
+   rejected.  The code has been revised to reflect this
+   nuance in terminology.
+
+## 0.2.10
+
+ - Added `join` to `"q/util"` for variadically joining
+   multiple promises.
+
+## 0.2.9
+
+ - The future-compatible `invoke` method has been added,
+   to replace `post`, since `post` will become backward-
+   incompatible in the next major release.
+ - Exceptions thrown in the callbacks of a `when` call are
+   now emitted to Node's `"uncaughtException"` `process`
+   event in addition to being returned as a rejection reason.
+
+## 0.2.8
+
+ - Exceptions thrown in the callbacks of a `when` call
+   are now consumed, warned, and transformed into
+   rejections of the promise returned by `when`.
+
+## 0.2.7
+
+ - Fixed a minor bug in thenable assimilation, regressed
+   because of the change in the forwarding protocol.
+ - Fixed behavior of "q/util" `deep` method on dates and
+   other primitives. Github issue #11.
+
+## 0.2.6
+
+ - Thenables (objects with a "then" method) are accepted
+   and provided, bringing this implementation of Q
+   into conformance with Promises/A, B, and D.
+ - Added `makePromise`, to replace the `Promise` function
+   eventually.
+ - Rejections are now also duck-typed. A rejection is a
+   promise with a valueOf method that returns a rejection
+   descriptor. A rejection descriptor has a
+   "promiseRejected" property equal to "true" and a
+   "reason" property corresponding to the rejection reason.
+ - Altered the `makePromise` API such that the `fallback`
+   method no longer receives a superfluous `resolved` method
+   after the `operator`.  The fallback method is responsible
+   only for returning a resolution.  This breaks an
+   undocumented API, so third-party API's depending on the
+   previous undocumented behavior may break.
+
+## 0.2.5
+
+ - Changed promises into a duck-type such that multiple
+   instances of the Q module can exchange promise objects.
+   A promise is now defined as "an object that implements the
+   `promiseSend(op, resolved, ...)` method and `valueOf`".
+ - Exceptions in promises are now captured and returned
+   as rejections.
+
+## 0.2.4
+
+ - Fixed bug in `ref` that prevented `del` messages from
+   being received (gozala)
+ - Fixed a conflict with FireFox 4; constructor property
+   is now read-only.
+
+## 0.2.3
+
+ - Added `keys` message to promises and to the promise API.
+
+## 0.2.2
+
+ - Added boilerplate to `q/queue` and `q/util`.
+ - Fixed missing dependency to `q/queue`.
+
+## 0.2.1
+
+ - The `resolve` and `reject` methods of `defer` objects now
+   return the resolution promise for convenience.
+ - Added `q/util`, which provides `step`, `delay`, `shallow`,
+   `deep`, and three reduction orders.
+ - Added `q/queue` module for a promise `Queue`.
+ - Added `q-comm` to the list of compatible libraries.
+ - Deprecated `defined` from `q`, with intent to move it to
+   `q/util`.
+
+## 0.2.0 - BACKWARD INCOMPATIBLE
+
+ - Changed post(ref, name, args) to variadic
+   post(ref, name, ...args). BACKWARD INCOMPATIBLE
+ - Added a def(value) method to annotate an object as being
+   necessarily a local value that cannot be serialized, such
+   that inter-process/worker/vat promise communication
+   libraries will send messages to it, but never send it
+   back.
+ - Added a send(value, op, ...args) method to the public API, for
+   forwarding messages to a value or promise in a future turn.
+
+## 0.1.9
+
+ - Added isRejected() for testing whether a value is a rejected
+   promise.  isResolved() retains the behavior of stating
+   that rejected promises are not resolved.
+
+## 0.1.8
+
+ - Fixed isResolved(null) and isResolved(undefined) [issue #9]
+ - Fixed a problem with the Object.create shim
+
+## 0.1.7
+
+ - shimmed ES5 Object.create in addition to Object.freeze
+   for compatibility on non-ES5 engines (gozala)
+
+## 0.1.6
+
+ - Q.isResolved added
+ - promise.valueOf() now returns the value of resolved
+   and near values
+ - asap retried
+ - promises are frozen when possible
+
+## 0.1.5
+
+ - fixed dependency list for Teleport (gozala)
+ - all unit tests now pass (gozala)
+
+## 0.1.4
+
+ - added support for Teleport as an engine (gozala)
+ - simplified and updated methods for getting internal
+   print and enqueue functions universally (gozala)
+
+## 0.1.3
+
+ - fixed erroneous link to the q module in package.json
+
+## 0.1.2
+
+ - restructured for overlay style package compatibility
+
+## 0.1.0
+
+ - removed asap because it was broken, probably down to the
+   philosophy.
+
+## 0.0.3
+
+ - removed q-util
+ - fixed asap so it returns a value if completed
+
+## 0.0.2
+
+ - added q-util
+
+## 0.0.1
+
+ - initial version

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/58047a3d/node_modules/q/CONTRIBUTING.md
----------------------------------------------------------------------
diff --git a/node_modules/q/CONTRIBUTING.md b/node_modules/q/CONTRIBUTING.md
deleted file mode 100644
index 500ab17..0000000
--- a/node_modules/q/CONTRIBUTING.md
+++ /dev/null
@@ -1,40 +0,0 @@
-
-For pull requests:
-
--   Be consistent with prevalent style and design decisions.
--   Add a Jasmine spec to `specs/q-spec.js`.
--   Use `npm test` to avoid regressions.
--   Run tests in `q-spec/run.html` in as many supported browsers as you
-    can find the will to deal with.
--   Do not build minified versions; we do this each release.
--   If you would be so kind, add a note to `CHANGES.md` in an
-    appropriate section:
-
-    -   `Next Major Version` if it introduces backward incompatibilities
-        to code in the wild using documented features.
-    -   `Next Minor Version` if it adds a new feature.
-    -   `Next Patch Version` if it fixes a bug.
-
-For releases:
-
--   Run `npm test`.
--   Run tests in `q-spec/run.html` in a representative sample of every
-    browser under the sun.
--   Run `npm run cover` and make sure you're happy with the results.
--   Run `npm run minify` and be sure to commit the resulting `q.min.js`.
--   Note the Gzipped size output by the previous command, and update
-    `README.md` if it has changed to 1 significant digit.
--   Stash any local changes.
--   Update `CHANGES.md` to reflect all changes in the differences
-    between `HEAD` and the previous tagged version.  Give credit where
-    credit is due.
--   Update `README.md` to address all new, non-experimental features.
--   Update the API reference on the Wiki to reflect all non-experimental
-    features.
--   Use `npm version major|minor|patch` to update `package.json`,
-    commit, and tag the new version.
--   Use `npm publish` to send up a new release.
--   Send an email to the q-continuum mailing list announcing the new
-    release and the notes from the change log.  This helps folks
-    maintaining other package ecosystems.
-

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/58047a3d/node_modules/q/README.md
----------------------------------------------------------------------
diff --git a/node_modules/q/README.md b/node_modules/q/README.md
index bdd4168..9065bfa 100644
--- a/node_modules/q/README.md
+++ b/node_modules/q/README.md
@@ -1,15 +1,15 @@
 [![Build 
Status](https://secure.travis-ci.org/kriskowal/q.png?branch=master)](http://travis-ci.org/kriskowal/q)
 
 <a href="http://promises-aplus.github.com/promises-spec";>
-    <img 
src="http://promises-aplus.github.com/promises-spec/assets/logo-small.png";
-         align="right" alt="Promises/A+ logo" />
+    <img src="http://kriskowal.github.io/q/q.png";
+         align="right" alt="Q logo" />
 </a>
 
 *This is Q version 1, from the `v1` branch in Git. This documentation applies 
to
 the latest of both the version 1 and version 0.9 release trains. These releases
 are stable. There will be no further releases of 0.9 after 0.9.7 which is 
nearly
 equivalent to version 1.0.0. All further releases of `q@~1.0` will be backward
-compatible. The version 2 release train introduces significant but
+compatible. The version 2 release train introduces significant and
 backward-incompatible changes and is experimental at this time.*
 
 If a function cannot return a value or throw an exception without
@@ -80,7 +80,7 @@ The Q module can be loaded as:
     the [q](https://npmjs.org/package/q) package
 -   An AMD module
 -   A [component](https://github.com/component/component) as ``microjs/q``
--   Using [bower](http://bower.io/) as ``q``
+-   Using [bower](http://bower.io/) as `q#1.0.1`
 -   Using [NuGet](http://nuget.org/) as [Q](https://nuget.org/packages/q)
 
 Q can exchange promises with jQuery, Dojo, When.js, WinJS, and more.
@@ -294,7 +294,7 @@ If you have a promise for an array, you can use ``spread`` 
as a
 replacement for ``then``.  The ``spread`` function “spreads” the
 values over the arguments of the fulfillment handler.  The rejection handler
 will get called at the first sign of failure.  That is, whichever of
-the recived promises fails first gets handled by the rejection handler.
+the received promises fails first gets handled by the rejection handler.
 
 ```javascript
 function eventualAdd(a, b) {
@@ -335,6 +335,18 @@ Q.allSettled(promises)
 });
 ```
 
+The ``any`` function accepts an array of promises and returns a promise that is
+fulfilled by the first given promise to be fulfilled, or rejected if all of the
+given promises are rejected.
+
+```javascript
+Q.any(promises)
+.then(function (first) {
+    // Any of the promises was fulfilled.
+}, function (error) {
+    // All of the promises were rejected.
+});
+```
 
 ### Sequences
 
@@ -366,16 +378,16 @@ return funcs.reduce(function (soFar, f) {
 }, Q(initialVal));
 ```
 
-Or, you could use th ultra-compact version:
+Or, you could use the ultra-compact version:
 
 ```javascript
-return funcs.reduce(Q.when, Q());
+return funcs.reduce(Q.when, Q(initialVal));
 ```
 
 ### Handling Errors
 
 One sometimes-unintuive aspect of promises is that if you throw an
-exception in the fulfillment handler, it will not be be caught by the error
+exception in the fulfillment handler, it will not be caught by the error
 handler.
 
 ```javascript
@@ -610,6 +622,46 @@ requestOkText("http://localhost:3000";)
 });
 ```
 
+#### Using `Q.Promise`
+
+This is an alternative promise-creation API that has the same power as
+the deferred concept, but without introducing another conceptual entity.
+
+Rewriting the `requestOkText` example above using `Q.Promise`:
+
+```javascript
+function requestOkText(url) {
+    return Q.Promise(function(resolve, reject, notify) {
+        var request = new XMLHttpRequest();
+
+        request.open("GET", url, true);
+        request.onload = onload;
+        request.onerror = onerror;
+        request.onprogress = onprogress;
+        request.send();
+
+        function onload() {
+            if (request.status === 200) {
+                resolve(request.responseText);
+            } else {
+                reject(new Error("Status code was " + request.status));
+            }
+        }
+
+        function onerror() {
+            reject(new Error("Can't XHR " + JSON.stringify(url)));
+        }
+
+        function onprogress(event) {
+            notify(event.loaded / event.total);
+        }
+    });
+}
+```
+
+If `requestOkText` were to throw an exception, the returned promise would be
+rejected with that thrown exception as the rejection reason.
+
 ### The Middle
 
 If you are using a function that may return a promise, but just might
@@ -798,11 +850,20 @@ From previous event:
     at Object.<anonymous> (/path/to/test.js:7:1)
 ```
 
-Note how you can see the the function that triggered the async operation in the
+Note how you can see the function that triggered the async operation in the
 stack trace! This is very helpful for debugging, as otherwise you end up 
getting
 only the first line, plus a bunch of Q internals, with no sign of where the
 operation started.
 
+In node.js, this feature can also be enabled through the Q_DEBUG environment
+variable:
+
+```
+Q_DEBUG=1 node server.js
+```
+
+This will enable long stack support in every instance of Q.
+
 This feature does come with somewhat-serious performance and memory overhead,
 however. If you're working with lots of promises, or trying to scale a server
 to many users, you should probably keep it off. But in development, go for it!
@@ -815,6 +876,6 @@ You can view the results of the Q test suite [in your 
browser][tests]!
 
 ## License
 
-Copyright 2009–2014 Kristopher Michael Kowal
+Copyright 2009–2015 Kristopher Michael Kowal and contributors
 MIT License (enclosed)
 

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/58047a3d/node_modules/q/benchmark/compare-with-callbacks.js
----------------------------------------------------------------------
diff --git a/node_modules/q/benchmark/compare-with-callbacks.js 
b/node_modules/q/benchmark/compare-with-callbacks.js
deleted file mode 100644
index 97f1298..0000000
--- a/node_modules/q/benchmark/compare-with-callbacks.js
+++ /dev/null
@@ -1,71 +0,0 @@
-"use strict";
-
-var Q = require("../q");
-var fs = require("fs");
-
-suite("A single simple async operation", function () {
-    bench("with an immediately-fulfilled promise", function (done) {
-        Q().then(done);
-    });
-
-    bench("with direct setImmediate usage", function (done) {
-        setImmediate(done);
-    });
-
-    bench("with direct setTimeout(…, 0)", function (done) {
-        setTimeout(done, 0);
-    });
-});
-
-suite("A fs.readFile", function () {
-    var denodeified = Q.denodeify(fs.readFile);
-
-    set("iterations", 1000);
-    set("delay", 1000);
-
-    bench("directly, with callbacks", function (done) {
-        fs.readFile(__filename, done);
-    });
-
-    bench("with Q.nfcall", function (done) {
-        Q.nfcall(fs.readFile, __filename).then(done);
-    });
-
-    bench("with a Q.denodeify'ed version", function (done) {
-        denodeified(__filename).then(done);
-    });
-
-    bench("with manual usage of deferred.makeNodeResolver", function (done) {
-        var deferred = Q.defer();
-        fs.readFile(__filename, deferred.makeNodeResolver());
-        deferred.promise.then(done);
-    });
-});
-
-suite("1000 operations in parallel", function () {
-    function makeCounter(desiredCount, ultimateCallback) {
-        var soFar = 0;
-        return function () {
-            if (++soFar === desiredCount) {
-                ultimateCallback();
-            }
-        };
-    }
-    var numberOfOps = 1000;
-
-    bench("with immediately-fulfilled promises", function (done) {
-        var counter = makeCounter(numberOfOps, done);
-
-        for (var i = 0; i < numberOfOps; ++i) {
-            Q().then(counter);
-        }
-    });
-
-    bench("with direct setImmediate usage", function (done) {
-        var counter = makeCounter(numberOfOps, done);
-
-        for (var i = 0; i < numberOfOps; ++i) {
-            setImmediate(counter);
-        }
-    });
-});

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/58047a3d/node_modules/q/benchmark/scenarios.js
----------------------------------------------------------------------
diff --git a/node_modules/q/benchmark/scenarios.js 
b/node_modules/q/benchmark/scenarios.js
deleted file mode 100644
index 7c18564..0000000
--- a/node_modules/q/benchmark/scenarios.js
+++ /dev/null
@@ -1,36 +0,0 @@
-"use strict";
-
-var Q = require("../q");
-
-suite("Chaining", function () {
-    var numberToChain = 1000;
-
-    bench("Chaining many already-fulfilled promises together", function (done) 
{
-        var currentPromise = Q();
-        for (var i = 0; i < numberToChain; ++i) {
-            currentPromise = currentPromise.then(function () {
-                return Q();
-            });
-        }
-
-        currentPromise.then(done);
-    });
-
-    bench("Chaining and then fulfilling the end of the chain", function (done) 
{
-        var deferred = Q.defer();
-
-        var currentPromise = deferred.promise;
-        for (var i = 0; i < numberToChain; ++i) {
-            (function () {
-                var promiseToReturn = currentPromise;
-                currentPromise = Q().then(function () {
-                    return promiseToReturn;
-                });
-            }());
-        }
-
-        currentPromise.then(done);
-
-        deferred.resolve();
-    });
-});

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/58047a3d/node_modules/q/package.json
----------------------------------------------------------------------
diff --git a/node_modules/q/package.json b/node_modules/q/package.json
index 96fedeb..6dd257b 100644
--- a/node_modules/q/package.json
+++ b/node_modules/q/package.json
@@ -1,6 +1,6 @@
 {
   "name": "q",
-  "version": "1.0.1",
+  "version": "1.4.1",
   "description": "A library for promises (CommonJS/Promises/A,B,D)",
   "homepage": "https://github.com/kriskowal/q";,
   "author": {
@@ -47,6 +47,11 @@
     "url": "http://github.com/kriskowal/q/raw/master/LICENSE";
   },
   "main": "q.js",
+  "files": [
+    "LICENSE",
+    "q.js",
+    "queue.js"
+  ],
   "repository": {
     "type": "git",
     "url": "git://github.com/kriskowal/q.git"
@@ -57,22 +62,22 @@
   },
   "dependencies": {},
   "devDependencies": {
-    "jshint": "~2.1.9",
     "cover": "*",
-    "jasmine-node": "1.11.0",
-    "opener": "*",
-    "promises-aplus-tests": "1.x",
     "grunt": "~0.4.1",
     "grunt-cli": "~0.1.9",
-    "grunt-contrib-uglify": "~0.2.2",
-    "matcha": "~0.2.0"
+    "grunt-contrib-uglify": "~0.9.1",
+    "jasmine-node": "1.11.0",
+    "jshint": "~2.1.9",
+    "matcha": "~0.2.0",
+    "opener": "*",
+    "promises-aplus-tests": "1.x"
   },
   "scripts": {
     "test": "jasmine-node spec && promises-aplus-tests spec/aplus-adapter",
     "test-browser": "opener spec/q-spec.html",
     "benchmark": "matcha",
     "lint": "jshint q.js",
-    "cover": "cover run node_modules/jasmine-node/bin/jasmine-node spec && 
cover report html && opener cover_html/index.html",
+    "cover": "cover run jasmine-node spec && cover report html && opener 
cover_html/index.html",
     "minify": "grunt",
     "prepublish": "grunt"
   },
@@ -86,8 +91,30 @@
   "directories": {
     "test": "./spec"
   },
-  "readme": "[![Build 
Status](https://secure.travis-ci.org/kriskowal/q.png?branch=master)](http://travis-ci.org/kriskowal/q)\n\n<a
 href=\"http://promises-aplus.github.com/promises-spec\";>\n    <img 
src=\"http://promises-aplus.github.com/promises-spec/assets/logo-small.png\"\n  
       align=\"right\" alt=\"Promises/A+ logo\" />\n</a>\n\n*This is Q version 
1, from the `v1` branch in Git. This documentation applies to\nthe latest of 
both the version 1 and version 0.9 release trains. These releases\nare stable. 
There will be no further releases of 0.9 after 0.9.7 which is 
nearly\nequivalent to version 1.0.0. All further releases of `q@~1.0` will be 
backward\ncompatible. The version 2 release train introduces significant 
but\nbackward-incompatible changes and is experimental at this time.*\n\nIf a 
function cannot return a value or throw an exception without\nblocking, it can 
return a promise instead.  A promise is an object\nthat represents the return 
value or the thrown exception that t
 he\nfunction may eventually provide.  A promise can also be used as a\nproxy 
for a [remote object][Q-Connection] to overcome latency.\n\n[Q-Connection]: 
https://github.com/kriskowal/q-connection\n\nOn the first pass, promises can 
mitigate the “[Pyramid of\nDoom][POD]”: the situation where code marches to 
the right faster\nthan it marches forward.\n\n[POD]: 
http://calculist.org/blog/2011/12/14/why-coroutines-wont-work-on-the-web/\n\n```javascript\nstep1(function
 (value1) {\n    step2(value1, function(value2) {\n        step3(value2, 
function(value3) {\n            step4(value3, function(value4) {\n              
  // Do something with value4\n            });\n        });\n    
});\n});\n```\n\nWith a promise library, you can flatten the 
pyramid.\n\n```javascript\nQ.fcall(promisedStep1)\n.then(promisedStep2)\n.then(promisedStep3)\n.then(promisedStep4)\n.then(function
 (value4) {\n    // Do something with value4\n})\n.catch(function (error) {\n   
 // Handle any error from all above st
 eps\n})\n.done();\n```\n\nWith this approach, you also get implicit error 
propagation, just like `try`,\n`catch`, and `finally`.  An error in 
`promisedStep1` will flow all the way to\nthe `catch` function, where it’s 
caught and handled.  (Here `promisedStepN` is\na version of `stepN` that 
returns a promise.)\n\nThe callback approach is called an “inversion of 
control”.\nA function that accepts a callback instead of a return value\nis 
saying, “Don’t call me, I’ll call you.”.  Promises\n[un-invert][IOC] 
the inversion, cleanly separating the input\narguments from control flow 
arguments.  This simplifies the\nuse and creation of API’s, particularly 
variadic,\nrest and spread arguments.\n\n[IOC]: 
http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript\n\n\n##
 Getting Started\n\nThe Q module can be loaded as:\n\n-   A ``<script>`` tag 
(creating a ``Q`` global variable): ~2.5 KB minified and\n    gzippe
 d.\n-   A Node.js and CommonJS module, available in [npm](https://npmjs.org/) 
as\n    the [q](https://npmjs.org/package/q) package\n-   An AMD module\n-   A 
[component](https://github.com/component/component) as ``microjs/q``\n-   Using 
[bower](http://bower.io/) as ``q``\n-   Using [NuGet](http://nuget.org/) as 
[Q](https://nuget.org/packages/q)\n\nQ can exchange promises with jQuery, Dojo, 
When.js, WinJS, and more.\n\n## Resources\n\nOur [wiki][] contains a number of 
useful resources, including:\n\n- A method-by-method [Q API 
reference][reference].\n- A growing [examples gallery][examples], showing how Q 
can be used to make\n  everything better. From XHR to database access to 
accessing the Flickr API,\n  Q is there for you.\n- There are many libraries 
that produce and consume Q promises for everything\n  from file system/database 
access or RPC to templating. For a list of some of\n  the more popular ones, 
see [Libraries][].\n- If you want materials that introduce the promise concept
  generally, and the\n  below tutorial isn't doing it for you, check out our 
collection of\n  [presentations, blog posts, and podcasts][resources].\n- A 
guide for those [coming from jQuery's `$.Deferred`][jquery].\n\nWe'd also love 
to have you join the Q-Continuum [mailing list][].\n\n[wiki]: 
https://github.com/kriskowal/q/wiki\n[reference]: 
https://github.com/kriskowal/q/wiki/API-Reference\n[examples]: 
https://github.com/kriskowal/q/wiki/Examples-Gallery\n[Libraries]: 
https://github.com/kriskowal/q/wiki/Libraries\n[resources]: 
https://github.com/kriskowal/q/wiki/General-Promise-Resources\n[jquery]: 
https://github.com/kriskowal/q/wiki/Coming-from-jQuery\n[mailing list]: 
https://groups.google.com/forum/#!forum/q-continuum\n\n\n## 
Tutorial\n\nPromises have a ``then`` method, which you can use to get the 
eventual\nreturn value (fulfillment) or thrown exception 
(rejection).\n\n```javascript\npromiseMeSomething()\n.then(function (value) 
{\n}, function (reason) {\n});\n```\n\nIf ``promiseM
 eSomething`` returns a promise that gets fulfilled later\nwith a return value, 
the first function (the fulfillment handler) will be\ncalled with the value.  
However, if the ``promiseMeSomething`` function\ngets rejected later by a 
thrown exception, the second function (the\nrejection handler) will be called 
with the exception.\n\nNote that resolution of a promise is always 
asynchronous: that is, the\nfulfillment or rejection handler will always be 
called in the next turn of the\nevent loop (i.e. `process.nextTick` in Node). 
This gives you a nice\nguarantee when mentally tracing the flow of your code, 
namely that\n``then`` will always return before either handler is 
executed.\n\nIn this tutorial, we begin with how to consume and work with 
promises. We'll\ntalk about how to create them, and thus create functions 
like\n`promiseMeSomething` that return promises, 
[below](#the-beginning).\n\n\n### Propagation\n\nThe ``then`` method returns a 
promise, which in this example, I’m\nassignin
 g to ``outputPromise``.\n\n```javascript\nvar outputPromise = 
getInputPromise()\n.then(function (input) {\n}, function (reason) 
{\n});\n```\n\nThe ``outputPromise`` variable becomes a new promise for the 
return\nvalue of either handler.  Since a function can only either return 
a\nvalue or throw an exception, only one handler will ever be called and 
it\nwill be responsible for resolving ``outputPromise``.\n\n-   If you return a 
value in a handler, ``outputPromise`` will get\n    fulfilled.\n\n-   If you 
throw an exception in a handler, ``outputPromise`` will get\n    rejected.\n\n- 
  If you return a **promise** in a handler, ``outputPromise`` will\n    
“become” that promise.  Being able to become a new promise is useful\n    
for managing delays, combining results, or recovering from errors.\n\nIf the 
``getInputPromise()`` promise gets rejected and you omit the\nrejection 
handler, the **error** will go to ``outputPromise``:\n\n```javascript\nvar 
outputPromise = getInputPromise()\n
 .then(function (value) {\n});\n```\n\nIf the input promise gets fulfilled and 
you omit the fulfillment handler, the\n**value** will go to 
``outputPromise``:\n\n```javascript\nvar outputPromise = 
getInputPromise()\n.then(null, function (error) {\n});\n```\n\nQ promises 
provide a ``fail`` shorthand for ``then`` when you are only\ninterested in 
handling the error:\n\n```javascript\nvar outputPromise = 
getInputPromise()\n.fail(function (error) {\n});\n```\n\nIf you are writing 
JavaScript for modern engines only or using\nCoffeeScript, you may use `catch` 
instead of `fail`.\n\nPromises also have a ``fin`` function that is like a 
``finally`` clause.\nThe final handler gets called, with no arguments, when the 
promise\nreturned by ``getInputPromise()`` either returns a value or throws 
an\nerror.  The value returned or error thrown by ``getInputPromise()``\npasses 
directly to ``outputPromise`` unless the final handler fails, and\nmay be 
delayed if the final handler returns a promise.\n\n```j
 avascript\nvar outputPromise = getInputPromise()\n.fin(function () {\n    // 
close files, database connections, stop servers, conclude tests\n});\n```\n\n-  
 If the handler returns a value, the value is ignored\n-   If the handler 
throws an error, the error passes to ``outputPromise``\n-   If the handler 
returns a promise, ``outputPromise`` gets postponed.  The\n    eventual value 
or error has the same effect as an immediate return\n    value or thrown error: 
a value would be ignored, an error would be\n    forwarded.\n\nIf you are 
writing JavaScript for modern engines only or using\nCoffeeScript, you may use 
`finally` instead of `fin`.\n\n### Chaining\n\nThere are two ways to chain 
promises.  You can chain promises either\ninside or outside handlers.  The next 
two examples are equivalent.\n\n```javascript\nreturn 
getUsername()\n.then(function (username) {\n    return getUser(username)\n    
.then(function (user) {\n        // if we get here without an error,\n        
// the value re
 turned here\n        // or the exception thrown here\n        // resolves the 
promise returned\n        // by the first line\n    
})\n});\n```\n\n```javascript\nreturn getUsername()\n.then(function (username) 
{\n    return getUser(username);\n})\n.then(function (user) {\n    // if we get 
here without an error,\n    // the value returned here\n    // or the exception 
thrown here\n    // resolves the promise returned\n    // by the first 
line\n});\n```\n\nThe only difference is nesting.  It’s useful to nest 
handlers if you\nneed to capture multiple input values in your 
closure.\n\n```javascript\nfunction authenticate() {\n    return 
getUsername()\n    .then(function (username) {\n        return 
getUser(username);\n    })\n    // chained because we will not need the user 
name in the next event\n    .then(function (user) {\n        return 
getPassword()\n        // nested because we need both user and password next\n  
      .then(function (password) {\n            if (user.passwordHash
  !== hash(password)) {\n                throw new Error(\"Can't 
authenticate\");\n            }\n        });\n    });\n}\n```\n\n\n### 
Combination\n\nYou can turn an array of promises into a promise for the 
whole,\nfulfilled array using ``all``.\n\n```javascript\nreturn Q.all([\n    
eventualAdd(2, 2),\n    eventualAdd(10, 20)\n]);\n```\n\nIf you have a promise 
for an array, you can use ``spread`` as a\nreplacement for ``then``.  The 
``spread`` function “spreads” the\nvalues over the arguments of the 
fulfillment handler.  The rejection handler\nwill get called at the first sign 
of failure.  That is, whichever of\nthe recived promises fails first gets 
handled by the rejection handler.\n\n```javascript\nfunction eventualAdd(a, b) 
{\n    return Q.spread([a, b], function (a, b) {\n        return a + b;\n    
})\n}\n```\n\nBut ``spread`` calls ``all`` initially, so you can skip it in 
chains.\n\n```javascript\nreturn getUsername()\n.then(function (username) {\n   
 return [username, getU
 ser(username)];\n})\n.spread(function (username, user) {\n});\n```\n\nThe 
``all`` function returns a promise for an array of values.  When this\npromise 
is fulfilled, the array contains the fulfillment values of the 
original\npromises, in the same order as those promises.  If one of the given 
promises\nis rejected, the returned promise is immediately rejected, not 
waiting for the\nrest of the batch.  If you want to wait for all of the 
promises to either be\nfulfilled or rejected, you can use 
``allSettled``.\n\n```javascript\nQ.allSettled(promises)\n.then(function 
(results) {\n    results.forEach(function (result) {\n        if (result.state 
=== \"fulfilled\") {\n            var value = result.value;\n        } else {\n 
           var reason = result.reason;\n        }\n    });\n});\n```\n\n\n### 
Sequences\n\nIf you have a number of promise-producing functions that need\nto 
be run sequentially, you can of course do so manually:\n\n```javascript\nreturn 
foo(initialVal).then(bar).then(
 baz).then(qux);\n```\n\nHowever, if you want to run a dynamically constructed 
sequence of\nfunctions, you'll want something like this:\n\n```javascript\nvar 
funcs = [foo, bar, baz, qux];\n\nvar result = 
Q(initialVal);\nfuncs.forEach(function (f) {\n    result = 
result.then(f);\n});\nreturn result;\n```\n\nYou can make this slightly more 
compact using `reduce`:\n\n```javascript\nreturn funcs.reduce(function (soFar, 
f) {\n    return soFar.then(f);\n}, Q(initialVal));\n```\n\nOr, you could use 
th ultra-compact version:\n\n```javascript\nreturn funcs.reduce(Q.when, 
Q());\n```\n\n### Handling Errors\n\nOne sometimes-unintuive aspect of promises 
is that if you throw an\nexception in the fulfillment handler, it will not be 
be caught by the error\nhandler.\n\n```javascript\nreturn foo()\n.then(function 
(value) {\n    throw new Error(\"Can't bar.\");\n}, function (error) {\n    // 
We only get here if \"foo\" fails\n});\n```\n\nTo see why this is, consider the 
parallel between promises and\n`
 `try``/``catch``. We are ``try``-ing to execute ``foo()``: the error\nhandler 
represents a ``catch`` for ``foo()``, while the fulfillment handler\nrepresents 
code that happens *after* the ``try``/``catch`` block.\nThat code then needs 
its own ``try``/``catch`` block.\n\nIn terms of promises, this means chaining 
your rejection handler:\n\n```javascript\nreturn foo()\n.then(function (value) 
{\n    throw new Error(\"Can't bar.\");\n})\n.fail(function (error) {\n    // 
We get here with either foo's error or bar's error\n});\n```\n\n### Progress 
Notification\n\nIt's possible for promises to report their progress, e.g. for 
tasks that take a\nlong time like a file upload. Not all promises will 
implement progress\nnotifications, but for those that do, you can consume the 
progress values using\na third parameter to ``then``:\n\n```javascript\nreturn 
uploadFile()\n.then(function () {\n    // Success uploading the file\n}, 
function (err) {\n    // There was an error, and we get the reason for 
 error\n}, function (progress) {\n    // We get notified of the upload's 
progress as it is executed\n});\n```\n\nLike `fail`, Q also provides a 
shorthand for progress callbacks\ncalled `progress`:\n\n```javascript\nreturn 
uploadFile().progress(function (progress) {\n    // We get notified of the 
upload's progress\n});\n```\n\n### The End\n\nWhen you get to the end of a 
chain of promises, you should either\nreturn the last promise or end the chain. 
 Since handlers catch\nerrors, it’s an unfortunate pattern that the 
exceptions can go\nunobserved.\n\nSo, either return 
it,\n\n```javascript\nreturn foo()\n.then(function () {\n    return 
\"bar\";\n});\n```\n\nOr, end it.\n\n```javascript\nfoo()\n.then(function () 
{\n    return \"bar\";\n})\n.done();\n```\n\nEnding a promise chain makes sure 
that, if an error doesn’t get\nhandled before the end, it will get rethrown 
and reported.\n\nThis is a stopgap. We are exploring ways to make unhandled 
errors\nvisible without any explicit handling.
 \n\n\n### The Beginning\n\nEverything above assumes you get a promise from 
somewhere else.  This\nis the common case.  Every once in a while, you will 
need to create a\npromise from scratch.\n\n#### Using ``Q.fcall``\n\nYou can 
create a promise from a value using ``Q.fcall``.  This returns a\npromise for 
10.\n\n```javascript\nreturn Q.fcall(function () {\n    return 
10;\n});\n```\n\nYou can also use ``fcall`` to get a promise for an 
exception.\n\n```javascript\nreturn Q.fcall(function () {\n    throw new 
Error(\"Can't do it\");\n});\n```\n\nAs the name implies, ``fcall`` can call 
functions, or even promised\nfunctions.  This uses the ``eventualAdd`` function 
above to add two\nnumbers.\n\n```javascript\nreturn Q.fcall(eventualAdd, 2, 
2);\n```\n\n\n#### Using Deferreds\n\nIf you have to interface with 
asynchronous functions that are callback-based\ninstead of promise-based, Q 
provides a few shortcuts (like ``Q.nfcall`` and\nfriends). But much of the 
time, the solution will be to use *
 deferreds*.\n\n```javascript\nvar deferred = 
Q.defer();\nFS.readFile(\"foo.txt\", \"utf-8\", function (error, text) {\n    
if (error) {\n        deferred.reject(new Error(error));\n    } else {\n        
deferred.resolve(text);\n    }\n});\nreturn deferred.promise;\n```\n\nNote that 
a deferred can be resolved with a value or a promise.  The\n``reject`` function 
is a shorthand for resolving with a rejected\npromise.\n\n```javascript\n// 
this:\ndeferred.reject(new Error(\"Can't do it\"));\n\n// is shorthand 
for:\nvar rejection = Q.fcall(function () {\n    throw new Error(\"Can't do 
it\");\n});\ndeferred.resolve(rejection);\n```\n\nThis is a simplified 
implementation of ``Q.delay``.\n\n```javascript\nfunction delay(ms) {\n    var 
deferred = Q.defer();\n    setTimeout(deferred.resolve, ms);\n    return 
deferred.promise;\n}\n```\n\nThis is a simplified implementation of 
``Q.timeout``\n\n```javascript\nfunction timeout(promise, ms) {\n    var 
deferred = Q.defer();\n    Q.when(promise, defe
 rred.resolve);\n    delay(ms).then(function () {\n        deferred.reject(new 
Error(\"Timed out\"));\n    });\n    return 
deferred.promise;\n}\n```\n\nFinally, you can send a progress notification to 
the promise with\n``deferred.notify``.\n\nFor illustration, this is a wrapper 
for XML HTTP requests in the browser. Note\nthat a more [thorough][XHR] 
implementation would be in order in practice.\n\n[XHR]: 
https://github.com/montagejs/mr/blob/71e8df99bb4f0584985accd6f2801ef3015b9763/browser.js#L29-L73\n\n```javascript\nfunction
 requestOkText(url) {\n    var request = new XMLHttpRequest();\n    var 
deferred = Q.defer();\n\n    request.open(\"GET\", url, true);\n    
request.onload = onload;\n    request.onerror = onerror;\n    
request.onprogress = onprogress;\n    request.send();\n\n    function onload() 
{\n        if (request.status === 200) {\n            
deferred.resolve(request.responseText);\n        } else {\n            
deferred.reject(new Error(\"Status code was \" + request.statu
 s));\n        }\n    }\n\n    function onerror() {\n        
deferred.reject(new Error(\"Can't XHR \" + JSON.stringify(url)));\n    }\n\n    
function onprogress(event) {\n        deferred.notify(event.loaded / 
event.total);\n    }\n\n    return deferred.promise;\n}\n```\n\nBelow is an 
example of how to use this ``requestOkText`` 
function:\n\n```javascript\nrequestOkText(\"http://localhost:3000\";)\n.then(function
 (responseText) {\n    // If the HTTP response returns 200 OK, log the response 
text.\n    console.log(responseText);\n}, function (error) {\n    // If there's 
an error or a non-200 status code, log the error.\n    
console.error(error);\n}, function (progress) {\n    // Log the progress as it 
comes in.\n    console.log(\"Request progress: \" + Math.round(progress * 100) 
+ \"%\");\n});\n```\n\n### The Middle\n\nIf you are using a function that may 
return a promise, but just might\nreturn a value if it doesn’t need to defer, 
you can use the “static”\nmethods of the Q libra
 ry.\n\nThe ``when`` function is the static equivalent for 
``then``.\n\n```javascript\nreturn Q.when(valueOrPromise, function (value) 
{\n}, function (error) {\n});\n```\n\nAll of the other methods on a promise 
have static analogs with the\nsame name.\n\nThe following are 
equivalent:\n\n```javascript\nreturn Q.all([a, 
b]);\n```\n\n```javascript\nreturn Q.fcall(function () {\n    return [a, 
b];\n})\n.all();\n```\n\nWhen working with promises provided by other 
libraries, you should\nconvert it to a Q promise.  Not all promise libraries 
make the same\nguarantees as Q and certainly don’t provide all of the same 
methods.\nMost libraries only provide a partially functional ``then`` 
method.\nThis thankfully is all we need to turn them into vibrant Q 
promises.\n\n```javascript\nreturn Q($.ajax(...))\n.then(function () 
{\n});\n```\n\nIf there is any chance that the promise you receive is not a Q 
promise\nas provided by your library, you should wrap it using a Q 
function.\nYou can even use ``
 Q.invoke`` as a shorthand.\n\n```javascript\nreturn Q.invoke($, 'ajax', 
...)\n.then(function () {\n});\n```\n\n\n### Over the Wire\n\nA promise can 
serve as a proxy for another object, even a remote\nobject.  There are methods 
that allow you to optimistically manipulate\nproperties or call functions.  All 
of these interactions return\npromises, so they can be chained.\n\n```\ndirect 
manipulation         using a promise as a proxy\n--------------------------  
-------------------------------\nvalue.foo                   
promise.get(\"foo\")\nvalue.foo = value           promise.put(\"foo\", 
value)\ndelete value.foo            promise.del(\"foo\")\nvalue.foo(...args)    
      promise.post(\"foo\", [args])\nvalue.foo(...args)          
promise.invoke(\"foo\", ...args)\nvalue(...args)              
promise.fapply([args])\nvalue(...args)              
promise.fcall(...args)\n```\n\nIf the promise is a proxy for a remote object, 
you can shave\nround-trips by using these functions instead of ``
 then``.  To take\nadvantage of promises for remote objects, check out 
[Q-Connection][].\n\n[Q-Connection]: 
https://github.com/kriskowal/q-connection\n\nEven in the case of non-remote 
objects, these methods can be used as\nshorthand for particularly-simple 
fulfillment handlers. For example, you\ncan replace\n\n```javascript\nreturn 
Q.fcall(function () {\n    return [{ foo: \"bar\" }, { foo: \"baz\" 
}];\n})\n.then(function (value) {\n    return 
value[0].foo;\n});\n```\n\nwith\n\n```javascript\nreturn Q.fcall(function () 
{\n    return [{ foo: \"bar\" }, { foo: \"baz\" 
}];\n})\n.get(0)\n.get(\"foo\");\n```\n\n\n### Adapting Node\n\nIf you're 
working with functions that make use of the Node.js callback pattern,\nwhere 
callbacks are in the form of `function(err, result)`, Q provides a few\nuseful 
utility functions for converting between them. The most straightforward\nare 
probably `Q.nfcall` and `Q.nfapply` (\"Node function call/apply\") for 
calling\nNode.js-style functions and getting ba
 ck a promise:\n\n```javascript\nreturn Q.nfcall(FS.readFile, \"foo.txt\", 
\"utf-8\");\nreturn Q.nfapply(FS.readFile, [\"foo.txt\", 
\"utf-8\"]);\n```\n\nIf you are working with methods, instead of simple 
functions, you can easily\nrun in to the usual problems where passing a method 
to another function—like\n`Q.nfcall`—\"un-binds\" the method from its 
owner. To avoid this, you can either\nuse `Function.prototype.bind` or some 
nice shortcut methods we provide:\n\n```javascript\nreturn 
Q.ninvoke(redisClient, \"get\", \"user:1:id\");\nreturn Q.npost(redisClient, 
\"get\", [\"user:1:id\"]);\n```\n\nYou can also create reusable wrappers with 
`Q.denodeify` or `Q.nbind`:\n\n```javascript\nvar readFile = 
Q.denodeify(FS.readFile);\nreturn readFile(\"foo.txt\", \"utf-8\");\n\nvar 
redisClientGet = Q.nbind(redisClient.get, redisClient);\nreturn 
redisClientGet(\"user:1:id\");\n```\n\nFinally, if you're working with raw 
deferred objects, there is a\n`makeNodeResolver` method on deferreds that ca
 n be handy:\n\n```javascript\nvar deferred = 
Q.defer();\nFS.readFile(\"foo.txt\", \"utf-8\", 
deferred.makeNodeResolver());\nreturn deferred.promise;\n```\n\n### Long Stack 
Traces\n\nQ comes with optional support for “long stack traces,” wherein 
the `stack`\nproperty of `Error` rejection reasons is rewritten to be traced 
along\nasynchronous jumps instead of stopping at the most recent one. As an 
example:\n\n```js\nfunction theDepthsOfMyProgram() {\n  
Q.delay(100).done(function explode() {\n    throw new Error(\"boo!\");\n  
});\n}\n\ntheDepthsOfMyProgram();\n```\n\nusually would give a rather unhelpful 
stack trace looking something like\n\n```\nError: boo!\n    at explode 
(/path/to/test.js:3:11)\n    at _fulfilled (/path/to/test.js:q:54)\n    at 
resolvedValue.promiseDispatch.done (/path/to/q.js:823:30)\n    at 
makePromise.promise.promiseDispatch (/path/to/q.js:496:13)\n    at pending 
(/path/to/q.js:397:39)\n    at 
process.startup.processNextTick.process._tickCallback (node.js:244:
 9)\n```\n\nBut, if you turn this feature on by 
setting\n\n```js\nQ.longStackSupport = true;\n```\n\nthen the above code gives 
a nice stack trace to the tune of\n\n```\nError: boo!\n    at explode 
(/path/to/test.js:3:11)\nFrom previous event:\n    at theDepthsOfMyProgram 
(/path/to/test.js:2:16)\n    at Object.<anonymous> 
(/path/to/test.js:7:1)\n```\n\nNote how you can see the the function that 
triggered the async operation in the\nstack trace! This is very helpful for 
debugging, as otherwise you end up getting\nonly the first line, plus a bunch 
of Q internals, with no sign of where the\noperation started.\n\nThis feature 
does come with somewhat-serious performance and memory overhead,\nhowever. If 
you're working with lots of promises, or trying to scale a server\nto many 
users, you should probably keep it off. But in development, go for it!\n\n## 
Tests\n\nYou can view the results of the Q test suite [in your 
browser][tests]!\n\n[tests]: https://rawgithub.com/kriskowal/q/v1/spec/q-spe
 c.html\n\n## License\n\nCopyright 2009–2014 Kristopher Michael Kowal\nMIT 
License (enclosed)\n\n",
-  "readmeFilename": "README.md",
-  "_id": "[email protected]",
-  "_from": "q@"
+  "gitHead": "d373079d3620152e3d60e82f27265a09ee0e81bd",
+  "_id": "[email protected]",
+  "_shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
+  "_from": "q@>=1.4.1 <2.0.0",
+  "_npmVersion": "2.8.3",
+  "_nodeVersion": "1.8.1",
+  "_npmUser": {
+    "name": "kriskowal",
+    "email": "[email protected]"
+  },
+  "maintainers": [
+    {
+      "name": "kriskowal",
+      "email": "[email protected]"
+    },
+    {
+      "name": "domenic",
+      "email": "[email protected]"
+    }
+  ],
+  "dist": {
+    "shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
+    "tarball": "http://registry.npmjs.org/q/-/q-1.4.1.tgz";
+  },
+  "_resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz";,
+  "readme": "ERROR: No README data found!"
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to