diff --git a/alt/alt.d.ts b/alt/alt.d.ts new file mode 100644 index 000000000..15bbc8e8e --- /dev/null +++ b/alt/alt.d.ts @@ -0,0 +1,158 @@ +// Type definitions for Alt 0.16.7 +// Project: https://github.com/goatslacker/alt +// Definitions by: Michael Shearer +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// +/// + + +declare module AltJS { + + export interface StoreModel { + bindActions?( ...actions:Array); + exportPublicMethods?(exportConfig:M):void; + getState?():S; + exportAsync?(source:Source); + waitFor?(store:AltStore):void; + } + + export type Source = {[name:string]:() => SourceModel}; + + export interface SourceModel { + local( ...args:Array); + remote( ...args:Array); + shouldFetch?(state:Object, ...args:Array); + loading: ( ...args:Array) => void; + success:( ...args:Array) => void; + error:( ...args:Array) => void; + interceptResponse?(response:Object, action:AltJS.Action, ...args:Array); + } + + export interface AltStore { + getState():S; + listen(handler:(state:S) => any):() => void; + unlisten(handler:(state:S) => any):void; + emitChange():void; + getEventEmitter():EventEmitter3.EventEmitter; + } + + export enum lifeCycleEvents { + bootstrap, + snapshot, + init, + rollback, + error + } + + export type Actions = {[action:string]:Action}; + + export interface Action { + (T); + defer(data:any):void; + } + + export interface ActionsClass { + generateActions?( ...action:Array); + dispatch( ...payload:Array); + actions?:Actions; + } +} + +declare module "alt/utils/chromeDebug" { + function chromeDebug(alt:any):void; + export = chromeDebug; +} + +declare module "alt/AltContainer" { + + import * as React from "react"; + + interface ContainerProps { + store:AltJS.AltStore + } + + class AltContainer extends React.Component { + } + + export = AltContainer; +} + +declare module "alt" { + + import {Dispatcher} from "flux"; + + type StateTransform = (store:StoreModel) => AltJS.AltStore; + + interface AltConfig { + dispatcher?:Dispatcher; + serialize?:(data:Object) => string; + deserialize?:(serialized:string) => Object; + storeTransforms?:Array; + batchingFunction?:(callback:( ...data:Array) => any) => void; + } + + class Alt { + constructor(config?:AltConfig); + actions:AltJS.Actions; + bootstrap(data:string); + takeSnapshot( ...storeNames:Array):string; + flush():Object; + recycle( ...store:Array>); + rollback(); + dispatch(action?:AltJS.Action, data?:Object, details?:any); + addActions(actionsName:string, actions:AltJS.ActionsClass); + addStore(name:string, store:StoreModel, saveStore?:boolean); + getStore(name:string):AltJS.AltStore; + getActions(actionsName:string):AltJS.Actions; + createAction(name:string, implementation:AltJS.ActionsClass):AltJS.Action; + createAction(name:string, implementation:AltJS.ActionsClass, ...args:Array):AltJS.Action; + createActions(ActionsClass: ActionsClassConstructor, exportObj?: Object):T; + createActions(ActionsClass: ActionsClassConstructor, exportObj?: Object, ...constructorArgs:Array):T; + generateActions( ...action:Array):T; + createStore(store:StoreModel, name?:string):AltJS.AltStore; + } + + type ActionsClassConstructor = new (alt:Alt) => AltJS.ActionsClass; + + type ActionHandler = ( ...data:Array) => any; + type ExportConfig = {[key:string]:( ...args:Array) => any}; + + interface StoreReduce { + action:any; + data: any; + } + + interface StoreModel extends AltJS.StoreModel { + setState?(currentState:Object, nextState:Object):Object; + getState?():S; + onSerialize?(data:any):void; + onDeserialize?(data:any):void; + on?(event:AltJS.lifeCycleEvents, callback:() => any):void; + bindActions?(action:AltJS.Action, method:ActionHandler):void; + bindListeners?(config:{string: AltJS.Action | AltJS.Actions}); + waitFor?(dispatcherSource:any):void; + exportPublicMethods?(exportConfig:ExportConfig):void; + getInstance?():AltJS.AltStore; + emitChange?():void; + dispatcher?:Dispatcher; + alt?:Alt; + displayName?:string; + otherwise?(data:any, action:AltJS.Action); + reduce?(state:any, config:StoreReduce):Object; + preventDefault?(); + observe?(alt:Alt):any; + registerAsync?(datasource:AltJS.Source); + beforeEach?(payload:Object, state:Object); + afterEach?(payload:Object, state:Object); + unlisten?(); + } + + type StoreModelConstructor = (alt:Alt) => StoreModel; + + interface AltFactory { + new(config?:AltConfig):Alt; + } + + export = Alt; +}