///
///
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
}