on master help sign in
Allow use of VirtualDom kernel stuff under certain circumstances
37609ffEvan Czaplicki
builder/src/File/Crawl.hs+7
@@ -182,6 +182,9 @@ dfs summary chan oldPending oldSeen unvisited graph =
182 let newGraph = graph { _foreigns = foreigns }
182 let newGraph = graph { _foreigns = foreigns }
183 dfs summary chan (pending - 1) seen [] newGraph
183 dfs summary chan (pending - 1) seen [] newGraph
184
184
185+ Right ForeignKernel ->
186+ dfs summary chan (pending - 1) seen [] graph
187+
185 Left problem ->
188 Left problem ->
186 do let problems = problem : _problems graph
189 do let problems = problem : _problems graph
187 let newGraph = graph { _problems = problems }
190 let newGraph = graph { _problems = problems }
@@ -217,6 +220,7 @@ data Asset
217 = Local Module.Raw Header.Info
220 = Local Module.Raw Header.Info
218 | Kernel Module.Raw (FilePath, Maybe FilePath)
221 | Kernel Module.Raw (FilePath, Maybe FilePath)
219 | Foreign Module.Raw Pkg.Package
222 | Foreign Module.Raw Pkg.Package
223+ | ForeignKernel
220
224
221
225
222toVisitor :: Summary -> Unvisited -> Task.Task_ E.Problem Asset
226toVisitor :: Summary -> Unvisited -> Task.Task_ E.Problem Asset
@@ -232,6 +236,9 @@ toVisitor summary (Unvisited origin name) =
232 Find.Kernel clientPath maybeServerPath ->
236 Find.Kernel clientPath maybeServerPath ->
233 return $ Kernel name (clientPath, maybeServerPath)
237 return $ Kernel name (clientPath, maybeServerPath)
234
238
239+ Find.ForeignKernel ->
240+ return ForeignKernel
241+
235
242
236
243
237-- VISIT KERNELS
244-- VISIT KERNELS
builder/src/File/Find.hs+11−4
@@ -31,6 +31,7 @@ data Asset
31 = Local FilePath
31 = Local FilePath
32 | Kernel FilePath (Maybe FilePath)
32 | Kernel FilePath (Maybe FilePath)
33 | Foreign Pkg.Package
33 | Foreign Pkg.Package
34+ | ForeignKernel
34
35
35
36
36
37
@@ -49,7 +50,7 @@ find (Summary.Summary root project exposed _ _) origin name =
49 Project.Pkg _ ->
50 Project.Pkg _ ->
50 if N.startsWith "Elm.Kernel." name then
51 if N.startsWith "Elm.Kernel." name then
51 if Project.isPlatformPackage project then
52 if Project.isPlatformPackage project then
52− findKernel (toRoot "src") origin name
53+ findKernel (toRoot "src") exposed origin name
53 else
54 else
54 Task.throw $ E.ModuleNameReservedForKernel origin name
55 Task.throw $ E.ModuleNameReservedForKernel origin name
55
56
@@ -91,12 +92,18 @@ elmExists name srcDir =
91-- FIND KERNEL
92-- FIND KERNEL
92
93
93
94
94−findKernel :: FilePath -> E.Origin -> Module.Raw -> Task.Task_ E.Problem Asset
95+findKernel :: FilePath -> Summary.ExposedModules -> E.Origin -> Module.Raw -> Task.Task_ E.Problem Asset
95−findKernel srcDir origin name =
96+findKernel srcDir exposed origin name =
96 do let clientPath = srcDir </> Module.nameToSlashPath name <.> "js"
97 do let clientPath = srcDir </> Module.nameToSlashPath name <.> "js"
97 let serverPath = srcDir </> Module.nameToSlashPath name <.> "server.js"
98 let serverPath = srcDir </> Module.nameToSlashPath name <.> "server.js"
98 client <- liftIO $ Dir.doesFileExist clientPath
99 client <- liftIO $ Dir.doesFileExist clientPath
99 server <- liftIO $ Dir.doesFileExist serverPath
100 server <- liftIO $ Dir.doesFileExist serverPath
100 if client
101 if client
101 then return $ Kernel clientPath (if server then Just serverPath else Nothing)
102 then return $ Kernel clientPath (if server then Just serverPath else Nothing)
103+ else
104+ case Map.lookup (N.drop 11 name) exposed of
105+ Just [Pkg.Package pkg _vsn] | pkg == Pkg.core || pkg == Pkg.virtualDom ->
106+ return ForeignKernel
107+
108+ _ ->
102− else Task.throw $ E.ModuleNotFound origin name [srcDir]
109+ Task.throw $ E.ModuleNotFound origin name [srcDir]