diff --git a/js-data-angular/js-data-angular.d.ts b/js-data-angular/js-data-angular.d.ts index 242c6d5ab..1fff95afb 100644 --- a/js-data-angular/js-data-angular.d.ts +++ b/js-data-angular/js-data-angular.d.ts @@ -13,16 +13,12 @@ declare module JSData { } interface DS { - - bindAll(resourceName:string, params:DSFilterParams, scope:ng.IScope, expr:string, cb?:(err:DSError, items:Array)=>void):Function; - - bindOne(resourceName:string, id:string | number, scope:ng.IScope, expr:string, cb?:(err:DSError, item:T)=>void):Function; + bindAll(resourceName:string, params:DSFilterParams, scope:ng.IScope, expr:string, cb?:(err:DSError, items:Array>)=>void):Function; + bindOne(resourceName:string, id:string | number, scope:ng.IScope, expr:string, cb?:(err:DSError, item:T & DSInstanceShorthands)=>void):Function; } interface DSResourceDefinition { - - bindAll(params:DSFilterParams, scope:ng.IScope, expr:string, cb?:(err:DSError, items:Array)=>void):Function; - - bindOne(id:string | number, scope:ng.IScope, expr:string, cb?:(err:DSError, item:T)=>void):Function; + bindAll(params:DSFilterParams, scope:ng.IScope, expr:string, cb?:(err:DSError, items:Array>)=>void):Function; + bindOne(id:string | number, scope:ng.IScope, expr:string, cb?:(err:DSError, item:T & DSInstanceShorthands)=>void):Function; } -} \ No newline at end of file +} diff --git a/js-data-http/js-data-http-tests.ts b/js-data-http/js-data-http-tests.ts index 00457d714..390e20aa9 100644 --- a/js-data-http/js-data-http-tests.ts +++ b/js-data-http/js-data-http-tests.ts @@ -28,7 +28,7 @@ ADocument.inject({ id: 5, author: 'John' }); ADocument.inject({ id: 6, author: 'John' }); // bypass the data store -adapter.updateAll<{ id?: number; author: string; }>(ADocument, { author: 'Johnny' }, { author: 'John' }).then(function (documents) { +adapter.updateAll(ADocument, { author: 'Johnny' }, { author: 'John' }).then(function (documents) { documents[0]; // { id: 5, author: 'Johnny' } // The updated documents have NOT been injected into the data store because we bypassed the data store @@ -37,7 +37,7 @@ adapter.updateAll<{ id?: number; author: string; }>(ADocument, { author: 'Johnny }); // Normally you would just go through the data store -ADocument.updateAll<{ id?: number; author: string; }>({ author: 'Johnny' }, { author: 'John' }).then(function (documents) { +ADocument.updateAll({ author: 'Johnny' }, { author: 'John' }).then(function (documents) { documents[0]; // { id: 5, author: 'Johnny' } // the updated documents have been injected into the data store diff --git a/js-data-http/js-data-http.d.ts b/js-data-http/js-data-http.d.ts index 295e7cc6f..5116f3972 100644 --- a/js-data-http/js-data-http.d.ts +++ b/js-data-http/js-data-http.d.ts @@ -6,7 +6,7 @@ /// declare module JSData { - + interface DSHttpAdapterOptions { serialize?: (resourceName:string, data:any)=>any; deserialize?: (resourceName:string, data:any)=>any; @@ -37,4 +37,8 @@ declare module JSData { } } -declare var DSHttpAdapter:JSData.DSHttpAdapter; \ No newline at end of file +declare var DSHttpAdapter:JSData.DSHttpAdapter; + +declare module 'js-data-http' { + export = DSHttpAdapter; +} diff --git a/js-data/js-data-node-tests.ts b/js-data/js-data-node-tests.ts index 2b6cf44a5..e1989bb20 100644 --- a/js-data/js-data-node-tests.ts +++ b/js-data/js-data-node-tests.ts @@ -1,4 +1,3 @@ -/// /// import JSData = require('js-data'); @@ -13,4 +12,4 @@ var User = store.defineResource('user'); User.find(1).then(function (user: any) { user; // { id: 1, name: 'John' } -}); \ No newline at end of file +}); diff --git a/js-data/js-data-tests.ts b/js-data/js-data-tests.ts index 113862bcf..b596274f8 100644 --- a/js-data/js-data-tests.ts +++ b/js-data/js-data-tests.ts @@ -135,10 +135,9 @@ aComment.filter({ }); // Get all comments where comment.userId == 5 -//TODO rather unexplicit version of where.. support in typings? -//aComment.filter({ -// userId: 5 -//}); +aComment.filter({ + userId: 5 +}); // Get all comments where comment.userId === 5 aComment.filter({ @@ -400,7 +399,7 @@ OtherOtherComment.update(1, {content: 'stuff'}, {params: {postId: false}}); // P var store = new JSData.DS({ // set the default - beforeCreate: function (resource, data, cb) { + beforeCreate: function (resource:JSData.DSResourceDefinition, data:any, cb:(err:Error, returnData:any)=>void) { // do something general cb(null, data); } @@ -409,7 +408,7 @@ var store = new JSData.DS({ var User4 = store.defineResource({ name: 'user', // set just for this resource - beforeCreate: function (resource, data, cb) { + beforeCreate: function (resource:JSData.DSResourceDefinition, data:any, cb:(err:Error, returnData:any)=>void) { // do something more specific to "users" cb(null, data); } @@ -417,7 +416,7 @@ var User4 = store.defineResource({ User4.create({name: 'John'}, { // set just for this method call - beforeCreate: function (resource, data, cb) { + beforeCreate: function (resource:JSData.DSResourceDefinition, data:any, cb:(err:Error, returnData:any)=>void) { // do something specific for this method call cb(null, data); } diff --git a/js-data/js-data.d.ts b/js-data/js-data.d.ts index 07796ec08..dbb9a3b44 100644 --- a/js-data/js-data.d.ts +++ b/js-data/js-data.d.ts @@ -27,7 +27,7 @@ declare module JSData { clearEmptyQueries?:boolean; debug?:boolean; defaultAdapter?: string; - defaultFilter?: (collection:Array, resourceName:string, params:DSFilterParams, options:DSConfiguration)=>Array; + defaultFilter?: (collection:Array, resourceName:string, params:DSFilterArg, options:DSConfiguration)=>Array; defaultValues?:Object; eagerEject?: boolean; endpoint?: string; @@ -86,6 +86,8 @@ declare module JSData { sort?: string | Array | Array>; } + type DSFilterArg = DSFilterParams | Object; + interface DSAdapterOperationConfiguration extends DSConfiguration { adapter?: string; params?: { @@ -97,6 +99,12 @@ declare module JSData { changesOnly?: boolean; } + interface DSCollection extends Array { + fetch(params?:DSFilterArg, options?:DSConfiguration):JSDataPromise>>; + params:DSFilterArg; + resourceName:string; + } + interface DS { new(config?:DSConfiguration):DS; @@ -114,16 +122,16 @@ declare module JSData { clear():Array>; compute(resourceName:string, idOrInstance:number | string | T):T & DSInstanceShorthands; create(resourceName:string, attrs:Object, options?:DSConfiguration):JSDataPromise>; - createCollection(resourceName:string, array?:Array, params?:DSFilterParams, options?:DSConfiguration); + createCollection(resourceName:string, array?:Array, params?:DSFilterArg, options?:DSConfiguration):DSCollection>; createInstance(resourceName:string, attrs?:Object, options?:DSConfiguration):T & DSInstanceShorthands; destroy(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; - destroyAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise; + destroyAll(resourceName:string, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise; digest():void; eject(resourceName:string, id:string | number, options?:DSConfiguration):T & DSInstanceShorthands; - ejectAll(resourceName:string, params:DSFilterParams, options?:DSConfiguration):Array>; - filter(resourceName:string, params:DSFilterParams, options?:DSConfiguration):Array>; + ejectAll(resourceName:string, params:DSFilterArg, options?:DSConfiguration):Array>; + filter(resourceName:string, params:DSFilterArg, options?:DSConfiguration):Array>; find(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; - findAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + findAll(resourceName:string, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; get(resourceName:string, id:string | number):T & DSInstanceShorthands; getAll(resourceName:string, ids?:Array):Array>; hasChanges(resourceName:string, id:string | number):boolean; @@ -136,11 +144,11 @@ declare module JSData { previous(resourceName:string, id:string | number):T & DSInstanceShorthands; reap(resourceName:string):JSDataPromise; refresh(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; - refreshAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + refreshAll(resourceName:string, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; revert(resourceName:string, id:string | number):T & DSInstanceShorthands; save(resourceName:string, id:string | number, options?:DSSaveConfiguration):JSDataPromise>; update(resourceName:string, id:string | number, attrs:Object, options?:DSAdapterOperationConfiguration):JSDataPromise>; - updateAll(resourceName:string, attrs:Object, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + updateAll(resourceName:string, attrs:Object, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; defineResource(resourceNameOrDefinition:string | DSResourceDefinitionConfiguration):DSResourceDefinition; defineResource(resourceNameOrDefinition:string | DSResourceDefinitionConfiguration):DSResourceDefinition & TActions; @@ -153,16 +161,16 @@ declare module JSData { clear():Array>; compute(idOrInstance:number | string | T):T & DSInstanceShorthands; create(attrs:Object, options?:DSConfiguration):JSDataPromise>; - createCollection(array?:Array, params?:DSFilterParams, options?:DSConfiguration); + createCollection(array?:Array, params?:DSFilterArg, options?:DSConfiguration):DSCollection>; createInstance(attrs?:Object, options?:DSConfiguration):T & DSInstanceShorthands; destroy(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; - destroyAll(params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise; + destroyAll(params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise; digest():void; eject(id:string | number, options?:DSConfiguration):T & DSInstanceShorthands; - ejectAll(params:DSFilterParams, options?:DSConfiguration):Array>; - filter(params:DSFilterParams, options?:DSConfiguration):Array>; + ejectAll(params:DSFilterArg, options?:DSConfiguration):Array>; + filter(params:DSFilterArg, options?:DSConfiguration):Array>; find(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; - findAll(params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + findAll(params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; get(id:string | number):T & DSInstanceShorthands; getAll(ids?:Array):Array>; hasChanges(id:string | number):boolean; @@ -175,11 +183,11 @@ declare module JSData { previous(id:string | number):T & DSInstanceShorthands; reap():JSDataPromise; refresh(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; - refreshAll(params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + refreshAll(params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; revert(id:string | number):T & DSInstanceShorthands; save(id:string | number, options?:DSSaveConfiguration):JSDataPromise>; update(id:string | number, attrs:Object, options?:DSAdapterOperationConfiguration):JSDataPromise>; - updateAll(attrs:Object, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + updateAll(attrs:Object, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; } // cannot specify T at interface level because the interface is used as generic constraint itself which ends up being recursive @@ -257,6 +265,11 @@ declare module JSData { afterLoadRelations?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; } + interface IDSResourceLifecycleCreateCollectionEventHandlers { + beforeCreateCollection?: DSSyncLifecycleHookHandler; + afterCreateCollection?: DSSyncLifecycleHookHandler; + } + interface IDSResourceLifecycleEventHandlers extends IDSResourceLifecycleCreateEventHandlers, IDSResourceLifecycleCreateInstanceEventHandlers, IDSResourceLifecycleValidateEventHandlers, @@ -267,7 +280,8 @@ declare module JSData { IDSResourceLifecycleReapEventHandlers, IDSResourceLifecycleFindEventHandlers, IDSResourceLifecycleFindAllEventHandlers, - IDSResourceLifecycleLoadRelationsEventHandlers { + IDSResourceLifecycleLoadRelationsEventHandlers, + IDSResourceLifecycleCreateCollectionEventHandlers { } // errors @@ -293,13 +307,13 @@ declare module JSData { create(config:DSResourceDefinition, attrs:Object, options?:DSConfiguration):JSDataPromise; destroy(config:DSResourceDefinition, id:string | number, options?:DSConfiguration):JSDataPromise; - destroyAll(config:DSResourceDefinition, params:DSFilterParams, options?:DSConfiguration):JSDataPromise; + destroyAll(config:DSResourceDefinition, params:DSFilterArg, options?:DSConfiguration):JSDataPromise; find(config:DSResourceDefinition, id:string | number, options?:DSConfiguration):JSDataPromise; - findAll(config:DSResourceDefinition, params?:DSFilterParams, options?:DSConfiguration):JSDataPromise; + findAll(config:DSResourceDefinition, params?:DSFilterArg, options?:DSConfiguration):JSDataPromise; update(config:DSResourceDefinition, id:string | number, attrs:Object, options?:DSConfiguration):JSDataPromise; - updateAll(config:DSResourceDefinition, attrs:Object, params?:DSFilterParams, options?:DSConfiguration):JSDataPromise; + updateAll(config:DSResourceDefinition, attrs:Object, params?:DSFilterArg, options?:DSConfiguration):JSDataPromise; } // Custom action config diff --git a/js-data/legacy/js-data-1.5.4-tests.ts b/js-data/legacy/js-data-1.5.4-tests.ts index 7d604fcb5..076db194b 100644 --- a/js-data/legacy/js-data-1.5.4-tests.ts +++ b/js-data/legacy/js-data-1.5.4-tests.ts @@ -387,7 +387,7 @@ var promise = OtherOtherComment.find(5); // GET /comment/5 promise.then().catch().finally(); -OtherOtherComment.inject({id: 1, postId: 2}); +OtherOtherComment.inject({id: 1, postId: 2}); // We don't have to provide the parentKey here // because js-data found it in the comment @@ -523,11 +523,11 @@ myResourceDefinition = store.definitions.myResource; * Custom action on datastore resource */ -interface ActionResource extends JSData.DSInstanceShorthands { +interface Resource { someProp:string; } -interface ActionResourceDefinition extends JSData.DSResourceDefinition { +interface ActionsForResource { myAction:JSData.DSActionFn; myOtherAction:JSData.DSActionFn; } @@ -537,7 +537,7 @@ var myOtherAction:JSData.DSActionConfig = { endpoint: 'goHere' }; -var customActionResource = store.defineResource({ +var resourceWithCustomActions = store.defineResource({ name: 'actionResource', actions: { myAction: { @@ -547,16 +547,16 @@ var customActionResource = store.defineResource({ } }); -customActionResource.myAction(3).then((result)=>{ +resourceWithCustomActions.myAction(3).then((result)=>{ var theCustomResult:number = result; }); -customActionResource.myOtherAction(2, {data:'blub'}).then(()=>{ +resourceWithCustomActions.myOtherAction(2, {data:'blub'}).then(()=>{ // success }); -customActionResource.find(1).then((result)=>{ +resourceWithCustomActions.find(1).then((result)=>{ var aProperty = result.someProp; }); @@ -565,7 +565,7 @@ customActionResource.find(1).then((result)=>{ * Instance shorthands */ -var customActionResourceInstance = customActionResource.get(1); +var customActionResourceInstance = resourceWithCustomActions.get(1); customActionResourceInstance.DSCompute(); customActionResourceInstance.DSChanges(); diff --git a/js-data/legacy/js-data-1.5.4.d.ts b/js-data/legacy/js-data-1.5.4.d.ts index 47ef9f833..0140d8139 100644 --- a/js-data/legacy/js-data-1.5.4.d.ts +++ b/js-data/legacy/js-data-1.5.4.d.ts @@ -11,16 +11,12 @@ declare module JSData { interface JSDataPromise { - then(onFulfilled?: (value: R) => U | JSDataPromise, onRejected?: (error: any) => U | JSDataPromise): JSDataPromise; - catch(onRejected?: (error: any) => U | JSDataPromise): JSDataPromise; - // enhanced with finally finally(finallyCb?:() => U):JSDataPromise; } - //TODO switch to class again when typescript supports open ended class declaration interface DS { new(config?:DSConfiguration):DS; @@ -35,43 +31,44 @@ declare module JSData { defaults:DSConfiguration; // async - create(resourceName:string, attrs:Object, options?:DSConfiguration):JSDataPromise; + create(resourceName:string, attrs:Object, options?:DSConfiguration):JSDataPromise>; destroy(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; - destroyAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise; - find(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; - findAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>; - loadRelations(resourceName:string, idOrInstance:string | number | Object, relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise; - update(resourceName:string, id:string | number, attrs:Object, options?:DSSaveConfiguration):JSDataPromise; - updateAll(resourceName:string, attrs:Object, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>; + destroyAll(resourceName:string, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise; + find(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; + findAll(resourceName:string, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + loadRelations(resourceName:string, idOrInstance:string | number | Object, relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise>; + update(resourceName:string, id:string | number, attrs:Object, options?:DSSaveConfiguration):JSDataPromise>; + updateAll(resourceName:string, attrs:Object, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; reap(resourceName:string, options?:DSConfiguration):JSDataPromise; - refresh(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; - save(resourceName:string, id:string | number, options?:DSSaveConfiguration):JSDataPromise; + refresh(resourceName:string, id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; + save(resourceName:string, id:string | number, options?:DSSaveConfiguration):JSDataPromise>; // sync changeHistory(resourceName:string, id?:string | number):Array; changes(resourceName:string, id:string | number):Object; - compute(resourceName:string, idOrInstance:number | string | Object ):T; - createInstance(resourceName:string, attrs?:T, options?:DSAdapterOperationConfiguration):T; - defineResource(resourceNameOrDefinition:string | DSResourceDefinitionConfiguration):DSResourceDefinition; + compute(resourceName:string, idOrInstance:number | string | Object ):void; + createInstance(resourceName:string, attrs?:T, options?:DSAdapterOperationConfiguration):T & DSInstanceShorthands; digest():void; - eject(resourceName:string, id:string | number, options?:DSConfiguration):T; - ejectAll(resourceName:string, params:DSFilterParams, options?:DSConfiguration):Array; - filter(resourceName:string, params:DSFilterParams, options?:DSConfiguration):Array; - get(resourceName:string, id:string | number, options?:DSConfiguration):T; - getAll(resourceName:string, ids?:Array):Array; + eject(resourceName:string, id:string | number, options?:DSConfiguration):T & DSInstanceShorthands; + ejectAll(resourceName:string, params:DSFilterArg, options?:DSConfiguration):Array>; + filter(resourceName:string, params:DSFilterArg, options?:DSConfiguration):Array>; + get(resourceName:string, id:string | number, options?:DSConfiguration):T & DSInstanceShorthands; + getAll(resourceName:string, ids?:Array):Array>; hasChanges(resourceName:string, id:string | number):boolean; - inject(resourceName:string, attrs:T, options?:DSConfiguration):T; - inject(resourceName:string, items:Array, options?:DSConfiguration):Array; + inject(resourceName:string, item:T, options?:DSConfiguration):T & DSInstanceShorthands; + inject(resourceName:string, items:Array, options?:DSConfiguration):Array>; is(resourceName:string, object:Object): boolean; lastModified(resourceName:string, id?:string | number):number; // timestamp lastSaved(resourceName:string, id?:string | number):number; // timestamp - link(resourceName:string, id:string | number, relations?:Array):T; - linkAll(resourceName:string, params:DSFilterParams, relations?:Array):T; - linkInverse(resourceName:string, id:string | number, relations?:Array):T; - previous(resourceName:string, id:string | number):T; - revert(resourceName:string, id:string | number):T; - unlinkInverse(resourceName:string, id:string | number, relations?:Array):T; + link(resourceName:string, id:string | number, relations?:Array):T & DSInstanceShorthands; + linkAll(resourceName:string, params:DSFilterArg, relations?:Array):T & DSInstanceShorthands; + linkInverse(resourceName:string, id:string | number, relations?:Array):T & DSInstanceShorthands; + previous(resourceName:string, id:string | number):T & DSInstanceShorthands; + revert(resourceName:string, id:string | number):T & DSInstanceShorthands; + unlinkInverse(resourceName:string, id:string | number, relations?:Array):T & DSInstanceShorthands; + defineResource(resourceNameOrDefinition:string | DSResourceDefinitionConfiguration):DSResourceDefinition; + defineResource(resourceNameOrDefinition:string | DSResourceDefinitionConfiguration):DSResourceDefinition & TActions; registerAdapter(adapterId:string, adapter:IDSAdapter, options?:{default: boolean}):void; } @@ -82,10 +79,8 @@ declare module JSData { bypassCache?: boolean; cacheResponse?: boolean; defaultAdapter?: string; - defaultFilter?: (collection:Array, resourceName:string, params:DSFilterParams, options:DSConfiguration)=>Array; + defaultFilter?: (collection:Array, resourceName:string, params:DSFilterArg, options:DSConfiguration)=>Array; eagerEject?: boolean; - // TODO enable when eagerInject in DS#create is implemented - //eagerInject?: boolean; endpoint?: string; error?: boolean | ((message?:any, ...optionalParams:any[])=> void); fallbackAdapters?: Array; @@ -99,8 +94,6 @@ declare module JSData { findStrategy?: string idAttribute?: string; ignoredChanges?: Array; - // TODO ignoreMissing is undocumented - //ignoreMissing: boolean; keepChangeHistory?: boolean; loadFromServer?: boolean; log?: boolean | ((message?: any, ...optionalParams: any[])=> void); @@ -117,14 +110,7 @@ declare module JSData { interface DSAdapterOperationConfiguration extends DSConfiguration { adapter?: string; - bypassCache?: boolean; - cacheResponse?: boolean; - findStrategy?: string; - findFallbackAdapters?: string[]; - strategy?: string; - fallbackAdapters?: string[]; - - params: { + params?: { [paramName: string]: string | number | boolean; }; } @@ -147,61 +133,59 @@ declare module JSData { interface DSResourceDefinition extends DSResourceDefinitionConfiguration { //async - create(attrs:TInject, options?:DSConfiguration):JSDataPromise; + create(attrs:TInject, options?:DSConfiguration):JSDataPromise>; destroy(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; - destroyAll(params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise; - find(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; - findAll(params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>; - loadRelations(idOrInstance:string | number | Object, relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise; - update(id:string | number, attrs:Object, options?:DSSaveConfiguration):JSDataPromise; - updateAll(attrs:Object, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>; - reap(options?:DSConfiguration):JSDataPromise; - refresh(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; - save(id:string | number, options?:DSSaveConfiguration):JSDataPromise; + destroyAll(params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise; + find(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; + findAll(params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + loadRelations(idOrInstance:string | number | Object, relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise>; + update(id:string | number, attrs:Object, options?:DSSaveConfiguration):JSDataPromise>; + updateAll(attrs:Object, params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; + reap(options?:DSConfiguration):JSDataPromise; + refresh(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; + save(id:string | number, options?:DSSaveConfiguration):JSDataPromise>; // sync changeHistory(id?:string | number):Array; changes(id:string | number):Object; - compute(idOrInstance:number | string | Object ):T; - createInstance(attrs?:T, options?:DSAdapterOperationConfiguration):T; + compute(idOrInstance:number | string | Object ):void; + createInstance(attrs?:TInject, options?:DSAdapterOperationConfiguration):T & DSInstanceShorthands; digest():void; - eject(id:string | number, options?:DSConfiguration):T; - ejectAll(params:DSFilterParams, options?:DSConfiguration):Array; - filter(params:DSFilterParams, options?:DSConfiguration):Array; - get(id:string | number, options?:DSConfiguration):T; - getAll(ids?:Array):Array; + eject(id:string | number, options?:DSConfiguration):T & DSInstanceShorthands; + ejectAll(params:DSFilterArg, options?:DSConfiguration):Array>; + filter(params:DSFilterArg, options?:DSConfiguration):Array>; + get(id:string | number, options?:DSConfiguration):T & DSInstanceShorthands; + getAll(ids?:Array):Array>; hasChanges(id:string | number):boolean; - inject(attrs:T, options?:DSConfiguration):T; - inject(items:Array, options?:DSConfiguration):Array; + inject(item:T, options?:DSConfiguration):T & DSInstanceShorthands; + inject(items:Array, options?:DSConfiguration):Array>; is(object:Object): boolean; lastModified(id?:string | number):number; // timestamp lastSaved(id?:string | number):number; // timestamp - link(id:string | number, relations?:Array):T; - linkAll(params:DSFilterParams, relations?:Array):T; - linkInverse(id:string | number, relations?:Array):T; - previous(id:string | number):T; - unlinkInverse(id:string | number, relations?:Array):T; + link(id:string | number, relations?:Array):T & DSInstanceShorthands; + linkAll(params:DSFilterArg, relations?:Array):T & DSInstanceShorthands; + linkInverse(id:string | number, relations?:Array):T & DSInstanceShorthands; + previous(id:string | number):T & DSInstanceShorthands; + unlinkInverse(id:string | number, relations?:Array):T & DSInstanceShorthands; } - //TODO how can we add this methods to generic return types? - //TODO custom actions can be added here by extending this interface export interface DSInstanceShorthands { DSCompute():void; - DSRefresh(options?:DSAdapterOperationConfiguration):JSDataPromise; - DSSave(options?:DSSaveConfiguration):JSDataPromise; - DSUpdate(options?:DSSaveConfiguration):JSDataPromise; + DSRefresh(options?:DSAdapterOperationConfiguration):JSDataPromise>; + DSSave(options?:DSSaveConfiguration):JSDataPromise>; + DSUpdate(options?:DSAdapterOperationConfiguration):JSDataPromise>; DSDestroy(options?:DSAdapterOperationConfiguration):JSDataPromise; - DSCreate(options?:DSConfiguration):JSDataPromise; - DSLoadRelations(relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise; + DSCreate(options?:DSConfiguration):JSDataPromise>; + DSLoadRelations(relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise>; DSChangeHistory():Array; DSChanges():Object; DSHasChanges():boolean; DSLastModified():number; // timestamp DSLastSaved():number; // timestamp - DSLink(relations?:Array):T; - DSLinkInverse(relations?:Array):T; - DSPrevious():T; - DSUnlinkInverse(relations?:Array):T; + DSLink(relations?:Array):T & DSInstanceShorthands; + DSLinkInverse(relations?:Array):T & DSInstanceShorthands; + DSPrevious():T & DSInstanceShorthands; + DSUnlinkInverse(relations?:Array):T & DSInstanceShorthands; } interface DSFilterParams { @@ -216,9 +200,7 @@ declare module JSData { sort?: string | Array | Array>; } - interface DSFilterParamsForAllowSimpleWhere { - [key: string]: string | number; - } + type DSFilterArg = DSFilterParams | Object; interface IDSResourceLifecycleValidateEventHandlers { beforeValidate?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; @@ -296,14 +278,14 @@ declare module JSData { destroy(config:DSResourceDefinition, id:string | number, options?:DSConfiguration):JSDataPromise; - destroyAll(config:DSResourceDefinition, params:DSFilterParams, options?:DSConfiguration):JSDataPromise; + destroyAll(config:DSResourceDefinition, params:DSFilterArg, options?:DSConfiguration):JSDataPromise; find(config:DSResourceDefinition, id:string | number, options?:DSConfiguration):JSDataPromise; - findAll(config:DSResourceDefinition, params?:DSFilterParams, options?:DSConfiguration):JSDataPromise; + findAll(config:DSResourceDefinition, params?:DSFilterArg, options?:DSConfiguration):JSDataPromise; update(config:DSResourceDefinition, id:string | number, attrs:Object, options?:DSConfiguration):JSDataPromise; - updateAll(config:DSResourceDefinition, attrs:Object, params?:DSFilterParams, options?:DSConfiguration):JSDataPromise; + updateAll(config:DSResourceDefinition, attrs:Object, params?:DSFilterArg, options?:DSConfiguration):JSDataPromise; } // Custom action config