cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From t...@apache.org
Subject [07/16] cordova-browser git commit: Update 'cordova run browser' command to use cordova-serve module.
Date Sat, 20 Jun 2015 19:33:34 GMT
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/d8/test/locale/en-US.test.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/d8/test/locale/en-US.test.js b/node_modules/cordova-serve/node_modules/d8/test/locale/en-US.test.js
new file mode 100644
index 0000000..4b9a998
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/d8/test/locale/en-US.test.js
@@ -0,0 +1,664 @@
+// 481
+typeof m8   !== 'undefined' || ( m8   = require( 'm8' ) );
+typeof chai !== 'undefined' || ( chai = require( 'chai' ) );
+
+expect = chai.expect;
+
+if ( m8.ENV == 'commonjs' ) {
+	delete Date.locale;
+	require( '../../d8' );
+	require( '../../locale/en-GB' );
+	require( '../../locale/en-US' );
+	require( '../../locale/GR' );
+}
+
+suite( 'd8 (en-US)', function() {
+	function MockDate( o ) { for ( var k in o ) !Object.prototype.hasOwnProperty.call( o, k ) || ( this[k] = o[k] ); }
+	MockDate.prototype = {
+		getDate           : function() { return this.date;  }, getDay     : function() { return this.day;    },
+		getFullYear       : function() { return this.year;  }, getHours   : function() { return this.hour;   },
+		getMilliseconds   : function() { return this.ms;    }, getMinutes : function() { return this.minute; },
+		getMonth          : function() { return this.month; }, getSeconds : function() { return this.second; },
+		getTimezoneOffset : function() { return this.tzo;   }, toString   : function() { return this.str;    }
+	};
+
+	function call( fn, d ) {
+		var a = slice.call( arguments, 2 );
+		return DP[fn].apply( d, a );
+	}
+
+	var DP = Date.prototype, slice = [].slice;
+
+	setup( function( done ) {
+		Date.localize( 'en-US' );
+		done();
+	} );
+
+	test( '<static> Date.getOrdinal returns the ordinal of a number', function( done ) {
+		expect( Date.getOrdinal(  1 ) ).to.eql( 'st' );
+		expect( Date.getOrdinal(  2 ) ).to.eql( 'nd' );
+		expect( Date.getOrdinal(  3 ) ).to.eql( 'rd' );
+		expect( Date.getOrdinal(  4 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal(  5 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal(  6 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal(  7 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal(  8 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal(  9 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 10 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 11 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 12 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 13 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 14 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 15 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 16 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 17 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 18 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 19 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 20 ) ).to.eql( 'th' );
+		expect( Date.getOrdinal( 21 ) ).to.eql( 'st' );
+		expect( Date.getOrdinal( 22 ) ).to.eql( 'nd' );
+		expect( Date.getOrdinal( 23 ) ).to.eql( 'rd' );
+
+		done();
+	} );
+
+	test( '<static> Date.isLeapYear verifies whether 4 digit year is a leap year or not', function( done ) {
+		expect( Date.isLeapYear( 1600 ) ).to.be.true;
+		expect( Date.isLeapYear( 1992 ) ).to.be.true;
+		expect( Date.isLeapYear( 2000 ) ).to.be.true;
+		expect( Date.isLeapYear( 2004 ) ).to.be.true;
+		expect( Date.isLeapYear( 2008 ) ).to.be.true;
+		expect( Date.isLeapYear( 2012 ) ).to.be.true;
+		expect( Date.isLeapYear( 2024 ) ).to.be.true;
+		expect( Date.isLeapYear( 2400 ) ).to.be.true;
+		expect( Date.isLeapYear( 1700 ) ).to.be.false;
+		expect( Date.isLeapYear( 1800 ) ).to.be.false;
+		expect( Date.isLeapYear( 1900 ) ).to.be.false;
+		expect( Date.isLeapYear( 1994 ) ).to.be.false;
+		expect( Date.isLeapYear( 2001 ) ).to.be.false;
+		expect( Date.isLeapYear( 2011 ) ).to.be.false;
+		expect( Date.isLeapYear( 2013 ) ).to.be.false;
+		expect( Date.isLeapYear( 2021 ) ).to.be.false;
+
+		done();
+	} );
+
+	test( '<static> Date.coerce turns a Date String into a Date instance based on the passed format', function( done ) {
+		expect( Date.coerce( 'Fri, 01 Jan 2010 00:00:00', 'D, d M Y H:i:s' ) ).to.eql( new Date( 2010, 0, 1 ) );
+		expect( Date.coerce( 'Fri, 01 Jan 2010 00:00:00 GMT+0400',  'D, d M Y H:i:s <GMT>O' ) ).to.eql( new Date( 2009, 11, 31, 20 ) );
+		expect( Date.coerce( 'Fri, 01 Jan 2010 00:00:00 GMT-08:00', 'D, d M Y H:i:s <GMT>P' ) ).to.eql( new Date( 2010,  0,  1,  8 ) );
+
+		expect( Date.coerce( '1262304000000', 'U' ) ).to.eql( new Date( 2010,  0,  1 ) );
+
+		expect( Date.coerce( '2010-31',   'Y-z'   ) ).to.eql( new Date( 2010,  0, 31 ) );
+		expect( Date.coerce( '2010-166',  'Y-z'   ) ).to.eql( new Date( 2010,  5, 15 ) );
+		expect( Date.coerce( '2010-365',  'Y-z'   ) ).to.eql( new Date( 2010, 11, 31 ) );
+		expect( Date.coerce( '2010-24',   'Y-W'   ) ).to.eql( new Date( 2010,  5, 13 ) );
+
+		expect( Date.coerce( '2010-24-1', 'Y-W-N' ) ).to.eql( new Date( 2010,  5, 14 ) );
+		expect( Date.coerce( '2010-24-2', 'Y-W-N' ) ).to.eql( new Date( 2010,  5, 15 ) );
+		expect( Date.coerce( '2010-24-3', 'Y-W-N' ) ).to.eql( new Date( 2010,  5, 16 ) );
+		expect( Date.coerce( '2010-24-4', 'Y-W-N' ) ).to.eql( new Date( 2010,  5, 17 ) );
+		expect( Date.coerce( '2010-24-5', 'Y-W-N' ) ).to.eql( new Date( 2010,  5, 18 ) );
+		expect( Date.coerce( '2010-24-6', 'Y-W-N' ) ).to.eql( new Date( 2010,  5, 19 ) );
+		expect( Date.coerce( '2010-24-7', 'Y-W-N' ) ).to.eql( new Date( 2010,  5, 20 ) );
+
+		expect( Date.coerce( '2010-01-01T10:10:10+00:00', 'c' ) ).to.eql( new Date( 2010, 0, 1, 10, 10, 10 ) );
+		expect( Date.coerce( '2010-01-01T10:10:10+04:00', 'c' ) ).to.eql( new Date( 2010, 0, 1,  6, 10, 10 ) );
+		expect( Date.coerce( '2010-01-01T10:10:10-08:00', 'c' ) ).to.eql( new Date( 2010, 0, 1, 18, 10, 10 ) );
+
+		var date   = Date.coerce( '2010-08-30T10:10:10+00:00', 'Y-m-d<T>H:i:sP' ),
+			offset = date.isDST() ? 1 : 0;
+		expect( Date.coerce( '2010-08-30T10:10:10+00:00', 'Y-m-d<T>H:i:sP' ) ).to.eql( new Date( 2010, 7, 30, ( 10 + offset ), 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10+00:00', 'c' ) ).to.eql( new Date( 2010, 7, 30, 10 + offset, 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10+04:00', 'c' ) ).to.eql( new Date( 2010, 7, 30,  6 + offset, 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10-08:00', 'c' ) ).to.eql( new Date( 2010, 7, 30, 18 + offset, 10, 10 ) );
+
+		expect( Date.coerce( '2010-08-30T10:10:10.010+00:00Z', 'Y-m-d<T>H:i:s.uP<Z>' ) ).to.eql( new Date( 2010, 7, 30, ( 10 + offset ), 10, 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10.010+00:00Z', 'c' ) ).to.eql( new Date( 2010, 7, 30, 10 + offset, 10, 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10.010+04:00Z', 'c' ) ).to.eql( new Date( 2010, 7, 30,  6 + offset, 10, 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10.010-08:00Z', 'c' ) ).to.eql( new Date( 2010, 7, 30, 18 + offset, 10, 10, 10 ) );
+
+		expect( Date.coerce( '2010-08-30T10:10:10.010+0000', 'c' ) ).to.eql( new Date( 2010, 7, 30, ( 10 + offset ), 10, 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10.010+0000', 'c' ) ).to.eql( new Date( 2010, 7, 30, 10 + offset, 10, 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10.010+0400', 'c' ) ).to.eql( new Date( 2010, 7, 30,  6 + offset, 10, 10, 10 ) );
+		expect( Date.coerce( '2010-08-30T10:10:10.010-0800', 'c' ) ).to.eql( new Date( 2010, 7, 30, 18 + offset, 10, 10, 10 ) );
+
+		done();
+	} );
+
+	test( '<static> Date.valid returns `true` if the passed Date is valid', function( done ) {
+		expect( Date.valid( new Date ) ).to.be.true;
+		expect( Date.valid( new Date( null ) ) ).to.be.true;
+		expect( Date.valid( new Date( false ) ) ).to.be.true; // equates to new Date( 0 )
+		expect( Date.valid( new Date( true ) ) ).to.be.true;  // equates to new Date( 1 )
+		expect( Date.valid( new Date( -1 ) ) ).to.be.true;
+		expect( Date.valid( new Date( 2012 ) ) ).to.be.true;
+		expect( Date.valid( new Date( 2012, 0 ) ) ).to.be.true;
+		expect( Date.valid( new Date( 2012, 0 ) ) ).to.be.true;
+		expect( Date.valid( new Date( Number.MIN_VALUE ) ) ).to.be.true;
+		expect( Date.valid( new Date( new Date( new Date ) ) ) ).to.be.true;
+
+		done();
+	} );
+
+	test( '<static> Date.valid returns `false` if the passed Date is valid', function( done ) {
+		expect( Date.valid( new Date( undefined ) ) ).to.be.false;
+		expect( Date.valid( new Date( NaN ) ) ).to.be.false;
+		expect( Date.valid( new Date( Infinity ) ) ).to.be.false;
+		expect( Date.valid( new Date( Number.MAX_VALUE ) ) ).to.be.false;
+		expect( Date.valid( new Date( 'valid' ) ) ).to.be.false;
+		expect( Date.valid( new Date( '' ) ) ).to.be.false;
+		expect( Date.valid( new Date( [] ) ) ).to.be.false;
+		expect( Date.valid( new Date( { year : 2012, month : 0, day : 1 } ) ) ).to.be.false;
+
+		done();
+	} );
+
+	test( 'Date.prototype.adjust: can adjust a Date instance by any unit of time', function( done ) {
+		var r = new Date( 2010, 0, 1 );
+
+		expect( r.adjust( Date.YEAR,    1 ) ).to.eql( new Date( 2011, 0, 1 ) );
+		expect( r.adjust( Date.YEAR,   -1 ) ).to.eql( new Date( 2010, 0, 1 ) );
+		expect( r.adjust( Date.MONTH,   1 ) ).to.eql( new Date( 2010, 1, 1 ) );
+		expect( r.adjust( Date.MONTH,  -1 ) ).to.eql( new Date( 2010, 0, 1 ) );
+		expect( r.adjust( Date.DAY,     1 ) ).to.eql( new Date( 2010, 0, 2 ) );
+		expect( r.adjust( Date.DAY,    -1 ) ).to.eql( new Date( 2010, 0, 1 ) );
+		expect( r.adjust( Date.HOUR,    1 ) ).to.eql( new Date( 2010, 0, 1, 1 ) );
+		expect( r.adjust( Date.HOUR,   -1 ) ).to.eql( new Date( 2010, 0, 1 ) );
+		expect( r.adjust( Date.MINUTE,  1 ) ).to.eql( new Date( 2010, 0, 1, 0, 1 ) );
+		expect( r.adjust( Date.MINUTE, -1 ) ).to.eql( new Date( 2010, 0, 1 ) );
+		expect( r.adjust( Date.SECOND,  1 ) ).to.eql( new Date( 2010, 0, 1, 0, 0, 1 ) );
+		expect( r.adjust( Date.SECOND, -1 ) ).to.eql( new Date( 2010, 0, 1 ) );
+		expect( r.adjust( Date.MILLISECOND,  1 ) ).to.eql( new Date( 2010, 0, 1, 0, 0, 0, 1 ) );
+		expect( r.adjust( Date.MILLISECOND, -1 ) ).to.eql( new Date( 2010, 0, 1 ) );
+		expect( r.adjust( { day :  1, hr :  1, min :  1, month :  1, ms :  1, sec :  1, year :  1 } ) ).to.eql( new Date( 2011, 1, 2, 1, 1, 1, 1 ) );
+		expect( r.adjust( { day : -1, hr : -1, min : -1, month : -1, ms : -1, sec : -1, year : -1 } ) ).to.eql( new Date( 2010, 0, 1 ) );
+
+		expect( new Date( 2012, 1, 29 ).adjust( Date.MONTH,  1 ) ).to.eql( new Date( 2012, 2, 29 ) );
+		expect( new Date( 2012, 1, 29 ).adjust( Date.MONTH, -1 ) ).to.eql( new Date( 2012, 0, 29 ) );
+
+		done();
+	} );
+
+	test( 'Date.prototype.between: verifies whether or not a Date instance is between 2 other Dates', function( done ) {
+		expect( new Date( 2010, 0, 1, 1, 10, 10, 10 ).between( new Date( 2010, 0, 1, 1, 9, 10, 10 ), new Date( 2010, 0, 1, 1, 11, 10, 10 ) ) ).to.be.true;
+		expect( new Date( 2010, 0, 1, 1, 10, 10, 10 ).between( new Date( 2010, 0, 1, 1, 10, 10, 9 ), new Date( 2010, 0, 1, 1, 10, 10, 11 ) ) ).to.be.true;
+		expect( new Date( 2010, 0, 1, 1, 10, 10, 10 ).between( new Date( 2010, 0, 1, 1, 10, 10, 10 ), new Date( 2010, 0, 1, 1, 10, 10, 10 ) ) ).to.be.true;
+		expect( new Date( 2010, 0, 1 ).between( new Date( 2009, 11, 31 ), new Date( 2010, 0, 2 ) ) ).to.be.true;
+		expect( new Date( 2010, 0, 1 ).between( new Date( 2009, 4, 1 ), new Date( 2011, 8, 1 ) ) ).to.be.true;
+		expect( new Date( 2010, 0, 1, 1, 10, 10, 10 ).between( new Date( 2010, 0, 1, 1, 11, 10, 10 ), new Date( 2010, 0, 1, 1, 12, 10, 10 ) ) ).to.be.false;
+		expect( new Date( 2010, 0, 1, 1, 10, 10, 10 ).between( new Date( 2010, 0, 1, 1, 10, 10, 11 ), new Date( 2010, 0, 1, 1, 10, 10, 12 ) ) ).to.be.false;
+		expect( new Date( 2010, 0, 1 ).between( new Date( 2010, 0, 2 ), new Date( 2010, 0, 3 ) ) ).to.be.false;
+		expect( new Date( 2010, 0, 1, 1, 10, 10, 10 ).between( new Date( 2009, 4, 1 ), new Date( 2010, 0, 1, 1, 10, 10, 9 ) ) ).to.be.false;
+
+		done();
+	} );
+
+	test( 'Date.prototype.clearTime: clears the hours, minutes, seconds and milliseconds from a Date instance', function( done ) {
+		var e = new Date( 2010, 0, 1 ), r = new Date( 2010, 0, 1, 1, 10, 10, 10 );
+
+		expect( r ).not.to.eql( e );
+		expect( r.clone().clearTime() ).to.eql( e );
+
+		done();
+	} );
+
+	test( 'Date.prototype.clone: returns a copy of a Date instance', function( done ) {
+		var e = new Date( 2010, 0, 1 ), r = e.clone();
+
+		expect( r ).not.to.equal( e );
+		expect( r ).to.eql( e );
+
+		done();
+	} );
+
+	test( 'Date.prototype.diff with no exclusions', function( done ) {
+		var date_1, date_2, diff;
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ) ) ).to.eql( { tense : 0, value : 0 } );
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ).adjust( Date.YEAR, 1 ) ) ).to.eql( { tense : -1, value : Date.MS_YEAR, years : 1 } );
+		expect( new Date( 2012, 0, 1 ).diff( new Date( 2011, 0, 1 ) ) ).to.eql( { tense : 1, value : Date.MS_YEAR, years : 1 } );
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ).adjust( Date.MONTH, 1 ) ) ).to.eql( { tense : -1, value : Date.MS_MONTH, months : 1 } );
+		expect( new Date( 2012, 9, 1 ).diff( new Date( 2012, 8, 1 ) ) ).to.eql( { tense : 1, value : Date.MS_MONTH, months : 1 } );
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ).adjust( Date.WEEK, 1 ) ) ).to.eql( { tense : -1, value : Date.MS_WEEK, weeks : 1 } );
+		expect( new Date( 2012, 0, 8 ).diff( new Date( 2012, 0, 1 ) ) ).to.eql( { tense : 1, value : Date.MS_WEEK, weeks : 1 } );
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ).adjust( Date.DAY, 1 ) ) ).to.eql( { tense : -1, value : Date.MS_DAY, days : 1 } );
+		expect( new Date( 2012, 0, 2 ).diff( new Date( 2012, 0, 1 ) ) ).to.eql( { tense : 1, value : Date.MS_DAY, days : 1 } );
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ).adjust( Date.HOUR, 1 ) ) ).to.eql( { tense : -1, value : Date.MS_HOUR, hours : 1 } );
+		expect( new Date( 2012, 0, 1, 1 ).diff( new Date( 2012, 0, 1 ) ) ).to.eql( { tense : 1, value : Date.MS_HOUR, hours : 1 } );
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ).adjust( Date.MINUTE, 1 ) ) ).to.eql( { tense : -1, value : Date.MS_MINUTE, minutes : 1 } );
+		expect( new Date( 2012, 0, 1, 0, 1 ).diff( new Date( 2012, 0, 1 ) ) ).to.eql( { tense : 1, value : Date.MS_MINUTE, minutes : 1 } );
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ).adjust( Date.SECOND, 1 ) ) ).to.eql( { tense : -1, value : Date.MS_SECOND, seconds : 1 } );
+		expect( new Date( 2012, 0, 1, 0, 0, 1 ).diff( new Date( 2012, 0, 1 ) ) ).to.eql( { tense : 1, value : Date.MS_SECOND, seconds : 1 } );
+
+		expect( new Date( 2012, 10, 1 ).diff( new Date( 2012, 10, 1 ).adjust( Date.MILLISECOND, 100 ) ) ).to.eql( { tense : -1, value : 100, ms : 100 } );
+		expect( new Date( 2012, 0, 1, 0, 0, 0, 100 ).diff( new Date( 2012, 0, 1 ) ) ).to.eql( { tense : 1, value : 100, ms : 100 } );
+
+		date_1 = new Date( 2012, 11, 10, 9, 8, 7, 600 );
+		date_2 = date_1.clone().adjust( { year : 1, month : 1, week : 1, day : 1, hr : 1, min : 1, sec : 1, ms : 100 } );
+		diff   = date_1.diff( date_2 );
+
+		expect( diff.value ).to.eql( Math.abs( +date_1 - +date_2 ) );
+		expect( diff.tense ).to.eql( -1 );
+		expect( diff.years ).to.eql( 1 );
+		expect( diff.months ).to.eql( 1 );
+		expect( diff.weeks ).to.eql( 1 );
+		expect( diff.days ).to.eql( 5 );
+		expect( diff.hours ).to.eql( 1 );
+		expect( diff.minutes ).to.eql( 1 );
+		expect( diff.seconds ).to.eql( 1 );
+		expect( diff.ms ).to.eql( 99 );
+
+		diff   = date_2.diff( date_1 );
+		expect( diff.tense ).to.eql( 1 );
+		expect( diff.years ).to.eql( 1 );
+		expect( diff.months ).to.eql( 1 );
+		expect( diff.weeks ).to.eql( 1 );
+		expect( diff.days ).to.eql( 5 );
+		expect( diff.hours ).to.eql( 1 );
+		expect( diff.minutes ).to.eql( 1 );
+		expect( diff.seconds ).to.eql( 1 );
+		expect( diff.ms ).to.eql( 99 );
+
+		done();
+	} );
+
+	test( 'Date.prototype.diff with exclusions', function( done ) {
+		var date_1, date_2, diff, now = Date.now();
+
+		date_1 = new Date( 2012, 11, 10, 9, 8, 7, 600 );
+		date_2 = date_1.clone().adjust( { year : 1, month : 1, week : 1, day : 1, hr : 1, min : 1, sec : 1, ms : 100 } );
+		diff   = date_1.diff( date_2, '-weeks >hours' );
+
+		expect( diff.value ).to.eql( Math.abs( +date_1 - +date_2 ) );
+		expect( diff.tense ).to.eql( -1 );
+		expect( diff.years ).to.eql( 1 );
+		expect( diff.months ).to.eql( 1 );
+		expect( diff.weeks ).to.be.undefined;
+		expect( diff.days ).to.eql( 12 );
+		expect( diff.hours ).to.be.undefined;
+		expect( diff.minutes ).to.be.undefined;
+		expect( diff.seconds ).to.be.undefined;
+		expect( diff.ms ).to.be.undefined;
+
+		diff   = date_2.diff( date_1, '-weeks >minutes' );
+		expect( diff.tense ).to.eql( 1 );
+		expect( diff.years ).to.eql( 1 );
+		expect( diff.months ).to.eql( 1 );
+		expect( diff.weeks ).to.be.undefined;
+		expect( diff.days ).to.eql( 12 );
+		expect( diff.hours ).to.eql( 1 );
+		expect( diff.minutes ).to.be.undefined;
+		expect( diff.seconds ).to.be.undefined;
+		expect( diff.ms ).to.be.undefined;
+
+		date_1 = new Date( 2012, 11, 10, 9, 8, 7, 600 );
+		date_2 = date_1.clone().adjust( 0, 11 );
+		diff   = date_1.diff( date_2, '>months' );
+
+		expect( diff.value ).to.eql( Math.abs( +date_2 - +date_1 ) );
+		expect( diff.tense ).to.eql( -1 );
+		expect( diff.years ).to.eql( 1 );
+
+		diff   = date_1.diff( date_2, '-years -months -weeks' );
+		expect( diff.tense ).to.eql( -1 );
+		expect( diff.days ).to.eql( 370 );
+
+		date_1 = new Date( 2012, 11, 10, 9, 8, 7, 600 );
+		date_2 = date_1.clone().adjust( 1, 11, 1, 1, 1, 1, 1, 10 );
+		diff   = date_1.diff( date_2, '>months' );
+
+		expect( diff.value ).to.eql( Math.abs( +date_2 - +date_1 ) );
+		expect( diff.tense ).to.eql( -1 );
+		expect( diff.years ).to.eql( 2 );
+
+		diff   = date_1.diff( date_2, '-years -months -weeks' );
+		expect( diff.tense ).to.eql( -1 );
+		expect( diff.days ).to.eql( 744 );
+		expect( diff.hours ).to.eql( 1 );
+		expect( diff.minutes ).to.eql( 1 );
+		expect( diff.seconds ).to.eql( 1 );
+		expect( diff.ms ).to.eql( 9 );
+
+		done();
+	} );
+
+	test( 'Date.prototype.lexicalize `exact`', function( done ) {
+		expect( ( new Date ).lexicalize( 'exact' ) ).to.equal( 'just now' );
+
+		expect( ( new Date( 2011, 0, 1 ) ).lexicalize( new Date( 2012,  0,  1 ), 'exact' ) ).to.equal( '1 year ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).lexicalize( new Date( 2011,  0,  1 ), 'exact' ) ).to.equal( '1 year from now' );
+		expect( ( new Date( 2001, 0, 1 ) ).lexicalize( new Date( 2011, 11, 30 ), 'exact' ) ).to.equal( '11 years ago' );
+		expect( ( new Date( 2011, 11, 30 ) ).lexicalize( new Date( 2001,  0,  1 ), 'exact' ) ).to.equal( '11 years from now' );
+
+		expect( ( new Date( 2012, 0, 31 ) ).lexicalize( new Date( 2012, 2,  1 ), 'exact' ) ).to.equal( '1 month ago' );
+		expect( ( new Date( 2012, 2,  1 ) ).lexicalize( new Date( 2012, 0, 31 ), 'exact' ) ).to.equal( '1 month from now' );
+//		expect( ( new Date( 2012, 0,  1 ) ).lexicalize( ( new Date( 2012, 2,  31, 1, 0, 1 ) ), 'exact' ) ).to.equal( '3 months ago' );
+//		expect( ( new Date( 2012, 2,  31, 1, 0, 1 ) ).lexicalize( new Date( 2012, 0,  1 ), 'exact' ) ).to.equal( '3 months from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -3 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '3 weeks ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  3 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '3 weeks from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -5 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 month and 5 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  5 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 month and 5 days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -7 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 month, 2 weeks and 5 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  7 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 month, 2 weeks and 5 days from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 day ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 day from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -2 ).adjust( Date.HOUR, -6 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '2 days and 6 hours ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  2 ).adjust( Date.HOUR,  6 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '2 days and 6 hours from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -3 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '3 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  3 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '3 days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -4 ).adjust( Date.HOUR, -12 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '4 days and 12 hours ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  4 ).adjust( Date.HOUR,  12 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '4 days and 12 hours from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -5 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '5 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  5 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '5 days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -6 ).adjust( Date.HOUR, -18 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '6 days and 18 hours ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  6 ).adjust( Date.HOUR,  18 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '6 days and 18 hours from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -7 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  7 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -8 ).adjust( Date.HOUR, -22 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week, 1 day, 21 hours, 59 minutes and 59 seconds ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  8 ).adjust( Date.HOUR,  22 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week, 1 day, 21 hours, 59 minutes and 59 seconds from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -9 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week and 2 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  9 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week and 2 days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -10 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week and 3 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  10 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 week and 3 days from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR,  -1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 hour ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR,   1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 hour from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR, -12 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '12 hours ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR,  12 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '12 hours from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR, -24 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 day ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR,  24 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 day from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE,  -1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 minute ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE,   1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 minute from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE, -30 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '30 minutes ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE,  30 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '30 minutes from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE, -60 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 hour ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE,  60 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 hour from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND,  -1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 second ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND,   1 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 second from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND, -30 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '30 seconds ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND,  30 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '30 seconds from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND, -60 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 minute ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND,  60 ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 minute from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( { year : -1, month : -1, week : -1, day : -1, hr : -1, min : -1, sec : -1 } ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 year, 1 month, 1 week, 4 days, 1 hour and 1 minute ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( { year :  1, month :  1, week :  1, day :  1, hr :  1, min :  1, sec :  1 } ).lexicalize( new Date( 2012, 0, 1 ), 'exact' ) ).to.equal( '1 year, 1 month, 1 week, 5 days, 1 hour, 1 minute and 1 second from now' );
+
+		done();
+	} );
+
+	test( 'Date.prototype.lexicalize `approx`', function( done ) {
+		expect( ( new Date ).lexicalize( 'approx' ) ).to.equal( 'just now' );
+
+		expect( ( new Date( 2011, 0, 1 ) ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'last year' );
+		expect( ( new Date( 2012, 0, 1 ) ).lexicalize( new Date( 2011, 0, 1 ), 'approx' ) ).to.equal( 'next year' );
+		expect( ( new Date( 2001, 0, 1 ) ).lexicalize( new Date( 2011, 11, 30 ), 'approx' ) ).to.equal( '11 years ago' );
+		expect( ( new Date( 2011, 11, 30 ) ).lexicalize( new Date( 2001,  0,  1 ), 'approx' ) ).to.equal( '11 years from now' );
+
+		expect( ( new Date( 2012, 0, 31 ) ).lexicalize( new Date( 2012, 2,  1 ), 'approx' ) ).to.equal( 'last month' );
+		expect( ( new Date( 2012, 2,  1 ) ).lexicalize( new Date( 2012, 0, 31 ), 'approx' ) ).to.equal( 'next month' );
+		expect( ( new Date( 2012, 0,  1 ) ).lexicalize( new Date( 2012, 3,  1 ), 'approx' ) ).to.equal( 'about 3 months ago' );
+		expect( ( new Date( 2012, 3,  1 ) ).lexicalize( new Date( 2012, 0,  1 ), 'approx' ) ).to.equal( 'about 3 months from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'last week' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'next week' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -2 ).adjust( Date.DAY, -1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just over 2 weeks ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  2 ).adjust( Date.DAY,  1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just over 2 weeks from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -3 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '3 weeks ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  3 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '3 weeks from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -5 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just over 1 month ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  5 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just over 1 month from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK, -7 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'about 1 and a half months ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.WEEK,  7 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'about 1 and a half months from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'yesterday' );
+		expect( ( new Date( 2012, 0, 1, 12 ) ).adjust( Date.HOUR, -18 ).lexicalize( new Date( 2012, 0, 1, 12 ), 'approx' ) ).to.equal( 'yesterday' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'tomorrow' );
+		expect( ( new Date( 2012, 0, 1, 12 ) ).adjust( Date.HOUR, 18 ).lexicalize( new Date( 2012, 0, 1, 12 ), 'approx' ) ).to.equal( 'tomorrow' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -2 ).adjust( Date.HOUR, -6 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'almost 2 and a half days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  2 ).adjust( Date.HOUR,  6 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'almost 2 and a half days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -3 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '3 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  3 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '3 days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -4 ).adjust( Date.HOUR, -12 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'about 4 and a half days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  4 ).adjust( Date.HOUR,  12 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'about 4 and a half days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -5 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '5 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  5 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '5 days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -6 ).adjust( Date.HOUR, -18 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'almost 7 days ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  6 ).adjust( Date.HOUR,  18 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'almost 7 days from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -7 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'last week' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  7 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'next week' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -8 ).adjust( Date.HOUR, -22 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'almost 1 and a half weeks ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  8 ).adjust( Date.HOUR,  22 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'almost 1 and a half weeks from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -9 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'almost 1 and a half weeks ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  9 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'almost 1 and a half weeks from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY, -10 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'about 1 and a half weeks ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.DAY,  10 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'about 1 and a half weeks from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR,  -1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '1 hour ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR,   1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '1 hour from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR, -12 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '12 hours ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR,  12 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '12 hours from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR, -24 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'yesterday' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.HOUR,  24 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'tomorrow' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE,  -1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '1 minute ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE,   1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '1 minute from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE, -30 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '30 minutes ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE,  30 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '30 minutes from now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE, -60 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '1 hour ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.MINUTE,  60 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '1 hour from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND,  -1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND,   1 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND, -30 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND,  30 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just now' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND, -60 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '1 minute ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( Date.SECOND,  60 ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( '1 minute from now' );
+
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( { year : -1, month : -1, week : -1, day : -1, hr : -1, min : -1, sec : -1 } ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just over 1 year ago' );
+		expect( ( new Date( 2012, 0, 1 ) ).adjust( { year :  1, month :  1, week :  1, day :  1, hr :  1, min :  1, sec :  1 } ).lexicalize( new Date( 2012, 0, 1 ), 'approx' ) ).to.equal( 'just over 1 year from now' );
+
+		done();
+	} );
+
+	test( 'Date.prototype.format: takes a format String and returns a Date String representation of the Date instance', function( done ) {
+		function format( s ) { return '{ ' + s.split( ' ' ).map( map ).join( ', ' ) + ' }'; }
+		function map( s ) { return '"<' + s + '>" : "' + s + '"'; }
+
+		var r1 = new Date( 2010, 0, 1, 13, 17, 21, 450 ),
+			r2 = new MockDate( {
+				date :   1, day    :    5, hour : 13, minute : 17, month : 0,
+				ms   : 450, second :   21, str  : 'Fri Jan 01 2010 13:17:21 GMT+0000 (BST)',
+				tzo  :   0, year   : 2010
+			} );
+
+		expect( JSON.parse( r1.format( format( 'd D j l N S w z W F m M n t L o Y y a A g G h H i s u U' ) ) ) ).to.eql( {
+			d : '01',      D : 'Fri',  j : '1',   l : 'Friday', N : '5',  S : 'st', w : '5', z : '0',              // day
+			W : '53',                                                                                             // week
+			F : 'January', m : '01',   M : 'Jan',  n : '1',    t : '31',                                          // month
+			L : '0',       o : '2009', Y : '2010', y : '10',                                                      // year
+			a : 'pm',      A : 'PM',   g : '1',    G : '13',   h : '01', H : '13', i : '17', s : '21', u : '450', // time
+			U : '1262351841450'                                                                                   // unix
+		} );
+		expect( JSON.parse( call( 'format', r2, format( 'O P T Z c r' ) ) ) ).to.eql( {
+			O : '+0000', P : '+00:00', T : 'BST', Z : '0',                              // timezone
+			c : '2010-01-01T13:17:21.450Z',       r : 'Fri, 01 Jan 2010 13:17:21 +0000' // full date/ time
+		} );
+
+		expect( r1.format( 'e' ) ).to.equal( r1.lexicalize( 'exact' ) );
+		expect( r1.format( 'x' ) ).to.equal( r1.lexicalize( 'approx' ) );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getGMTOffset: returns the GMT offset of a Date instance', function( done ) {
+		var fn = 'getGMTOffset';
+
+		expect( call( fn, new MockDate( { tzo :    0 } ) ) ).to.eql( '+0000' );
+		expect( call( fn, new MockDate( { tzo :  -60 } ) ) ).to.eql( '+0100' );
+		expect( call( fn, new MockDate( { tzo :   60 } ) ) ).to.eql( '-0100' );
+		expect( call( fn, new MockDate( { tzo : -600 } ) ) ).to.eql( '+1000' );
+		expect( call( fn, new MockDate( { tzo :  600 } ) ) ).to.eql( '-1000' );
+		expect( call( fn, new MockDate( { tzo :    0 } ), true ) ).to.eql( '+00:00' );
+		expect( call( fn, new MockDate( { tzo :  -60 } ), true ) ).to.eql( '+01:00' );
+		expect( call( fn, new MockDate( { tzo :   60 } ), true ) ).to.eql( '-01:00' );
+		expect( call( fn, new MockDate( { tzo : -600 } ), true ) ).to.eql( '+10:00' );
+		expect( call( fn, new MockDate( { tzo :  600 } ), true ) ).to.eql( '-10:00' );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getISODay: returns the ISO-8601 numeric representation of the day of the week', function( done ) {
+		expect( new Date( 2006, 11, 31 ).getISODay() ).to.eql( 7 );
+		expect( new Date( 2007,  0,  1 ).getISODay() ).to.eql( 1 );
+		expect( new Date( 2007,  0,  2 ).getISODay() ).to.eql( 2 );
+		expect( new Date( 2007,  0,  3 ).getISODay() ).to.eql( 3 );
+		expect( new Date( 2007,  0,  4 ).getISODay() ).to.eql( 4 );
+		expect( new Date( 2007,  0,  5 ).getISODay() ).to.eql( 5 );
+		expect( new Date( 2007,  0,  6 ).getISODay() ).to.eql( 6 );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getISODaysInYear: returns the ISO-8601 number of days in the year', function( done ) {
+		var r = [364, 364, 364, 364, 371, 371, 357, 364, 364, 371, 364];
+
+		[2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010].forEach( function( y, i ) {
+			expect( new Date( y, 1, 1 ).getISODaysInYear() ).to.eql( r[i] );
+		} );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getISOFirstMondayOfYear: returns a Date instance of this Date instance\'s ISO-8601 first Monday of the year', function( done ) {
+		var r = [new Date( 2000, 0, 3 ), new Date( 2001, 0, 1 ), new Date( 2001, 11, 31 ), new Date( 2002, 11, 30 ), new Date( 2003, 11, 29 ), new Date( 2005, 0, 3 ), new Date( 2006, 0, 9 ), new Date( 2007, 0, 1 ), new Date( 2007, 11, 31 ), new Date( 2008, 11, 29 ), new Date( 2010, 0, 4 )];
+
+		[2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010].forEach( function( y, i ) {
+			expect( new Date( y, 1, 1 ).getISOFirstMondayOfYear().format( 'Y-m-d' ) ).to.eql( r[i].format( 'Y-m-d' ) );
+		} );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getISOWeek: returns the ISO-8601 week number of the Date instance', function( done ) {
+		var jan01 = [52,  1,  1,  1, 52, 53, 52,  1,  1, 52, 53],
+			jun15 =  24,
+			aug30 = [35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 35],
+			dec31 = [52,  1,  1,  1, 52, 52, 52,  1,  1, 52, 52];
+
+		[2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010].forEach( function( y, i ) {
+			expect( new Date( y,  0,  1 ).getISOWeek() ).to.eql( jan01[i] );
+			expect( new Date( y,  5, 15 ).getISOWeek() ).to.eql( jun15    );
+			expect( new Date( y,  7, 30 ).getISOWeek() ).to.eql( aug30[i] );
+			expect( new Date( y, 11, 31 ).getISOWeek() ).to.eql( dec31[i] );
+		} );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getISOWeeksInYear: returns the ISO-8601 number of weeks in the year', function( done ) {
+		var r = [52, 52, 52, 52, 53, 53, 51, 52, 52, 53, 52];
+
+		[2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010].forEach( function( y, i ) {
+			expect( new Date( y, 1, 1 ).getISOWeeksInYear() ).to.eql( r[i] );
+		} );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getDayOfYear: returns the day of the year', function( done ) {
+		expect( new Date( 1900, 11, 31 ).getDayOfYear() ).to.eql( 364 );
+		expect( new Date( 2000, 11, 31 ).getDayOfYear() ).to.eql( 365 );
+		expect( new Date( 2008, 11, 31 ).getDayOfYear() ).to.eql( 365 );
+		expect( new Date( 2010, 11, 31 ).getDayOfYear() ).to.eql( 364 );
+		expect( new Date( 1900,  5, 15 ).getDayOfYear() ).to.eql( 165 );
+		expect( new Date( 2000,  5, 15 ).getDayOfYear() ).to.eql( 166 );
+		expect( new Date( 2008,  5, 15 ).getDayOfYear() ).to.eql( 166 );
+		expect( new Date( 2010,  5, 15 ).getDayOfYear() ).to.eql( 165 );
+		expect( new Date( 2010,  0,  1 ).getDayOfYear() ).to.eql(   0 );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getFirstOfTheMonth: returns a Date instance of this Date instance\'s first of the Month', function( done ) {
+		expect( new Date( 2010, 11, 31 ).getFirstOfTheMonth() ).to.eql( new Date( 2010, 11, 1 ) );
+		expect( new Date( 2010,  0,  1 ).getFirstOfTheMonth() ).to.eql( new Date( 2010,  0, 1 ) );
+
+		done();
+	} );
+
+	test( 'Date.prototype.getLastOfTheMonth: returns a Date instance of this Date instance\'s last of the Month', function( done ) {
+		expect( new Date( 2010, 11, 31 ).getLastOfTheMonth() ).to.eql( new Date( 2010, 11, 31 ) );
+		expect( new Date( 2010,  0,  1 ).getLastOfTheMonth() ).to.eql( new Date( 2010,  0, 31 ) );
+
+		done();
+	} );
+
+	test( 'Date.prototype.isLeapYear: returns true if the Date instance is in a leap year', function( done ) {
+		expect( new Date( 1899, 0, 1 ).isLeapYear() ).to.be.false;
+		expect( new Date( 1900, 0, 1 ).isLeapYear() ).to.be.false;
+		expect( new Date( 1901, 0, 1 ).isLeapYear() ).to.be.false;
+		expect( new Date( 1904, 0, 1 ).isLeapYear() ).to.be.true;
+		expect( new Date( 1996, 0, 1 ).isLeapYear() ).to.be.true;
+		expect( new Date( 2000, 0, 1 ).isLeapYear() ).to.be.true;
+		expect( new Date( 2004, 0, 1 ).isLeapYear() ).to.be.true;
+		expect( new Date( 2010, 0, 1 ).isLeapYear() ).to.be.false;
+		expect( new Date( 2050, 0, 1 ).isLeapYear() ).to.be.false;
+		expect( new Date( 2100, 0, 1 ).isLeapYear() ).to.be.false;
+
+		done();
+	} );
+
+	test( 'Date.prototype.timezone: returns the timezone portion of a Date instance', function( done ) {
+		var fn = 'timezone';
+		expect( call( fn, new MockDate( { str : 'Thu, 25 Oct 2007 22:53:45 GMT+0800' } ) ) ).to.eql( 'GMT' );
+		expect( call( fn, new MockDate( { str : 'Thu Oct 25 2007 22:55:35 GMT+0800 (Malay Peninsula Standard Time)' } ) ) ).to.eql( 'MPST' );
+		expect( call( fn, new MockDate( { str : 'Thu Oct 25 22:54:35 UTC+0800 2007' } ) ) ).to.eql( 'UTC' );
+		expect( call( fn, new MockDate( { str : 'Thu Oct 25 17:06:37 PDT 2007' } ) ) ).to.eql( 'PDT' );
+		expect( call( fn, new MockDate( { str : 'Tue Apr 20 2010 19:27:18 GMT+0100 (BST)' } ) ) ).to.eql( 'BST' );
+
+		done();
+	} );
+
+	test( 'Date.prototype.valid returns `true` if the Date instance is valid', function( done ) {
+		expect( ( new Date ).valid() ).to.be.true;
+		expect( ( new Date( null ) ).valid() ).to.be.true;
+		expect( ( new Date( false ) ).valid() ).to.be.true; // equates to new Date( 0 )
+		expect( ( new Date( true ) ).valid() ).to.be.true;  // equates to new Date( 1 )
+		expect( ( new Date( -1 ) ).valid() ).to.be.true;
+		expect( ( new Date( 2012 ) ).valid() ).to.be.true;
+		expect( ( new Date( 2012, 0 ) ).valid() ).to.be.true;
+		expect( ( new Date( 2012, 0 ) ).valid() ).to.be.true;
+		expect( ( new Date( Number.MIN_VALUE ) ).valid() ).to.be.true;
+		expect( ( new Date( new Date( new Date ) ) ).valid() ).to.be.true;
+
+		done();
+	} );
+
+	test( 'Date.prototype.valid returns `false` if the Date instance is valid', function( done ) {
+		expect( ( new Date( undefined ) ).valid() ).to.be.false;
+		expect( ( new Date( NaN ) ).valid() ).to.be.false;
+		expect( ( new Date( Infinity ) ).valid() ).to.be.false;
+		expect( ( new Date( Number.MAX_VALUE ) ).valid() ).to.be.false;
+		expect( ( new Date( 'valid' ) ).valid() ).to.be.false;
+		expect( ( new Date( '' ) ).valid() ).to.be.false;
+		expect( ( new Date( [] ) ).valid() ).to.be.false;
+		expect( ( new Date( { year : 2012, month : 0, day : 1 } ) ).valid() ).to.be.false;
+
+		done();
+	} );
+} );

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/.npmignore b/node_modules/cordova-serve/node_modules/mime/.npmignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/LICENSE b/node_modules/cordova-serve/node_modules/mime/LICENSE
new file mode 100644
index 0000000..451fc45
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/mime/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Benjamin Thomas, Robert Kieffer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/README.md b/node_modules/cordova-serve/node_modules/mime/README.md
new file mode 100644
index 0000000..506fbe5
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/mime/README.md
@@ -0,0 +1,90 @@
+# mime
+
+Comprehensive MIME type mapping API based on mime-db module.
+
+## Install
+
+Install with [npm](http://github.com/isaacs/npm):
+
+    npm install mime
+
+## Contributing / Testing
+
+    npm run test
+
+## Command Line
+
+    mime [path_string]
+
+E.g.
+
+    > mime scripts/jquery.js
+    application/javascript
+
+## API - Queries
+
+### mime.lookup(path)
+Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.').  E.g.
+
+```js
+var mime = require('mime');
+
+mime.lookup('/path/to/file.txt');         // => 'text/plain'
+mime.lookup('file.txt');                  // => 'text/plain'
+mime.lookup('.TXT');                      // => 'text/plain'
+mime.lookup('htm');                       // => 'text/html'
+```
+
+### mime.default_type
+Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)
+
+### mime.extension(type)
+Get the default extension for `type`
+
+```js
+mime.extension('text/html');                 // => 'html'
+mime.extension('application/octet-stream');  // => 'bin'
+```
+
+### mime.charsets.lookup()
+
+Map mime-type to charset
+
+```js
+mime.charsets.lookup('text/plain');        // => 'UTF-8'
+```
+
+(The logic for charset lookups is pretty rudimentary.  Feel free to suggest improvements.)
+
+## API - Defining Custom Types
+
+Custom type mappings can be added on a per-project basis via the following APIs.
+
+### mime.define()
+
+Add custom mime/extension mappings
+
+```js
+mime.define({
+    'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],
+    'application/x-my-type': ['x-mt', 'x-mtt'],
+    // etc ...
+});
+
+mime.lookup('x-sft');                 // => 'text/x-some-format'
+```
+
+The first entry in the extensions array is returned by `mime.extension()`. E.g.
+
+```js
+mime.extension('text/x-some-format'); // => 'x-sf'
+```
+
+### mime.load(filepath)
+
+Load mappings from an Apache ".types" format file
+
+```js
+mime.load('./my_project.types');
+```
+The .types file format is simple -  See the `types` dir for examples.

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/build/build.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/build/build.js b/node_modules/cordova-serve/node_modules/mime/build/build.js
new file mode 100644
index 0000000..ed5313e
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/mime/build/build.js
@@ -0,0 +1,11 @@
+var db = require('mime-db');
+
+var mapByType = {};
+Object.keys(db).forEach(function(key) {
+  var extensions = db[key].extensions;
+  if (extensions) {
+    mapByType[key] = extensions;
+  }
+});
+
+console.log(JSON.stringify(mapByType));

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/build/test.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/build/test.js b/node_modules/cordova-serve/node_modules/mime/build/test.js
new file mode 100644
index 0000000..58b9ba7
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/mime/build/test.js
@@ -0,0 +1,57 @@
+/**
+ * Usage: node test.js
+ */
+
+var mime = require('../mime');
+var assert = require('assert');
+var path = require('path');
+
+//
+// Test mime lookups
+//
+
+assert.equal('text/plain', mime.lookup('text.txt'));     // normal file
+assert.equal('text/plain', mime.lookup('TEXT.TXT'));     // uppercase
+assert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file
+assert.equal('text/plain', mime.lookup('.text.txt'));    // hidden file
+assert.equal('text/plain', mime.lookup('.txt'));         // nameless
+assert.equal('text/plain', mime.lookup('txt'));          // extension-only
+assert.equal('text/plain', mime.lookup('/txt'));         // extension-less ()
+assert.equal('text/plain', mime.lookup('\\txt'));        // Windows, extension-less
+assert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized
+assert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default
+
+//
+// Test extensions
+//
+
+assert.equal('txt', mime.extension(mime.types.text));
+assert.equal('html', mime.extension(mime.types.htm));
+assert.equal('bin', mime.extension('application/octet-stream'));
+assert.equal('bin', mime.extension('application/octet-stream '));
+assert.equal('html', mime.extension(' text/html; charset=UTF-8'));
+assert.equal('html', mime.extension('text/html; charset=UTF-8 '));
+assert.equal('html', mime.extension('text/html; charset=UTF-8'));
+assert.equal('html', mime.extension('text/html ; charset=UTF-8'));
+assert.equal('html', mime.extension('text/html;charset=UTF-8'));
+assert.equal('html', mime.extension('text/Html;charset=UTF-8'));
+assert.equal(undefined, mime.extension('unrecognized'));
+
+//
+// Test node.types lookups
+//
+
+assert.equal('application/font-woff', mime.lookup('file.woff'));
+assert.equal('application/octet-stream', mime.lookup('file.buffer'));
+assert.equal('audio/mp4', mime.lookup('file.m4a'));
+assert.equal('font/opentype', mime.lookup('file.otf'));
+
+//
+// Test charsets
+//
+
+assert.equal('UTF-8', mime.charsets.lookup('text/plain'));
+assert.equal(undefined, mime.charsets.lookup(mime.types.js));
+assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
+
+console.log('\nAll tests passed');

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/cli.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/cli.js b/node_modules/cordova-serve/node_modules/mime/cli.js
new file mode 100644
index 0000000..20b1ffe
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/mime/cli.js
@@ -0,0 +1,8 @@
+#!/usr/bin/env node
+
+var mime = require('./mime.js');
+var file = process.argv[2];
+var type = mime.lookup(file);
+
+process.stdout.write(type + '\n');
+

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/mime.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/mime.js b/node_modules/cordova-serve/node_modules/mime/mime.js
new file mode 100644
index 0000000..341b6a5
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/mime/mime.js
@@ -0,0 +1,108 @@
+var path = require('path');
+var fs = require('fs');
+
+function Mime() {
+  // Map of extension -> mime type
+  this.types = Object.create(null);
+
+  // Map of mime type -> extension
+  this.extensions = Object.create(null);
+}
+
+/**
+ * Define mimetype -> extension mappings.  Each key is a mime-type that maps
+ * to an array of extensions associated with the type.  The first extension is
+ * used as the default extension for the type.
+ *
+ * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});
+ *
+ * @param map (Object) type definitions
+ */
+Mime.prototype.define = function (map) {
+  for (var type in map) {
+    var exts = map[type];
+    for (var i = 0; i < exts.length; i++) {
+      if (process.env.DEBUG_MIME && this.types[exts]) {
+        console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' +
+          this.types[exts] + ' to ' + type);
+      }
+
+      this.types[exts[i]] = type;
+    }
+
+    // Default extension is the first one we encounter
+    if (!this.extensions[type]) {
+      this.extensions[type] = exts[0];
+    }
+  }
+};
+
+/**
+ * Load an Apache2-style ".types" file
+ *
+ * This may be called multiple times (it's expected).  Where files declare
+ * overlapping types/extensions, the last file wins.
+ *
+ * @param file (String) path of file to load.
+ */
+Mime.prototype.load = function(file) {
+  this._loading = file;
+  // Read file and split into lines
+  var map = {},
+      content = fs.readFileSync(file, 'ascii'),
+      lines = content.split(/[\r\n]+/);
+
+  lines.forEach(function(line) {
+    // Clean up whitespace/comments, and split into fields
+    var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/);
+    map[fields.shift()] = fields;
+  });
+
+  this.define(map);
+
+  this._loading = null;
+};
+
+/**
+ * Lookup a mime type based on extension
+ */
+Mime.prototype.lookup = function(path, fallback) {
+  var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase();
+
+  return this.types[ext] || fallback || this.default_type;
+};
+
+/**
+ * Return file extension associated with a mime type
+ */
+Mime.prototype.extension = function(mimeType) {
+  var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase();
+  return this.extensions[type];
+};
+
+// Default instance
+var mime = new Mime();
+
+// Define built-in types
+mime.define(require('./types.json'));
+
+// Default type
+mime.default_type = mime.lookup('bin');
+
+//
+// Additional API specific to the default instance
+//
+
+mime.Mime = Mime;
+
+/**
+ * Lookup a charset based on mime type.
+ */
+mime.charsets = {
+  lookup: function(mimeType, fallback) {
+    // Assume text types are utf8
+    return (/^text\//).test(mimeType) ? 'UTF-8' : fallback;
+  }
+};
+
+module.exports = mime;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/package.json b/node_modules/cordova-serve/node_modules/mime/package.json
new file mode 100644
index 0000000..ab45e60
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/mime/package.json
@@ -0,0 +1,73 @@
+{
+  "author": {
+    "name": "Robert Kieffer",
+    "email": "robert@broofa.com",
+    "url": "http://github.com/broofa"
+  },
+  "scripts": {
+    "prepublish": "node build/build.js > types.json",
+    "test": "node build/test.js"
+  },
+  "bin": {
+    "mime": "cli.js"
+  },
+  "contributors": [
+    {
+      "name": "Benjamin Thomas",
+      "email": "benjamin@benjaminthomas.org",
+      "url": "http://github.com/bentomas"
+    }
+  ],
+  "description": "A comprehensive library for mime-type mapping",
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "https://raw.github.com/broofa/node-mime/master/LICENSE"
+    }
+  ],
+  "dependencies": {},
+  "devDependencies": {
+    "mime-db": "^1.2.0"
+  },
+  "keywords": [
+    "util",
+    "mime"
+  ],
+  "main": "mime.js",
+  "name": "mime",
+  "repository": {
+    "url": "git+https://github.com/broofa/node-mime.git",
+    "type": "git"
+  },
+  "version": "1.3.4",
+  "gitHead": "1628f6e0187095009dcef4805c3a49706f137974",
+  "bugs": {
+    "url": "https://github.com/broofa/node-mime/issues"
+  },
+  "homepage": "https://github.com/broofa/node-mime",
+  "_id": "mime@1.3.4",
+  "_shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53",
+  "_from": "mime@>=1.2.11 <2.0.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "broofa",
+    "email": "robert@broofa.com"
+  },
+  "maintainers": [
+    {
+      "name": "broofa",
+      "email": "robert@broofa.com"
+    },
+    {
+      "name": "bentomas",
+      "email": "benjamin@benjaminthomas.org"
+    }
+  ],
+  "dist": {
+    "shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53",
+    "tarball": "http://registry.npmjs.org/mime/-/mime-1.3.4.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+  "readme": "ERROR: No README data found!"
+}

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/0044fe33/node_modules/cordova-serve/node_modules/mime/types.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/mime/types.json b/node_modules/cordova-serve/node_modules/mime/types.json
new file mode 100644
index 0000000..c674b1c
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/mime/types.json
@@ -0,0 +1 @@
+{"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mdp"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":["woff"],"application/font-woff2":["woff2"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfi
 x":["ipfix"],"application/java-archive":["jar"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","buffer"
 ],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application
 /resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"applic
 ation/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/
 vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.c
 licker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.eco
 win.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.
 fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.
 lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.j
 avame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"
 application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],
 "application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"applica
 tion/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["o
 df"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxml
 formats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.bo
 x":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"
 application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.
 writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb
 "],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["dmg"],"application/x-author
 ware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"]
 ,"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-otf":["otf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-ttf":["ttf","ttc"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["iso"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-w
 md":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdownload":["exe","dll","com","bat","msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","wmz","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-nzb":["nzb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-research-info-systems":["ris"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stu
 ffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"applicat
 ion/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp4":["mp4a","m4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-matroska":["mka"],"aud
 io/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-wav":["wav"],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/opentype":["otf"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jpeg":["jpeg","jpg","jpe"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-r
 lc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-mrsid-image":["sid"],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3d
 v","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/sgml":["sgml","sgm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],
 "text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["markdown","md","mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-pascal":["p","pas"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vn
 d.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


Mime
View raw message