// Type definitions for JSData v1.3.0 // 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; changeHistory(resourceName:string, id?:string):Array; changeHistory(resourceName:string, id?:number):Array; changes(resourceName:string, id:string):Object; changes(resourceName:string, id:number):Object; compute(resourceName:string, id:number):T; compute(resourceName:string, id:string):T; compute(resourceName:string, instance:Object):T; create(resourceName:string, attrs:any, options?:DSConfiguration):JSDataPromise; createInstance(resourceName:string, attrs?:T, options?:DSAdapterOperationConfiguration):T; defineResource(resourceName:string):DSResourceDefinition; defineResource(definition:DSResourceDefinitionConfiguration):DSResourceDefinition; destroy(resourceName:string, id:string, options?:DSAdapterOperationConfiguration):JSDataPromise; destroy(resourceName:string, id:number, options?:DSAdapterOperationConfiguration):JSDataPromise; destroyAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise; digest():void; eject(resourceName:string, id:string, options?:DSConfiguration):T; eject(resourceName:string, id:number, options?:DSConfiguration):T; ejectAll(resourceName:string, params:DSFilterParams, options?:DSConfiguration):Array; filter(resourceName:string, params:DSFilterParams, options?:DSConfiguration):Array; find(resourceName:string, id:string, options?:DSAdapterOperationConfiguration):JSDataPromise; find(resourceName:string, id:number, options?:DSAdapterOperationConfiguration):JSDataPromise; findAll(resourceName:string, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>; get(resourceName:string, id:string, options?:DSConfiguration):T; get(resourceName:string, id:number, options?:DSConfiguration):T; getAll(resourceName:string, ids?:Array):Array; getAll(resourceName:string, ids?:Array):Array; hasChanges(resourceName:string, id:string):boolean; hasChanges(resourceName:string, id: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; // timestamp lastModified(resourceName:string, id?:number):number; // timestamp lastSaved(resourceName:string, id?:string):number; // timestamp lastSaved(resourceName:string, id?:number):number; // timestamp link(resourceName:string, id:string, relations?:Array):T; link(resourceName:string, id:number, relations?:Array):T; linkAll(resourceName:string, params:DSFilterParams, relations?:Array):T; linkInverse(resourceName:string, id:string, relations?:Array):T; linkInverse(resourceName:string, id:number, relations?:Array):T; loadRelations(resourceName:string, id:string, relations:string, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(resourceName:string, id:number, relations:string, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(resourceName:string, instance:Object, relations:string, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(resourceName:string, id:string, relations:Array, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(resourceName:string, id:number, relations:Array, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(resourceName:string, instance:Object, relations:Array, options?:DSAdapterOperationConfiguration):JSDataPromise; previous(resourceName:string, id:string):T; previous(resourceName:string, id:number):T; reap(resourceName:string, options?:DSConfiguration):JSDataPromise; refresh(resourceName:string, id:string, options?:DSAdapterOperationConfiguration):JSDataPromise; refresh(resourceName:string, id:number, options?:DSAdapterOperationConfiguration):JSDataPromise; registerAdapter(adapterId:string, adapter:IDSAdapter, options?:{default: boolean}):void; save(resourceName:string, id:string, options?:DSSaveConfiguration):JSDataPromise; save(resourceName:string, id:number, options?:DSSaveConfiguration):JSDataPromise; unlinkInverse(resourceName:string, id:string, relations?:Array):T; unlinkInverse(resourceName:string, id:number, relations?:Array):T; update(resourceName:string, id:string, attrs:any, options?:DSSaveConfiguration):JSDataPromise; update(resourceName:string, id:number, attrs:any, options?:DSSaveConfiguration):JSDataPromise; updateAll(resourceName:string, attrs:any, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>; } 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?: (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?: any; // TODO wait for union types to be supported // log: (message?: any, ...optionalParams: any[])=> void; // log: boolean; maxAge?: number; notify?: boolean; reapAction?: string; reapInterval?: number; resetHistoryOnInject?: boolean; strategy?: string; upsert?: boolean; useClass?: boolean; useFilter?: boolean; } interface DSAdapterOperationConfiguration extends DSConfiguration { adapter?: string } 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 { changeHistory(id?:string):Array; changeHistory(id?:number):Array; changes(id:string):Object; changes(id:number):Object; compute(id:number):T; compute(id:string):T; compute(instance:Object):T; create(attrs:any, options?:DSConfiguration):JSDataPromise; createInstance(attrs?:T, options?:DSAdapterOperationConfiguration):T; defineResource(resourceName:string):DSResourceDefinition; defineResource(definition:DSResourceDefinitionConfiguration):DSResourceDefinition; destroy(id:string, options?:DSAdapterOperationConfiguration):JSDataPromise; destroy(id:number, options?:DSAdapterOperationConfiguration):JSDataPromise; destroyAll(params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise; digest():void; eject(id:string, options?:DSConfiguration):T; eject(id:number, options?:DSConfiguration):T; ejectAll(params:DSFilterParams, options?:DSConfiguration):Array; filter(params:DSFilterParams, options?:DSConfiguration):Array; find(id:string, options?:DSAdapterOperationConfiguration):JSDataPromise; find(id:number, options?:DSAdapterOperationConfiguration):JSDataPromise; findAll(params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>; get(id:string, options?:DSConfiguration):T; get(id:number, options?:DSConfiguration):T; getAll(ids?:Array):Array; getAll(ids?:Array):Array; hasChanges(id:string):boolean; hasChanges(id:number):boolean; inject(attrs:T, options?:DSConfiguration):T; inject(items:Array, options?:DSConfiguration):Array; is(object:Object): boolean; lastModified(id?:string):number; // timestamp lastModified(id?:number):number; // timestamp lastSaved(id?:string):number; // timestamp lastSaved(id?:number):number; // timestamp link(id:string, relations?:Array):T; link(id:number, relations?:Array):T; linkAll(params:DSFilterParams, relations?:Array):T; linkInverse(id:string, relations?:Array):T; linkInverse(id:number, relations?:Array):T; loadRelations(id:string, relations:string, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(id:number, relations:string, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(instance:T, relations:string, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(id:string, relations:Array, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(id:number, relations:Array, options?:DSAdapterOperationConfiguration):JSDataPromise; loadRelations(instance:T, relations:Array, options?:DSAdapterOperationConfiguration):JSDataPromise; previous(id:string):T; previous(id:number):T; reap(options?:DSConfiguration):JSDataPromise; refresh(id:string, options?:DSAdapterOperationConfiguration):JSDataPromise; refresh(id:number, options?:DSAdapterOperationConfiguration):JSDataPromise; save(id:string, options?:DSSaveConfiguration):JSDataPromise; save(id:number, options?:DSSaveConfiguration):JSDataPromise; unlinkInverse(id:string, relations?:Array):T; unlinkInverse(id:number, relations?:Array):T; update(id:string, attrs:any, options?:DSSaveConfiguration):JSDataPromise; update(id:number, attrs:any, options?:DSSaveConfiguration):JSDataPromise; updateAll(attrs:any, params?:DSFilterParams, options?:DSAdapterOperationConfiguration):JSDataPromise>; } interface DSFilterParams { where?: Object; limit?: number; skip?: number; offset?: number; orderBy?: any; // TODO wait for union types to be supported //orderBy?: Array>; //orderBy?: Array; //orderBy?: string; sort?: any; // TODO wait for union types to be supported //sort?: string; //sort?: Array; //sort?: Array>; } 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:any, options?:DSConfiguration):JSDataPromise; destroy(config:DSResourceDefinition, id:string, options?:DSConfiguration):JSDataPromise; destroy(config:DSResourceDefinition, id:number, options?:DSConfiguration):JSDataPromise; destroyAll(config:DSResourceDefinition, params:DSFilterParams, options?:DSConfiguration):JSDataPromise; find(config:DSResourceDefinition, id:string, options?:DSConfiguration):JSDataPromise; find(config:DSResourceDefinition, id:number, options?:DSConfiguration):JSDataPromise; findAll(config:DSResourceDefinition, params?:DSFilterParams, options?:DSConfiguration):JSDataPromise; update(config:DSResourceDefinition, id:string, attrs:any, options?:DSConfiguration):JSDataPromise; update(config:DSResourceDefinition, id:number, attrs:any, options?:DSConfiguration):JSDataPromise; updateAll(config:DSResourceDefinition, attrs:any, params?:DSFilterParams, 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; }