1
1
module Code.ProjectDependency exposing (ProjectDependency , fromString , toString , toTag )
2
2
3
+ import Code.ProjectSlug as ProjectSlug exposing (ProjectSlug )
3
4
import Code.Version as Version exposing (Version )
5
+ import Lib.UserHandle as UserHandle exposing (UserHandle )
4
6
import Maybe.Extra as MaybeE
5
7
import UI.Tag as Tag exposing (Tag )
6
8
7
9
10
+ type DependencyName
11
+ = UserProject UserHandle ProjectSlug
12
+ | UnqualifiedDependency String
13
+
14
+
8
15
type alias ProjectDependency =
9
- { name : String , version : Maybe Version }
16
+ { name : DependencyName , version : Maybe Version }
10
17
11
18
12
19
fromString : String -> ProjectDependency
@@ -18,7 +25,16 @@ fromString raw =
18
25
( name, version ) =
19
26
case parts of
20
27
[ user, project, major, minor, patch ] ->
21
- ( " @" ++ user ++ " /" ++ project, Version . fromString ( String . join " ." [ major, minor, patch ] ) )
28
+ case ( UserHandle . fromString user, ProjectSlug . fromString project ) of
29
+ ( Just user_, Just project_ ) ->
30
+ ( UserProject user_ project_
31
+ , Version . fromString ( String . join " ." [ major, minor, patch ] )
32
+ )
33
+
34
+ _ ->
35
+ ( UnqualifiedDependency ( " @" ++ user ++ " /" ++ project)
36
+ , Version . fromString ( String . join " ." [ major, minor, patch ] )
37
+ )
22
38
23
39
[ n, major, minor, patch ] ->
24
40
let
@@ -27,17 +43,26 @@ fromString raw =
27
43
in
28
44
case version_ of
29
45
Just v ->
30
- ( n, Just v )
46
+ ( UnqualifiedDependency n, Just v )
31
47
32
48
-- It wasn't a version after all, so we give up trying to parse it
33
49
Nothing ->
34
- ( raw, Nothing )
50
+ ( UnqualifiedDependency raw, Nothing )
35
51
36
52
[ user, project ] ->
37
- ( " @" ++ user ++ " /" ++ project, Nothing )
53
+ case ( UserHandle . fromString user, ProjectSlug . fromString project ) of
54
+ ( Just user_, Just project_ ) ->
55
+ ( UserProject user_ project_
56
+ , Nothing
57
+ )
58
+
59
+ _ ->
60
+ ( UnqualifiedDependency ( " @" ++ user ++ " /" ++ project)
61
+ , Nothing
62
+ )
38
63
39
64
[ n ] ->
40
- ( n, Nothing )
65
+ ( UnqualifiedDependency n, Nothing )
41
66
42
67
_ ->
43
68
case List . reverse parts of
@@ -48,26 +73,41 @@ fromString raw =
48
73
in
49
74
case version_ of
50
75
Just v ->
51
- ( String . join " _" ( List . reverse n) , Just v )
76
+ ( UnqualifiedDependency ( String . join " _" ( List . reverse n) ), Just v )
52
77
53
78
-- It wasn't a version after all, so we give up trying to parse it
54
79
Nothing ->
55
- ( raw, Nothing )
80
+ ( UnqualifiedDependency raw, Nothing )
56
81
57
82
_ ->
58
- ( raw, Nothing )
83
+ ( UnqualifiedDependency raw, Nothing )
59
84
in
60
85
ProjectDependency name version
61
86
62
87
88
+ dependencyName : ProjectDependency -> String
89
+ dependencyName { name } =
90
+ case name of
91
+ UserProject userHandle projectSlug ->
92
+ UserHandle . toString userHandle ++ " /" ++ ProjectSlug . toString projectSlug
93
+
94
+ UnqualifiedDependency n ->
95
+ n
96
+
97
+
63
98
toString : ProjectDependency -> String
64
- toString { name, version } =
65
- name ++ MaybeE . unwrap " " ( \ v -> " v" ++ Version . toString v) version
99
+ toString projectDep =
100
+ let
101
+ name_ =
102
+ dependencyName projectDep
103
+ in
104
+ name_ ++ MaybeE . unwrap " " ( \ v -> " v" ++ Version . toString v) projectDep. version
66
105
67
106
68
107
toTag : ProjectDependency -> Tag msg
69
- toTag { name, version } =
70
- name
108
+ toTag projectDep =
109
+ projectDep
110
+ |> dependencyName
71
111
|> Tag . tag
72
112
|> Tag . large
73
- |> Tag . withRightText ( MaybeE . unwrap " " ( \ v -> " v" ++ Version . toString v) version)
113
+ |> Tag . withRightText ( MaybeE . unwrap " " ( \ v -> " v" ++ Version . toString v) projectDep . version)
0 commit comments