cyclic-router
Advanced tools
Comparing version 2.1.2 to 3.0.0
@@ -1,7 +0,13 @@ | ||
export interface RouteDefinitions { | ||
export interface RouteDefinitionsMap { | ||
[sourcePath: string]: any; | ||
} | ||
export interface SwitchPathReturn { | ||
export interface RouteDefinitionsArray { | ||
[sourceIndex: number]: any; | ||
} | ||
export interface RouteMatcherReturn { | ||
path: string; | ||
value: any; | ||
} | ||
export interface RouteMatcher { | ||
(path: string, routes: RouteDefinitionsMap | RouteDefinitionsArray): RouteMatcherReturn; | ||
} |
import { StreamAdapter } from '@cycle/base'; | ||
import { History, HistoryDriverOptions } from '@cycle/history/lib/interfaces'; | ||
import { RouteMatcher } from './interfaces'; | ||
import { RouterSource } from './RouterSource'; | ||
@@ -11,3 +12,3 @@ /** | ||
*/ | ||
declare function makeRouterDriver(history: History, options?: HistoryDriverOptions): (sink$: any, runSA: StreamAdapter) => RouterSource; | ||
declare function makeRouterDriver(history: History, routeMatcher: RouteMatcher, options?: HistoryDriverOptions): (sink$: any, runSA: StreamAdapter) => RouterSource; | ||
export { makeRouterDriver }; |
@@ -11,3 +11,3 @@ "use strict"; | ||
*/ | ||
function makeRouterDriver(history, options) { | ||
function makeRouterDriver(history, routeMatcher, options) { | ||
var historyDriver = history_1.makeHistoryDriver(history, options); | ||
@@ -26,3 +26,3 @@ /** | ||
var history$ = runSA.remember(historyDriver(sink$, runSA)); | ||
return new RouterSource_1.RouterSource(history$, [], history.createHref, runSA); | ||
return new RouterSource_1.RouterSource(history$, [], history.createHref, runSA, routeMatcher); | ||
}; | ||
@@ -29,0 +29,0 @@ } |
import { StreamAdapter } from '@cycle/base'; | ||
import { Pathname } from '@cycle/history/lib/interfaces'; | ||
import { RouteDefinitions } from './interfaces'; | ||
import { RouteDefinitionsMap, RouteDefinitionsArray, RouteMatcher } from './interfaces'; | ||
export declare class RouterSource { | ||
@@ -9,6 +9,7 @@ history$: any; | ||
private _runSA; | ||
constructor(history$: any, _namespace: Pathname[], _createHref: (path: Pathname) => Pathname, _runSA: StreamAdapter); | ||
private _routeMatcher; | ||
constructor(history$: any, _namespace: Pathname[], _createHref: (path: Pathname) => Pathname, _runSA: StreamAdapter, _routeMatcher: RouteMatcher); | ||
path(pathname: Pathname): RouterSource; | ||
define(routes: RouteDefinitions): any; | ||
define(routes: RouteDefinitionsMap | RouteDefinitionsArray, routeMatcher?: RouteMatcher): any; | ||
createHref(path: Pathname): Pathname; | ||
} |
"use strict"; | ||
var switch_path_1 = require('switch-path'); | ||
var util = require('./util'); | ||
@@ -15,3 +14,3 @@ function isStrictlyInScope(namespace, path) { | ||
var RouterSource = (function () { | ||
function RouterSource(history$, _namespace, _createHref, _runSA) { | ||
function RouterSource(history$, _namespace, _createHref, _runSA, _routeMatcher) { | ||
this.history$ = history$; | ||
@@ -21,2 +20,3 @@ this._namespace = _namespace; | ||
this._runSA = _runSA; | ||
this._routeMatcher = _routeMatcher; | ||
} | ||
@@ -31,5 +31,6 @@ RouterSource.prototype.path = function (pathname) { | ||
var createHref = this._createHref; | ||
return new RouterSource(scopedHistory$, scopedNamespace, createHref, this._runSA); | ||
return new RouterSource(scopedHistory$, scopedNamespace, createHref, this._runSA, this._routeMatcher); | ||
}; | ||
RouterSource.prototype.define = function (routes) { | ||
RouterSource.prototype.define = function (routes, routeMatcher) { | ||
var _this = this; | ||
var namespace = this._namespace; | ||
@@ -40,4 +41,5 @@ var _createHref = this._createHref; | ||
.map(function (location) { | ||
var matcher = routeMatcher || _this._routeMatcher; | ||
var filteredPath = getFilteredPath(namespace, location.pathname); | ||
var _a = switch_path_1.default(filteredPath, routes), path = _a.path, value = _a.value; | ||
var _a = matcher(filteredPath, routes), path = _a.path, value = _a.value; | ||
return { path: path, value: value, location: location, createHref: createHref }; | ||
@@ -44,0 +46,0 @@ })); |
{ | ||
"name": "cyclic-router", | ||
"version": "2.1.2", | ||
"version": "3.0.0", | ||
"description": "A router driver built for Cycle.js", | ||
@@ -41,7 +41,7 @@ "main": "lib/index.js", | ||
"rxjs": "^5.0.0-beta.8", | ||
"testem": "^1.6.0", | ||
"testem": "^1.10.4", | ||
"tslint": "^3.10.2", | ||
"typescript": "^1.8.10", | ||
"typings": "^0.8.1", | ||
"uglify-js": "^2.6.2", | ||
"uglify-js": "^2.7.1", | ||
"validate-commit-message": "^3.0.1", | ||
@@ -48,0 +48,0 @@ "xstream": "^5.0.6" |
@@ -44,3 +44,3 @@ # cyclic-router | ||
return value(Object.assign({}, sources, { | ||
router: sources.router.path(path); | ||
router: sources.router.path(path) | ||
})); | ||
@@ -70,1 +70,36 @@ }); | ||
``` | ||
### Dynamically change route | ||
You can dynamically change route from code by emitting inputs handled by [the history driver](http://cycle.js.org/history/docs/#historyDriver). | ||
```js | ||
function main(sources) { | ||
// ... | ||
const homePageClick$ = sources.DOM.select(".home").events("click"); | ||
const previousPageClick$ = sources.DOM.select(".previous").events("click"); | ||
const nextPageClick$ = sources.DOM.select(".next").events("click"); | ||
const oldPageClick$ = sources.DOM.select(".old").events("click"); | ||
const aboutPageClick$ = sources.DOM.select(".about").events("click"); | ||
return { | ||
// ... | ||
router: xs.merge( | ||
// Go to page "/" | ||
homePageClick$.mapTo("/"), | ||
// Go back to previous page | ||
previousPageClick$.mapTo({ type: "goBack" }), | ||
// Go forward to next page | ||
nextPageClick$.mapTo({ type: "goForward" }), | ||
// Go back from 5 pages | ||
oldPageClick$.mapTo({ type: "go", value: -5 }), | ||
// Go to page "/about" with some state set to router's location | ||
aboutPageClick$.mapTo({ pathname: "/about", state: { some: "state" } }) | ||
), | ||
}; | ||
} | ||
``` |
@@ -7,2 +7,3 @@ /* eslint max-nested-callbacks: 0 */ | ||
import {makeRouterDriver, createServerHistory} from '../lib' | ||
import switchPath from 'switch-path'; | ||
@@ -23,3 +24,3 @@ describe('Cyclic Router - Rx 4', () => { | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.of('/'), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.of('/'), RxAdapter) | ||
assert.notStrictEqual(router.path, null) | ||
@@ -43,3 +44,3 @@ assert.strictEqual(typeof router.path, 'function') | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.of('/'), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.of('/'), RxAdapter) | ||
.path('/') | ||
@@ -63,3 +64,3 @@ assert.notStrictEqual(router.path, null) | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.from(routes), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.from(routes), RxAdapter) | ||
.path('/path') | ||
@@ -81,3 +82,3 @@ | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.from(routes), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.from(routes), RxAdapter) | ||
.path('/some').path('/really').path('/really').path('/deeply') | ||
@@ -100,3 +101,3 @@ .path('/nested').path('/route').path('/that') | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.from(routes), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.from(routes), RxAdapter) | ||
.path('/some').path('/really').path('/really').path('/deeply') | ||
@@ -120,3 +121,3 @@ .path('/nested').path('/route').path('/that') | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.of('/'), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.of('/'), RxAdapter) | ||
.define({}) | ||
@@ -137,3 +138,3 @@ assert.strictEqual(router instanceof Observable, true) | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router.define(defintion) | ||
@@ -164,3 +165,3 @@ | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router.path('/some').path('/nested').define(defintion) | ||
@@ -193,3 +194,3 @@ | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router.path('/some').path('/nested').define(definition) | ||
@@ -221,3 +222,3 @@ | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router | ||
@@ -249,3 +250,3 @@ .path('/some').path('/nested').define(defintion) | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router | ||
@@ -252,0 +253,0 @@ .path('/some').path('/nested').define(defintion) |
@@ -7,2 +7,3 @@ /* eslint max-nested-callbacks: 0 */ | ||
import {makeRouterDriver, createServerHistory} from '../lib' | ||
import switchPath from 'switch-path'; | ||
@@ -23,3 +24,3 @@ describe('Cyclic Router - Rx 5', () => { | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.of('/'), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.of('/'), RxAdapter) | ||
assert.notStrictEqual(router.path, null) | ||
@@ -43,3 +44,3 @@ assert.strictEqual(typeof router.path, 'function') | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.of('/'), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.of('/'), RxAdapter) | ||
.path('/') | ||
@@ -63,3 +64,3 @@ assert.notStrictEqual(router.path, null) | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
.path('/path') | ||
@@ -83,3 +84,3 @@ | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
.path('/some').path('/really').path('/really').path('/deeply') | ||
@@ -104,3 +105,3 @@ .path('/nested').path('/route').path('/that') | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
.path('/some').path('/really').path('/really').path('/deeply') | ||
@@ -126,3 +127,3 @@ .path('/nested').path('/route').path('/that') | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.of('/'), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.of('/'), RxAdapter) | ||
.define({}) | ||
@@ -147,3 +148,3 @@ assert.strictEqual(router instanceof Observable, true) | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router.define(defintion) | ||
@@ -173,3 +174,3 @@ | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router.path('/some').path('/nested').define(defintion) | ||
@@ -202,3 +203,3 @@ | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router.path('/some').path('/nested').define(definition) | ||
@@ -230,3 +231,3 @@ | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router | ||
@@ -258,3 +259,3 @@ .path('/some').path('/nested').define(defintion) | ||
const history = createServerHistory('/') | ||
const router = makeRouterDriver(history)(Observable.never(), RxAdapter) | ||
const router = makeRouterDriver(history, switchPath)(Observable.never(), RxAdapter) | ||
const match$ = router | ||
@@ -261,0 +262,0 @@ .path('/some').path('/nested').define(defintion) |
@@ -7,2 +7,3 @@ /* eslint max-nested-callbacks: 0 */ | ||
import {makeRouterDriver, createServerHistory} from '../lib' | ||
import switchPath from 'switch-path'; | ||
@@ -23,3 +24,3 @@ describe('Cyclic Router - XStream', () => { | ||
const history = createServerHistory() | ||
const router = makeRouterDriver(history)(xs.of('/'), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.of('/'), XSAdapter) | ||
assert.notStrictEqual(router.path, null) | ||
@@ -43,3 +44,3 @@ assert.strictEqual(typeof router.path, 'function') | ||
const history = createServerHistory() | ||
const router = makeRouterDriver(history)(xs.of('/'), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.of('/'), XSAdapter) | ||
.path('/') | ||
@@ -63,3 +64,3 @@ assert.notStrictEqual(router.path, null) | ||
const history = createServerHistory() | ||
const router = makeRouterDriver(history)(xs.fromArray(routes), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.fromArray(routes), XSAdapter) | ||
.path('/path') | ||
@@ -85,3 +86,3 @@ | ||
const history = createServerHistory() | ||
const router = makeRouterDriver(history)(xs.fromArray(routes), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.fromArray(routes), XSAdapter) | ||
.path('/some').path('/really').path('/really').path('/deeply') | ||
@@ -108,3 +109,3 @@ .path('/nested').path('/route').path('/that') | ||
const history = createServerHistory() | ||
const router = makeRouterDriver(history)(xs.fromArray(routes), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.fromArray(routes), XSAdapter) | ||
.path('/some').path('/really').path('/really').path('/deeply') | ||
@@ -132,3 +133,3 @@ .path('/nested').path('/route').path('/that') | ||
const history = createServerHistory() | ||
const router = makeRouterDriver(history)(xs.merge(xs.never(), xs.of('/')), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.merge(xs.never(), xs.of('/')), XSAdapter) | ||
.define({}) | ||
@@ -149,3 +150,3 @@ assert.strictEqual(router instanceof xs, true) | ||
const history = createServerHistory('/some/route') | ||
const router = makeRouterDriver(history)(xs.never(), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.never(), XSAdapter) | ||
const match$ = router.define(defintion) | ||
@@ -177,3 +178,3 @@ | ||
const history = createServerHistory('/wrong/path') | ||
const router = makeRouterDriver(history)(xs.never(), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.never(), XSAdapter) | ||
const match$ = router.path('/some').path('/nested').define(defintion) | ||
@@ -206,3 +207,3 @@ | ||
const history = createServerHistory('/wrong/path') | ||
const router = makeRouterDriver(history)(xs.never(), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.never(), XSAdapter) | ||
const match$ = router.path('/some').path('/nested').define(definition) | ||
@@ -234,3 +235,3 @@ | ||
const history = createServerHistory('/wrong/path') | ||
const router = makeRouterDriver(history)(xs.never(), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.never(), XSAdapter) | ||
const match$ = router.path('/some').path('/nested').define(definition) | ||
@@ -265,3 +266,3 @@ | ||
const history = createServerHistory('/wrong/path') | ||
const router = makeRouterDriver(history)(xs.never(), XSAdapter) | ||
const router = makeRouterDriver(history, switchPath)(xs.never(), XSAdapter) | ||
const match$ = router | ||
@@ -268,0 +269,0 @@ .path('/some').path('/nested').define(defintion) |
/// <reference path="browser/ambient/es6-shim/index.d.ts" /> | ||
/// <reference path="browser/ambient/mocha/index.d.ts" /> | ||
/// <reference path="browser/ambient/node/index.d.ts" /> | ||
/// <reference path="browser/definitions/@cycle/history/index.d.ts" /> |
/// <reference path="main/ambient/es6-shim/index.d.ts" /> | ||
/// <reference path="main/ambient/mocha/index.d.ts" /> | ||
/// <reference path="main/ambient/node/index.d.ts" /> | ||
/// <reference path="main/definitions/@cycle/history/index.d.ts" /> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
104
926831
61
7735