moy-router
Version:
Give a solution for moy-dom router management.
63 lines (58 loc) • 1.26 kB
JavaScript
import pathToRegExp from 'path-to-regexp'
import {
ifElse,
includes,
compose,
prop,
split,
concat,
type,
prepend,
} from 'moy-fp'
import { parseQuery, stringifyQuery } from './Query'
const pushQueryAndHash = ifElse(
(queryAndHash, route) => {
const [query, hash] = queryAndHash.split('#')
route.query = query ? parseQuery(query) : undefined
route.hash = hash
}
)(
(queryAndHash, route) => route.query = parseQuery(queryAndHash)
)(
includes('#')
)
const handleStringPathname = pathname => {
const route = {}
route.pathname = pathname
let queryAndHash = compose(
prop(1),
split('?'),
)(pathname)
!queryAndHash && pathname.includes('#') &&
(queryAndHash = compose(
prepend('#'),
prop(1),
split('#'),
)(pathname))
queryAndHash && pushQueryAndHash(queryAndHash, route)
return route
}
const handleObjectPathname = route => {
if(route.params){
route.pathname = pathToRegExp.compile(route.pathname)(route.params)
}
if(route.query){
route.pathname += stringifyQuery(route.query)
}
if(route.hash){
route.pathname += concat(route.hash)('#')
}
return route
}
export default ifElse(
handleStringPathname,
)(
handleObjectPathname,
)(
type('String'),
)