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

44 lines (43 loc) 1.35 kB
import o, { Onemitter } from "onemitter"; import url = require("url"); import { IRequest, IRoute, IRoutePage, IRouter } from "./.."; export interface IJsonableRoutePage { root: IJsonableRoutePageFrame; } export interface IJsonableRoutePageFrame { name: string; params: any; frames: { [index: string]: IJsonableRoutePageFrame }; } class JsonableRouter implements IRouter { protected routeEmitter: Onemitter<IRoute> = o(); public async navigate({ request }: { request: IRequest }) { const u = url.parse(request.url); try { const jsonablePage: IJsonableRoutePage = JSON.parse(u.query || ""); const page: IRoutePage = { url: request.url, rootFrame: jsonablePage.root, }; this.routeEmitter.emit({ type: "page", page, }); } catch (e) { this.routeEmitter.emit({ type: "notFound", text: "Invalid json", }); } } public onNewRoute(cb: any) { this.routeEmitter.addListener(cb); } public waitRoute() { return this.routeEmitter.wait(); } public dispose() { this.routeEmitter.removeAllListeners(); } } export default JsonableRouter;