@@ -31,6 +31,7 @@ data Asset
3131 = Local FilePath
3232 | Kernel FilePath (Maybe FilePath)
3333 | Foreign Pkg.Package
34+ | ForeignKernel
3435
3536
3637
@@ -49,7 +50,7 @@ find (Summary.Summary root project exposed _ _) origin name =
4950 Project.Pkg _ ->
5051 if N.startsWith "Elm.Kernel." name then
5152 if Project.isPlatformPackage project then
52− findKernel (toRoot "src") origin name
53+ findKernel (toRoot "src") exposed origin name
5354 else
5455 Task.throw $ E.ModuleNameReservedForKernel origin name
5556
@@ -91,12 +92,18 @@ elmExists name srcDir =
9192-- FIND KERNEL
9293
9394
94−findKernel :: FilePath -> E.Origin -> Module.Raw -> Task.Task_ E.Problem Asset
95−findKernel srcDir origin name =
95+findKernel :: FilePath -> Summary.ExposedModules -> E.Origin -> Module.Raw -> Task.Task_ E.Problem Asset
96+findKernel srcDir exposed origin name =
9697 do let clientPath = srcDir </> Module.nameToSlashPath name <.> "js"
9798 let serverPath = srcDir </> Module.nameToSlashPath name <.> "server.js"
9899 client <- liftIO $ Dir.doesFileExist clientPath
99100 server <- liftIO $ Dir.doesFileExist serverPath
100101 if client
101102 then return $ Kernel clientPath (if server then Just serverPath else Nothing)
102− else Task.throw $ E.ModuleNotFound origin name [srcDir]
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+ _ ->
109+ Task.throw $ E.ModuleNotFound origin name [srcDir]