@@ -105,6 +105,18 @@ let getNamespace config =
105
105
either fromString fromName |> Option. map nameSpaceToName
106
106
else None
107
107
108
+ module StringSet = Set. Make (String )
109
+
110
+ let getPublic config =
111
+ let public = config |> Json. get " public" in
112
+ match public with
113
+ | None -> None
114
+ | Some public -> (
115
+ match public |> Json. array with
116
+ | None -> None
117
+ | Some public ->
118
+ Some (public |> List. filter_map Json. string |> StringSet. of_list))
119
+
108
120
let collectFiles directory =
109
121
let allFiles = Files. readDirectory directory in
110
122
let compileds = allFiles |> List. filter isCompiledFile |> filterDuplicates in
@@ -124,8 +136,7 @@ let collectFiles directory =
124
136
| Some res -> Some (modName, SharedTypes. Impl {cmt; res}))
125
137
126
138
(* returns a list of (absolute path to cmt(i), relative path from base to source file) *)
127
- let findProjectFiles ~namespace ~path ~sourceDirectories ~libBs =
128
- let module StringSet = Set. Make (String ) in
139
+ let findProjectFiles ~public ~namespace ~path ~sourceDirectories ~libBs =
129
140
let dirs =
130
141
sourceDirectories |> List. map (Filename. concat path) |> StringSet. of_list
131
142
in
@@ -179,10 +190,18 @@ let findProjectFiles ~namespace ~path ~sourceDirectories ~libBs =
179
190
in
180
191
let result =
181
192
normals
182
- |> List. map (fun (name , paths ) ->
183
- match namespace with
184
- | None -> (name, paths)
185
- | Some namespace -> (name ^ " -" ^ namespace, paths))
193
+ |> List. filter_map (fun (name , paths ) ->
194
+ let originalName = name in
195
+ let name =
196
+ match namespace with
197
+ | None -> name
198
+ | Some namespace -> name ^ " -" ^ namespace
199
+ in
200
+ match public with
201
+ | Some public ->
202
+ if public |> StringSet. mem originalName then Some (name, paths)
203
+ else None
204
+ | None -> Some (name, paths))
186
205
in
187
206
match namespace with
188
207
| None -> result
@@ -236,8 +255,8 @@ let findDependencyFiles base config =
236
255
| Some _ -> libBs :: compiledDirectories
237
256
in
238
257
let projectFiles =
239
- findProjectFiles ~namespace ~path ~source Directories
240
- ~lib Bs
258
+ findProjectFiles ~public: (getPublic inner) ~namespace
259
+ ~path ~source Directories ~ lib Bs
241
260
in
242
261
Some (compiledDirectories, projectFiles))
243
262
| None -> None )
0 commit comments