UNPKG

neweb

Version:

[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url] [![experimental](http://badges.github.io/stability-badges/dist/ex

226 lines (224 loc) 6.3 kB
import { IPackInfoModule, IPackInfo } from "neweb-pack"; import { Onemitter } from "onemitter"; import GlobalStore from "./lib/GlobalStore"; import { Socket } from "socket.io"; import { Request, Response } from "express"; import { IRemoteFrameControllerDispatchParams } from "./common"; import SessionsStorage from "./lib/SessionsStorage"; export interface IRequest { url: string; hostname: string; headers: { [index: string]: string | string[] | undefined }; cookies: { [index: string]: string }; clientIpAddress: string; } type IRoute = IPageRoute | IRedirectRoute | INotFoundRoute; export interface IPageRoute { type: "page"; page: IRoutePage; } export interface IRedirectRoute { type: "redirect"; url: string; } export interface INotFoundRoute { type: "notFound"; text: string; } export interface IRoutePage { page?: { name: string; params: any; }; url: string; rootFrame: IRoutePageFrame; afterLoad?: (page: IPage) => void | Promise<void>, } export interface IRoutePageFrame { name: string; params: any; frames: { [index: string]: IRoutePageFrame; }; } export interface IPageMetaInfo { title?: string; meta?: IPageMeta[]; } export interface IPageMeta { name: string; content: string; } export interface IRouterConfig { context: any; session: ISessionContext; request: IRequest; } export interface IRouterClass { new(config: IRouterConfig): IRouter; } export interface IApplication { fillTemplate: (html: string, meta: IPageMetaInfo, initialInfo: any) => Promise<string>; getRouterClass: () => Promise<IRouterClass>; getContext: () => Promise<any>; getFrameControllerClass: (name: string) => Promise<IFrameControllerClass>; getFrameViewClass: (name: string) => Promise<React.ComponentClass<any>>; getFrameViewModulePackInfo: (name: string) => Promise<IPackInfo>; hasFrame: (frameName: string) => Promise<boolean>; } export interface IFrameControllerConfig<P, D, C> { params: P; data?: D; context: C; session: ISessionContext; navigate: (url: string) => void; } type IFrameControllerClass = new (config: IFrameControllerConfig<any, any, any>) => IFrameController; export interface IRouter { navigate: (params: { request: IRequest; }) => void | Promise<void>; waitRoute: () => Promise<IRoute>; onNewRoute: (cb: (route: IRoute) => any) => void | Promise<void>; dispose: () => void | Promise<void>; } export interface IRouterNavigateParams { request: IRequest; } export interface ISession { id: string; hash: string; sessid: string; data: any; } type FrameId = string; export interface IPage { url: string; title?: string; meta?: IPageMeta[]; rootFrame: FrameId; frames: IPageFrame[]; modules: IPackInfoModule[]; } export interface IPageFrame { frameId: FrameId; frameName: string; frameVersion?: string; modules: IPackInfoModule[]; params: any; data: any; frames: { [index: string]: FrameId; }; } export interface IFrameController extends Onemitter<any> { getInitialData: () => Promise<any>; dispatch: (name: string, ...args: any[]) => Promise<void>; dispose: () => Promise<void>; onChangeParams: (params: any) => Promise<void>; } export interface ISessionContext { getItem(name: string): Onemitter<any>; setItem(name: string, value: any): Promise<void>; } export interface ISeanceDumpInfo { seanceId: string; page?: IPage; } export interface IViewProps<P, D> { params: P; data: D; history: IHistoryContext; navigate: (url: string) => void; dispatch: (actionName: string, ...args: any[]) => Promise<void>; } export interface IHistoryContext { push(url: string): void; replace(url: string): void; } export interface IRegistrySession { id: string; hash: string; } export interface IDataRegistry { session: IRegistrySession; "session-data": any; "frame-controller": { objectId: string; seanceId: string; sessionId: string; }; "frame-controller-data": any; seance: { sessionId: string; }; "seance-socket": string; "seance-current-page": IPage; "seance-request": IRequest; "request": IRequest; } export interface IObjectsRegistry { "store": GlobalStore<any, any, any>; "sessions-storage": SessionsStorage; "app": IApplication; "frame-controller-object": IFrameController; "socket": Socket; "router": IRouter; "http-request": Request; "http-response": Response; } export interface IRegistryActions { "new-http-request": { args: { request: Request; response: Response; }; params: {}; }; "new-controller-data": { params: { frameId: string }; args: any; // data }; "new-router-route": { params: { seanceId: string; }; args: IRoute; }; "new-socket-connection": { params: {}; args: Socket; }; "seance-navigate": { params: { seanceId: string }; args: string; // url }; "socket-disconnect": { params: { socketId: string }; args: {}; }; "socket-error": { params: { socketId: string }; args: {}; }; "socket-initialize": { params: { socketId: string }; args: { seanceId: string; }; }, "socket-recovery": { params: { socketId: string }; args: ISeanceDumpInfo; } "socket-frame-controller-dispatch": { params: { socketId: string }; args: IRemoteFrameControllerDispatchParams; }, "socket-navigate": { params: { seanceId: string }; args: { url: string }; }, "session-set-data": { params: { sessionId: string }; args: { name: string; value: any }; }, [index: string]: { params: any, args: any }; } export type NewebGlobalStore = GlobalStore<IDataRegistry, IObjectsRegistry, IRegistryActions>