@@ -12,7 +12,7 @@ import Control.Monad.Except (ExceptT)
1212import Control.Parallel (parTraverse )
1313import Data.Array as Array
1414import Data.Array.NonEmpty as NonEmpty
15- import Data.Maybe (Maybe (..))
15+ import Data.Maybe (Maybe (..), fromMaybe )
1616import Data.Newtype (unwrap )
1717import Data.String (Pattern (..))
1818import Data.String as String
@@ -45,7 +45,18 @@ type Dependency =
4545 }
4646
4747requireRegex :: Regex
48- requireRegex = unsafeRegex """ ^var\s+\S+\s*=\s*require\(["']([^"']*)["']\);""" noFlags
48+ requireRegex = unsafeRegex """ ^var\s+\S+\s*=\s*require\(["']([^"']*)["']\)""" noFlags
49+
50+ dirname :: String -> String
51+ dirname path = fromMaybe " " do
52+ ix <- String .lastIndexOf (Pattern " /" ) path
53+ pure $ String .take ix path
54+
55+ resolvePath :: String -> String -> Maybe String
56+ resolvePath a b
57+ | String .take 2 b == " ./" = Just $ dirname a <> String .drop 1 b
58+ | String .take 3 b == " ../" = Just $ dirname (dirname a) <> String .drop 2 b
59+ | otherwise = Nothing
4960
5061parseDeps :: String -> JS -> Array Dependency
5162parseDeps current = Array .mapMaybe go <<< String .split (Pattern " \n " ) <<< unwrap
@@ -54,14 +65,10 @@ parseDeps current = Array.mapMaybe go <<< String.split (Pattern "\n") <<< unwrap
5465 go line = do
5566 match <- Regex .match requireRegex line
5667 requirePath <- join $ NonEmpty .index match 1
57- pure $ case String .split (Pattern " /" ) requirePath of
58- [ " ." , " foreign.js" ] ->
59- { name: current <> " $Foreign"
60- , path: Just $ current <> " /foreign.js"
61- }
62- [ " .." , name, " index.js" ] ->
63- { name
64- , path: Just $ name <> " /index.js"
68+ pure $ case resolvePath current requirePath of
69+ Just path ->
70+ { name: path
71+ , path: String .stripPrefix (Pattern " /" ) path
6572 }
6673 _ ->
6774 { name: requirePath
0 commit comments