@@ -2,16 +2,20 @@ module Routing.Parser (
22 parse
33 ) where
44
5- import Prelude (map , discard , (>>>), ($), (<<<), (==), (<*>), (<$>), (<=))
6- import Routing.Types (Route , RoutePart (..))
75import Data.Array as A
86import Data.Map as M
97import Data.String as S
108import Control.MonadPlus (guard )
9+ import Data.Either (fromRight )
1110import Data.List (fromFoldable , List )
1211import Data.Maybe (Maybe , fromMaybe )
12+ import Data.String.Regex (regex , split ) as R
13+ import Data.String.Regex.Flags (noFlags ) as R
1314import Data.Traversable (traverse )
1415import Data.Tuple (Tuple (..))
16+ import Partial.Unsafe (unsafePartial )
17+ import Prelude (map , discard , (>>>), ($), (<<<), (==), (<*>), (<$>), (<=))
18+ import Routing.Types (Route , RoutePart (..))
1519
1620-- | Parse part of hash. Will return `Query (Map String String)` for query
1721-- | i.e. `"?foo=bar&bar=baz"` -->
@@ -36,4 +40,4 @@ parsePart str = fromMaybe (Path str) do
3640-- | applied to every hash part (usually `decodeURIComponent`)
3741parse :: (String -> String ) -> String -> Route
3842parse decoder hash =
39- map ( decoder >>> parsePart ) $ fromFoldable (S .split (S.Pattern " / " ) hash)
43+ map ( decoder >>> parsePart ) $ fromFoldable (R .split (unsafePartial fromRight $ R .regex " \\ /|(?= \\ ?) " R .noFlags ) hash)
0 commit comments