@@ -12,7 +12,7 @@ import Control.Monad.Except (ExceptT)
12
12
import Control.Parallel (parTraverse )
13
13
import Data.Array as Array
14
14
import Data.Array.NonEmpty as NonEmpty
15
- import Data.Maybe (Maybe (..))
15
+ import Data.Maybe (Maybe (..), fromMaybe )
16
16
import Data.Newtype (unwrap )
17
17
import Data.String (Pattern (..))
18
18
import Data.String as String
@@ -45,7 +45,18 @@ type Dependency =
45
45
}
46
46
47
47
requireRegex :: 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
49
60
50
61
parseDeps :: String -> JS -> Array Dependency
51
62
parseDeps current = Array .mapMaybe go <<< String .split (Pattern " \n " ) <<< unwrap
@@ -54,14 +65,10 @@ parseDeps current = Array.mapMaybe go <<< String.split (Pattern "\n") <<< unwrap
54
65
go line = do
55
66
match <- Regex .match requireRegex line
56
67
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
65
72
}
66
73
_ ->
67
74
{ name: requirePath
0 commit comments