// Type definitions for JSData v1.5.4 // Project: https://github.com/js-data/js-data // Definitions by: Stefan Steinhart // Definitions: https://github.com/borisyankov/DefinitelyTyped /////////////////////////////////////////////////////////////////////////////// // js-data module (js-data.js) /////////////////////////////////////////////////////////////////////////////// // defining what exists in JSData and how it looks 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; } interface DS { new(config?:DSConfiguration):DS; // rather undocumented errors:DSErrors; // those are objects containing the defined resources and adapters definitions:any; adapters:any; defaults:DSConfiguration; // async create(resourceName:string, attrs:Object, options?:DSConfiguration):JSDataPromise>; destroy(resourceName:string, id:string | number, 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>; // sync changeHistory(resourceName:string, id?:string | number):Array; changes(resourceName:string, id:string | number):Object; 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 & 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, 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 & 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; } interface DSConfiguration extends IDSResourceLifecycleEventHandlers { actions?: Object; allowSimpleWhere?: boolean; basePath?: string; bypassCache?: boolean; cacheResponse?: boolean; defaultAdapter?: string; defaultFilter?: (collection:Array, resourceName:string, params:DSFilterArg, options:DSConfiguration)=>Array; eagerEject?: boolean; endpoint?: string; error?: boolean | ((message?:any, ...optionalParams:any[])=> void); fallbackAdapters?: Array; findAllFallbackAdapters?: Array; findAllStrategy?: string; findBelongsTo?: boolean; findFallbackAdapters?: Array; findHasOne?: boolean; findHasMany?: boolean; findInverseLinks?: boolean; findStrategy?: string idAttribute?: string; ignoredChanges?: Array; keepChangeHistory?: boolean; loadFromServer?: boolean; log?: boolean | ((message?: any, ...optionalParams: any[])=> void); maxAge?: number; notify?: boolean; reapAction?: string; reapInterval?: number; resetHistoryOnInject?: boolean; strategy?: string; upsert?: boolean; useClass?: boolean; useFilter?: boolean; } interface DSAdapterOperationConfiguration extends DSConfiguration { adapter?: string; params?: { [paramName: string]: string | number | boolean; }; } interface DSSaveConfiguration extends DSAdapterOperationConfiguration { changesOnly?: boolean; } interface DSResourceDefinitionConfiguration extends DSConfiguration { name: string; computed?: any; methods?: any; relations?: { hasMany?: Object; hasOne?: Object; belongsTo?: Object; }; } interface DSResourceDefinition extends DSResourceDefinitionConfiguration { //async create(attrs:TInject, options?:DSConfiguration):JSDataPromise>; destroy(id:string | number, options?:DSAdapterOperationConfiguration):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 ):void; createInstance(attrs?:TInject, options?:DSAdapterOperationConfiguration):T & DSInstanceShorthands; digest():void; 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(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 & 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; } export interface DSInstanceShorthands { DSCompute():void; 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>; DSChangeHistory():Array; DSChanges():Object; DSHasChanges():boolean; DSLastModified():number; // timestamp DSLastSaved():number; // timestamp DSLink(relations?:Array):T & DSInstanceShorthands; DSLinkInverse(relations?:Array):T & DSInstanceShorthands; DSPrevious():T & DSInstanceShorthands; DSUnlinkInverse(relations?:Array):T & DSInstanceShorthands; } interface DSFilterParams { where?: Object; limit?: number; skip?: number; offset?: number; orderBy?: string | Array | Array>; sort?: string | Array | Array>; } type DSFilterArg = DSFilterParams | Object; interface IDSResourceLifecycleValidateEventHandlers { beforeValidate?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; validate?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; afterValidate?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; } interface IDSResourceLifecycleCreateEventHandlers { beforeCreate?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; afterCreate?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; } interface IDSResourceLifecycleCreateInstanceEventHandlers { beforeCreateInstance?: (resourceName:string, data:any)=>void; afterCreateInstance?: (resourceName:string, data:any)=>void; } interface IDSResourceLifecycleUpdateEventHandlers { beforeUpdate?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; afterUpdate?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; } interface IDSResourceLifecycleDestroyEventHandlers { beforeDestroy?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; afterDestroy?: (resourceName:string, data:any, cb:(err:any, data?:any)=>void)=>void; } interface IDSResourceLifecycleInjectEventHandlers { beforeInject?: (resourceName:string, data:any)=>void; afterInject?: (resourceName:string, data:any)=>void; } interface IDSResourceLifecycleEjectEventHandlers { beforeEject?: (resourceName:string, data:any)=>void; afterEject?: (resourceName:string, data:any)=>void; } interface IDSResourceLifecycleReapEventHandlers { beforeReap?: (resourceName:string, data:any)=>void; afterReap?: (resourceName:string, data:any)=>void; } interface IDSResourceLifecycleEventHandlers extends IDSResourceLifecycleCreateEventHandlers, IDSResourceLifecycleCreateInstanceEventHandlers, IDSResourceLifecycleValidateEventHandlers, IDSResourceLifecycleUpdateEventHandlers, IDSResourceLifecycleDestroyEventHandlers, IDSResourceLifecycleInjectEventHandlers, IDSResourceLifecycleEjectEventHandlers, IDSResourceLifecycleReapEventHandlers { } // errors interface DSErrors { // types IllegalArgumentError:DSError; IA:DSError; RuntimeError:DSError; R:DSError; NonexistentResourceError:DSError; NER:DSError; } interface DSError extends Error { new (message?:string):DSError; message: string; type: string; } // DSAdapter interface interface IDSAdapter { create(config:DSResourceDefinition, attrs:Object, options?:DSConfiguration):JSDataPromise; destroy(config:DSResourceDefinition, id:string | number, options?:DSConfiguration):JSDataPromise; destroyAll(config:DSResourceDefinition, params:DSFilterArg, options?:DSConfiguration):JSDataPromise; find(config:DSResourceDefinition, id:string | number, 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?:DSFilterArg, options?:DSConfiguration):JSDataPromise; } // Custom action config interface DSActionConfig { adapter?: string; endpoint?: string; pathname?: string; method?: string; } // Custom action method definition // options are passed to adapter.HTTP() method-call, js-data-http adapter by default uses AXIOS but can also be $http in case of angular // or a custom adapter implementation. The adapter can be set via the DSActionConfig. interface DSActionFn { (id:string | number, options?:Object):JSDataPromise } } // declaring the existing global js object declare var JSData:{ DS: JSData.DS; DSErrors: JSData.DSErrors; }; //Support node require declare module 'js-data' { export = JSData; }