diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 01b5025d20..426449ac05 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -63,6 +63,7 @@ All definitions files include a header with the author and editors, so at some p * [emissary](https://github.com/atom/emissary) (by [vvakame](https://github.com/vvakame)) * [EpicEditor](http://epiceditor.com/) (by [Boris Yankov](https://github.com/borisyankov)) * [ES6-Promises](https://github.com/jakearchibald/ES6-Promises) (by [François de Campredon](https://github.com/fdecampredon/)) +* [Esprima](http://esprima.org/) (by [Teppei Sato](https://github.com/teppeis)) * [expect.js](https://github.com/LearnBoost/expect.js) (by [Teppei Sato](https://github.com/teppeis)) * [expectations](https://github.com/spmason/expectations) (by [vvakame](https://github.com/vvakame)) * [Express](http://expressjs.com/) (by [Boris Yankov](https://github.com/borisyankov)) @@ -87,6 +88,7 @@ All definitions files include a header with the author and editors, so at some p * [GoJS](http://gojs.net/) (by [Barbara Duckworth](https://github.com/barbara42)) * [Greasemonkey](http://www.greasespot.net/) (by [Kota Saito](https://github.com/kotas)) * [GreenSock Animation Platform (GSAP)](http://www.greensock.com/get-started-js/) (by [Robert S.](https://github.com/codeBelt)) +* [gridfs-stream](https://github.com/aheckmann/gridfs-stream) (by [Lior Mualem](https://github.com/liorm)) * [Grunt JS](http://gruntjs.com/) (by [Jeff May](https://github.com/jeffmay), [Basarat Ali Syed](https://github.com/basarat) and [San Chen](https://github.com/bigsan)) * [Google API Client](https://code.google.com/p/google-api-javascript-client/) (by [Frank M](https://github.com/sgtfrankieboy)) * [Google App Engine Channel API](https://developers.google.com/appengine/docs/java/channel/javascript) (by [vvakame](https://github.com/vvakame)) @@ -116,6 +118,7 @@ All definitions files include a header with the author and editors, so at some p * [jake](https://github.com/mde/jake) (by [Kon](http://phyzkit.net/)) * [Jasmine](http://pivotal.github.com/jasmine/) (by [Boris Yankov](https://github.com/borisyankov)) * [Jasmine-jQuery](https://github.com/velesin/jasmine-jquery) (by [Gregor Stamac](https://github.com/gstamac)) +* [jDataView](https://github.com/jDataView/jDataView) (by [Ingvar Stepanyan](https://github.com/RReverser)) * [JointJS](http://www.jointjs.com/) (by [Aidan Reel](http://github.com/areel)) * [jQRangeSlider](http://ghusse.github.com/jQRangeSlider) (by [Dániel Tar](https://github.com/qcz)) * [jQuery](http://jquery.com/) (from TypeScript samples) @@ -156,6 +159,7 @@ All definitions files include a header with the author and editors, so at some p * [jQuery.TinyCarousel](http://baijs.nl/tinycarousel/) (by [Christiaan Rakowski](https://github.com/csrakowski)) * [jQuery.TinyScrollbar](http://baijs.nl/tinyscrollbar/) (by [Christiaan Rakowski](https://github.com/csrakowski)) * [jQuery.tooltipster](https://github.com/iamceege/tooltipster) (by [Patrick Magee](https://github.com/pjmagee)) +* [jQuery.total-storage](https://github.com/Upstatement/jquery-total-storage) (by [Jeremy Brooks](https://github.com/JeremyCBrooks/)) * [jQuery.Transit](http://ricostacruz.com/jquery.transit/) (by [MrBigDog2U](https://github.com/MrBigDog2U)) * [jQuery.Validation](http://bassistance.de/jquery-plugins/jquery-plugin-validation/) (by [Boris Yankov](https://github.com/borisyankov)) * [jQuery.Watermark](http://jquery-watermark.googlecode.com) (by [Anwar Javed](https://github.com/anwarjaved)) @@ -205,6 +209,7 @@ All definitions files include a header with the author and editors, so at some p * [Modernizr](http://modernizr.com/) (by [Boris Yankov](https://github.com/borisyankov) and [Theodore Brown](https://github.com/theodorejb/)) * [Moment.js](https://github.com/timrwood/moment) (by [Michael Lakerveld](https://github.com/Lakerfield)) * [MongoDB](http://mongodb.github.io/node-mongodb-native/) (from TypeScript samples, updated by [Niklas Mollenhauer](https://github.com/nikeee)) +* [mongoose](http://mongoosejs.com/) (by [Hiroki Horiuchi](https://github.com/horiuchi/)) * [Mousetrap](http://craig.is/killing/mice) (by [Dániel Tar](https://github.com/qcz)) * [msgpack.js](https://github.com/uupaa/msgpack.js) (by [Shinya Mochizuki](https://github.com/enrapt-mochizuki)) * [Mustache.js](https://github.com/janl/mustache.js) (by [Boris Yankov](https://github.com/borisyankov)) diff --git a/angular-translate/angular-translate.d.ts b/angular-translate/angular-translate.d.ts index 106d0ae252..2bd8cef80a 100644 --- a/angular-translate/angular-translate.d.ts +++ b/angular-translate/angular-translate.d.ts @@ -22,7 +22,7 @@ declare module ng.translate { } interface ITranslateService { - (key: string, ...params: string[]): string; + (key: string, ...params: string[]): ng.IPromise; fallbackLanguage(): string; preferredLanguage(): string; proposedLanguage(): string; diff --git a/angularjs/angular-resource-tests.ts b/angularjs/angular-resource-tests.ts index 2870b21ad8..c80cc662de 100644 --- a/angularjs/angular-resource-tests.ts +++ b/angularjs/angular-resource-tests.ts @@ -19,7 +19,7 @@ actionDescriptor.params = { key: 'value' }; /////////////////////////////////////// var resourceClass: IMyResourceClass; var resource: IMyResource; -var resourceArray: IMyResource[]; +var resourceArray: ng.resource.IResourceArray; resource = resourceClass.delete(); resource = resourceClass.delete({ key: 'value' }); @@ -29,6 +29,7 @@ resource = resourceClass.delete(function () { }, function () { }); resource = resourceClass.delete({ key: 'value' }, { key: 'value' }); resource = resourceClass.delete({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.delete({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +resource.$promise.then(function(data: IMyResource) {}); resource = resourceClass.get(); resource = resourceClass.get({ key: 'value' }); @@ -47,6 +48,8 @@ resourceArray = resourceClass.query(function () { }, function () { }); resourceArray = resourceClass.query({ key: 'value' }, { key: 'value' }); resourceArray = resourceClass.query({ key: 'value' }, { key: 'value' }, function () { }); resourceArray = resourceClass.query({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +resourceArray.push(resource); +resourceArray.$promise.then(function(data: ng.resource.IResourceArray) {}); resource = resourceClass.remove(); resource = resourceClass.remove({ key: 'value' }); @@ -66,6 +69,50 @@ resource = resourceClass.save({ key: 'value' }, { key: 'value' }); resource = resourceClass.save({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.save({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +/////////////////////////////////////// +// IResource +/////////////////////////////////////// + +var promise : ng.IPromise; +var arrayPromise : ng.IPromise; + +promise = resource.$delete(); +promise = resource.$delete({ key: 'value' }); +promise = resource.$delete({ key: 'value' }, function () { }); +promise = resource.$delete(function () { }); +promise = resource.$delete(function () { }, function () { }); +promise = resource.$delete({ key: 'value' }, function () { }, function () { }); +promise.then(function(data: IMyResource) {}); + +promise = resource.$get(); +promise = resource.$get({ key: 'value' }); +promise = resource.$get({ key: 'value' }, function () { }); +promise = resource.$get(function () { }); +promise = resource.$get(function () { }, function () { }); +promise = resource.$get({ key: 'value' }, function () { }, function () { }); + +arrayPromise = resourceArray[0].$query(); +arrayPromise = resourceArray[0].$query({ key: 'value' }); +arrayPromise = resourceArray[0].$query({ key: 'value' }, function () { }); +arrayPromise = resourceArray[0].$query(function () { }); +arrayPromise = resourceArray[0].$query(function () { }, function () { }); +arrayPromise = resourceArray[0].$query({ key: 'value' }, function () { }, function () { }); +arrayPromise.then(function(data: ng.resource.IResourceArray) {}); + +promise = resource.$remove(); +promise = resource.$remove({ key: 'value' }); +promise = resource.$remove({ key: 'value' }, function () { }); +promise = resource.$remove(function () { }); +promise = resource.$remove(function () { }, function () { }); +promise = resource.$remove({ key: 'value' }, function () { }, function () { }); + +promise = resource.$save(); +promise = resource.$save({ key: 'value' }); +promise = resource.$save({ key: 'value' }, function () { }); +promise = resource.$save(function () { }); +promise = resource.$save(function () { }, function () { }); +promise = resource.$save({ key: 'value' }, function () { }, function () { }); + /////////////////////////////////////// // IResourceService /////////////////////////////////////// @@ -85,3 +132,7 @@ resourceClass = resourceServiceFactoryFunction(resourceService resourceServiceFactoryFunction = function (resourceService: ng.resource.IResourceService) { return resourceClass; }; mod = mod.factory('factory name', resourceServiceFactoryFunction); + +/////////////////////////////////////// +// IResource +/////////////////////////////////////// \ No newline at end of file diff --git a/angularjs/angular-resource.d.ts b/angularjs/angular-resource.d.ts index a0cd4ab85a..51b93091fa 100644 --- a/angularjs/angular-resource.d.ts +++ b/angularjs/angular-resource.d.ts @@ -1,6 +1,6 @@ // Type definitions for Angular JS 1.2 (ngResource module) // Project: http://angularjs.org -// Definitions by: Diego Vilar +// Definitions by: Diego Vilar , Michael Jess (minor enhancements) // Definitions: https://github.com/daptiv/DefinitelyTyped /// @@ -50,67 +50,84 @@ declare module ng.resource { // PATCH (in other words, methods with body). Otherwise, it's going // to be considered as parameters to the request. // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L461-L465 + // + // Only those methods with an HTTP body do have 'data' as first parameter: + // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L463 + // More specifically, those methods are POST, PUT and PATCH: + // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L432 + // + // Also, static calls always return the IResource (or IResourceArray) retrieved + // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L538-L549 interface IResourceClass { new(dataOrParams? : any) : T; get(): T; - get(dataOrParams: any): T; - get(dataOrParams: any, success: Function): T; + get(params: Object): T; get(success: Function, error?: Function): T; - get(params: any, data: any, success?: Function, error?: Function): T; + get(params: Object, success: Function, error?: Function): T; + get(params: Object, data: Object, success?: Function, error?: Function): T; + + query(): IResourceArray; + query(params: Object): IResourceArray; + query(success: Function, error?: Function): IResourceArray; + query(params: Object, success: Function, error?: Function): IResourceArray; + query(params: Object, data: Object, success?: Function, error?: Function): IResourceArray; + save(): T; - save(dataOrParams: any): T; - save(dataOrParams: any, success: Function): T; + save(data: Object): T; save(success: Function, error?: Function): T; - save(params: any, data: any, success?: Function, error?: Function): T; - query(): T[]; - query(dataOrParams: any): T[]; - query(dataOrParams: any, success: Function): T[]; - query(success: Function, error?: Function): T[]; - query(params: any, data: any, success?: Function, error?: Function): T[]; + save(data: Object, success: Function, error?: Function): T; + save(params: Object, data: Object, success?: Function, error?: Function): T; + remove(): T; - remove(dataOrParams: any): T; - remove(dataOrParams: any, success: Function): T; + remove(params: Object): T; remove(success: Function, error?: Function): T; - remove(params: any, data: any, success?: Function, error?: Function): T; + remove(params: Object, success: Function, error?: Function): T; + remove(params: Object, data: Object, success?: Function, error?: Function): T; + delete(): T; - delete(dataOrParams: any): T; - delete(dataOrParams: any, success: Function): T; + delete(params: Object): T; delete(success: Function, error?: Function): T; - delete(params: any, data: any, success?: Function, error?: Function): T; + delete(params: Object, success: Function, error?: Function): T; + delete(params: Object, data: Object, success?: Function, error?: Function): T; } + // Instance calls always return the the promise of the request which retrieved the object + // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L538-L546 interface IResource { - $get(): T; - $get(dataOrParams: any): T; - $get(dataOrParams: any, success: Function): T; - $get(success: Function, error?: Function): T; - $get(params: any, data: any, success?: Function, error?: Function): T; - $save(): T; - $save(dataOrParams: any): T; - $save(dataOrParams: any, success: Function): T; - $save(success: Function, error?: Function): T; - $save(params: any, data: any, success?: Function, error?: Function): T; - $query(): T[]; - $query(dataOrParams: any): T[]; - $query(dataOrParams: any, success: Function): T[]; - $query(success: Function, error?: Function): T[]; - $query(params: any, data: any, success?: Function, error?: Function): T[]; - $remove(): T; - $remove(dataOrParams: any): T; - $remove(dataOrParams: any, success: Function): T; - $remove(success: Function, error?: Function): T; - $remove(params: any, data: any, success?: Function, error?: Function): T; - $delete(): T; - $delete(dataOrParams: any): T; - $delete(dataOrParams: any, success: Function): T; - $delete(success: Function, error?: Function): T; - $delete(params: any, data: any, success?: Function, error?: Function): T; - + $get(): ng.IPromise; + $get(params?: Object, success?: Function, error?: Function): ng.IPromise; + $get(success: Function, error?: Function): ng.IPromise; + + $query(): ng.IPromise>; + $query(params?: Object, success?: Function, error?: Function): ng.IPromise>; + $query(success: Function, error?: Function): ng.IPromise>; + + $save(): ng.IPromise; + $save(params?: Object, success?: Function, error?: Function): ng.IPromise; + $save(success: Function, error?: Function): ng.IPromise; + + $remove(): ng.IPromise; + $remove(params?: Object, success?: Function, error?: Function): ng.IPromise; + $remove(success: Function, error?: Function): ng.IPromise; + + $delete(): ng.IPromise; + $delete(params?: Object, success?: Function, error?: Function): ng.IPromise; + $delete(success: Function, error?: Function): ng.IPromise; + /** the promise of the original server interaction that created this instance. **/ $promise : ng.IPromise; $resolved : boolean; } + /** + * Really just a regular Array object with $promise and $resolve attached to it + */ + interface IResourceArray extends Array { + /** the promise of the original server interaction that created this collection. **/ + $promise : ng.IPromise>; + $resolved : boolean; + } + /** when creating a resource factory via IModule.factory */ interface IResourceServiceFactoryFunction { ($resource: ng.resource.IResourceService): IResourceClass; diff --git a/angularjs/angular.d.ts b/angularjs/angular.d.ts index c5e45258d2..6060e19fdc 100755 --- a/angularjs/angular.d.ts +++ b/angularjs/angular.d.ts @@ -351,6 +351,7 @@ declare module ng { /////////////////////////////////////////////////////////////////////////// // LogService // see http://docs.angularjs.org/api/ng.$log + // see http://docs.angularjs.org/api/ng.$logProvider /////////////////////////////////////////////////////////////////////////// interface ILogService { debug: ILogCall; @@ -360,6 +361,11 @@ declare module ng { warn: ILogCall; } + interface ILogProvider { + debugEnabled(enabled: boolean): ILogProvider; + debugEnabled(): boolean; + } + // We define this as separete interface so we can reopen it later for // the ngMock module. interface ILogCall { diff --git a/atom/atom.d.ts b/atom/atom.d.ts index 14a8dbebae..1dd2694df3 100644 --- a/atom/atom.d.ts +++ b/atom/atom.d.ts @@ -4,6 +4,7 @@ // Definitions: https://github.com/borisyankov/DefinitelyTyped /// +/// /// /// @@ -39,7 +40,7 @@ declare module AtomCore { // TBD } - interface TreeView { + interface ITreeView { // TBD } @@ -51,9 +52,201 @@ declare module AtomCore { // TBD } - interface IDisplayBuffer { + interface IDisplayBufferStatic { + new(_arg?:any):IDisplayBuffer; + } + + interface IDisplayBuffer /* extends Theorist.Model */ { + // Serializable.includeInto(Editor); + + constructor:IDisplayBufferStatic; + + verticalScrollMargin:number; + horizontalScrollMargin:number; + + declaredPropertyValues:any; + tokenizedBuffer: ITokenizedBuffer; buffer: ITextBuffer; - // TBD + charWidthsByScope:any; + markers:{ [index:number]:IDisplayBufferMarker; }; + foldsByMarkerId:any; + maxLineLength:number; + screenLines:ITokenizedLine[]; + rowMap:any; // return type are RowMap + longestScreenRow:number; + subscriptions:ISubscription[]; + subscriptionsByObject:any; // return type are WeakMap + behaviors:any; + subscriptionCounts:any; + eventHandlersByEventName:any; + pendingChangeEvent:any; + + softWrap:boolean; + + serializeParams():{id:number; softWrap:boolean; editorWidthInChars: number; scrollTop: number; scrollLeft: number; tokenizedBuffer: any; }; + deserializeParams(params:any):any; + copy():IDisplayBuffer; + updateAllScreenLines():any; + emitChanged(eventProperties:any, refreshMarkers?:boolean):any; + updateWrappedScreenLines():any; + setVisible(visible:any):any; + getVerticalScrollMargin():number; + setVerticalScrollMargin(verticalScrollMargin:number):number; + getHorizontalScrollMargin():number; + setHorizontalScrollMargin(horizontalScrollMargin:number):number; + getHeight():any; + setHeight(height:any):any; + getWidth():any; + setWidth(newWidth:any):any; + getScrollTop():number; + setScrollTop(scrollTop:number):number; + getScrollBottom():number; + setScrollBottom(scrollBottom:number):number; + getScrollLeft():number; + setScrollLeft(scrollLeft:number):number; + getScrollRight():number; + setScrollRight(scrollRight:number):number; + getLineHeight():any; + setLineHeight(lineHeight:any):any; + getDefaultCharWidth():any; + setDefaultCharWidth(defaultCharWidth:any):any; + getScopedCharWidth(scopeNames:any, char:any):any; + getScopedCharWidths(scopeNames:any):any; + setScopedCharWidth(scopeNames:any, char:any, width:any):any; + setScopedCharWidths(scopeNames:any, charWidths:any):any; + clearScopedCharWidths():any; + getScrollHeight():number; + getScrollWidth():number; + getVisibleRowRange():number[]; + intersectsVisibleRowRange(startRow:any, endRow:any):any; + selectionIntersectsVisibleRowRange(selection:any):any; + scrollToScreenRange(screenRange:any):any; + scrollToScreenPosition(screenPosition:any):any; + scrollToBufferPosition(bufferPosition:any):any; + pixelRectForScreenRange(screenRange:IRange):any; + getTabLength():number; + setTabLength(tabLength:number):any; + setSoftWrap(softWrap:boolean):boolean; + getSoftWrap():boolean; + setEditorWidthInChars(editorWidthInChars:number):any; + getEditorWidthInChars():number; + getSoftWrapColumn():number; + lineForRow(row:number):any; + linesForRows(startRow:number, endRow:number):any; + getLines():any[]; + indentLevelForLine(line:any):any; + bufferRowsForScreenRows(startScreenRow:any, endScreenRow:any):any; + createFold(startRow:number, endRow:number):IFold; + isFoldedAtBufferRow(bufferRow:number):boolean; + isFoldedAtScreenRow(screenRow:number):boolean; + destroyFoldWithId(id:number):any; + unfoldBufferRow(bufferRow:number):any[]; + largestFoldStartingAtBufferRow(bufferRow:number):any; + foldsStartingAtBufferRow(bufferRow:number):any; + largestFoldStartingAtScreenRow(screenRow:any):any; + largestFoldContainingBufferRow(bufferRow:any):any; + outermostFoldsInBufferRowRange(startRow:any, endRow:any):any[]; + foldsContainingBufferRow(bufferRow:any):any[]; + screenRowForBufferRow(bufferRow:number):number; + lastScreenRowForBufferRow(bufferRow:number):number; + bufferRowForScreenRow(screenRow:number):number; + + screenRangeForBufferRange(bufferRange:IPoint[]):IRange; + + screenRangeForBufferRange(bufferRange:IRange):IRange; + + screenRangeForBufferRange(bufferRange:{start: IPoint; end: IPoint}):IRange; + screenRangeForBufferRange(bufferRange:{start: number[]; end: IPoint}):IRange; + screenRangeForBufferRange(bufferRange:{start: {row:number; col:number;}; end: IPoint}):IRange; + + screenRangeForBufferRange(bufferRange:{start: IPoint; end: number[]}):IRange; + screenRangeForBufferRange(bufferRange:{start: number[]; end: number[]}):IRange; + screenRangeForBufferRange(bufferRange:{start: {row:number; col:number;}; end: number[]}):IRange; + + screenRangeForBufferRange(bufferRange:{start: IPoint; end: {row:number; col:number;}}):IRange; + screenRangeForBufferRange(bufferRange:{start: number[]; end: {row:number; col:number;}}):IRange; + screenRangeForBufferRange(bufferRange:{start: {row:number; col:number;}; end: {row:number; col:number;}}):IRange; + + bufferRangeForScreenRange(screenRange:IPoint[]):IRange; + + bufferRangeForScreenRange(screenRange:IRange):IRange; + + bufferRangeForScreenRange(screenRange:{start: IPoint; end: IPoint}):IRange; + bufferRangeForScreenRange(screenRange:{start: number[]; end: IPoint}):IRange; + bufferRangeForScreenRange(screenRange:{start: {row:number; col:number;}; end: IPoint}):IRange; + + bufferRangeForScreenRange(screenRange:{start: IPoint; end: number[]}):IRange; + bufferRangeForScreenRange(screenRange:{start: number[]; end: number[]}):IRange; + bufferRangeForScreenRange(screenRange:{start: {row:number; col:number;}; end: number[]}):IRange; + + bufferRangeForScreenRange(screenRange:{start: IPoint; end: {row:number; col:number;}}):IRange; + bufferRangeForScreenRange(screenRange:{start: number[]; end: {row:number; col:number;}}):IRange; + bufferRangeForScreenRange(screenRange:{start: {row:number; col:number;}; end: {row:number; col:number;}}):IRange; + + pixelRangeForScreenRange(screenRange:IPoint[], clip?:boolean):IRange; + + pixelRangeForScreenRange(screenRange:IRange, clip?:boolean):IRange; + + pixelRangeForScreenRange(screenRange:{start: IPoint; end: IPoint}, clip?:boolean):IRange; + pixelRangeForScreenRange(screenRange:{start: number[]; end: IPoint}, clip?:boolean):IRange; + pixelRangeForScreenRange(screenRange:{start: {row:number; col:number;}; end: IPoint}, clip?:boolean):IRange; + + pixelRangeForScreenRange(screenRange:{start: IPoint; end: number[]}, clip?:boolean):IRange; + pixelRangeForScreenRange(screenRange:{start: number[]; end: number[]}, clip?:boolean):IRange; + pixelRangeForScreenRange(screenRange:{start: {row:number; col:number;}; end: number[]}, clip?:boolean):IRange; + + pixelRangeForScreenRange(screenRange:{start: IPoint; end: {row:number; col:number;}}, clip?:boolean):IRange; + pixelRangeForScreenRange(screenRange:{start: number[]; end: {row:number; col:number;}}, clip?:boolean):IRange; + pixelRangeForScreenRange(screenRange:{start: {row:number; col:number;}; end: {row:number; col:number;}}, clip?:boolean):IRange; + + pixelPositionForScreenPosition(screenPosition:IPoint, clip?:boolean):IPoint; + pixelPositionForScreenPosition(screenPosition:number[], clip?:boolean):IPoint; + pixelPositionForScreenPosition(screenPosition:{row:number; col:number;}, clip?:boolean):IPoint; + + screenPositionForPixelPosition(pixelPosition:any):IPoint; + + pixelPositionForBufferPosition(bufferPosition:any):any; + getLineCount():number; + getLastRow():number; + getMaxLineLength():number; + screenPositionForBufferPosition(bufferPosition:any, options:any):any; + bufferPositionForScreenPosition(bufferPosition:any, options:any):any; + scopesForBufferPosition(bufferPosition:any):any; + bufferRangeForScopeAtPosition(selector:any, position:any):any; + tokenForBufferPosition(bufferPosition:any):any; + getGrammar():IGrammar; + setGrammar(grammar:IGrammar):any; + reloadGrammar():any; + clipScreenPosition(screenPosition:any, options:any):any; + findWrapColumn(line:any, softWrapColumn:any):any; + rangeForAllLines():IRange; + getMarker(id:number):IDisplayBufferMarker; + getMarkers():IDisplayBufferMarker[]; + getMarkerCount():number; + markScreenRange(range:IRange, ...args:any[]):IDisplayBufferMarker; + markBufferRange(range:IRange, options?:any):IDisplayBufferMarker; + markScreenPosition(screenPosition:IPoint, options?:any):IDisplayBufferMarker; + markBufferPosition(bufferPosition:IPoint, options?:any):IDisplayBufferMarker; + destroyMarker(id:number):any; + findMarker(params?:any):IDisplayBufferMarker; + findMarkers(params?:any):IDisplayBufferMarker[]; + translateToBufferMarkerParams(params?:any):any; + findFoldMarker(attributes:any):IMarker; + findFoldMarkers(attributes:any):IMarker[]; + getFoldMarkerAttributes(attributes?:any):any; + pauseMarkerObservers():any; + resumeMarkerObservers():any; + refreshMarkerScreenPositions():any; + destroy():any; + logLines(start:number, end:number):any[]; + handleTokenizedBufferChange(tokenizedBufferChange:any):any; + updateScreenLines(startBufferRow:any, endBufferRow:any, bufferDelta?:number, options?:any):any; + buildScreenLines(startBufferRow:any, endBufferRow:any):any; + findMaxLineLength(startScreenRow:any, endScreenRow:any, newScreenLines:any):any; + handleBufferMarkersUpdated():any; + handleBufferMarkerCreated(marker:any):any; + createFoldForMarker(maker:any):IFold; + foldForMarker(marker:any):any; } interface ICursor { @@ -64,8 +257,82 @@ declare module AtomCore { // TBD } - interface ISelection { - // TBD + interface ISelection /* extends Theorist.Model */ { + cursor:ICursor; + marker:IDisplayBufferMarker; + editor:IEditor; + initialScreenRange:any; + wordwise:boolean; + needsAutoscroll:boolean; + retainSelection:boolean; + subscriptionCounts:any; + + destroy():any; + finalize():any; + clearAutoscroll():any; + isEmpty():boolean; + isReversed():boolean; + isSingleScreenLine():boolean; + getScreenRange():IRange; + setScreenRange(screenRange:any, options:any):any; + getBufferRange():IRange; + setBufferRange(bufferRange:any, options:any):any; + getBufferRowRange():number[]; + autoscroll():void; + getText():string; + clear():boolean; + selectWord():IRange; + expandOverWord():any; + selectLine(row?:any):IRange; + expandOverLine():boolean; + selectToScreenPosition(position:any):any; + selectToBufferPosition(position:any):any; + selectRight():boolean; + selectLeft():boolean; + selectUp(rowCount?:any):boolean; + selectDown(rowCount?:any):boolean; + selectToTop():any; + selectToBottom():any; + selectAll():any; + selectToBeginningOfLine():any; + selectToFirstCharacterOfLine():any; + selectToEndOfLine():any; + selectToBeginningOfWord():any; + selectToEndOfWord():any; + selectToBeginningOfNextWord():any; + selectToPreviousWordBoundary():any; + selectToNextWordBoundary():any; + addSelectionBelow():any; + getGoalBufferRange():any; + addSelectionAbove():any[]; + insertText(text:string, options?:any):any; + normalizeIndents(text:string, indentBasis:number):any; + indent(_arg?:any):any; + indentSelectedRows():IRange[]; + setIndentationForLine(line:string, indentLevel:number):any; + backspace():any; + backspaceToBeginningOfWord():any; + backspaceToBeginningOfLine():any; + delete():any; + deleteToEndOfWord():any; + deleteSelectedText():any; + deleteLine():any; + joinLines():any; + outdentSelectedRows():any[]; + autoIndentSelectedRows():any; + toggleLineComments():any; + cutToEndOfLine(maintainClipboard:any):any; + cut(maintainClipboard:any):any; + copy(maintainClipboard:any):any; + fold():any; + modifySelection(fn:()=>any):any; + plantTail():any; + intersectsBufferRange(bufferRange:any):any; + intersectsWith(otherSelection:any):any; + merge(otherSelection:any, options:any):any; + compare(otherSelection:any):any; + getRegionRects():any[]; + screenRangeChanged():any; } interface ISubscription { @@ -108,214 +375,214 @@ declare module AtomCore { getLongTitle():string; setVisible(visible:boolean):void; setScrollTop(scrollTop:any):void; - getScrollTop():any; + getScrollTop():number; setScrollLeft(scrollLeft:any):void; - getScrollLeft():any; + getScrollLeft():number; setEditorWidthInChars(editorWidthInChars:any):void; - getSoftWrapColumn():any; + getSoftWrapColumn():number; getSoftTabs():boolean; setSoftTabs(softTabs:boolean):void; - getSoftWrap():any; + getSoftWrap():boolean; setSoftWrap(softWrap:any):void; - getTabText():any; - getTabLength():any; + getTabText():string; + getTabLength():number; setTabLength(tabLength:any):void; clipBufferPosition(bufferPosition:any):void; clipBufferRange(range:any):void; indentationForBufferRow(bufferRow:any):void; setIndentationForBufferRow(bufferRow:any, newLevel:any, _arg:any):void; indentLevelForLine(line:any):number; - buildIndentString(number:any):any; + buildIndentString(number:any):string; save():void; saveAs(filePath:any):void; - getPath():any; - getText():any; + getPath():string; + getText():string; setText(text:any):void; getTextInRange(range:any):any; - getLineCount():any; - getBuffer():any; - getUri():any; - isBufferRowBlank(bufferRow:any):void; + getLineCount():number; + getBuffer():ITextBuffer; + getUri():string; + isBufferRowBlank(bufferRow:any):boolean; isBufferRowCommented(bufferRow:any):void; nextNonBlankBufferRow(bufferRow:any):void; - getEofBufferPosition():any; - getLastBufferRow():any; - bufferRangeForBufferRow(row:any, options:any):any; - lineForBufferRow(row:any):any; - lineLengthForBufferRow(row:any):any; + getEofBufferPosition():IPoint; + getLastBufferRow():number; + bufferRangeForBufferRow(row:any, options:any):IRange; + lineForBufferRow(row:number):string; + lineLengthForBufferRow(row:number):number; scan():any; scanInBufferRange():any; backwardsScanInBufferRange():any; - isModified():any; - shouldPromptToSave():any; - screenPositionForBufferPosition(bufferPosition:any, options:any):any; - bufferPositionForScreenPosition(screenPosition:any, options:any):any; - screenRangeForBufferRange(bufferRange:any):any; - bufferRangeForScreenRange(screenRange:any):any; - clipScreenPosition(screenPosition:any, options:any):any; - lineForScreenRow(row:any):any; - linesForScreenRows(start:any, end:any):any; - getScreenLineCount():any; - getMaxScreenLineLength():any; - getLastScreenRow():any; - bufferRowsForScreenRows(startRow:any, endRow:any):any; - bufferRowForScreenRow(row:any):any; - scopesForBufferPosition(bufferPosition:any):any; - bufferRangeForScopeAtCursor(selector:any):any; - tokenForBufferPosition(bufferPosition:any):any; - getCursorScopes():any; - insertText(text:any, options:any):any; - insertNewline():any; - insertNewlineBelow():any; + isModified():boolean; + shouldPromptToSave():boolean; + screenPositionForBufferPosition(bufferPosition:any, options?:any):IPoint; + bufferPositionForScreenPosition(screenPosition:any, options?:any):IPoint; + screenRangeForBufferRange(bufferRange:any):IRange; + bufferRangeForScreenRange(screenRange:any):IRange; + clipScreenPosition(screenPosition:any, options:any):IRange; + lineForScreenRow(row:any):ITokenizedLine; + linesForScreenRows(start?:any, end?:any):ITokenizedLine[]; + getScreenLineCount():number; + getMaxScreenLineLength():number; + getLastScreenRow():number; + bufferRowsForScreenRows(startRow:any, endRow:any):any[]; + bufferRowForScreenRow(row:any):number; + scopesForBufferPosition(bufferPosition:any):string[]; + bufferRangeForScopeAtCursor(selector:string):any; + tokenForBufferPosition(bufferPosition:any):IToken; + getCursorScopes():string[]; + insertText(text:string, options?:any):IRange[]; + insertNewline():IRange[]; + insertNewlineBelow():IRange[]; insertNewlineAbove():any; indent(options?:any):any; - backspace():any; - backspaceToBeginningOfWord():any; - backspaceToBeginningOfLine():any; - delete():any; - deleteToEndOfWord():any; - deleteLine():any; - indentSelectedRows():any; - outdentSelectedRows():any; - toggleLineCommentsInSelection():any; - autoIndentSelectedRows():any; + backspace():any[]; + backspaceToBeginningOfWord():any[]; + backspaceToBeginningOfLine():any[]; + delete():any[]; + deleteToEndOfWord():any[]; + deleteLine():IRange[]; + indentSelectedRows():IRange[][]; + outdentSelectedRows():IRange[][]; + toggleLineCommentsInSelection():IRange[]; + autoIndentSelectedRows():IRange[][]; normalizeTabsInBufferRange(bufferRange:any):any; - cutToEndOfLine():any; - cutSelectedText():any; - copySelectedText():any; - pasteText(options?:any):any; - undo():any; - redo():any; + cutToEndOfLine():boolean[]; + cutSelectedText():boolean[]; + copySelectedText():boolean[]; + pasteText(options?:any):IRange[]; + undo():any[]; + redo():any[]; foldCurrentRow():any; - unfoldCurrentRow():any; - foldSelectedLines():any; - foldAll():any; - unfoldAll():any; + unfoldCurrentRow():any[]; + foldSelectedLines():any[]; + foldAll():any[]; + unfoldAll():any[]; foldAllAtIndentLevel(level:any):any; foldBufferRow(bufferRow:any):any; unfoldBufferRow(bufferRow:any):any; - isFoldableAtBufferRow(bufferRow:any):any; - createFold(startRow:any, endRow:any):any; + isFoldableAtBufferRow(bufferRow:any):boolean; + createFold(startRow:any, endRow:any):IFold; destroyFoldWithId(id:any):any; destroyFoldsIntersectingBufferRange(bufferRange:any):any; toggleFoldAtBufferRow(bufferRow:any):any; - isFoldedAtCursorRow():any; - isFoldedAtBufferRow(bufferRow:any):any; - isFoldedAtScreenRow(screenRow:any):any; - largestFoldContainingBufferRow(bufferRow:any):any; + isFoldedAtCursorRow():boolean; + isFoldedAtBufferRow(bufferRow:any):boolean; + isFoldedAtScreenRow(screenRow:any):boolean; + largestFoldContainingBufferRow(bufferRow:any):boolean; largestFoldStartingAtScreenRow(screenRow:any):any; - outermostFoldsInBufferRowRange(startRow:any, endRow:any):any; - moveLineUp():any; - moveLineDown():any; - duplicateLines():any; - duplicateLine():any; - mutateSelectedText(fn:Function):any; - replaceSelectedText(options:any, fn:Function):any; - getMarker(id:any):any; - getMarkers():any; - findMarkers(properties:any):any; - markScreenRange():any; - markBufferRange():any; - markScreenPosition():any; - markBufferPosition():any; - destroyMarker():any; - getMarkerCount():any; - hasMultipleCursors():any; - getCursors():any; - getCursor():any; - addCursorAtScreenPosition(screenPosition:any):any; - addCursorAtBufferPosition(bufferPosition:any):any; - addCursor(marker:any):any; - removeCursor(cursor:any):any; - addSelection(marker:any, options:any):any; - addSelectionForBufferRange(bufferRange:any, options:any):any; + outermostFoldsInBufferRowRange(startRow:any, endRow:any):any[]; + moveLineUp():ISelection[]; + moveLineDown():ISelection[]; + duplicateLines():any[][]; + duplicateLine():any[][]; + mutateSelectedText(fn:(selection:ISelection)=>any):any; + replaceSelectedText(options:any, fn:(selection:string)=>any):any; + getMarker(id:number):IDisplayBufferMarker; + getMarkers():IDisplayBufferMarker[]; + findMarkers(properties:any):IDisplayBufferMarker[]; + markScreenRange(value:number):IDisplayBufferMarker; + markBufferRange(value:number):IDisplayBufferMarker; + markScreenPosition(value:number):IDisplayBufferMarker; + markBufferPosition():IDisplayBufferMarker; + destroyMarker():boolean; + getMarkerCount():number; + hasMultipleCursors():boolean; + getCursors():ICursor[]; + getCursor():ICursor; + addCursorAtScreenPosition(screenPosition:any):ICursor; + addCursorAtBufferPosition(bufferPosition:any):ICursor; + addCursor(marker:any):ICursor; + removeCursor(cursor:any):ICursor[]; + addSelection(marker:any, options:any):ISelection; + addSelectionForBufferRange(bufferRange:any, options:any):ISelection; setSelectedBufferRange(bufferRange:any, options:any):any; setSelectedBufferRanges(bufferRanges:any, options:any):any; - removeSelection(selection:any):any; - clearSelections():any; - consolidateSelections():any; - getSelections():any; - getSelection(index:any):any; - getLastSelection():any; - getSelectionsOrderedByBufferPosition():any; - getLastSelectionInBuffer():any; + removeSelection(selection:ISelection):any; + clearSelections():boolean; + consolidateSelections():boolean; + getSelections():ISelection[]; + getSelection(index?:number):ISelection; + getLastSelection():ISelection; + getSelectionsOrderedByBufferPosition():ISelection[]; + getLastSelectionInBuffer():ISelection; selectionIntersectsBufferRange(bufferRange:any):any; setCursorScreenPosition(position:any, options:any):any; - getCursorScreenPosition():any; - getCursorScreenRow():any; + getCursorScreenPosition():IPoint; + getCursorScreenRow():number; setCursorBufferPosition(position:any, options:any):any; - getCursorBufferPosition():any; - getSelectedScreenRange():any; - getSelectedBufferRange():any; - getSelectedBufferRanges():any; - getSelectedText():any; - getTextInBufferRange(range:any):any; - setTextInBufferRange(range:any, text:any):any; - getCurrentParagraphBufferRange():any; - getWordUnderCursor(options:any):any; - moveCursorUp(lineCount:any):any; - moveCursorDown(lineCount:any):any; - moveCursorLeft():any; - moveCursorRight():any; - moveCursorToTop():any; - moveCursorToBottom():any; - moveCursorToBeginningOfScreenLine():any; - moveCursorToBeginningOfLine():any; - moveCursorToFirstCharacterOfLine():any; - moveCursorToEndOfScreenLine():any; - moveCursorToEndOfLine():any; - moveCursorToBeginningOfWord():any; - moveCursorToEndOfWord():any; - moveCursorToBeginningOfNextWord():any; - moveCursorToPreviousWordBoundary():any; - moveCursorToNextWordBoundary():any; - moveCursors(fn:Function):any; - selectToScreenPosition(position:any):any; - selectRight():any; - selectLeft():any; - selectUp(rowCount:any):any; - selectDown(rowCount:any):any; - selectToTop():any; - selectAll():any; - selectToBottom():any; - selectToBeginningOfLine():any; - selectToFirstCharacterOfLine():any; - selectToEndOfLine():any; - selectToPreviousWordBoundary():any; - selectToNextWordBoundary():any; - selectLine():any; - addSelectionBelow():any; - addSelectionAbove():any; - splitSelectionsIntoLines():any; - transpose():any; - upperCase():any; - lowerCase():any; - joinLines():any; - selectToBeginningOfWord():any; - selectToEndOfWord():any; - selectToBeginningOfNextWord():any; - selectWord():any; + getCursorBufferPosition():IPoint; + getSelectedScreenRange():IRange; + getSelectedBufferRange():IRange; + getSelectedBufferRanges():IRange[]; + getSelectedText():string; + getTextInBufferRange(range:IRange):string; + setTextInBufferRange(range:IRange, text:string):any; + getCurrentParagraphBufferRange():IRange; + getWordUnderCursor(options?:any):string; + moveCursorUp(lineCount?:number):void; + moveCursorDown(lineCount?:number):void; + moveCursorLeft():void; + moveCursorRight():void; + moveCursorToTop():void; + moveCursorToBottom():void; + moveCursorToBeginningOfScreenLine():void; + moveCursorToBeginningOfLine():void; + moveCursorToFirstCharacterOfLine():void; + moveCursorToEndOfScreenLine():void; + moveCursorToEndOfLine():void; + moveCursorToBeginningOfWord():void; + moveCursorToEndOfWord():void; + moveCursorToBeginningOfNextWord():void; + moveCursorToPreviousWordBoundary():void; + moveCursorToNextWordBoundary():void; + moveCursors(fn:(cursor:ICursor)=>any):any; + selectToScreenPosition(position:IPoint):any; + selectRight():ISelection[]; + selectLeft():ISelection[]; + selectUp(rowCount?:number):ISelection[]; + selectDown(rowCount?:number):ISelection[]; + selectToTop():ISelection[]; + selectAll():ISelection[]; + selectToBottom():ISelection[]; + selectToBeginningOfLine():ISelection[]; + selectToFirstCharacterOfLine():ISelection[]; + selectToEndOfLine():ISelection[]; + selectToPreviousWordBoundary():ISelection[]; + selectToNextWordBoundary():ISelection[]; + selectLine():ISelection[]; + addSelectionBelow():ISelection[]; + addSelectionAbove():ISelection[]; + splitSelectionsIntoLines():any[]; + transpose():IRange[]; + upperCase():boolean[]; + lowerCase():boolean[]; + joinLines():any[]; + selectToBeginningOfWord():ISelection[]; + selectToEndOfWord():ISelection[]; + selectToBeginningOfNextWord():ISelection[]; + selectWord():ISelection[]; selectMarker(marker:any):any; - mergeCursors():any; + mergeCursors():number[]; expandSelectionsForward():any; - expandSelectionsBackward(fn:Function):any; - finalizeSelections():any; + expandSelectionsBackward(fn:(selection:ISelection)=>any):ISelection[]; + finalizeSelections():boolean[]; mergeIntersectingSelections():any; - preserveCursorPositionOnBufferReload():any; + preserveCursorPositionOnBufferReload():ISubscription; getGrammar(): IGrammar; setGrammar(grammer:IGrammar):void; reloadGrammar():any; - shouldAutoIndent():any; + shouldAutoIndent():boolean; transact(fn:Function):any; - beginTransaction():any; + beginTransaction():ITransaction; commitTransaction():any; - abortTransaction():any; - inspect():any; - logScreenLines(start:any, end:any):any; - handleGrammarChange():any; + abortTransaction():any[]; + inspect():string; + logScreenLines(start:number, end:number):any[]; + handleGrammarChange():void; handleMarkerCreated(marker:any):any; - getSelectionMarkerAttributes():any; - joinLine():any; + getSelectionMarkerAttributes():{type: string; editorId: number; invalidate: string; }; + // joinLine():any; // deprecated } interface IGrammar { @@ -671,18 +938,244 @@ declare module AtomCore { } interface IPointStatic { - new(row:any, column:any):IPoint; + new (row?:number, column?:number):IPoint; + + fromObject(point:IPoint, copy?:boolean):IPoint; + fromObject(object:number[]):IPoint; + fromObject(object:{row:number; col:number;}):IPoint; + + min(point1:IPoint, point2:IPoint):IPoint; + min(point1:number[], point2:IPoint):IPoint; + min(point1:{row:number; col:number;}, point2:IPoint):IPoint; + + min(point1:IPoint, point2:number[]):IPoint; + min(point1:number[], point2:number[]):IPoint; + min(point1:{row:number; col:number;}, point2:number[]):IPoint; + + min(point1:IPoint, point2:{row:number; col:number;}):IPoint; + min(point1:number[], point2:{row:number; col:number;}):IPoint; + min(point1:{row:number; col:number;}, point2:{row:number; col:number;}):IPoint; } interface IPoint { - // TBD + constructor: IPointStatic; + + row:number; + column:number; + + copy():IPoint; + freeze():IPoint; + + translate(delta:IPoint):IPoint; + translate(delta:number[]):IPoint; + translate(delta:{row:number; col:number;}):IPoint; + + add(other:IPoint):IPoint; + add(other:number[]):IPoint; + add(other:{row:number; col:number;}):IPoint; + + splitAt(column:number):IPoint[]; + compare(other:IPoint):number; + isEqual(other:IPoint):boolean; + isLessThan(other:IPoint):boolean; + isLessThanOrEqual(other:IPoint):boolean; + isGreaterThan(other:IPoint):boolean; + isGreaterThanOrEqual(other:IPoint):boolean; + toArray():number[]; + serialize():number[]; } interface IRangeStatic { - new(pointA:IPoint, pointB:IPoint):IRange; + deserialize(array:IPoint[]):IRange; + + fromObject(object:IPoint[]):IRange; + + fromObject(object:IRange, copy?:boolean):IRange; + + fromObject(object:{start: IPoint; end: IPoint}):IRange; + fromObject(object:{start: number[]; end: IPoint}):IRange; + fromObject(object:{start: {row:number; col:number;}; end: IPoint}):IRange; + + fromObject(object:{start: IPoint; end: number[]}):IRange; + fromObject(object:{start: number[]; end: number[]}):IRange; + fromObject(object:{start: {row:number; col:number;}; end: number[]}):IRange; + + fromObject(object:{start: IPoint; end: {row:number; col:number;}}):IRange; + fromObject(object:{start: number[]; end: {row:number; col:number;}}):IRange; + fromObject(object:{start: {row:number; col:number;}; end: {row:number; col:number;}}):IRange; + + fromText(point:IPoint, text:string):IRange; + fromText(point:number[], text:string):IRange; + fromText(point:{row:number; col:number;}, text:string):IRange; + fromText(text:string):IRange; + + fromPointWithDelta(startPoint:IPoint, rowDelta:number, columnDelta:number):IRange; + fromPointWithDelta(startPoint:number[], rowDelta:number, columnDelta:number):IRange; + fromPointWithDelta(startPoint:{row:number; col:number;}, rowDelta:number, columnDelta:number):IRange; + + new(point1:IPoint, point2:IPoint):IRange; + new(point1:number[], point2:IPoint):IRange; + new(point1:{row:number; col:number;}, point2:IPoint):IRange; + + new(point1:IPoint, point2:number[]):IRange; + new(point1:number[], point2:number[]):IRange; + new(point1:{row:number; col:number;}, point2:number[]):IRange; + + new(point1:IPoint, point2:{row:number; col:number;}):IRange; + new(point1:number[], point2:{row:number; col:number;}):IRange; + new(point1:{row:number; col:number;}, point2:{row:number; col:number;}):IRange; } interface IRange { + constructor:IRangeStatic; + + start: IPoint; + end: IPoint; + + serialize():number[][]; + copy():IRange; + freeze():IRange; + isEqual(other:IRange):boolean; + isEqual(other:IPoint[]):boolean; + + compare(object:IPoint[]):number; + + compare(object:{start: IPoint; end: IPoint}):number; + compare(object:{start: number[]; end: IPoint}):number; + compare(object:{start: {row:number; col:number;}; end: IPoint}):number; + + compare(object:{start: IPoint; end: number[]}):number; + compare(object:{start: number[]; end: number[]}):number; + compare(object:{start: {row:number; col:number;}; end: number[]}):number; + + compare(object:{start: IPoint; end: {row:number; col:number;}}):number; + compare(object:{start: number[]; end: {row:number; col:number;}}):number; + compare(object:{start: {row:number; col:number;}; end: {row:number; col:number;}}):number; + + isSingleLine():boolean; + coversSameRows(other:IRange):boolean; + + add(object:IPoint[]):IRange; + + add(object:{start: IPoint; end: IPoint}):IRange; + add(object:{start: number[]; end: IPoint}):IRange; + add(object:{start: {row:number; col:number;}; end: IPoint}):IRange; + + add(object:{start: IPoint; end: number[]}):IRange; + add(object:{start: number[]; end: number[]}):IRange; + add(object:{start: {row:number; col:number;}; end: number[]}):IRange; + + add(object:{start: IPoint; end: {row:number; col:number;}}):IRange; + add(object:{start: number[]; end: {row:number; col:number;}}):IRange; + add(object:{start: {row:number; col:number;}; end: {row:number; col:number;}}):IRange; + + translate(startPoint:IPoint, endPoint:IPoint):IRange; + translate(startPoint:IPoint):IRange; + + intersectsWith(otherRange:IRange):boolean; + containsRange(otherRange:IRange, exclusive:boolean):boolean; + + containsPoint(point:IPoint, exclusive:boolean):boolean; + containsPoint(point:number[], exclusive:boolean):boolean; + containsPoint(point:{row:number; col:number;}, exclusive:boolean):boolean; + + intersectsRow(row:number):boolean; + intersectsRowRange(startRow:number, endRow:number):boolean; + union(otherRange:IRange):IRange; + isEmpty():boolean; + toDelta():IPoint; + getRowCount():number; + getRows():number[]; + } + + interface ITokenizedBuffer { + // TBD + } + + interface ITokenizedLine { + // TBD + } + + interface IToken { + // TBD + } + + interface IFoldStatic { + new (displayBuffer:IDisplayBuffer, marker:IMarker):IFold; + // TBD + } + + interface IFold { + id:number; + displayBuffer:IDisplayBuffer; + marker:IMarker; + + // TBD + } + + interface IDisplayBufferMarkerStatic { + new (_arg:{bufferMarker:IMarker; displayBuffer: IDisplayBuffer}):IDisplayBufferMarker; + } + + interface IDisplayBufferMarker extends Emissary.IEmitter, Emissary.ISubscriber { + constructor:IDisplayBufferMarkerStatic; + + id: number; + + bufferMarkerSubscription:any; + oldHeadBufferPosition:IPoint; + oldHeadScreenPosition:IPoint; + oldTailBufferPosition:IPoint; + oldTailScreenPosition:IPoint; + wasValid:boolean; + + bufferMarker: IMarker; + displayBuffer: IDisplayBuffer; + globalPauseCount:number; + globalQueuedEvents:any; + + subscriptions:ISubscription[]; + subscriptionsByObject:any; // WeakMap + + copy(attributes?:any /* maybe IMarker */):IDisplayBufferMarker; + getScreenRange():IRange; + setScreenRange(screenRange:any, options:any):any; + getBufferRange():IRange; + setBufferRange(bufferRange:any, options:any):any; + getPixelRange():any; + getHeadScreenPosition():IPoint; + setHeadScreenPosition(screenPosition:any, options:any):any; + getHeadBufferPosition():IPoint; + setHeadBufferPosition(bufferPosition:any):any; + getTailScreenPosition():IPoint; + setTailScreenPosition(screenPosition:any, options:any):any; + getTailBufferPosition():IPoint; + setTailBufferPosition(bufferPosition:any):any; + plantTail():boolean; + clearTail():boolean; + hasTail():boolean; + isReversed():boolean; + isValid():boolean; + isDestroyed():boolean; + getAttributes():any; + setAttributes(attributes:any):any; + matchesAttributes(attributes:any):any; + destroy():any; + isEqual(other:IDisplayBufferMarker):boolean; + compare(other:IDisplayBufferMarker):boolean; + inspect():string; + destroyed():any; + notifyObservers(_arg:any):any; + } + + interface ITransaction { + // TBD + } + + interface IMarker extends Emissary.IEmitter { + // Serializable.includeInto(Editor); + // Delegator.includeInto(Editor); + // TBD } @@ -705,7 +1198,6 @@ declare module "atom" { var BufferedNodeProcess:AtomCore.IBufferedNodeProcessStatic; var BufferedProcess:AtomCore.IBufferedProcessStatic; - var EditorView:any; var Git:AtomCore.IGitStatic; var Point:AtomCore.IPointStatic; var Range:AtomCore.IRangeStatic; @@ -725,12 +1217,304 @@ declare module "atom" { unsubscribe(object?:any):any; } + class EditorView extends View { + static characterWidthCache:any; + static configDefaults:any; + static nextEditorId:number; + + static content(params:any):void; + + static classes(_arg?:{mini?:any}):string; + + vScrollMargin:number; + hScrollMargin:number; + lineHeight:any; + charWidth:any; + charHeight:any; + cursorViews:any[]; + selectionViews:any[]; + lineCache:any[]; + isFocused:any; + editor:AtomCore.IEditor; + attached:any; + lineOverdraw:number; + pendingChanges:any[]; + newCursors:any[]; + newSelections:any[]; + redrawOnReattach:any; + bottomPaddingInLines:number; + + id:number; + + + initialize(editorOrOptions:AtomCore.IEditor):void; // return type are same as editor method. + initialize(editorOrOptions?:{editor: AtomCore.IEditor; mini:any; placeholderText:any}):void; + + initialize(editorOrOptions:{}):void; // compatible for spacePen.View + + bindKeys():void; + + getEditor():AtomCore.IEditor; + + getText():string; + + setText(text:string):void; + + insertText(text:string, options?:any):AtomCore.IRange[]; + + setHeightInLines(heightInLines:number):number; + + setWidthInChars(widthInChars:number):number; + + pageDown():void; + + pageUp():void; + + getPageRows():number; + + setShowInvisibles(showInvisibles:boolean):void; + + setInvisibles(invisibles:{ eol:string; space: string; tab: string; cr: string; }):void; + + setShowIndentGuide(showIndentGuide:boolean):void; + + setPlaceholderText(placeholderText:string):void; + + getPlaceholderText():string; + + checkoutHead():boolean; + + configure():AtomCore.ISubscription; + + handleEvents():void; + + handleInputEvents():void; + + bringHiddenInputIntoView():JQuery; + + selectOnMousemoveUntilMouseup():any; + + afterAttach(onDom:any):any; + + edit(editor:AtomCore.IEditor):any; + + getModel():AtomCore.IEditor; + + setModel(editor:AtomCore.IEditor):any; + + showBufferConflictAlert(editor:AtomCore.IEditor):any; + + scrollTop(scrollTop:number, options?:any):any; + + scrollBottom(scrollBottom?:number):any; + + scrollLeft(scrollLeft?:number):number; + + scrollRight(scrollRight?:number):any; + + scrollToBottom():any; + + scrollToCursorPosition():any; + + scrollToBufferPosition(bufferPosition:any, options:any):any; + + scrollToScreenPosition(screenPosition:any, options:any):any; + + scrollToPixelPosition(pixelPosition:any, options:any):any; + + highlightFoldsContainingBufferRange(bufferRange:any):any; + + saveScrollPositionForEditor():any; + + toggleSoftTabs():any; + + toggleSoftWrap():any; + + calculateWidthInChars():number; + + calculateHeightInLines():number; + + getScrollbarWidth():number; + + setSoftWrap(softWrap:boolean):any; + + setFontSize(fontSize:number):any; + + getFontSize():number; + + setFontFamily(fontFamily?:string):any; + + getFontFamily():string; + + setLineHeight(lineHeight:number):any; + + redraw():any; + + splitLeft():any; + + splitRight():any; + + splitUp():any; + + splitDown():any; + + getPane():any; // return type are PaneView + + remove(selector:any, keepData:any):any; + + beforeRemove():any; + + getCursorView(index?:number):any; // return type are CursorView + + getCursorViews():any[]; // return type are CursorView[] + + addCursorView(cursor:any, options:any):any; // return type are CursorView + + removeCursorView(cursorView:any):any; + + getSelectionView(index?:number):any; // return type are SelectionView + + getSelectionViews():any[]; // return type are SelectionView[] + + addSelectionView(selection:any):any; + + removeSelectionView(selectionView:any):any; + + removeAllCursorAndSelectionViews():any[]; + + appendToLinesView(view:any):any; + + scrollVertically(pixelPosition:any, _arg:any):any; + + scrollHorizontally(pixelPosition:any):any; + + calculateDimensions():number; + + recalculateDimensions():any; + + updateLayerDimensions():any; + + isHidden():boolean; + + clearRenderedLines():void; + + resetDisplay():any; + + requestDisplayUpdate():any; + + updateDisplay(options?:any):any; + + updateCursorViews():any; + + shouldUpdateCursor(cursorView:any):any; + + updateSelectionViews():any[]; + + shouldUpdateSelection(selectionView:any):any; + + syncCursorAnimations():any[]; + + autoscroll(suppressAutoscroll?:any):any[]; + + updatePlaceholderText():any; + + updateRenderedLines(scrollViewWidth:any):any; + + computeSurroundingEmptyLineChanges(change:any):any; + + computeIntactRanges(renderFrom:any, renderTo:any):any; + + truncateIntactRanges(intactRanges:any, renderFrom:any, renderTo:any):any; + + clearDirtyRanges(intactRanges:any):any; + + clearLine(lineElement:any):any; + + fillDirtyRanges(intactRanges:any, renderFrom:any, renderTo:any):any; + + updatePaddingOfRenderedLines():any; + + getFirstVisibleScreenRow():number; + + getLastVisibleScreenRow():number; + + isScreenRowVisible():boolean; + + handleScreenLinesChange(change:any):any; + + buildLineElementForScreenRow(screenRow:any):any; + + buildLineElementsForScreenRows(startRow:any, endRow:any):any; + + htmlForScreenRows(startRow:any, endRow:any):any; + + htmlForScreenLine(screenLine:any, screenRow:any):any; + + buildIndentation(screenRow:any, editor:any):any; + + buildHtmlEndOfLineInvisibles(screenLine:any):any; + + getEndOfLineInvisibles(screenLine:any):any; + + lineElementForScreenRow(screenRow:any):any; + + toggleLineCommentsInSelection():any; + + pixelPositionForBufferPosition(position:any):any; + + pixelPositionForScreenPosition(position:any):any; + + positionLeftForLineAndColumn(lineElement:any, screenRow:any, screenColumn:any):any; + + measureToColumn(lineElement:any, tokenizedLine:any, screenColumn:any):any; + + getCharacterWidthCache(scopes:any, char:any):any; + + setCharacterWidthCache(scopes:any, char:any, val:any):any; + + clearCharacterWidthCache():any; + + pixelOffsetForScreenPosition(position:any):any; + + screenPositionFromMouseEvent(e:any):any; + + highlightCursorLine():any; + + copyPathToClipboard():any; + + buildLineHtml(_arg:any):any; + + updateScopeStack(line:any, scopeStack:any, desiredScopes:any):any; + + pushScope(line:any, scopeStack:any, scope:any):any; + + popScope(line:any, scopeStack:any):any; + + buildEmptyLineHtml(showIndentGuide:any, eolInvisibles:any, htmlEolInvisibles:any, indentation:any, editor:any, mini:any):any; + + replaceSelectedText(replaceFn:(str:string)=>string):any; + + consolidateSelections(e:any):any; + + logCursorScope():any; + + logScreenLines(start:any, end:any):any; + + logRenderedLines():any; + } + class ScrollView extends View { // TBD } - var SelectListView:any; + class SelectListView extends View { + // TBD + } + + class WorkspaceView extends View { + // TBD + } + var Task:AtomCore.ITaskStatic; var Workspace:AtomCore.IWorkspaceStatic; - var WorkspaceView:any; // WorkspaceView extends View } diff --git a/chai-datetime/chai-datetime-tests.ts b/chai-datetime/chai-datetime-tests.ts new file mode 100644 index 0000000000..0b7ff729ff --- /dev/null +++ b/chai-datetime/chai-datetime-tests.ts @@ -0,0 +1,47 @@ +/// +/// +/// + +var expect = chai.expect; + +function test_equalTime(){ + var date: Date = new Date(2014, 1, 1); + expect(date).to.be.equalTime(date); + date.should.be.equalTime(date); + assert.equalTime(date, date); +} + +function test_beforeTime(){ + var date: Date = new Date(2014, 1, 1); + expect(date).to.be.beforeTime(date); + date.should.be.beforeTime(date); + assert.beforeTime(date, date); +} + +function test_afterTime(){ + var date: Date = new Date(2014, 1, 1); + expect(date).to.be.afterTime(date); + date.should.be.afterTime(date); + assert.afterTime(date, date); +} + +function test_equalDate(){ + var date: Date = new Date(2014, 1, 1); + expect(date).to.equalDate(date); + date.should.equalDate(date); + assert.equalDate(date, date); +} + +function test_beforeDate(){ + var date: Date = new Date(2014, 1, 1); + expect(date).to.beforeDate(date); + date.should.beforeDate(date); + assert.beforeDate(date, date); +} + +function test_afterDate(){ + var date: Date = new Date(2014, 1, 1); + expect(date).to.afterDate(date); + date.should.afterDate(date); + assert.afterDate(date, date); +} \ No newline at end of file diff --git a/chai-datetime/chai-datetime.d.ts b/chai-datetime/chai-datetime.d.ts new file mode 100644 index 0000000000..263034361f --- /dev/null +++ b/chai-datetime/chai-datetime.d.ts @@ -0,0 +1,39 @@ +// Type definitions for chai-datetime +// Project: https://github.com/gaslight/chai-datetime.git +// Definitions by: Cliff Burger +// DefinitelyTyped: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module chai { + + interface Expect { + afterDate(date: Date): boolean; + beforeDate(date: Date): boolean; + equalDate(date: Date): boolean; + + afterTime(date: Date): boolean; + beforeTime(date: Date): boolean; + equalTime(date: Date): boolean; + } + + interface Assert { + equalTime(val: Date, exp: Date, msg?: string): boolean; + notEqualTime(val: Date, exp: Date, msg?: string): boolean; + beforeTime(val: Date, exp: Date, msg?: string): boolean; + notBeforeTime(val: Date, exp: Date, msg?: string): boolean; + afterTime(val: Date, exp: Date, msg?: string): boolean; + notAfterTime(val: Date, exp: Date, msg?: string): boolean; + + equalDate(val: Date, exp: Date, msg?: string): boolean; + notEqualDate(val: Date, exp: Date, msg?: string): boolean; + beforeDate(val: Date, exp: Date, msg?: string): boolean; + notBeforeDate(val: Date, exp: Date, msg?: string): boolean; + afterDate(val: Date, exp: Date, msg?: string): boolean; + notAfterDate(val: Date, exp: Date, msg?: string): boolean; + } +} + +interface Date { + should: chai.Expect; +} diff --git a/chai/chai.d.ts b/chai/chai.d.ts index 7318744012..d840aba964 100644 --- a/chai/chai.d.ts +++ b/chai/chai.d.ts @@ -9,28 +9,28 @@ declare module chai { function expect(target: any, message?: string): Expect; // Provides a way to extend the internals of Chai - function use(fn: (chai: any, utils: any) => void); + function use(fn: (chai: any, utils: any) => void): any; interface ExpectStatic { (target: any): Expect; } interface Assertions { - attr(name, value?); - css(name, value?); - data(name, value?); - class(className); - id(id); - html(html); - text(text); - value(value); - visible; - hidden; - selected; - checked; - disabled; - empty; - exist; + attr(name: string, value?: string): any; + css(name: string, value?: string): any; + data(name: string, value?: string): any; + class(className: string): any; + id(id: string): any; + html(html: string): any; + text(text: string): any; + value(value: string): any; + visible: any; + hidden: any; + selected: any; + checked: any; + disabled: any; + empty: any; + exist: any; } interface Expect extends LanguageChains, NumericComparison, TypeComparison, Assertions { diff --git a/esprima/esprima-tests.ts b/esprima/esprima-tests.ts new file mode 100644 index 0000000000..9451e077d2 --- /dev/null +++ b/esprima/esprima-tests.ts @@ -0,0 +1,163 @@ +/// + +import esprima = require('esprima'); +import Syntax = esprima.Syntax; + +var token: esprima.Token; +var options: esprima.Options; +var comment: Syntax.Comment; +var program: Syntax.Program; +var statement: Syntax.SomeStatement; +var blockStatement: Syntax.BlockStatement; +var expression: Syntax.SomeExpression; +var property: Syntax.Property; +var identifier: Syntax.Identifier; +var literal: Syntax.Literal; +var switchCase: Syntax.SwitchCase; +var catchClause: Syntax.CatchClause; +var variableDeclaratorOrExpression: Syntax.VariableDeclaratorOrExpression; +var literalOrIdentifier: Syntax.LiteralOrIdentifier; +var blockStatementOrExpression: Syntax.BlockStatementOrExpression; +var identifierOrExpression: Syntax.IdentifierOrExpression; +var any: any; +var string: string; +var boolean: boolean; +var number: number; + +// esprima +string = esprima.version; +program = esprima.parse('code'); +program = esprima.parse('code', {range: true}); +token = esprima.tokenize('code')[0]; +token = esprima.tokenize('code', {range: true})[0]; + +// Token +string = token.type; +string = token.value; + +// Program +string = program.type; +statement = program.body[0]; +comment = program.comments[0] + +// Location +number = program.loc.start.line; +number = program.loc.start.column; +number = program.loc.end.line; +number = program.loc.end.column; +number = program.range[0]; + +// Comment +string = comment.value; + +// Statement +// BlockStatement +string = statement.type; +statement = statement.body[0]; +comment = statement.leadingComments[0] +comment = statement.trailingComments[0] + +// ExpressionStatement +expression = statement.expression; + +// IfStatement +expression = statement.test; +statement = statement.consequent; +statement = statement.alternate; + +// LabeledStatement +identifier = statement.label; +statement = statement.body; + +// WithStatement +expression = statement.object; + +// SwitchStatement +expression = statement.discriminant; +switchCase = statement.cases[0]; +boolean = statement.lexical; + +// ReturnStatement +expression = statement.argument; + +// TryStatement +blockStatement = statement.block; +catchClause = statement.handler; +catchClause = statement.guardedHandlers[0]; +blockStatement = statement.finalizer; + +// ForStatement +variableDeclaratorOrExpression = statement.init; +expression = statement.update; + +// ForInStatement +variableDeclaratorOrExpression = statement.left; +expression = statement.right; +boolean = statement.each; + +// Expression +// ArrayExpression +string = expression.type; +expression = expression.elements[0]; + +// ObjectExpression +property = expression.properties[0]; +string = property.type; +literalOrIdentifier = property.key; +expression = property.value; +string = property.kind; + +// FunctionExpression +identifier = expression.id; +identifier = expression.params[0]; +expression = expression.defaults[0]; +identifier = expression.rest; +blockStatementOrExpression = expression.body; +boolean = expression.generator; +boolean = expression.expression; + +// SequenceExpression +expression = expression.expressions[0] + +// UnaryExpression +string = expression.operator; +boolean = expression.prefix; + +// BinaryExpression +expression = expression.left; +expression = expression.right; + +// ConditionalExpression +expression = expression.test; +expression = expression.alternate; +expression = expression.consequent; + +// ConditionalExpression +expression = expression.callee; +expression = expression.arguments[0]; + +// MemberExpression +expression = expression.object; +identifierOrExpression = expression.property; +boolean = expression.computed; + +// Clauses +// SwitchCase +string = switchCase.type; +expression = switchCase.test; +statement = switchCase.consequent[0]; + +// CatchClause +string = catchClause.type; +identifier = catchClause.param; +expression = catchClause.guard; +blockStatement = catchClause.body; + +// Misc +// Identifier +string = identifier.type; +string = identifier.name; + +// Literal +string = literal.type; +any = literal.value; diff --git a/esprima/esprima.d.ts b/esprima/esprima.d.ts new file mode 100644 index 0000000000..1e603ee255 --- /dev/null +++ b/esprima/esprima.d.ts @@ -0,0 +1,276 @@ +// Type definitions for Esprima v1.2.0 +// Project: http://esprima.org +// Definitions by: teppeis +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module esprima { + var version: string; + function parse(code: string, options?: Options): Syntax.Program; + function tokenize(code: string, options?: Options): Array; + + interface Token { + type: string + value: string + } + + interface Options { + loc?: boolean + range?: boolean + raw?: boolean + tokens?: boolean + comment?: boolean + attachComment?: boolean + tolerant?: boolean + source?: boolean + } + + module Syntax { + // Node + interface Node { + type: string + loc?: LineLocation + range?: number[] + leadingComments?: Comment[] + trailingComments?: Comment[] + } + interface LineLocation { + start: Position + end: Position + } + interface Position { + line: number + column: number + } + + // Comment + interface Comment extends Node { + value: string + } + + // Program + interface Program extends Node { + body: SomeStatement[] + comments?: Comment[] + } + + // Function + interface Function extends Node { + id: Identifier // | null + params: Identifier[] + defaults: SomeExpression[] + rest: Identifier // | null + body: BlockStatementOrExpression + generator: boolean + expression: boolean + } + interface BlockStatementOrExpression extends Array, BlockStatement, SomeExpression { + body: BlockStatementOrExpression + } + + // Statement + interface Statement extends Node { + } + interface EmptyStatement extends Statement { + } + interface BlockStatement extends Statement { + body: SomeStatement[] + } + interface ExpressionStatement extends Statement { + expression: SomeExpression + } + interface IfStatement extends Statement { + test: SomeExpression + consequent: SomeStatement + alternate: SomeStatement + } + interface LabeledStatement extends Statement { + label: Identifier + body: SomeStatement + } + interface BreakStatement extends Statement { + label: Identifier // | null + } + interface ContinueStatement extends Statement { + label: Identifier // | null + } + interface WithStatement extends Statement { + object: SomeExpression + body: SomeStatement + } + interface SwitchStatement extends Statement { + discriminant: SomeExpression + cases: SwitchCase[] + lexical: boolean + } + interface ReturnStatement extends Statement { + argument: SomeExpression // | null + } + interface ThrowStatement extends Statement { + argument: SomeExpression + } + interface TryStatement extends Statement { + block: BlockStatement + handler: CatchClause // | null + guardedHandlers: CatchClause[] + finalizer: BlockStatement // | null + } + interface WhileStatement extends Statement { + test: SomeExpression + body: SomeStatement + } + interface DoWhileStatement extends Statement { + body: SomeStatement + test: SomeExpression + } + interface ForStatement extends Statement { + init: VariableDeclaratorOrExpression // | null + test: SomeExpression // | null + update: SomeExpression // | null + body: SomeStatement + } + interface ForInStatement extends Statement { + left: VariableDeclaratorOrExpression + right: SomeExpression + body: SomeStatement + each: boolean + } + interface VariableDeclaratorOrExpression extends VariableDeclarator, SomeExpression { + } + interface DebuggerStatement extends Statement { + } + interface SomeStatement extends + EmptyStatement, ExpressionStatement, BlockStatement, IfStatement, + LabeledStatement, BreakStatement, ContinueStatement, WithStatement, + SwitchStatement, ReturnStatement, ThrowStatement, TryStatement, + WhileStatement, DoWhileStatement, ForStatement, ForInStatement, DebuggerStatement { + body: SomeStatementOrList + } + interface SomeStatementOrList extends Array, SomeStatement { + } + + // Declration + interface Declration extends Statement { + } + interface FunctionDeclration extends Declration { + id: Identifier + params: Identifier[] // Pattern + defaults: SomeExpression[] + rest: Identifier + body: BlockStatementOrExpression + generator: boolean + expression: boolean + } + interface VariableDeclaration extends Declration { + declarations: VariableDeclarator[] + kind: string // "var" | "let" | "const" + } + interface VariableDeclarator extends Node { + id: Identifier // Pattern + init: SomeExpression + } + + // Expression + interface Expression extends Node { // | Pattern + } + interface SomeExpression extends + ThisExpression, ArrayExpression, ObjectExpression, FunctionExpression, + ArrowFunctionExpression, SequenceExpression, UnaryExpression, BinaryExpression, + AssignmentExpression, UpdateExpression, LogicalExpression, ConditionalExpression, + NewExpression, CallExpression, MemberExpression { + } + interface ThisExpression extends Expression { + } + interface ArrayExpression extends Expression { + elements: SomeExpression[] // [ Expression | null ] + } + interface ObjectExpression extends Expression { + properties: Property[] + } + interface Property extends Node { + key: LiteralOrIdentifier // Literal | Identifier + value: SomeExpression + kind: string // "init" | "get" | "set" + } + interface LiteralOrIdentifier extends Literal, Identifier { + } + interface FunctionExpression extends Function, Expression { + } + interface ArrowFunctionExpression extends Function, Expression { + } + interface SequenceExpression extends Expression { + expressions: SomeExpression[] + } + interface UnaryExpression extends Expression { + operator: string // UnaryOperator + prefix: boolean + argument: SomeExpression + } + interface BinaryExpression extends Expression { + operator: string // BinaryOperator + left: SomeExpression + right: SomeExpression + } + interface AssignmentExpression extends Expression { + operator: string // AssignmentOperator + left: SomeExpression + right: SomeExpression + } + interface UpdateExpression extends Expression { + operator: string // UpdateOperator + argument: SomeExpression + prefix: boolean + } + interface LogicalExpression extends Expression { + operator: string // LogicalOperator + left: SomeExpression + right: SomeExpression + } + interface ConditionalExpression extends Expression { + test: SomeExpression + alternate: SomeExpression + consequent: SomeExpression + } + interface NewExpression extends Expression { + callee: SomeExpression + arguments: SomeExpression[] + } + interface CallExpression extends Expression { + callee: SomeExpression + arguments: SomeExpression[] + } + interface MemberExpression extends Expression { + object: SomeExpression + property: IdentifierOrExpression // Identifier | Expression + computed: boolean + } + interface IdentifierOrExpression extends Identifier, SomeExpression { + } + + // Pattern + // interface Pattern extends Node { + // } + + // Clauses + interface SwitchCase extends Node { + test: SomeExpression + consequent: SomeStatement[] + } + interface CatchClause extends Node { + param: Identifier // Pattern + guard: SomeExpression + body: BlockStatement + } + + // Misc + interface Identifier extends Node, Expression { // | Pattern + name: string + } + interface Literal extends Node, Expression { + value: any // string | boolean | null | number | RegExp + } + } +} + +declare module "esprima" { + export = esprima +} diff --git a/express/express.d.ts b/express/express.d.ts index 562dbf3013..eafc4c5966 100644 --- a/express/express.d.ts +++ b/express/express.d.ts @@ -240,7 +240,7 @@ declare module "express" { count: number; } - interface Request extends Express.Request { + interface Request extends http.ServerRequest, Express.Request { session: Session; diff --git a/fbsdk/fbsdk-tests.ts b/fbsdk/fbsdk-tests.ts new file mode 100644 index 0000000000..e359369adf --- /dev/null +++ b/fbsdk/fbsdk-tests.ts @@ -0,0 +1,29 @@ +/// + +window.fbAsyncInit = function() { + FB.init( + { + appId : '{your-app-id}', + xfbml : true, + version : 'v2.0' + } + ); + + FB.ui( + { + method: 'share', + href: 'https://developers.facebook.com/docs/dialogs/' + }, + function(response) { + console.log(response); + } + ); + + FB.api( + "/me", + "POST", + function (fbResponse){ + console.log(fbResponse); + } + ); +}; \ No newline at end of file diff --git a/fbsdk/fbsdk.d.ts b/fbsdk/fbsdk.d.ts new file mode 100644 index 0000000000..6e3890e014 --- /dev/null +++ b/fbsdk/fbsdk.d.ts @@ -0,0 +1,135 @@ +// Type definitions for Facebook Javascript SDK +// Project: https://developers.facebook.com/docs/javascript +// Definitions by: Joshua Strobl +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +interface FBInitParams{ + appId ?: string; + authResponse ?: string; + cookie ?: boolean; + frictionlessRequests ?: boolean; + hideFlashCallback ?: Function; + logging ?: boolean; + status ?: boolean; + version ?: string; + xfbml ?: boolean; +} + +interface FBUIParams{ + method : string; +} + +interface FBLoginOptions{ + auth_type ?: string; + scopes ?: string; + return_scopes ?: boolean; + enable_profile_selector ?: boolean; + profile_selector_ids ?: string; +} + +interface FBSDKEvents{ + /* This method allows you to subscribe to a range of events, and define callback functions for when they fire. */ + subscribe(event : string, callback : (fbResponseObject : Object) => any) : void; + + /* This method allows you to un-subscribe a callback from any events previously subscribed to using .Event.subscribe(). */ + unsubscribe(event : string, callback : (fbResponseObject : Object) => any) : void; +} + +interface FBSDKXFBML{ + /* This function parses and renders XFBML markup in a document on the fly. */ + parse(ParseElement ?: Element) : void; + parse(ParseElement ?: HTMLElement) : void; +} + +interface FBSDKCanvasPrefetcher{ + /* Tells Facebook that the current page uses a specified resource. */ + addStaticResource(res : string) : void; + + /* Controls how statistics are collected on resources used by your application. */ + setCollectionMode(option : string) : void; +} + +interface FBSDKCanvasSize{ + height ?: Number; + width ?: Number; +} + +interface FBSDKCanvasDoneLoading{ + time_delta_ms : Number; +} + +interface FBSDKCanvas{ + Prefetcher : FBSDKCanvasPrefetcher; + + /* Hides the HTML element passed in via the elem param from view. */ + hideFlashElement(element : Element) : void; + hideFlashElement(element : HTMLElement) : void; + + /* Displays the HTML element passed in via the elem param, after it has been hidden via FB.Canvas.hideFlashElement. */ + showFlashElement(element : Element) : void; + showFlashElement(element : HTMLElement) : void; + + /* Tells Facebook to scroll to a specific location of your canvas page. */ + scrollTo(x : Number, y : Number) : void; + + /* Starts or stops a timer which will grow your iframe to fit the content every few milliseconds. */ + setAutoGrow(stopTimer : boolean) : void; + setAutoGrow(diffInterval : Number) : void; + setAutoGrow(stopTimer : boolean, diffInterval : Number) : void + + /* Tells Facebook to resize your iframe. */ + setSize(canvasSizeOptions : FBSDKCanvasSize) : void; + + /* Registers the callback for inline processing (i.e. without page reload) of user actions when they click on any link to the current app from Canvas */ + setUrlHandler(handler ?: Function) : string; + + /* Calls you back with an integer, in milliseconds, of the timing of the page load, beginning from the time when the first bytes arrive on + the client, and ending from the point at which you call this function. + */ + setDoneLoading(handler ?: Function) : FBSDKCanvasDoneLoading; + + /* Call startTimer to resume the timer after a period of time for the page load that you didn't wish to measure, which you began by calling stopTimer. */ + startTimer() : void; + + /* Call stopTimer when you wish to stop timing the page load for a period of time */ + stopTimer(handler ?: (fbResponseObject : Object) => any) : void; +} + +interface FBSDK{ + /* This method is used to initialize and setup the SDK. */ + init(fbInitObject : FBInitParams) : void; + + /* This method lets you make calls to the Graph API. */ + api(path : string, method : string, callback : (fbResponseObject : Object) => any) : Object; + api(path : string, params : Object, callback : (fbResponseObject : Object) => any) : Object; + api(path : string, method : string, params : Object, callback : (fbResponseObject : Object) => any) : Object; + + /* This method is used to trigger different forms of Facebook created UI dialogs. */ + ui(params : FBUIParams, handler : (fbResponseObject : Object) => any) : void; + + /* Allows you to determine if a user is logged in to Facebook and has authenticated your app */ + getLoginStatus(handler : Function, force ?: Boolean) : void; + + /* Calling FB.login prompts the user to authenticate your application using the Login Dialog. */ + login(handler : (fbResponseObject : Object) => any, params ?: FBLoginOptions): void; + + /* Log the user out of your site and Facebook */ + logout(handler : (fbResponseObject : Object) => any) : void; + + /* Synchronous accessor for the current authResponse. */ + getAuthResponse() : Object; + + Event : FBSDKEvents; + XFBML : FBSDKXFBML; + Canvas : FBSDKCanvas; +} + +interface Window{ + fbAsyncInit() : any; +} + +declare module "FB" { + export = FB; +} + +declare var FB : FBSDK; \ No newline at end of file diff --git a/fullCalendar/fullCalendar.d.ts b/fullCalendar/fullCalendar.d.ts index fd1303f69e..feb537e67b 100644 --- a/fullCalendar/fullCalendar.d.ts +++ b/fullCalendar/fullCalendar.d.ts @@ -7,29 +7,37 @@ declare module FullCalendar { export interface Calendar { + /** - * Formats a Date object into a string. - */ + * Formats a Date object into a string. + */ formatDate(date: Date, format: string, options?: Options): string; + /** - * Formats a date range (two Date objects) into a string. - */ + * Formats a date range (two Date objects) into a string. + */ formatDates(date1: Date, date2: Date, format: string, options?: Options): string; + /** - * Parses a string into a Date object. - */ + * Parses a string into a Date object. + */ parseDate(dateString: string, ignoreTimezone?: boolean): Date; + /** - * Parses an ISO8601 string into a Date object. - */ + * Parses an ISO8601 string into a Date object. + */ parseISO8601(dateString: string, ignoreTimezone?: boolean): Date; + /** - * Gets the version of Fullcalendar - */ + * Gets the version of Fullcalendar + */ version: string; } export interface Options { + + // General display - http://arshaw.com/fullcalendar/docs/display/ + header?: { left: string; center: string; @@ -43,22 +51,31 @@ declare module FullCalendar { firstDay?: number; isRTL?: boolean; weekends?: boolean; + hiddenDays?: number[]; weekMode?: string; weekNumbers?: boolean; weekNumberCalculation?: any; // String/Function height?: number; contentHeight?: number; - aspectRation?: number; - viewDisplay?: (view: View) => void; - windowResize?: (view: View) => void; + aspectRatio?: number; + handleWindowResize?: boolean; + viewRender?: (view: View, element: JQuery) => void; + viewDestroy?: (view: View, element: JQuery) => void; dayRender?: (date: Date, cell: HTMLTableDataCellElement) => void; + windowResize?: (view: View) => void; + + // Views - http://arshaw.com/fullcalendar/docs/views/ defaultView?: string; + // Current Date - http://arshaw.com/fullcalendar/docs/current_date/ + year?: number; month?: number; date?: number; + // Text/Time Customization - http://arshaw.com/fullcalendar/docs/text/ + timeFormat?: any; // String/ViewOptionHash columnFormat?: any; // String/ViewOptionHash titleFormat?: any; // String/ViewOptionHash @@ -67,13 +84,17 @@ declare module FullCalendar { monthNamesShort?: Array; dayNames?: Array; dayNamesShort?: Array; - weekNumberTitle?: number; + weekNumberTitle?: string; + + // Clicking & Hovering - http://arshaw.com/fullcalendar/docs/mouse/ dayClick?: (date: Date, allDay: boolean, jsEvent: MouseEvent, view: View) => void; eventClick?: (event: EventObject, jsEvent: MouseEvent, view: View) => any; // return type boolean or void eventMouseover?: (event: EventObject, jsEvent: MouseEvent, view: View) => void; eventMouseout?: (event: EventObject, jsEvent: MouseEvent, view: View) => void; + // Selection - http://arshaw.com/fullcalendar/docs/selection/ + selectable?: any; // Boolean/ViewOptionHash selectHelper?: any; // Boolean/Function unselectAuto?: boolean; @@ -81,26 +102,51 @@ declare module FullCalendar { select?: (startDate: Date, endDate: Date, allDay: boolean, jsEvent: MouseEvent, view: View) => void; unselect?: (view: View, jsEvent: Event) => void; - eventSources?: Array; + // Event Data - http://arshaw.com/fullcalendar/docs/event_data/ + + /** + * This has one of the following types: + * + * - EventObject[] + * - string (JSON feed) + * - (start: Date, end: Date, callback: {(events: EventObject[]) => void;}) => void; + */ + events?: any; + + /** + * An array, each element being one of the following types: + * + * - EventSource + * - EventObject[] + * - string (JSON feed) + * - (start: Date, end: Date, callback: {(events: EventObject[]) => void;}) => void; + */ + eventSources?: any[]; + allDayDefault?: boolean; ignoreTimezone?: boolean; - eventDataTransform?: (eventData: any) => EventObject; startParam?: string; endParam?: string lazyFetching?: boolean; + eventDataTransform?: (eventData: any) => EventObject; loading?: (isLoading: boolean, view: View) => void; + // Event Rendering - http://arshaw.com/fullcalendar/docs/event_rendering/ + eventColor?: string; eventBackgroundColor?: string; eventBorderColor?: string; eventTextColor?: string; eventRender?: (event: EventObject, element: HTMLDivElement, view: View) => void; eventAfterRender?: (event: EventObject, element: HTMLDivElement, view: View) => void; - eventAllAfterRender?: (view: View) => void; + eventAfterAllRender?: (view: View) => void; + eventDestroy?: (event: EventObject, element: JQuery, view: View) => void; + + // Event Dragging & Resizing editable?: boolean; - disableDragging?: boolean; - disableResizing?: boolean; + eventStartEditable?: boolean; + eventDurationEditable?: boolean; dragRevertDuration?: number; dragOpacity?: any; // Float/ViewOptionHash eventDragStart?: (event: EventObject, jsEvent: MouseEvent, ui: any, view: View) => void; @@ -119,7 +165,7 @@ declare module FullCalendar { name: string; title: string; start: Date; - End: Date; + end: Date; visStart: Date; visEnd: Date; } @@ -137,6 +183,9 @@ declare module FullCalendar { ''?: any; } + /** + * Agenda Options - http://arshaw.com/fullcalendar/docs/agenda/ + */ export interface AgendaOptions { allDaySlot?: boolean; allDayText?: string; @@ -147,6 +196,7 @@ declare module FullCalendar { firstHour?: number; minTime?: any; // Integer/String maxTime?: any; // Integer/String + slotEventOverlap?: boolean; } export interface ButtonTextObject { @@ -177,7 +227,16 @@ declare module FullCalendar { } export interface EventSource extends JQueryAjaxSettings { + + /** + * This has one of the following types: + * + * - EventObject[] + * - string (JSON feed) + * - (start: Date, end: Date, callback: {(events: EventObject[]) => void;}) => void; + */ events?: any; + color?: string; backgroundColor?: string; borderColor?: string; @@ -194,117 +253,145 @@ declare module FullCalendar { } interface JQuery { + /** - * Get/Set option value - */ + * Get/Set option value + */ fullCalendar(method: 'option', option: string, value?: any): void; + /** - * Immediately forces the calendar to render and/or readjusts its size. - */ + * Immediately forces the calendar to render and/or readjusts its size. + */ fullCalendar(method: 'render'): void; + /** - * Restores the element to the state before FullCalendar was initialized. - */ + * Restores the element to the state before FullCalendar was initialized. + */ fullCalendar(method: 'destroy'): void; + /** - * Moves the calendar one step back (either by a month, week, or day). - */ - fullCalendar(method: 'prev'): void; - /** - * Moves the calendar one step forward (either by a month, week, or day). - */ - fullCalendar(method: 'next'): void; - /** - * Moves the calendar back one year. - */ - fullCalendar(method: 'prevYear'): void; - /** - * Moves the calendar forward one year. - */ - fullCalendar(method: 'nextYear'): void; - /** - * Moves the calendar to the current date. - */ - fullCalendar(method: 'today'): void; - /** - * Returns the View Object for the current view. - */ + * Returns the View Object for the current view. + */ fullCalendar(method: 'getView'): FullCalendar.View; + /** - * Immediately switches to a different view. - */ + * Immediately switches to a different view. + */ fullCalendar(method: 'changeView', viewName: string): void; + /** - * Moves the calendar to an arbitrary year/month/date. - */ + * Moves the calendar one step back (either by a month, week, or day). + */ + fullCalendar(method: 'prev'): void; + + /** + * Moves the calendar one step forward (either by a month, week, or day). + */ + fullCalendar(method: 'next'): void; + + /** + * Moves the calendar back one year. + */ + fullCalendar(method: 'prevYear'): void; + + /** + * Moves the calendar forward one year. + */ + fullCalendar(method: 'nextYear'): void; + + /** + * Moves the calendar to the current date. + */ + fullCalendar(method: 'today'): void; + + /** + * Moves the calendar to an arbitrary year/month/date. + */ fullCalendar(method: 'gotoDate', year: number, month?: number, date?: number): void; + /** - * Moves the calendar to an arbitrary date. - */ + * Moves the calendar to an arbitrary date. + */ fullCalendar(method: 'gotoDate', date: Date): void; + /** - * Moves the calendar forward/backward an arbitrary amount of time. - */ + * Moves the calendar forward/backward an arbitrary amount of time. + */ fullCalendar(method: 'incrementDate', year: number, month?: number, date?: number): void; + /** - * Returns a Date object for the current date of the calendar. - */ + * Returns a Date object for the current date of the calendar. + */ fullCalendar(method: 'getDate'): Date; + /** - * A method for programmatically selecting a period of time. - */ + * A method for programmatically selecting a period of time. + */ fullCalendar(method: 'select', startDate: Date, endDate: Date, allDay: boolean): void; + /** - * A method for programmatically clearing the current selection. - */ + * A method for programmatically clearing the current selection. + */ fullCalendar(method: 'unselect'): void; + /** - * Reports changes to an event and renders them on the calendar. - */ + * Reports changes to an event and renders them on the calendar. + */ fullCalendar(method: 'updateEvent', event: FullCalendar.EventObject): void; + /** - * Retrieves events that FullCalendar has in memory. - */ + * Retrieves events that FullCalendar has in memory. + */ fullCalendar(method: 'clientEvents', idOrfilter?: any): Array; + /** - * Retrieves events that FullCalendar has in memory. - */ + * Retrieves events that FullCalendar has in memory. + */ fullCalendar(method: 'clientEvents', idOrfilter?: (e: FullCalendar.EventObject) => boolean): Array; + /** - * Removes events from the calendar. - */ + * Removes events from the calendar. + */ fullCalendar(method: 'removeEvents', idOrfilter?: any): void; + /** - * Removes events from the calendar. - */ + * Removes events from the calendar. + */ fullCalendar(method: 'removeEvents', idOrfilter?: (e: FullCalendar.EventObject) => boolean): void; + /** - * Refetches events from all sources and rerenders them on the screen. - */ + * Refetches events from all sources and rerenders them on the screen. + */ fullCalendar(method: 'refetchEvents'): void; + /** - * Dynamically adds an event source. - */ + * Dynamically adds an event source. + */ fullCalendar(method: 'addEventSource', source: any): void; + /** - * Dynamically removes an event source. - */ + * Dynamically removes an event source. + */ fullCalendar(method: 'removeEventSource', source: any): void; + /** - * Renders a new event on the calendar. - */ + * Renders a new event on the calendar. + */ fullCalendar(method: 'renderEvent', event: FullCalendar.EventObject, stick?: boolean): void; + /** - * Rerenders all events on the calendar. - */ + * Rerenders all events on the calendar. + */ fullCalendar(method: 'rerenderEvents'): void; + /** - * Create calendar object - */ + * Create calendar object + */ fullCalendar(options: FullCalendar.Options): JQuery; + /** - * Generic method function - */ + * Generic method function + */ fullCalendar(method: string, arg1: any, arg2: any, arg3: any): void; } diff --git a/gridfs-stream/gridfs-stream-tests.ts b/gridfs-stream/gridfs-stream-tests.ts new file mode 100644 index 0000000000..c9ca457c2a --- /dev/null +++ b/gridfs-stream/gridfs-stream-tests.ts @@ -0,0 +1,37 @@ +/// +/// +/// + +// Samples from: +// https://github.com/aheckmann/gridfs-stream + +import fs = require('fs'); +import mongo = require('mongodb'); +import Grid = require('gridfs-stream'); + +// create or use an existing mongodb-native db instance +var db = new mongo.Db('gridfs-stream-test', new mongo.Server("127.0.0.1", 27017)); +var gfs = Grid(db, mongo); + +// streaming to gridfs +var writestream = gfs.createWriteStream({ + filename: 'my_file.txt' +}); +fs.createReadStream('blob.txt').pipe(writestream); + +// streaming from gridfs +var readstream = gfs.createReadStream({ + filename: 'my_file.txt' +}); + +//error handling, e.g. file does not exist +readstream.on('error', function (err: any) { + console.log('An error occurred!', err); + throw err; +}); + +var bufs: Array = []; +readstream.on('data', function(d: any){ bufs.push(d); }); +readstream.on('end', function() { + var buf = Buffer.concat(bufs); +}); diff --git a/gridfs-stream/gridfs-stream.d.ts b/gridfs-stream/gridfs-stream.d.ts new file mode 100644 index 0000000000..a8ad5f9ed3 --- /dev/null +++ b/gridfs-stream/gridfs-stream.d.ts @@ -0,0 +1,68 @@ +// Type definitions for gridfs-stream 0.5.0 +// Project: https://github.com/aheckmann/gridfs-stream +// Definitions by: Lior Mualem +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// +/// + +declare module GridFSStream { + export interface Range { + startPos: number; + endPos: number; + } + + export interface Options { + _id?: string; + filename?: string; + mode?: string; + + range?: Range; + + // any other options from the GridStore may be passed too, e.g. + chunkSize?: number; + content_type?: string; + root?: string; + metadata?: any; + } + + export interface WriteStream extends NodeJS.WritableStream { + writable: boolean; + name: string; + id: string; + options: Options; + mode: string; + } + + export interface ReadStream extends NodeJS.ReadableStream { + readable: boolean; + paused: boolean; + } +} + +declare module "gridfs-stream" { + import mongo = require('mongodb'); + + // Merged declaration, g is both a callable function and a namespace + function g(db: any, mongo: any): g.Grid; + + module g { + + export class Grid { + + files: mongo.Collection; + collection(name?: string): mongo.Collection; + + createWriteStream(options?: GridFSStream.Options): GridFSStream.WriteStream; + createReadStream(options?: GridFSStream.Options): GridFSStream.ReadStream; + createWriteStream(options?: string): GridFSStream.WriteStream; + createReadStream(options?: string): GridFSStream.ReadStream; + + remove(options: GridFSStream.Options, callback: (err: Error) => void): void; + exist(options: GridFSStream.Options, callback: (err: Error, found: boolean) => void): void; + } + } + + export = g; +} + diff --git a/jdataview/jdataview-tests.ts b/jdataview/jdataview-tests.ts new file mode 100644 index 0000000000..273db3ea39 --- /dev/null +++ b/jdataview/jdataview-tests.ts @@ -0,0 +1,74 @@ +/// +/// + +interface TARMetaData { + name: string; + mode: number; + owner: number; + group: number; + size: number; + modtime: number; + checksum: number; + link: string; + name_linked: string; + ustar: string; + ustar_version: number; + owner_name: string; + group_name: string; + device: number[]; + name_prefix: string; +} + +// Download the file +$.get('jquery.tar', function (data) { + // Make a view on the data + var view = new jDataView(data); + + // console.log(view.getUint32(0, true)); + // console.log(view.getUint32(0, false)); + // view.seek(0); + + while (view.tell() < view.byteLength) { + // Parse the file meta data + var metadata: TARMetaData = { + name: view.getString(100).replace(/\0+$/, ''), + mode: parseInt(view.getString(8), 8), + owner: parseInt(view.getString(8), 8), + group: parseInt(view.getString(8), 8), + size: parseInt(view.getString(12), 8), + modtime: parseInt(view.getString(12), 8), + checksum: parseInt(view.getString(8), 8), + link: view.getChar(), + name_linked: view.getString(100).replace(/\0+$/, ''), + ustar: view.getString(6), + ustar_version: parseInt(view.getString(2), 8), + owner_name: view.getString(32).replace(/\0+$/, ''), + group_name: view.getString(32).replace(/\0+$/, ''), + device: [parseInt(view.getString(8), 8), parseInt(view.getString(8), 8)], + name_prefix: view.getString(155).replace(/\0+$/, '') + }; + + // Padding + if (view.tell() % 512 !== 0) { + view.seek(view.tell() + 512 - (view.tell() % 512)); + } + + // Get the file + if (isNaN(metadata.size)) { + break; + } + var content = view.getString(metadata.size); + + // Padding + if (view.tell() % 512 != 0) { + view.seek(view.tell() + 512 - (view.tell() % 512)); + } + + // Print the file + $(document.body).append($('
').html(JSON.stringify(metadata, null, '  ')));
+
+		if (metadata.size) {
+			$('body').append($('').val(content));
+		}
+	}
+});
\ No newline at end of file
diff --git a/jdataview/jdataview.d.ts b/jdataview/jdataview.d.ts
new file mode 100644
index 0000000000..cff1160326
--- /dev/null
+++ b/jdataview/jdataview.d.ts
@@ -0,0 +1,105 @@
+// Type definitions for jDataView
+// Project: https://github.com/jDataView/jDataView
+// Definitions by: Ingvar Stepanyan 
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare class jDataView implements DataView {
+	constructor(byteCount: number, offset?: number, length?: number, littleEndian?: boolean)
+	constructor(buffer: string, offset?: number, length?: number, littleEndian?: boolean)
+	constructor(buffer: jDataView.Bytes, offset?: number, length?: number, littleEndian?: boolean)
+	buffer: any
+	byteOffset: number
+	byteLength: number
+
+	// 64 bit integers
+	getInt64(byteOffset?: number, littleEndian?: boolean): jDataView.Int64
+	setInt64(byteOffset: number, value: jDataView.Int64, littleEndian?: boolean): void
+	writeInt64(value: jDataView.Int64, littleEndian?: boolean): void
+	getUint64(byteOffset?: number, littleEndian?: boolean): jDataView.Uint64
+	setUint64(byteOffset: number, value: jDataView.Uint64, littleEndian?: boolean): void
+	writeUint64(value: jDataView.Uint64, littleEndian?: boolean): void
+
+	// Bitfields
+	getSigned(bitLength: number, byteOffset?: number): number
+	setSigned(byteOffset: number, value: number, bitLength: number): void
+	writeSigned(value: number, bitLength: number): void
+	getUnsigned(bitLength: number, byteOffset?: number): number
+	setUnsigned(byteOffset: number, value: number, bitLength: number): void
+	writeUnsigned(value: number, bitLength: number): void
+
+	// Internal utilities
+	wrapBuffer(string: string): jDataView.Buffer
+	wrapBuffer(bytes: jDataView.Bytes): jDataView.Buffer
+	wrapBuffer(byteCount: number): jDataView.Buffer
+	createBuffer(...bytes: number[]): jDataView.Buffer
+
+	// Operation control
+	seek(byteOffset: number): number
+	tell(): number
+	skip(byteLength: number): number
+	slice(start: number, end?: number, forceCopy?: boolean): jDataView
+
+	// Specification getters
+	getInt8(byteOffset?: number): number
+	getUint8(byteOffset?: number): number
+	getInt16(byteOffset?: number, littleEndian?: boolean): number
+	getUint16(byteOffset?: number, littleEndian?: boolean): number
+	getInt32(byteOffset?: number, littleEndian?: boolean): number
+	getUint32(byteOffset?: number, littleEndian?: boolean): number
+	getFloat32(byteOffset?: number, littleEndian?: boolean): number
+	getFloat64(byteOffset?: number, littleEndian?: boolean): number
+
+	// Specification setters
+	setInt8(byteOffset: number, value: number): void
+	setUint8(byteOffset: number, value: number): void
+	setInt16(byteOffset: number, value: number, littleEndian?: boolean): void
+	setUint16(byteOffset: number, value: number, littleEndian?: boolean): void
+	setInt32(byteOffset: number, value: number, littleEndian?: boolean): void
+	setUint32(byteOffset: number, value: number, littleEndian?: boolean): void
+	setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void
+	setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void
+
+	// Strings and Blobs
+	getChar(byteOffset?: number): string
+	setChar(byteOffset: number, char: string): void
+	writeChar(char: string): void
+	getString(byteLength: number, byteOffset?: number, encoding?: string): string
+	setString(byteOffset: number, chars: string, encoding?: string): void
+	writeString(chars: string, encoding?: string): void
+	getBytes(length: number, byteOffset?: number, littleEndian?: boolean, toArray?: boolean): number[]
+	setBytes(byteOffset: number, bytes: number[], littleEndian?: boolean): void
+	writeBytes(bytes: number[], littleEndian?: boolean): void
+
+	// writeXXX methods
+	writeInt8(value: number): void
+	writeUint8(value: number): void
+	writeInt16(value: number, littleEndian?: boolean): void
+	writeUint16(value: number, littleEndian?: boolean): void
+	writeInt32(value: number, littleEndian?: boolean): void
+	writeUint32(value: number, littleEndian?: boolean): void
+	writeFloat32(value: number, littleEndian?: boolean): void
+	writeFloat64(value: number, littleEndian?: boolean): void
+}
+
+declare module jDataView {
+	interface Bytes {
+		length: number;
+		[index: number]: number;
+	}
+
+	interface Buffer extends Bytes {
+		byteLength: number;
+	}
+
+	class Uint64 {
+		lo: number
+		hi: number
+		constructor(lo: number, hi: number)
+		valueOf(): number
+		static fromNumber(number: number): Uint64
+	}
+
+	class Int64 extends Uint64 {
+		static fromNumber(number: number): Int64
+	}
+}
\ No newline at end of file
diff --git a/jquery.total-storage/jquery.total-storage-tests.ts b/jquery.total-storage/jquery.total-storage-tests.ts
new file mode 100644
index 0000000000..0ba3700eee
--- /dev/null
+++ b/jquery.total-storage/jquery.total-storage-tests.ts
@@ -0,0 +1,21 @@
+// Type definitions for jQueryTotalStorage 1.1.2
+// Project: https://github.com/Upstatement/jquery-total-storage
+// Definitions by: Jeremy Brooks 
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+/// 
+/// 
+
+//direct call
+$.totalStorage("test_key1", "test_value");
+var val1:string = $.totalStorage("test_key");
+
+//set/get
+$.totalStorage.setItem("test_key2", 123);
+var val2:number = $.totalStorage.getItem("test_key2");
+
+//get all items
+var list = $.totalStorage.getAll();
+
+//delete item
+var deleted = $.totalStorage.deleteItem("test_key1");
\ No newline at end of file
diff --git a/jquery.total-storage/jquery.total-storage.d.ts b/jquery.total-storage/jquery.total-storage.d.ts
new file mode 100644
index 0000000000..8bfed0a4d3
--- /dev/null
+++ b/jquery.total-storage/jquery.total-storage.d.ts
@@ -0,0 +1,64 @@
+// Type definitions for jQueryTotalStorage 1.1.2
+// Project: https://github.com/Upstatement/jquery-total-storage
+// Definitions by: Jeremy Brooks 
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+/// 
+
+/**
+* @desc Set the value of a key to a string
+* @example $.totalStorage('the_key', 'the_value');
+* @desc Set the value of a key to a number
+* @example $.totalStorage('the_key', 800.2);
+* @desc Set the value of a key to a complex Array
+* @example	var myArray = new Array();
+*       myArray.push({name:'Jared', company:'Upstatement', zip:63124});
+*       myArray.push({name:'McGruff', company:'Police', zip:60652};
+*       $.totalStorage('people', myArray);
+*       //to return:
+*       $.totalStorage('people');
+*
+*/
+
+interface JQueryTotalStorage {
+
+    /**
+    * @desc Set or get a key's value
+    * @param key Key to set.
+    * @param value Value to set for key. If ommited, current value for key is returned.
+	* @param options Not implemented.
+    */
+    (key: string, value?: any, options?: JQueryTotalStorageOptions): any;
+
+    /**
+    * @desc Set a key's value
+    * @param key Key to set.
+    * @param value Value to set for key.
+    */
+    setItem(key: string, value: any): any;
+
+    /**
+    * @desc Get a key's value
+    * @param key Key to get.
+    */
+    getItem(key: string): any;
+
+    /**
+    * @desc Get all set values
+    */
+    getAll(): any[];
+
+    /**
+    * @desc Delete item by key
+    * @param key Key of item to delete
+    */
+    deleteItem(key: string): boolean;
+}
+
+interface JQueryTotalStorageOptions {
+    //not implemented...
+}
+
+interface JQueryStatic {
+    totalStorage: JQueryTotalStorage;
+}
\ No newline at end of file
diff --git a/knockout.validation/knockout.validation.d.ts b/knockout.validation/knockout.validation.d.ts
index d5e23a9ba1..8317f75526 100644
--- a/knockout.validation/knockout.validation.d.ts
+++ b/knockout.validation/knockout.validation.d.ts
@@ -142,6 +142,7 @@ interface KnockoutSubscribableFunctions {
     isValid: KnockoutComputed;
     isValidating: KnockoutObservable;
     rules: KnockoutObservableArray;
+    isModified(val: boolean): void;
 }
 
 declare module "knockout.validation" {
diff --git a/lodash/lodash-tests.disabled.ts b/lodash/lodash-tests.disabled.ts
deleted file mode 100644
index aca0bbdf0b..0000000000
--- a/lodash/lodash-tests.disabled.ts
+++ /dev/null
@@ -1,979 +0,0 @@
-/// 
-
-declare var $: any, jQuery: any;
-
-interface IFoodOrganic {
-	name: string;
-	organic: boolean;
-}
-
-interface IFoodType {
-	name: string;
-	type: string;
-}
-
-interface IFoodCombined {
-	name: string;
-	organic: boolean;
-	type: string;
-}
-
-interface IStoogesQuote {
-	name: string;
-	quotes: string[];
-}
-
-interface IStoogesAge {
-	name: string;
-	age: number;
-}
-
-interface IStoogesCombined {
-	name: string;
-	age: number;
-	quotes: string[];
-}
-
-interface IKey {
-	dir: string;
-	code: number;
-}
-
-var foodsOrganic: IFoodOrganic[] = [
-	{ name: 'banana', organic: true },
-	{ name: 'beet',   organic: false },
-];
-var foodsType: IFoodType[] = [
-	{ name: 'apple',  type: 'fruit' },
-	{ name: 'banana', type: 'fruit' },
-	{ name: 'beet',   type: 'vegetable' }
-];
-var foodsCombined: IFoodCombined[] = [
-  { 'name': 'apple',  'organic': false, 'type': 'fruit' },
-  { 'name': 'carrot', 'organic': true,  'type': 'vegetable' }
-];
-
-var stoogesQuotes: IStoogesQuote[] = [
-	{ 'name': 'curly', 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
-	{ 'name': 'moe', 'quotes': ['Spread out!', 'You knucklehead!'] }
-];
-var stoogesAges: IStoogesAge[] = [
-	{ 'name': 'moe', 'age': 40 },
-	{ 'name': 'larry', 'age': 50 }
-];
-
-var stoogesCombined: IStoogesCombined[] = [
-  { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
-  { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }
-];
-
-var keys: IKey[] = [
-  { 'dir': 'left', 'code': 97 },
-  { 'dir': 'right', 'code': 100 }
-];
-
-class Dog {
-	constructor(public name: string) {}
-
-	public bark() {
-	  console.log('Woof, woof!');
-	}
-}
-
-var result : any;
-
-/*************
- * Chaining *
- *************/
-result = <_.LoDashWrapper>_('test');
-result = <_.LoDashWrapper>_(1);
-result = <_.LoDashWrapper>_(true);
-result = <_.LoDashArrayWrapper>_(['test1', 'test2']);
-result = <_.LoDashObjectWrapper<_.Dictionary>>_({'key1': 'test1', 'key2': 'test2'});
-
-result = <_.LoDashWrapper>_.chain('test');
-result = <_.LoDashWrapper>_('test').chain();
-result = <_.LoDashWrapper>_.chain(1);
-result = <_.LoDashWrapper>_(1).chain();
-result = <_.LoDashWrapper>_.chain(true);
-result = <_.LoDashWrapper>_(true).chain();
-result = <_.LoDashArrayWrapper>_.chain(['test1', 'test2']);
-result = <_.LoDashArrayWrapper>_(['test1', 'test2']).chain();
-result = <_.LoDashObjectWrapper<_.Dictionary>>_.chain({'key1': 'test1', 'key2': 'test2'});
-result = <_.LoDashObjectWrapper<_.Dictionary>>_({'key1': 'test1', 'key2': 'test2'}).chain();
-
-//Wrapped array shortcut methods
-result = <_.LoDashArrayWrapper>_([1, 2, 3, 4]).concat(5, 6);
-result = <_.LoDashWrapper>_([1, 2, 3, 4]).join(',');
-result = <_.LoDashWrapper>_([1, 2, 3, 4]).pop();
-_([1, 2, 3, 4]).push(5, 6, 7);
-result = <_.LoDashArrayWrapper>_([1, 2, 3, 4]).reverse();
-result = <_.LoDashWrapper>_([1, 2, 3, 4]).shift();
-result = <_.LoDashArrayWrapper>_([1, 2, 3, 4]).slice(1, 2);
-result = <_.LoDashArrayWrapper>_([1, 2, 3, 4]).slice(2);
-result = <_.LoDashArrayWrapper>_([1, 2, 3, 4]).sort((a, b) => 1);
-result = <_.LoDashArrayWrapper>_([1, 2, 3, 4]).splice(1);
-result = <_.LoDashArrayWrapper>_([1, 2, 3, 4]).splice(1, 2, 5, 6);
-result = <_.LoDashWrapper>_([1, 2, 3, 4]).unshift(5, 6);
-
-result = _.tap([1, 2, 3, 4], function(array) { console.log(array); });
-result = <_.LoDashWrapper>_('test').tap(function(value) { console.log(value); });
-result = <_.LoDashArrayWrapper>_([1, 2, 3, 4]).tap(function(array) { console.log(array); });
-result = <_.LoDashObjectWrapper<_.Dictionary>>_({'key1': 'test1', 'key2': 'test2'}).tap(function(array) { console.log(array); });
-
-result = _('test').toString();
-result = _([1, 2, 3]).toString();
-result = _({'key1': 'test1', 'key2': 'test2'}).toString();
-
-result = _('test').valueOf();
-result = _([1, 2, 3]).valueOf();
-result = <_.Dictionary>_({'key1': 'test1', 'key2': 'test2'}).valueOf();
-
-result = _('test').value();
-result = _([1, 2, 3]).value();
-result = <_.Dictionary>_({'key1': 'test1', 'key2': 'test2'}).value();
-
-// /*************
-//  * Arrays *
-//  *************/
-result = _.compact([0, 1, false, 2, '', 3]);
-	result = <_.LoDashArrayWrapper>_([0, 1, false, 2, '', 3]).compact();
-
-result = _.difference([1, 2, 3, 4, 5], [5, 2, 10]);
-	result = <_.LoDashArrayWrapper>_([1, 2, 3, 4, 5]).difference([5, 2, 10]);
-
-result = _.rest([1, 2, 3]);
-result = _.rest([1, 2, 3], 2);
-result = _.rest([1, 2, 3], (num) => num < 3)
-result = _.rest(foodsOrganic, 'test');
-result = _.rest(foodsType, { 'type': 'value' });
-
-result = _.drop([1, 2, 3]);
-result = _.drop([1, 2, 3], 2);
-result = _.drop([1, 2, 3], (num) => num < 3)
-result = _.drop(foodsOrganic, 'test');
-result = _.drop(foodsType, { 'type': 'value' });
-
-result = _.tail([1, 2, 3])
-result = _.tail([1, 2, 3], 2)
-result = _.tail([1, 2, 3], (num) => num < 3)
-result = _.tail(foodsOrganic, 'test')
-result =  _.tail(foodsType, { 'type': 'value' })
-
-result = _.findIndex(['apple', 'banana', 'beet'], function(f) {
-  return /^b/.test(f);
-});
-result = _.findIndex(['apple', 'banana', 'beet'], 'apple');
-result = _.findIndex([{ food: 'apple' }, { food: 'banana' }, { food: 'beet' }], { food: 'apple'});
-
-result = _.findLastIndex(['apple', 'banana', 'beet'], function(f: string) {
-  return /^b/.test(f);
-});
-result = _.findLastIndex(['apple', 'banana', 'beet'], 'apple');
-result = _.findLastIndex([{ food: 'apple' }, { food: 'banana' }, { food: 'beet' }], { food: 'apple'});
-
-result = _.first([1, 2, 3]);
-result = _.first([1, 2, 3], 2);
-result = _.first([1, 2, 3], function(num) {
-  return num < 3;
-});
-result = _.first(foodsOrganic, 'organic');
-result = _.first(foodsType, { 'type': 'fruit' });
-
-	result = _.head([1, 2, 3]);
-	result = _.head([1, 2, 3], 2);
-	result = _.head([1, 2, 3], function(num) {
-	  return num < 3;
-	});
-	result = _.head(foodsOrganic, 'organic');
-	result = _.head(foodsType, { 'type': 'fruit' });
-
-	result = _.take([1, 2, 3]);
-	result = _.take([1, 2, 3], 2);
-    result = _.take([1, 2, 3], (num) => num < 3);
-	result = _.take(foodsOrganic, 'organic');
-	result = _.take(foodsType, { 'type': 'fruit' });
-
-result = _.flatten([1, [2], [3, [[4]]]]);
-result = _.flatten([1, [2], [3, [[4]]]], true);
-var result: any
-result = _.flatten(stoogesQuotes, 'quotes');
-
-	result = <_.LoDashArrayWrapper>_([1, [2], [3, [[4]]]]).flatten();
-	result = <_.LoDashArrayWrapper>_([1, [2], [3, [[4]]]]).flatten(true);
-	result = <_.LoDashArrayWrapper>_(stoogesQuotes).flatten('quotes');
-
-result = _.indexOf([1, 2, 3, 1, 2, 3], 2);
-result = _.indexOf([1, 2, 3, 1, 2, 3], 2, 3);
-result = _.indexOf([1, 1, 2, 2, 3, 3], 2, true);
-
-result = _.initial([1, 2, 3]);
-result = _.initial([1, 2, 3], 2);
-result = _.initial([1, 2, 3], function(num) {
-  return num > 1;
-});
-result = _.initial(foodsOrganic, 'organic');
-result = _.initial(foodsType, { 'type': 'vegetable' });
-
-result = _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
-
-result = _.last([1, 2, 3]);
-result = _.last([1, 2, 3], 2);
-result = _.last([1, 2, 3], function(num) {
-  return num > 1;
-});
-result = _.last(foodsOrganic, 'organic');
-result = _.last(foodsType, { 'type': 'vegetable' });
-
-result = _.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
-result = _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3);
-
-result = <{[key: string]: any}>_.zipObject(['moe', 'larry'], [30, 40]);
-result = <{[key: string]: any}>_.object(['moe', 'larry'], [30, 40]);
-
-result = _.pull([1, 2, 3, 1, 2, 3], 2, 3);
-
-result = _.range(10);
-result = _.range(1, 11);
-result = _.range(0, 30, 5);
-result = _.range(0, -10, -1);
-result = _.range(1, 4, 0);
-result = _.range(0);
-
-result = _.remove([1, 2, 3, 4, 5, 6], function(num: number) { return num % 2 == 0; });
-result = _.remove(foodsOrganic, 'organic');
-result = _.remove(foodsType, { 'type': 'vegetable'});
-
-result = _.sortedIndex([20, 30, 50], 40);
-result = _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
-var sortedIndexDict = {
-  'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 }
-};
-result = _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
-  return sortedIndexDict.wordToNumber[word];
-});
-result = _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) {
-  return this.wordToNumber[word];
-}, sortedIndexDict);
-
-result = _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
-
-result = _.uniq([1, 2, 1, 3, 1]);
-result = _.uniq([1, 1, 2, 2, 3], true);
-result = _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { 
-	return letter.toLowerCase(); 
-});
-result = _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
-result = <{x: number;}[]>_.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
-
-	result = _.unique([1, 2, 1, 3, 1]);
-	result = _.unique([1, 1, 2, 2, 3], true);
-	result = _.unique(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { 
-		return letter.toLowerCase(); 
-	});
-	result = _.unique([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math);
-	result = <{x: number;}[]>_.unique([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
-
-result = _.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
-
-result = _.zip(['moe', 'larry'], [30, 40], [true, false]);
-result = _.unzip(['moe', 'larry'], [30, 40], [true, false]);
-
-// /* *************
-//  * Collections *
-//  ************* */
-
-result = _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]);
-result = _.at(['moe', 'larry', 'curly'], 0, 2);
-
-result = _.contains([1, 2, 3], 1);
-result = _.contains([1, 2, 3], 1, 2);
-result = _.contains({ 'name': 'moe', 'age': 40 }, 'moe');
-result = _.contains('curly', 'ur');
-
-	result = _.include([1, 2, 3], 1);
-	result = _.include([1, 2, 3], 1, 2);
-	result = _.include({ 'name': 'moe', 'age': 40 }, 'moe');
-	result = _.include('curly', 'ur');
-
-result = <_.Dictionary>_.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); });
-result = <_.Dictionary>_.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
-result = <_.Dictionary>_.countBy(['one', 'two', 'three'], 'length');
-
-	result = <_.LoDashObjectWrapper<_.Dictionary>>_([4.3, 6.1, 6.4]).countBy(function(num) { return Math.floor(num); });
-	result = <_.LoDashObjectWrapper<_.Dictionary>>_([4.3, 6.1, 6.4]).countBy(function(num) { return this.floor(num); }, Math);
-	result = <_.LoDashObjectWrapper<_.Dictionary>>_(['one', 'two', 'three']).countBy('length');
-
-result = _.every([true, 1, null, 'yes'], Boolean);
-result = _.every(stoogesAges, 'age');
-result = _.every(stoogesAges, { 'age': 50 });
-
-	result = _.all([true, 1, null, 'yes'], Boolean);
-	result = _.all(stoogesAges, 'age');
-	result = _.all(stoogesAges, { 'age': 50 });
-
-result = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
-result = _.filter(foodsCombined, 'organic');
-result = _.filter(foodsCombined, { 'type': 'fruit' });
-
-	result = _([1, 2, 3, 4, 5, 6]).filter(function(num) { return num % 2 == 0; }).value();
-	result = _(foodsCombined).filter('organic').value();
-	result = _(foodsCombined).filter({ 'type': 'fruit' }).value();
-
-	result = _.select([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
-	result = _.select(foodsCombined, 'organic');
-	result = _.select(foodsCombined, { 'type': 'fruit' });
-
-		result = _([1, 2, 3, 4, 5, 6]).select(function(num) { return num % 2 == 0; }).value();
-		result = _(foodsCombined).select('organic').value();
-		result = _(foodsCombined).select({ 'type': 'fruit' }).value();
-
-result = _.find([1, 2, 3, 4], function(num) {
-  return num % 2 == 0;
-});
-result = _.find(foodsCombined, { 'type': 'vegetable' });
-result = _.find(foodsCombined, 'organic');
-
-	result = _.detect([1, 2, 3, 4], function(num) {
-	  return num % 2 == 0;
-	});
-	result = _.detect(foodsCombined, { 'type': 'vegetable' });
-	result = _.detect(foodsCombined, 'organic');
-
-	result = _.findWhere([1, 2, 3, 4], function(num) {
-	  return num % 2 == 0;
-	});
-	result = _.findWhere(foodsCombined, { 'type': 'vegetable' });
-	result = _.findWhere(foodsCombined, 'organic');
-
-result = _.findLast([1, 2, 3, 4], function(num) {
-  return num % 2 == 0;
-});
-result = _.findLast(foodsCombined, { 'type': 'vegetable' });
-result = _.findLast(foodsCombined, 'organic');
-
-result = _.forEach([1, 2, 3], function(num) { console.log(num); });
-result = <_.Dictionary>_.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
-
-	result = _.each([1, 2, 3], function(num) { console.log(num); });
-	result = <_.Dictionary>_.each({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
-
-	result = <_.LoDashArrayWrapper>_([1, 2, 3]).forEach(function(num) { console.log(num); });
-	result = <_.LoDashObjectWrapper<_.Dictionary>>_({ 'one': 1, 'two': 2, 'three': 3 }).forEach(function(num) { console.log(num); });	
-
-		result = <_.LoDashArrayWrapper>_([1, 2, 3]).each(function(num) { console.log(num); });
-		result = <_.LoDashObjectWrapper<_.Dictionary>>_({ 'one': 1, 'two': 2, 'three': 3 }).each(function(num) { console.log(num); });	
-
-result = _.forEachRight([1, 2, 3], function(num) { console.log(num); });
-result = <_.Dictionary>_.forEachRight({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
-
-	result = _.eachRight([1, 2, 3], function(num) { console.log(num); });
-	result = <_.Dictionary>_.eachRight({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
-
-	result = <_.LoDashArrayWrapper>_([1, 2, 3]).forEachRight(function(num) { console.log(num); });
-	result = <_.LoDashObjectWrapper<_.Dictionary>>_({ 'one': 1, 'two': 2, 'three': 3 }).forEachRight(function(num) { console.log(num); });
-
-		result = <_.LoDashArrayWrapper>_([1, 2, 3]).eachRight(function(num) { console.log(num); });
-		result = <_.LoDashObjectWrapper<_.Dictionary>>_({ 'one': 1, 'two': 2, 'three': 3 }).eachRight(function(num) { console.log(num); });
-
-result = <_.Dictionary>_.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); });
-result = <_.Dictionary>_.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math);
-result = <_.Dictionary>_.groupBy(['one', 'two', 'three'], 'length');
-
-	result = <_.LoDashObjectWrapper<_.Dictionary>>_([4.2, 6.1, 6.4]).groupBy(function(num) { return Math.floor(num); });
-	result = <_.LoDashObjectWrapper<_.Dictionary>>_([4.2, 6.1, 6.4]).groupBy(function(num) { return this.floor(num); }, Math);
-	result = <_.LoDashObjectWrapper<_.Dictionary>>_(['one', 'two', 'three']).groupBy('length');
-
-result = <_.Dictionary>_.indexBy(keys, 'dir');
-result = <_.Dictionary>_.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
-result = <_.Dictionary>_.indexBy(keys, function(key) { this.fromCharCode(key.code); }, String);
-
-result = _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
-result = _.invoke([123, 456], String.prototype.split, '');
-
-result = _.map([1, 2, 3], function(num) { return num * 3; });
-result = _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
-result = _.map(stoogesAges, 'name');
-
-	result = _([1, 2, 3]).map(function(num) { return num * 3; }).value();
-	result = _({ 'one': 1, 'two': 2, 'three': 3 }).map(function(num) { return num * 3; }).value();
-	result = _(stoogesAges).map('name').value();
-
-result = _.collect([1, 2, 3], function(num) { return num * 3; });
-result = _.collect({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
-result = _.collect(stoogesAges, 'name');
-
-	result = _([1, 2, 3]).collect(function(num) { return num * 3; }).value();
-	result = _({ 'one': 1, 'two': 2, 'three': 3 }).collect(function(num) { return num * 3; }).value();
-	result = _(stoogesAges).collect('name').value();
-
-result = _.max([4, 2, 8, 6]);
-result = _.max(stoogesAges, function(stooge) { return stooge.age; });
-result = _.max(stoogesAges, 'age');
-
-result = _.min([4, 2, 8, 6]);
-result = _.min(stoogesAges, function(stooge) { return stooge.age; });
-result = _.min(stoogesAges, 'age');
-
-result = _.pluck(stoogesAges, 'name');
-
-result = _.reduce([1, 2, 3], function(sum: number, num: number) {
-  return sum + num;
-});
-interface ABC {
-  a: number;
-  b: number;
-  c: number;
-}
-result = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(r: ABC, num, key) {
-  r[key] = num * 3;
-  return r;
-}, {});
-
-result = _.foldl([1, 2, 3], function(sum, num) {
-  return sum + num;
-});
-result = _.foldl({ 'a': 1, 'b': 2, 'c': 3 }, function(r: ABC, num, key) {
-  r[key] = num * 3;
-  return r;
-}, {});
-
-result = _.inject([1, 2, 3], function(sum, num) {
-  return sum + num;
-});
-result = _.inject({ 'a': 1, 'b': 2, 'c': 3 }, function(r: ABC, num, key) {
-  r[key] = num * 3;
-  return r;
-}, {});
-
-result = _.reduceRight([[0, 1], [2, 3], [4, 5]], function(a: number[], b: number[]) { return a.concat(b); }, []);
-result = _.foldr([[0, 1], [2, 3], [4, 5]], function(a: number[], b: number[]) { return a.concat(b); }, []);
-
-result = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
-result = _.reject(foodsCombined, 'organic');
-result = _.reject(foodsCombined, { 'type': 'fruit' });
-
-result = _.sample([1, 2, 3, 4]);
-result = _.sample([1, 2, 3, 4], 2);
-
-result = _.shuffle([1, 2, 3, 4, 5, 6]);
-
-result = _.size([1, 2]);
-result = _.size({ 'one': 1, 'two': 2, 'three': 3 });
-result = _.size('curly');
-
-result = _.some([null, 0, 'yes', false], Boolean);
-result = _.some(foodsCombined, 'organic');
-result = _.some(foodsCombined, { 'type': 'meat' });
-	
-result = _.any([null, 0, 'yes', false], Boolean);
-result = _.any(foodsCombined, 'organic');
-result = _.any(foodsCombined, { 'type': 'meat' });
-	
-result = _.sortBy([1, 2, 3], function(num) { return Math.sin(num); });
-result = _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
-result = _.sortBy(['banana', 'strawberry', 'apple'], 'length');
-
-(function(a: number, b: number, c: number, d: number){ return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
-
-result = _.where(stoogesCombined, { 'age': 40 });
-result = _.where(stoogesCombined, { 'quotes': ['Poifect!'] });
-	
-/*************
- * Functions *
- *************/
-var saves = ['profile', 'settings'];
-var asyncSave = (obj: any) => obj.done();
-var done: Function;
-
-done = _.after(saves.length, function() {
-  console.log('Done saving!');
-});
-
-_.forEach(saves, function(type) {
-  asyncSave({ 'type': type, 'complete': done });
-});
-
-done = _(saves.length).after(function() {
-  console.log('Done saving!');
-}).value();
-
-_.forEach(saves, function(type) {
-  asyncSave({ 'type': type, 'complete': done });
-});
-
-var funcBind = function (greeting: string) { return greeting + ' ' + this.name };
-var funcBind2: () => any = _.bind(funcBind, { 'name': 'moe' }, 'hi');
-funcBind2();
-
-var funcBind3: () => any = _(funcBind).bind({ 'name': 'moe' }, 'hi').value();
-funcBind3();
-
-var view = {
- 'label': 'docs',
- 'onClick': function() { console.log('clicked ' + this.label); }
-};
-
-view = _.bindAll(view);
-jQuery('#docs').on('click', view.onClick);
-
-view = _(view).bindAll().value();
-jQuery('#docs').on('click', view.onClick);
-
-var objectBindKey = {
-  'name': 'moe',
-  'greet': function(greeting: string) {
-    return greeting + ' ' + this.name;
-  }
-};
-
-var funcBindKey: Function = _.bindKey(objectBindKey, 'greet', 'hi');
-funcBindKey();
-
-objectBindKey.greet = function(greeting) {
-  return greeting + ', ' + this.name + '!';
-};
-
-funcBindKey();
-
-funcBindKey = _(objectBindKey).bindKey('greet', 'hi').value();
-funcBindKey();
-
-var realNameMap = {
-  'curly': 'jerome'
-};
-
-var format = function(name: string) {
-  name = realNameMap[name.toLowerCase()] || name;
-  return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
-};
-
-var greet = function(formatted: string) {
-  return 'Hiya ' + formatted + '!';
-};
-
-result = _.compose(greet, format);
-result = <_.LoDashObjectWrapper>_(greet).compose(format);
-
-var createCallbackObj = { name: 'Joe' };
-result = <() => any>_.createCallback('name');
-result = <() => boolean>_.createCallback(createCallbackObj);
-result = <_.LoDashObjectWrapper<() => any>>_('name').createCallback();
-result = <_.LoDashObjectWrapper<() => boolean>>_(createCallbackObj).createCallback();
-
-result = _.curry(function(a, b, c) {
-  	console.log(a + b + c);
-});
-
-result = <_.LoDashObjectWrapper>_(function(a, b, c) {
-  	console.log(a + b + c);
-}).curry();
-
-declare var source: any;
-result = _.debounce(function() {}, 150);
-
-jQuery('#postbox').on('click', _.debounce(function() {}, 300, {
-  'leading': true,
-  'trailing': false
-}));
-
-source.addEventListener('message', _.debounce(function() {}, 250, {
-  'maxWait': 1000
-}), false);
-
-result = <_.LoDashObjectWrapper>_(function() {}).debounce(150);
-
-jQuery('#postbox').on('click', <_.LoDashObjectWrapper>_(function() {}).debounce(300, {
-  'leading': true,
-  'trailing': false
-}));
-
-source.addEventListener('message', <_.LoDashObjectWrapper>_(function() {}).debounce(250, {
-  'maxWait': 1000
-}), false);
-
-var returnedDebounce = _.throttle(function (a) { return a * 5; }, 5);
-returnedThrottled(4);
-
-result = _.defer(function() { console.log('deferred'); });
-result = <_.LoDashWrapper>_(function() { console.log('deferred'); }).defer();
-
-var log = _.bind(console.log, console);
-result = _.delay(log, 1000, 'logged later');
-result = <_.LoDashWrapper>_(log).delay(1000, 'logged later');
-
-var fibonacci = _.memoize(function(n) {
-  return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
-});
-
-var data = {
-  'moe': { 'name': 'moe', 'age': 40 },
-  'curly': { 'name': 'curly', 'age': 60 }
-};
-
-var stooge = _.memoize(function(name: string) { return data[name]; }, _.identity);
-stooge('curly');
-
-stooge['cache']['curly'].name = 'jerome';
-stooge('curly');
-
-var returnedMemoize = _.throttle(function (a) { return a * 5; }, 5);
-returnedMemoize(4);
-
-var initialize = _.once(function(){ });
-initialize();
-initialize();''
-var returnedOnce = _.throttle(function (a) { return a * 5; }, 5);
-returnedOnce(4);
-
-var greetPartial = function(greeting: string, name: string) { return greeting + ' ' + name; };
-var hi = _.partial(greetPartial, 'hi');
-hi('moe');
-
-var defaultsDeep = _.partialRight(_.merge, _.defaults);
-
-var optionsPartialRight = {
-  'variable': 'data',
-  'imports': { 'jq': $ }
-};
-
-defaultsDeep(optionsPartialRight, _.templateSettings);
-
-var throttled = _.throttle(function () { }, 100);
-jQuery(window).on('scroll', throttled);
-
-jQuery('.interactive').on('click', _.throttle(function() { }, 300000, {
-  'trailing': false
-}));
-
-var returnedThrottled = _.throttle(function (a) { return a*5; }, 5);
-returnedThrottled(4);
-
-var helloWrap = function(name: string) { return 'hello ' + name; };
-var helloWrap2 = _.wrap(helloWrap, function(func) {
-  return 'before, ' + func('moe') + ', after';
-});
-helloWrap2();
-
-/**********
-* Objects *
-***********/
-interface NameAge {
-  name: string;
-  age: number;
-}
-result = _.assign({ 'name': 'moe' }, { 'age': 40 });
-result = _.assign({ 'name': 'moe' }, { 'age': 40 }, function(a, b) {
-  return typeof a == 'undefined' ? b : a;
-});
-
-result = <_.LoDashObjectWrapper>_({ 'name': 'moe' }).assign({ 'age': 40 });
-result = <_.LoDashObjectWrapper>_({ 'name': 'moe' }).assign({ 'age': 40 }, function(a, b) {
-  return typeof a == 'undefined' ? b : a;
-});
-
-result = _.extend({ 'name': 'moe' }, { 'age': 40 });
-result = _.extend({ 'name': 'moe' }, { 'age': 40 }, function(a, b) {
-  return typeof a == 'undefined' ? b : a;
-});
-
-result = <_.LoDashObjectWrapper>_({ 'name': 'moe' }).extend({ 'age': 40 });
-result = <_.LoDashObjectWrapper>_({ 'name': 'moe' }).extend({ 'age': 40 }, function(a, b) {
-  return typeof a == 'undefined' ? b : a;
-});
-
-result = _.clone(stoogesAges);
-result = _.clone(stoogesAges, true);
-result = _.clone(stoogesAges, true, function(value) {
-    return _.isElement(value) ? value.cloneNode(false) : undefined;
-});
-
-result = _.cloneDeep(stoogesAges);
-result = _.cloneDeep(stoogesAges, function(value) {
-    return _.isElement(value) ? value.cloneNode(false) : undefined;
-});
-
-interface Food {
-  name: string;
-  type: string;
-}
-var foodDefaults = { 'name': 'apple' };
-result = _.defaults(foodDefaults, { 'name': 'banana', 'type': 'fruit' });
-  result = <_.LoDashObjectWrapper>_(foodDefaults).defaults({ 'name': 'banana', 'type': 'fruit' });
-
-result = _.findKey({ 'a': 1, 'b': 2, 'c': 3, 'd': 4 }, function(num) {
-  return num % 2 == 0;
-});
-
-result = _.findLastKey({ 'a': 1, 'b': 2, 'c': 3, 'd': 4 }, function(num) {
-  return num % 2 == 1;
-});
-
-result = _.forIn(new Dog('Dagny'), function(value, key) {
-  console.log(key);
-});
-
-result = <_.LoDashObjectWrapper>_(new Dog('Dagny')).forIn(function(value, key) {
-  console.log(key);
-});
-
-result = _.forInRight(new Dog('Dagny'), function(value, key) {
-  console.log(key);
-});
-
-result = <_.LoDashObjectWrapper>_(new Dog('Dagny')).forInRight(function(value, key) {
-  console.log(key);
-});
-
-interface ZeroOne {
-  0: string;
-  1: string;
-  one: string;
-}
-
-result = _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
-  console.log(key);
-});
-
-	result = <_.LoDashObjectWrapper>_({ '0': 'zero', '1': 'one', 'length': 2 }).forOwn(function(num, key) {
-	  console.log(key);
-	});
-
-result = _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {
-  console.log(key);
-});
-
-	result = <_.LoDashObjectWrapper>_({ '0': 'zero', '1': 'one', 'length': 2 }).forOwnRight(function(num, key) {
-	  console.log(key);
-	});
-
-result = _.functions(_);
-result = _.methods(_);
-
-result = <_.LoDashArrayWrapper>_(_).functions();
-result = <_.LoDashArrayWrapper>_(_).methods();
-
-result = _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
-
-interface FirstSecond {
-  first: string;
-  second: string;
-}
-result = _.invert({ 'first': 'moe', 'second': 'larry' });
-
-(function(...args: any[]) { return _.isArguments(arguments); })(1, 2, 3);
-
-(function () { return _.isArray(arguments); })();
-result = _.isArray([1, 2, 3]);
-
-result = _.isBoolean(null);
-
-result = _.isDate(new Date());
-
-result = _.isElement(document.body);
-
-result = _.isEmpty([1, 2, 3]);
-result = _.isEmpty({});
-result = _.isEmpty('');
-
-var moe = { 'name': 'moe', 'age': 40 };
-var copy = { 'name': 'moe', 'age': 40 };
-
-result = _.isEqual(moe, copy);
-
-var words = ['hello', 'goodbye'];
-var otherWords = ['hi', 'goodbye'];
-
-result = _.isEqual(words, otherWords, function(a, b) {
-  var reGreet = /^(?:hello|hi)$/i,
-      aGreet = _.isString(a) && reGreet.test(a),
-      bGreet = _.isString(b) && reGreet.test(b);
-
-  return (aGreet || bGreet) ? (aGreet == bGreet) : undefined;
-});
-
-result = _.isFinite(-101);
-result = _.isFinite('10');
-result = _.isFinite(true);
-result = _.isFinite('');
-result = _.isFinite(Infinity);
-
-result = _.isFunction(_);
-
-result = _.isNaN(NaN);
-result = _.isNaN(new Number(NaN));
-result = _.isNaN(undefined);
-
-result = _.isNull(null);
-result = _.isNull(undefined);
-
-result = _.isNumber(8.4 * 5);
-
-result = _.isObject({});
-result = _.isObject([1, 2, 3]);
-result = _.isObject(1);
-
-class Stooge {
-	constructor(
-		public name: string,
-		public age: number
-	) {}
-}
-
-result = _.isPlainObject(new Stooge('moe', 40));
-result = _.isPlainObject([1, 2, 3]);
-result = _.isPlainObject({ 'name': 'moe', 'age': 40 });
-
-result = _.isRegExp(/moe/);
-
-result = _.isString('moe');
-
-result = _.isUndefined(void 0);
-
-result = _.keys({ 'one': 1, 'two': 2, 'three': 3 });
-
-var mergeNames = {
-  'stooges': [
-    { 'name': 'moe' },
-    { 'name': 'larry' }
-  ]
-};
-
-var mergeAges = {
-  'stooges': [
-    { 'age': 40 },
-    { 'age': 50 }
-  ]
-};
-
-result = _.merge(mergeNames, mergeAges);
-
-var mergeFood = {
-  'fruits': ['apple'],
-  'vegetables': ['beet']
-};
-
-var mergeOtherFood = {
-  'fruits': ['banana'],
-  'vegetables': ['carrot']
-};
-
-interface FruitVeg {
-  fruits: string[];
-  vegetables: string[]
-};
-
-result = _.merge(mergeFood, mergeOtherFood, function(a, b) {
-  return _.isArray(a) ? a.concat(b) : undefined;
-});
-
-interface HasName {
-  name: string;
-}
-result = _.omit({ 'name': 'moe', 'age': 40 }, 'age');
-result = _.omit({ 'name': 'moe', 'age': 40 }, ['age']);
-result = _.omit({ 'name': 'moe', 'age': 40 }, function(value) {
-  return typeof value == 'number';
-});
-
-result = _.pairs({ 'moe': 30, 'larry': 40 });
-
-result = _.pick({ 'name': 'moe', '_userid': 'moe1' }, 'name');
-result = _.pick({ 'name': 'moe', '_userid': 'moe1' }, ['name']);
-result = _.pick({ 'name': 'moe', '_userid': 'moe1' }, function(value, key) {
-  return key.charAt(0) != '_';
-});
-
-result = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(r, num) {
-  num *= num;
-  if (num % 2) {
-    return r.push(num) < 3;
-  }
-});
-// → [1, 9, 25]
-
-result = <{a:number;b:number;c:number;}>_.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(r, num, key) {
-  r[key] = num * 3;
-});
-
-result = _.values({ 'one': 1, 'two': 2, 'three': 3 });
-
-/**********
-* Utilities *
-***********/
-
-result = _.escape('Moe, Larry & Curly');
-
-result = <{ name: string }>_.identity({ 'name': 'moe' });
-
-_.mixin({
-  'capitalize': function(string) {
-    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
-  }
-});
-
-var lodash = _.noConflict();
-
-result = _.parseInt('08');
-
-result = _.random(0, 5);
-result = _.random(5);
-result = _.random(5, true);
-result = _.random(1.2, 5.2);
-result = _.random(0, 5, true);
-
-var object = {
-  'cheese': 'crumpets',
-  'stuff': function() {
-    return 'nonsense';
-  }
-};
-
-result = _.result(object, 'cheese');
-result = _.result(object, 'stuff');
-
-var tempObject = {};
-result = _.runInContext(tempObject);
-
-result = <_.TemplateExecutor>_.template('hello <%= name %>');
-result = _.template('<%- value %>', { 'value': '