// 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; } //TODO switch to class again when typescript supports open ended class declaration 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?: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>; 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 ):T; createInstance(resourceName:string, attrs?:T, options?:DSAdapterOperationConfiguration):T; defineResource(resourceNameOrDefinition:string | DSResourceDefinitionConfiguration):DSResourceDefinition; 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; hasChanges(resourceName:string, id:string | number):boolean; inject(resourceName:string, attrs:T, options?:DSConfiguration):T; 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; unlinkInverse(resourceName:string, id:string | number, relations?:Array):T; 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:DSFilterParams, 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; findAllFallbackAdapters?: Array; findAllStrategy?: string; findBelongsTo?: boolean; findFallbackAdapters?: Array; findHasOne?: boolean; findHasMany?: boolean; findInverseLinks?: boolean; findStrategy?: string idAttribute?: string; ignoredChanges?: Array; // TODO ignoreMissing is undocumented //ignoreMissing: boolean; 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; bypassCache?: boolean; cacheResponse?: boolean; findStrategy?: string; findFallbackAdapters?: string[]; strategy?: string; fallbackAdapters?: 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:Object, 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 & T, options?:DSAdapterOperationConfiguration):JSDataPromise>; reap(resourceNametions?: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; digest():void; eject(id:string | number, options?:DSConfiguration):T; ejectAll(params:DSFilterParams, options?:DSConfiguration):Array; filter(params: DSFilterParams, options?: DSConfiguration): Array; filter(params: DSFilterParamsForAllowSimpleWhere, options?: DSConfiguration): Array; get(id:string | number, options?:DSConfiguration):T; getAll(ids?:Array):Array; hasChanges(id:string | number):boolean; inject(attrs:T, options?:DSConfiguration):T; 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; } interface DSFilterParams { where?: Object; limit?: number; skip?: number; offset?: number; orderBy?: string | Array | Array>; sort?: string | Array | Array>; } interface DSFilterParamsForAllowSimpleWhere { [key: string]: string | number; } 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:DSFilterParams, options?:DSConfiguration):JSDataPromise; find(config:DSResourceDefinition, id:string | number, options?:DSConfiguration):JSDataPromise; findAll(config:DSResourceDefinition, params?:DSFilterParams, options?:DSConfiguration):JSDataPromise; update(config:DSResourceDefinition, id:string | number, attrs:Object, options?:DSConfiguration):JSDataPromise; updateAll(config:DSResourceDefinition, attrs:Object, params?:DSFilterParams & T, options?:DSConfiguration):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; }