diff --git a/package.json b/package.json index ae699469a..ef0513875 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "docdown": "~0.3.0", "dojo": "^1.10.4", "ecstatic": "^1.4.0", - "fs-extra": "~0.26.4", + "fs-extra": "~0.26.5", "glob": "^6.0.4", "istanbul": "0.4.2", "jquery": "^2.2.0", @@ -21,7 +21,7 @@ "platform": "^1.3.1", "qunit-extras": "^1.4.5", "qunitjs": "~1.20.0", - "request": "^2.67.0", + "request": "^2.69.0", "requirejs": "^2.1.22", "sauce-tunnel": "2.3.0", "uglify-js": "2.6.1", diff --git a/vendor/backbone/backbone.js b/vendor/backbone/backbone.js index caf45ca1c..62221ba0d 100644 --- a/vendor/backbone/backbone.js +++ b/vendor/backbone/backbone.js @@ -9,8 +9,8 @@ // Establish the root object, `window` (`self`) in the browser, or `global` on the server. // We use `self` instead of `window` for `WebWorker` support. - var root = (typeof self == 'object' && self.self == self && self) || - (typeof global == 'object' && global.global == global && global); + var root = (typeof self == 'object' && self.self === self && self) || + (typeof global == 'object' && global.global === global && global); // Set up Backbone appropriately for the environment. Start with AMD. if (typeof define === 'function' && define.amd) { @@ -769,7 +769,8 @@ at = Math.min(Math.max(at, 0), array.length); var tail = Array(array.length - at); var length = insert.length; - for (var i = 0; i < tail.length; i++) tail[i] = array[i + at]; + var i; + for (i = 0; i < tail.length; i++) tail[i] = array[i + at]; for (i = 0; i < length; i++) array[i + at] = insert[i]; for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i]; }; @@ -821,10 +822,12 @@ if (models == null) return; options = _.defaults({}, options, setOptions); - if (options.parse && !this._isModel(models)) models = this.parse(models, options); + if (options.parse && !this._isModel(models)) { + models = this.parse(models, options) || []; + } var singular = !_.isArray(models); - models = singular ? (models ? [models] : []) : models.slice(); + models = singular ? [models] : models.slice(); var at = options.at; if (at != null) at = +at; @@ -845,8 +848,8 @@ // Turn bare objects into model references, and prevent invalid models // from being added. - var model; - for (var i = 0; i < models.length; i++) { + var model, i; + for (i = 0; i < models.length; i++) { model = models[i]; // If a duplicate is found, prevent it from being added and @@ -890,7 +893,7 @@ var orderChanged = false; var replace = !sortable && add && remove; if (set.length && replace) { - orderChanged = this.length != set.length || _.some(this.models, function(model, index) { + orderChanged = this.length !== set.length || _.some(this.models, function(model, index) { return model !== set[index]; }); this.models.length = 0; diff --git a/vendor/backbone/test/collection.js b/vendor/backbone/test/collection.js index e9e60cc5f..eba6526eb 100644 --- a/vendor/backbone/test/collection.js +++ b/vendor/backbone/test/collection.js @@ -429,7 +429,7 @@ }); var colE = new Backbone.Collection([e]); var colF = new Backbone.Collection([f]); - assert.ok(e != f); + assert.notEqual(e, f); assert.ok(colE.length === 1); assert.ok(colF.length === 1); colE.remove(e); @@ -857,7 +857,7 @@ assert.expect(2); var Model = Backbone.Model.extend({ validate: function(attrs) { - if (attrs.id == 3) return "id can't be 3"; + if (attrs.id === 3) return "id can't be 3"; } }); @@ -1324,7 +1324,7 @@ var col = new Backbone.Collection; var model1 = col.push({id: 101}); var model2 = col.push({id: 101}); - assert.ok(model2.cid == model1.cid); + assert.ok(model2.cid === model1.cid); }); QUnit.test('`set` with non-normal id', function(assert) { diff --git a/vendor/backbone/test/events.js b/vendor/backbone/test/events.js index ffcdde6de..b9b5053fe 100644 --- a/vendor/backbone/test/events.js +++ b/vendor/backbone/test/events.js @@ -352,8 +352,8 @@ _.extend(obj, Backbone.Events); obj.on('all', function(event) { obj.counter++; - if (event == 'a') a = true; - if (event == 'b') b = true; + if (event === 'a') a = true; + if (event === 'b') b = true; }) .trigger('a b'); assert.ok(a); @@ -477,7 +477,7 @@ QUnit.test('if callback is truthy but not a function, `on` should throw an error just like jQuery', function(assert) { assert.expect(1); var view = _.extend({}, Backbone.Events).on('test', 'noop'); - assert.throws(function() { + assert.raises(function() { view.trigger('test'); }); }); diff --git a/vendor/backbone/test/model.js b/vendor/backbone/test/model.js index b843affb8..773a5524a 100644 --- a/vendor/backbone/test/model.js +++ b/vendor/backbone/test/model.js @@ -89,7 +89,7 @@ doc.collection.url = '/collection/'; assert.equal(doc.url(), '/collection/1-the-tempest'); doc.collection = null; - assert.throws(function() { doc.url(); }); + assert.raises(function() { doc.url(); }); doc.collection = collection; }); @@ -251,12 +251,12 @@ var changeCount = 0; a.on('change:foo', function() { changeCount += 1; }); a.set({foo: 2}); - assert.ok(a.get('foo') == 2, 'Foo should have changed.'); - assert.ok(changeCount == 1, 'Change count should have incremented.'); + assert.equal(a.get('foo'), 2, 'Foo should have changed.'); + assert.equal(changeCount, 1, 'Change count should have incremented.'); // set with value that is not new shouldn't fire change event a.set({foo: 2}); - assert.ok(a.get('foo') == 2, 'Foo should NOT have changed, still 2'); - assert.ok(changeCount == 1, 'Change count should NOT have incremented.'); + assert.equal(a.get('foo'), 2, 'Foo should NOT have changed, still 2'); + assert.equal(changeCount, 1, 'Change count should NOT have incremented.'); a.validate = function(attrs) { assert.equal(attrs.foo, void 0, 'validate:true passed while unsetting'); @@ -264,7 +264,7 @@ a.unset('foo', {validate: true}); assert.equal(a.get('foo'), void 0, 'Foo should have changed'); delete a.validate; - assert.ok(changeCount == 2, 'Change count should have incremented for unset.'); + assert.equal(changeCount, 2, 'Change count should have incremented for unset.'); a.unset('id'); assert.equal(a.id, undefined, 'Unsetting the id should remove the id property.'); @@ -746,7 +746,7 @@ var lastError; var model = new Backbone.Model(); model.validate = function(attrs) { - if (attrs.admin != this.get('admin')) return "Can't change admin status."; + if (attrs.admin !== this.get('admin')) return "Can't change admin status."; }; model.on('invalid', function(model, error) { lastError = error; diff --git a/vendor/backbone/test/router.js b/vendor/backbone/test/router.js index 31769b19f..38f215dde 100644 --- a/vendor/backbone/test/router.js +++ b/vendor/backbone/test/router.js @@ -134,7 +134,7 @@ }, optionalItem: function(arg){ - this.arg = arg != void 0 ? arg : null; + this.arg = arg !== void 0 ? arg : null; }, splat: function(args) { diff --git a/vendor/backbone/test/sync.js b/vendor/backbone/test/sync.js index 7ae82a04a..b176bec72 100644 --- a/vendor/backbone/test/sync.js +++ b/vendor/backbone/test/sync.js @@ -142,7 +142,7 @@ QUnit.test('urlError', function(assert) { assert.expect(2); var model = new Backbone.Model(); - assert.throws(function() { + assert.raises(function() { model.fetch(); }); model.fetch({url: '/one/two'}); diff --git a/vendor/benchmark.js/LICENSE b/vendor/benchmark.js/LICENSE index feed4c8de..65d92b588 100644 --- a/vendor/benchmark.js/LICENSE +++ b/vendor/benchmark.js/LICENSE @@ -1,4 +1,4 @@ -Copyright 2010-2015 Mathias Bynens +Copyright 2010-2016 Mathias Bynens Based on JSLitmus.js, copyright Robert Kieffer Modified by John-David Dalton diff --git a/vendor/benchmark.js/benchmark.js b/vendor/benchmark.js/benchmark.js index 9d71f6b2a..d521b33b8 100644 --- a/vendor/benchmark.js/benchmark.js +++ b/vendor/benchmark.js/benchmark.js @@ -1,9 +1,9 @@ /*! - * Benchmark.js v2.0.0-pre - * Copyright 2010-2015 Mathias Bynens + * Benchmark.js v2.1.0 + * Copyright 2010-2016 Mathias Bynens * Based on JSLitmus.js, copyright Robert Kieffer * Modified by John-David Dalton - * Available under MIT license + * Available under MIT license */ ;(function() { 'use strict'; @@ -124,7 +124,7 @@ */ function runInContext(context) { // Exit early if unable to acquire lodash. - var _ = context && context._ || req('lodash-compat') || req('lodash') || root._; + var _ = context && context._ || req('lodash') || root._; if (!_) { Benchmark.runInContext = runInContext; return Benchmark; @@ -277,8 +277,7 @@ * methods are: * [`each/forEach`](https://lodash.com/docs#forEach), [`forOwn`](https://lodash.com/docs#forOwn), * [`has`](https://lodash.com/docs#has), [`indexOf`](https://lodash.com/docs#indexOf), - * [`map`](https://lodash.com/docs#map), [`pluck`](https://lodash.com/docs#pluck), - * and [`reduce`](https://lodash.com/docs#reduce) + * [`map`](https://lodash.com/docs#map), and [`reduce`](https://lodash.com/docs#reduce) * * @constructor * @param {string} name A name to identify the benchmark. @@ -355,7 +354,7 @@ var bench = this; // Allow instance creation without the `new` operator. - if (bench == null || bench.constructor != Benchmark) { + if (!(bench instanceof Benchmark)) { return new Benchmark(name, fn, options); } // Juggle arguments. @@ -396,7 +395,7 @@ */ function Deferred(clone) { var deferred = this; - if (deferred == null || deferred.constructor != Deferred) { + if (!(deferred instanceof Deferred)) { return new Deferred(clone); } deferred.benchmark = clone; @@ -415,9 +414,9 @@ if (type instanceof Event) { return type; } - return (event == null || event.constructor != Event) - ? new Event(type) - : _.assign(event, { 'timeStamp': _.now() }, typeof type == 'string' ? { 'type': type } : type); + return (event instanceof Event) + ? _.assign(event, { 'timeStamp': _.now() }, typeof type == 'string' ? { 'type': type } : type) + : new Event(type); } /** @@ -426,8 +425,7 @@ * Note: Each Suite instance has a handful of wrapped lodash methods to * make working with Suites easier. The wrapped lodash methods are: * [`each/forEach`](https://lodash.com/docs#forEach), [`indexOf`](https://lodash.com/docs#indexOf), - * [`map`](https://lodash.com/docs#map), [`pluck`](https://lodash.com/docs#pluck), - * and [`reduce`](https://lodash.com/docs#reduce) + * [`map`](https://lodash.com/docs#map), and [`reduce`](https://lodash.com/docs#reduce) * * @constructor * @memberOf Benchmark @@ -467,7 +465,7 @@ var suite = this; // Allow instance creation without the `new` operator. - if (suite == null || suite.constructor != Suite) { + if (!(suite instanceof Suite)) { return new Suite(name, options); } // Juggle arguments. @@ -491,7 +489,7 @@ * @param {*} value The value to clone. * @returns {*} The cloned value. */ - var cloneDeep = _.partial(_.cloneDeepWith || _.cloneDeep, _, function(value) { + var cloneDeep = _.partial(_.cloneDeepWith, _, function(value) { // Only clone primitives, arrays, and plain objects. return (_.isObject(value) && !_.isArray(value) && !_.isPlainObject(value)) ? value @@ -763,7 +761,7 @@ if (callback === 'successful') { // Callback to exclude those that are errored, unrun, or have hz of Infinity. callback = function(bench) { - return bench.cycles && _.isFinite(bench.hz); + return bench.cycles && _.isFinite(bench.hz) && !bench.error; }; } else if (callback === 'fastest' || callback === 'slowest') { @@ -914,7 +912,7 @@ function isAsync(object) { // Avoid using `instanceof` here because of IE memory leak issues with host objects. var async = args[0] && args[0].async; - return Object(object).constructor == Benchmark && name == 'run' && + return name == 'run' && (object instanceof Benchmark) && ((async == null ? object.options.async : async) && support.timeout || object.defer); } @@ -933,7 +931,6 @@ ? index : (index = false); } - // Juggle arguments. if (_.isString(name)) { // 2 arguments (array, name). @@ -945,7 +942,6 @@ args = _.isArray(args = 'args' in options ? options.args : []) ? args : [args]; queued = options.queued; } - // Start iterating over the array. if (raiseIndex() !== false) { // Emit "start" event. @@ -955,7 +951,7 @@ options.onStart.call(benches, Event(eventProps)); // End early if the suite was aborted in an "onStart" listener. - if (benches.aborted && benches.constructor == Suite && name == 'run') { + if (name == 'run' && (benches instanceof Suite) && benches.aborted) { // Emit "cycle" event. eventProps.type = 'cycle'; options.onCycle.call(benches, Event(eventProps)); @@ -1794,7 +1790,7 @@ timers.push({ 'ns': timer.ns, 'res': getRes('us'), 'unit': 'us' }); } // Pick timer with highest resolution. - timer = (_.minBy || _.min)(timers, 'res'); + timer = _.minBy(timers, 'res'); // Error if there are no working timers. if (timer.res == Infinity) { @@ -1977,7 +1973,6 @@ deferred = clone; clone = clone.benchmark; } - var clocked, cycles, divisor, @@ -2008,7 +2003,6 @@ } } } - // Continue, if not errored. if (clone.running) { // Compute the time taken to complete last test cycle. @@ -2257,7 +2251,7 @@ /** * Platform object with properties describing things like browser name, - * version, and operating system. See [`platform.js`](http://mths.be/platform). + * version, and operating system. See [`platform.js`](https://mths.be/platform). * * @static * @memberOf Benchmark @@ -2284,7 +2278,7 @@ * @memberOf Benchmark * @type string */ - 'version': '2.0.0-pre' + 'version': '2.1.0' }); _.assign(Benchmark, { @@ -2297,7 +2291,7 @@ }); // Add lodash methods to Benchmark. - _.each(['each', 'forEach', 'forOwn', 'has', 'indexOf', 'map', 'pluck', 'reduce'], function(methodName) { + _.each(['each', 'forEach', 'forOwn', 'has', 'indexOf', 'map', 'reduce'], function(methodName) { Benchmark[methodName] = _[methodName]; }); @@ -2745,7 +2739,7 @@ /*------------------------------------------------------------------------*/ // Add lodash methods as Suite methods. - _.each(['each', 'forEach', 'indexOf', 'map', 'pluck', 'reduce'], function(methodName) { + _.each(['each', 'forEach', 'indexOf', 'map', 'reduce'], function(methodName) { var func = _[methodName]; Suite.prototype[methodName] = function() { var args = [this]; @@ -2799,17 +2793,15 @@ // Check for `exports` after `define` in case a build optimizer adds an `exports` object. if (freeExports && freeModule) { - // Export for Node.js or RingoJS. + // Export for Node.js. if (moduleExports) { (freeModule.exports = Benchmark).Benchmark = Benchmark; } - // Export for Rhino with CommonJS support. - else { - freeExports.Benchmark = Benchmark; - } + // Export for CommonJS support. + freeExports.Benchmark = Benchmark; } else { - // Export for a browser or Rhino. + // Export to the global object. root.Benchmark = Benchmark; } } diff --git a/vendor/underscore/test/objects.js b/vendor/underscore/test/objects.js index 027e42b6c..6ca0a106f 100644 --- a/vendor/underscore/test/objects.js +++ b/vendor/underscore/test/objects.js @@ -639,6 +639,17 @@ assert.strictEqual(_.isString(1), false); }); + QUnit.test('isSymbol', function(assert) { + assert.ok(!_.isSymbol(0), 'numbers are not symbols'); + assert.ok(!_.isSymbol(''), 'strings are not symbols'); + assert.ok(!_.isSymbol(_.isSymbol), 'functions are not symbols'); + if (typeof Symbol === 'function') { + assert.ok(_.isSymbol(Symbol()), 'symbols are symbols'); + assert.ok(_.isSymbol(Symbol('description')), 'described symbols are symbols'); + assert.ok(_.isSymbol(Object(Symbol())), 'boxed symbols are symbols'); + } + }); + QUnit.test('isNumber', function(assert) { assert.ok(!_.isNumber('string'), 'a string is not a number'); assert.ok(!_.isNumber(arguments), 'the arguments object is not a number'); diff --git a/vendor/underscore/underscore.js b/vendor/underscore/underscore.js index 19b3f7c9c..d8c741b22 100644 --- a/vendor/underscore/underscore.js +++ b/vendor/underscore/underscore.js @@ -1286,7 +1286,7 @@ }; // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol'], function(name) { _['is' + name] = function(obj) { return toString.call(obj) === '[object ' + name + ']'; };