UNPKG

moy-router

Version:

Give a solution for moy-dom router management.

63 lines (58 loc) 1.26 kB
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'), )