From d98910416f97ee6f5635ef7bd8e68b70565616ad Mon Sep 17 00:00:00 2001 From: miffels Date: Tue, 8 Apr 2014 12:05:23 +0200 Subject: [PATCH 1/4] Adjusting type angular.resource type definitions and tests to better reflect actual interface (particularly promises) --- angularjs/angular-resource-tests.ts | 49 +++++++++++- angularjs/angular-resource.d.ts | 112 +++++++++++++++++----------- 2 files changed, 117 insertions(+), 44 deletions(-) diff --git a/angularjs/angular-resource-tests.ts b/angularjs/angular-resource-tests.ts index 2870b21ad..5a276e949 100644 --- a/angularjs/angular-resource-tests.ts +++ b/angularjs/angular-resource-tests.ts @@ -19,7 +19,9 @@ actionDescriptor.params = { key: 'value' }; /////////////////////////////////////// var resourceClass: IMyResourceClass; var resource: IMyResource; -var resourceArray: IMyResource[]; +var resourceArray: ng.resource.IResourceArray; +var promise : ng.IPromise; +var arrayPromise : ng.IPromise; resource = resourceClass.delete(); resource = resourceClass.delete({ key: 'value' }); @@ -30,6 +32,15 @@ resource = resourceClass.delete({ key: 'value' }, { key: 'value' }); resource = resourceClass.delete({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.delete({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +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' }, { key: 'value' }); +promise = resource.$delete({ key: 'value' }, { key: 'value' }, function () { }); +promise = resource.$delete({ key: 'value' }, { key: 'value' }, function () { }, function () { }); + resource = resourceClass.get(); resource = resourceClass.get({ key: 'value' }); resource = resourceClass.get({ key: 'value' }, function () { }); @@ -39,6 +50,15 @@ resource = resourceClass.get({ key: 'value' }, { key: 'value' }); resource = resourceClass.get({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.get({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +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' }, { key: 'value' }); +promise = resource.$get({ key: 'value' }, { key: 'value' }, function () { }); +promise = resource.$get({ key: 'value' }, { key: 'value' }, function () { }, function () { }); + resourceArray = resourceClass.query(); resourceArray = resourceClass.query({ key: 'value' }); resourceArray = resourceClass.query({ key: 'value' }, function () { }); @@ -48,6 +68,15 @@ resourceArray = resourceClass.query({ key: 'value' }, { key: 'value' }); resourceArray = resourceClass.query({ key: 'value' }, { key: 'value' }, function () { }); resourceArray = resourceClass.query({ key: 'value' }, { 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' }, { key: 'value' }); +arrayPromise = resourceArray[0].query({ key: 'value' }, { key: 'value' }, function () { }); +arrayPromise = resourceArray[0].query({ key: 'value' }, { key: 'value' }, function () { }, function () { }); + resource = resourceClass.remove(); resource = resourceClass.remove({ key: 'value' }); resource = resourceClass.remove({ key: 'value' }, function () { }); @@ -57,6 +86,15 @@ resource = resourceClass.remove({ key: 'value' }, { key: 'value' }); resource = resourceClass.remove({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.remove({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +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' }, { key: 'value' }); +promise = resource.$remove({ key: 'value' }, { key: 'value' }, function () { }); +promise = resource.$remove({ key: 'value' }, { key: 'value' }, function () { }, function () { }); + resource = resourceClass.save(); resource = resourceClass.save({ key: 'value' }); resource = resourceClass.save({ key: 'value' }, function () { }); @@ -66,6 +104,15 @@ resource = resourceClass.save({ key: 'value' }, { key: 'value' }); resource = resourceClass.save({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.save({ key: 'value' }, { 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' }, { key: 'value' }); +promise = resource.$save({ key: 'value' }, { key: 'value' }, function () { }); +promise = resource.$save({ key: 'value' }, { key: 'value' }, function () { }, function () { }); + /////////////////////////////////////// // IResourceService /////////////////////////////////////// diff --git a/angularjs/angular-resource.d.ts b/angularjs/angular-resource.d.ts index a0cd4ab85..942e5e120 100644 --- a/angularjs/angular-resource.d.ts +++ b/angularjs/angular-resource.d.ts @@ -53,64 +53,90 @@ declare module ng.resource { 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): 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): 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): 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): 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): T; + delete(params: Object, data: Object, success: Function, error?: Function): T; } 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): ng.IPromise; + $get(success: Function, error?: Function): ng.IPromise; + $get(params: Object, success: Function, error?: Function): ng.IPromise; + $get(params: Object, data: Object, success?: Function): ng.IPromise; + $get(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; + + $query(): ng.IPromise; + $query(params: Object): ng.IPromise; + $query(success: Function, error?: Function): ng.IPromise; + $query(params: Object, success: Function, error?: Function): ng.IPromise; + $query(params: Object, data: Object, success?: Function): ng.IPromise; + $query(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; + + $save(): ng.IPromise; + $save(data: Object): ng.IPromise; + $save(success: Function, error?: Function): ng.IPromise; + $save(data: Object, success: Function, error?: Function): ng.IPromise; + $save(params: Object, data: Object, success?: Function): ng.IPromise; + $save(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; + + $remove(): ng.IPromise; + $remove(params: Object): ng.IPromise; + $remove(success: Function, error?: Function): ng.IPromise; + $remove(params: Object, success: Function, error?: Function): ng.IPromise; + $remove(params: Object, data: Object, success?: Function): ng.IPromise; + $remove(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; + + $delete(): ng.IPromise; + $delete(params: Object): ng.IPromise; + $delete(success: Function, error?: Function): ng.IPromise; + $delete(params: Object, success: Function, error?: Function): ng.IPromise; + $delete(params: Object, data: Object, success?: Function): ng.IPromise; + $delete(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; + /** the promise of the original server interaction that created this instance. **/ $promise : ng.IPromise; $resolved : boolean; } + interface Array {} + + 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; From f037b846658263f8eb8d7a01de7d072b5c7289e2 Mon Sep 17 00:00:00 2001 From: miffels Date: Tue, 8 Apr 2014 13:46:34 +0200 Subject: [PATCH 2/4] Fixing array interface and tests and adding humble co-author note --- angularjs/angular-resource-tests.ts | 86 ++++++++++++++++------------- angularjs/angular-resource.d.ts | 11 ++-- 2 files changed, 54 insertions(+), 43 deletions(-) diff --git a/angularjs/angular-resource-tests.ts b/angularjs/angular-resource-tests.ts index 5a276e949..327fcaba6 100644 --- a/angularjs/angular-resource-tests.ts +++ b/angularjs/angular-resource-tests.ts @@ -20,8 +20,6 @@ actionDescriptor.params = { key: 'value' }; var resourceClass: IMyResourceClass; var resource: IMyResource; var resourceArray: ng.resource.IResourceArray; -var promise : ng.IPromise; -var arrayPromise : ng.IPromise; resource = resourceClass.delete(); resource = resourceClass.delete({ key: 'value' }); @@ -32,15 +30,6 @@ resource = resourceClass.delete({ key: 'value' }, { key: 'value' }); resource = resourceClass.delete({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.delete({ key: 'value' }, { key: 'value' }, function () { }, function () { }); -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' }, { key: 'value' }); -promise = resource.$delete({ key: 'value' }, { key: 'value' }, function () { }); -promise = resource.$delete({ key: 'value' }, { key: 'value' }, function () { }, function () { }); - resource = resourceClass.get(); resource = resourceClass.get({ key: 'value' }); resource = resourceClass.get({ key: 'value' }, function () { }); @@ -50,15 +39,6 @@ resource = resourceClass.get({ key: 'value' }, { key: 'value' }); resource = resourceClass.get({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.get({ key: 'value' }, { key: 'value' }, function () { }, function () { }); -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' }, { key: 'value' }); -promise = resource.$get({ key: 'value' }, { key: 'value' }, function () { }); -promise = resource.$get({ key: 'value' }, { key: 'value' }, function () { }, function () { }); - resourceArray = resourceClass.query(); resourceArray = resourceClass.query({ key: 'value' }); resourceArray = resourceClass.query({ key: 'value' }, function () { }); @@ -67,15 +47,7 @@ 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 () { }); - -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' }, { key: 'value' }); -arrayPromise = resourceArray[0].query({ key: 'value' }, { key: 'value' }, function () { }); -arrayPromise = resourceArray[0].query({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +resourceArray.push(resource); resource = resourceClass.remove(); resource = resourceClass.remove({ key: 'value' }); @@ -86,15 +58,6 @@ resource = resourceClass.remove({ key: 'value' }, { key: 'value' }); resource = resourceClass.remove({ key: 'value' }, { key: 'value' }, function () { }); resource = resourceClass.remove({ key: 'value' }, { key: 'value' }, function () { }, function () { }); -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' }, { key: 'value' }); -promise = resource.$remove({ key: 'value' }, { key: 'value' }, function () { }); -promise = resource.$remove({ key: 'value' }, { key: 'value' }, function () { }, function () { }); - resource = resourceClass.save(); resource = resourceClass.save({ key: 'value' }); resource = resourceClass.save({ key: 'value' }, function () { }); @@ -104,6 +67,49 @@ 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' }, { key: 'value' }); +promise = resource.$delete({ key: 'value' }, { key: 'value' }, function () { }); +promise = resource.$delete({ key: 'value' }, { key: 'value' }, function () { }, function () { }); + +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' }, { key: 'value' }); +promise = resource.$get({ key: 'value' }, { key: 'value' }, function () { }); +promise = resource.$get({ key: 'value' }, { 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' }, { key: 'value' }); +arrayPromise = resourceArray[0].$query({ key: 'value' }, { key: 'value' }, function () { }); +arrayPromise = resourceArray[0].$query({ key: 'value' }, { key: 'value' }, function () { }, function () { }); + +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' }, { key: 'value' }); +promise = resource.$remove({ key: 'value' }, { key: 'value' }, function () { }); +promise = resource.$remove({ key: 'value' }, { key: 'value' }, function () { }, function () { }); + promise = resource.$save(); promise = resource.$save({ key: 'value' }); promise = resource.$save({ key: 'value' }, function () { }); @@ -132,3 +138,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 942e5e120..52706d68d 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 /// @@ -129,11 +129,12 @@ declare module ng.resource { $resolved : boolean; } - interface Array {} - - interface IResourceArray extends Array { + /** + * 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; + $promise : ng.IPromise; $resolved : boolean; } From fffce8af7d5cae04f62f0f6082f6e3d8adfbefb5 Mon Sep 17 00:00:00 2001 From: miffels Date: Tue, 8 Apr 2014 14:15:34 +0200 Subject: [PATCH 3/4] Simplifying instance API and adding some explanatory comments --- angularjs/angular-resource-tests.ts | 20 +++--------- angularjs/angular-resource.d.ts | 50 ++++++++++++----------------- 2 files changed, 25 insertions(+), 45 deletions(-) diff --git a/angularjs/angular-resource-tests.ts b/angularjs/angular-resource-tests.ts index 327fcaba6..107d6b29e 100644 --- a/angularjs/angular-resource-tests.ts +++ b/angularjs/angular-resource-tests.ts @@ -79,45 +79,35 @@ 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' }, { key: 'value' }); -promise = resource.$delete({ key: 'value' }, { key: 'value' }, function () { }); -promise = resource.$delete({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +promise = resource.$delete({ key: 'value' }, function () { }, function () { }); 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' }, { key: 'value' }); -promise = resource.$get({ key: 'value' }, { key: 'value' }, function () { }); -promise = resource.$get({ key: 'value' }, { key: 'value' }, 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' }, { key: 'value' }); -arrayPromise = resourceArray[0].$query({ key: 'value' }, { key: 'value' }, function () { }); -arrayPromise = resourceArray[0].$query({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +arrayPromise = resourceArray[0].$query({ key: 'value' }, function () { }, function () { }); 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' }, { key: 'value' }); -promise = resource.$remove({ key: 'value' }, { key: 'value' }, function () { }); -promise = resource.$remove({ key: 'value' }, { key: 'value' }, 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' }, { key: 'value' }); -promise = resource.$save({ key: 'value' }, { key: 'value' }, function () { }); -promise = resource.$save({ key: 'value' }, { key: 'value' }, function () { }, function () { }); +promise = resource.$save({ key: 'value' }, function () { }, function () { }); /////////////////////////////////////// // IResourceService diff --git a/angularjs/angular-resource.d.ts b/angularjs/angular-resource.d.ts index 52706d68d..393362a95 100644 --- a/angularjs/angular-resource.d.ts +++ b/angularjs/angular-resource.d.ts @@ -50,79 +50,69 @@ 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(params: Object): T; get(success: Function, error?: Function): T; get(params: Object, success: Function, error?: Function): T; - get(params: Object, data: Object, success?: Function): T; - get(params: Object, data: 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): IResourceArray; - query(params: Object, data: Object, success: Function, error?: Function): IResourceArray; + query(params: Object, data: Object, success?: Function, error?: Function): IResourceArray; save(): T; save(data: Object): T; save(success: Function, error?: Function): T; save(data: Object, success: Function, error?: Function): T; - save(params: Object, data: Object, success?: Function): T; - save(params: Object, data: Object, success: Function, error?: Function): T; + save(params: Object, data: Object, success?: Function, error?: Function): T; remove(): T; remove(params: Object): T; remove(success: Function, error?: Function): T; remove(params: Object, success: Function, error?: Function): T; - remove(params: Object, data: Object, success?: Function): T; - remove(params: Object, data: Object, success: Function, error?: Function): T; + remove(params: Object, data: Object, success?: Function, error?: Function): T; delete(): T; delete(params: Object): T; delete(success: Function, error?: Function): T; delete(params: Object, success: Function, error?: Function): T; - delete(params: Object, data: Object, success?: Function): T; - delete(params: Object, data: 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(): ng.IPromise; - $get(params: Object): ng.IPromise; + $get(params?: Object, success?: Function, error?: Function): ng.IPromise; $get(success: Function, error?: Function): ng.IPromise; - $get(params: Object, success: Function, error?: Function): ng.IPromise; - $get(params: Object, data: Object, success?: Function): ng.IPromise; - $get(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; $query(): ng.IPromise; - $query(params: Object): ng.IPromise; + $query(params?: Object, success?: Function, error?: Function): ng.IPromise; $query(success: Function, error?: Function): ng.IPromise; - $query(params: Object, success: Function, error?: Function): ng.IPromise; - $query(params: Object, data: Object, success?: Function): ng.IPromise; - $query(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; $save(): ng.IPromise; - $save(data: Object): ng.IPromise; + $save(params?: Object, success?: Function, error?: Function): ng.IPromise; $save(success: Function, error?: Function): ng.IPromise; - $save(data: Object, success: Function, error?: Function): ng.IPromise; - $save(params: Object, data: Object, success?: Function): ng.IPromise; - $save(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; $remove(): ng.IPromise; - $remove(params: Object): ng.IPromise; + $remove(params?: Object, success?: Function, error?: Function): ng.IPromise; $remove(success: Function, error?: Function): ng.IPromise; - $remove(params: Object, success: Function, error?: Function): ng.IPromise; - $remove(params: Object, data: Object, success?: Function): ng.IPromise; - $remove(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; $delete(): ng.IPromise; - $delete(params: Object): ng.IPromise; + $delete(params?: Object, success?: Function, error?: Function): ng.IPromise; $delete(success: Function, error?: Function): ng.IPromise; - $delete(params: Object, success: Function, error?: Function): ng.IPromise; - $delete(params: Object, data: Object, success?: Function): ng.IPromise; - $delete(params: Object, data: Object, success: Function, error?: Function): ng.IPromise; /** the promise of the original server interaction that created this instance. **/ $promise : ng.IPromise; From 1efaca22797fc58df97aad212de755730ae07203 Mon Sep 17 00:00:00 2001 From: miffels Date: Tue, 8 Apr 2014 19:47:20 +0200 Subject: [PATCH 4/4] Fixing array call promise inconsistency (thanks @jackdolabany) and adding tests --- angularjs/angular-resource-tests.ts | 4 ++++ angularjs/angular-resource.d.ts | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/angularjs/angular-resource-tests.ts b/angularjs/angular-resource-tests.ts index 107d6b29e..c80cc662d 100644 --- a/angularjs/angular-resource-tests.ts +++ b/angularjs/angular-resource-tests.ts @@ -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' }); @@ -48,6 +49,7 @@ 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' }); @@ -80,6 +82,7 @@ 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' }); @@ -94,6 +97,7 @@ 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' }); diff --git a/angularjs/angular-resource.d.ts b/angularjs/angular-resource.d.ts index 393362a95..51b93091f 100644 --- a/angularjs/angular-resource.d.ts +++ b/angularjs/angular-resource.d.ts @@ -98,9 +98,9 @@ declare module ng.resource { $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; + $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; @@ -124,7 +124,7 @@ declare module ng.resource { */ interface IResourceArray extends Array { /** the promise of the original server interaction that created this collection. **/ - $promise : ng.IPromise; + $promise : ng.IPromise>; $resolved : boolean; }