// Type definitions for JSData v2.8.0 // Project: https://github.com/js-data/js-data // Definitions by: Stefan Steinhart // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /////////////////////////////////////////////////////////////////////////////// // js-data module (js-data.js) /////////////////////////////////////////////////////////////////////////////// declare namespace 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 DSConfiguration extends IDSResourceLifecycleEventHandlers { actions?: Object; allowSimpleWhere?: boolean; basePath?: string; bypassCache?: boolean; cacheResponse?: boolean; clearEmptyQueries?:boolean; debug?:boolean; defaultAdapter?: string; defaultFilter?: (collection:Array, resourceName:string, params:DSFilterArg, options:DSConfiguration)=>Array; defaultValues?:Object; eagerEject?: boolean; endpoint?: string; error?: boolean | ((message?:any, ...optionalParams:any[])=> void); fallbackAdapters?: Array; findAllFallbackAdapters?: Array; findAllStrategy?: string; findFallbackAdapters?: Array; findStrategy?: string findStrictCache?:boolean; idAttribute?: string; ignoredChanges?: Array; ignoreMissing?: boolean; instanceEvents?:boolean; keepChangeHistory?: boolean; linkRelations?:boolean; log?: boolean | ((message?:any, ...optionalParams:any[])=> void); maxAge?: number; notify?: boolean; omit?:Array; onConflict?:string; // "merge"(default) or "replace" reapAction?: string; reapInterval?: number; relationsEnumerable?:boolean; resetHistoryOnInject?: boolean; returnMeta?:boolean; scopes?:Object; strategy?: string; upsert?: boolean; useClass?: boolean; useFilter?: boolean; watchChanges?:boolean; } interface DSResourceDefinitionConfiguration extends DSConfiguration { computed?: any; meta?:any; methods?: any; name: string; relations?: { hasMany?: Object; hasOne?: Object; belongsTo?: Object; }; } interface DSFilterParams { where?: Object; limit?: number; skip?: number; offset?: number; orderBy?: string | Array | Array>; sort?: string | Array | Array>; } type DSFilterArg = DSFilterParams | Object; interface DSAdapterOperationConfiguration extends DSConfiguration { adapter?: string; params?: { [paramName: string]: string | number | boolean; }; } interface DSSaveConfiguration extends DSAdapterOperationConfiguration { changesOnly?: boolean; } interface DSCollection extends Array { fetch(params?:DSFilterArg, options?:DSConfiguration):JSDataPromise>>; params:DSFilterArg; resourceName:string; } interface DSEvents { on(name:string, handler:(...args:any[])=>void):void; off(name:string, handler:(...args:any[])=>void):void; emit(name:string, ...args:any[]):void; } interface DS extends DSEvents { new(config?:DSConfiguration):DS; // rather undocumented errors:DSErrors; // those are objects containing the defined resources and adapters definitions:any; adapters:any; defaults:DSConfiguration; changeHistory(resourceName:string, id:string | number):Array; changes(resourceName:string, id:string | number, options?:{ignoredChanges:Array}):Object; 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?: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?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise; 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>; find(resourceName:string, id:string | number, 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; inject(resourceName:string, attrs:TInject, options?:DSConfiguration):U & 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 loadRelations(resourceName:string, idOrInstance:string | number, relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise>; 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?: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?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; defineResource(resourceNameOrDefinition:string | DSResourceDefinitionConfiguration):DSResourceDefinition; defineResource(resourceNameOrDefinition:string | DSResourceDefinitionConfiguration):DSResourceDefinition & TActions; registerAdapter(adapterId:string, adapter:IDSAdapter, options?:{default: boolean}):void; } interface DSResourceDefinition extends DSResourceDefinitionConfiguration, DSEvents { changeHistory(id:string | number):Array; changes(id:string | number, options?:{ignoredChanges:Array}):Object; clear():Array>; compute(idOrInstance:number | string | T):T & DSInstanceShorthands; create(attrs:Object, options?:DSConfiguration):JSDataPromise>; createCollection(array?:Array, params?:DSFilterArg, options?:DSConfiguration):DSCollection>; createInstance(attrs?:Object, options?:DSConfiguration):T & DSInstanceShorthands; destroy(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise; destroyAll(params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise; digest():void; eject(id:string | number, options?:DSConfiguration):T & DSInstanceShorthands; ejectAll(params:DSFilterArg, options?:DSConfiguration):Array>; filter(params:DSFilterArg, options?:DSConfiguration):Array>; find(id:string | number, options?:DSAdapterOperationConfiguration):JSDataPromise>; findAll(params?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; get(id:string | number):T & DSInstanceShorthands; getAll(ids?:Array):Array>; hasChanges(id:string | number):boolean; inject(attrs:TInject, 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 loadRelations(idOrInstance:string | number, relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise>; previous(id:string | number):T & DSInstanceShorthands; reap():JSDataPromise; refresh(id:string | number, 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?:DSFilterArg, options?:DSAdapterOperationConfiguration):JSDataPromise>>; } // cannot specify T at interface level because the interface is used as generic constraint itself which ends up being recursive export interface DSInstanceShorthands extends DSEvents { DSCompute():void; DSRefresh(options?:DSAdapterOperationConfiguration):JSDataPromise>; DSSave(options?:DSSaveConfiguration):JSDataPromise>; DSUpdate(options?:DSAdapterOperationConfiguration):JSDataPromise>; DSDestroy(options?:DSAdapterOperationConfiguration):JSDataPromise; DSCreate(options?:DSAdapterOperationConfiguration):JSDataPromise>; DSLoadRelations(relations:string | Array, options?:DSAdapterOperationConfiguration):JSDataPromise>; DSChangeHistory():Array; DSChanges():Object; DSHasChanges():boolean; DSLastModified():number; // timestamp DSLastSaved():number; // timestamp DSPrevious():T & DSInstanceShorthands; DSRevert():T & DSInstanceShorthands; } type DSSyncLifecycleHookHandler = (resource:DSResourceDefinition, data:any) => void; type DSAsyncLifecycleHookHandler = (resource:DSResourceDefinition, data:any) => JSDataPromise; type DSAsyncLifecycleHookHandlerCb = (resource:DSResourceDefinition, data:any, cb:(err:Error, data:any)=>void) => void interface IDSResourceLifecycleValidateEventHandlers { beforeValidate?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; validate?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; afterValidate?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; } interface IDSResourceLifecycleCreateEventHandlers { beforeCreate?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; afterCreate?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; } interface IDSResourceLifecycleUpdateEventHandlers { beforeUpdate?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; afterUpdate?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; } interface IDSResourceLifecycleDestroyEventHandlers { beforeDestroy?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; afterDestroy?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; } interface IDSResourceLifecycleCreateInstanceEventHandlers { beforeCreateInstance?: DSSyncLifecycleHookHandler; afterCreateInstance?: DSSyncLifecycleHookHandler; } interface IDSResourceLifecycleInjectEventHandlers { beforeInject?: DSSyncLifecycleHookHandler; afterInject?: DSSyncLifecycleHookHandler; } interface IDSResourceLifecycleEjectEventHandlers { beforeEject?: DSSyncLifecycleHookHandler; afterEject?: DSSyncLifecycleHookHandler; } interface IDSResourceLifecycleReapEventHandlers { beforeReap?: DSSyncLifecycleHookHandler; afterReap?: DSSyncLifecycleHookHandler; } interface IDSResourceLifecycleFindEventHandlers { afterFind?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; } interface IDSResourceLifecycleFindAllEventHandlers { afterFindAll?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; } interface IDSResourceLifecycleLoadRelationsEventHandlers { afterLoadRelations?: DSAsyncLifecycleHookHandler | DSAsyncLifecycleHookHandlerCb; } interface IDSResourceLifecycleCreateCollectionEventHandlers { beforeCreateCollection?: DSSyncLifecycleHookHandler; afterCreateCollection?: DSSyncLifecycleHookHandler; } interface IDSResourceLifecycleEventHandlers extends IDSResourceLifecycleCreateEventHandlers, IDSResourceLifecycleCreateInstanceEventHandlers, IDSResourceLifecycleValidateEventHandlers, IDSResourceLifecycleUpdateEventHandlers, IDSResourceLifecycleDestroyEventHandlers, IDSResourceLifecycleInjectEventHandlers, IDSResourceLifecycleEjectEventHandlers, IDSResourceLifecycleReapEventHandlers, IDSResourceLifecycleFindEventHandlers, IDSResourceLifecycleFindAllEventHandlers, IDSResourceLifecycleLoadRelationsEventHandlers, IDSResourceLifecycleCreateCollectionEventHandlers { } // 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; }