/// /// declare namespace StrikeJs { export interface Dictionary { [arg: string]: V } export interface Action { type: string|number, data: any } export interface StatefulComponent { getStateKey():string; getReducer():Reducer; setState(state:T,onDone?:()=>void):void; state:T; } export const PROMISE_FETCHING:number; export const PROMISE_RESOLVED:number; export const PROMISE_REJECTED:number; export const PROMISE_NOTIFY:number; export interface WorkerAction extends Action { isWorker: boolean; } export interface Middleware { (arg: Action, store: Store): Action } export function Promisify(action: PromiseAction, store: Store): Action; export function IntegerPromisify(action: PromiseAction, store: Store): Action; export function WorkerMiddleware(worker: Worker, store: Store): Middleware; export function Injectable(injector: Injector): Middleware; export interface Initializer { startUp(): void; } export function extractArgumentsFromFunction(fn: Function): any; export function getDataAt(object: any, path: string, pathSep: string): any; export function setDataAt(object: any, path: string, value: any, pathSep: string): any; export function format(value: string, replacements: any): string; export interface PromiseAction extends Action { promise: Promise } export interface Reducer { (state: any, action: Action): any name: string } export interface Subscriber { onStateChanged(newState: any): void } export interface ControllerViewProps { store: Store; } export class ControllerView extends __React.Component { _storeInstance: Store; _stateKey: string; constructor(props: any, stateKey: string, initialState:any,reducer:Reducer); new(props: any, stateKey: string, initialState:any,reducer:Reducer): ControllerView; getStateKey(): string; componentDidMount(): void; } export interface ServiceFunction { (...args: any[]): Action; } export interface ServiceAction extends Action { service: ServiceFunction; } export class Store { state: Immutable.Map; middleware: Array; combiner: Combiner; prevState: Immutable.Map; prevActions: Array; components: StatefulComponent []; trackChanges: boolean; readyForAction: boolean; queue: Action[]; constructor(initialState: Immutable.Map, combiner: Combiner, middleware?: Array, trackChanges?: boolean, readiness?: boolean); new(initialState: Immutable.Map, combiner: Combiner, middleware?: Array, trackChanges?: boolean, readiness?:boolean): Store; replaceStateAt(key: string, val: Immutable.Map):void; deleteStateAt(key: string): void; connect(elem: ControllerView): void; addMiddleware(fn: Middleware): void; executeWithState(fn:(...args:any[])=>T,statekeys:string[]):T; removeMiddleware(fn: Middleware): void; prev(): void; getStateAt(key: string): Immutable.Map; getState(): any; ready():void applyMiddleware(action: Action): Action; dispatch(action: Action): any; static singleton: Store; static create(initialState: Immutable.Map, combiner: Combiner, middleware?: Array, trackChanges?: boolean, readiness?:boolean): Store; } export class Combiner { //static combine(...args: Reducer[]):Combiner; reducers: Dictionary; constructor(...args: Reducer[]); new(...args: Reducer[]): Combiner; addReducer(reducer: Reducer): void; addReducer(name: string, reducer: Reducer): void; addReducer(r: any): void; removeReducer(reducer: Reducer): void; removeReducer(name: string): void; removeReducer(r: any): void; update(state: any, action: Action): void; static combine(...args: Reducer[]): Combiner; } export class Injector { components: Dictionary; instances: Dictionary; private stack: Array; constructor(); new(): Injector; public addInstance(name: string, c: any): void; public addComponent(name: string, c: any): void; public hasComponent(name: string): boolean; public hasInstance(name: string): boolean; public injectFunction(fn: any, ctx: any, ...args: any[]): void; private _inject(name: string, c: any): any; public get(name: string): any; public register(name: string, o: Object): Injector; public register(name: string, n: number): Injector; public register(name: string, fn: Function): Injector; public register(name: string, array: Array): Injector; public register(array: Array): Injector; public register(): Injector; } } declare module "strikejs" { export = StrikeJs }