@@ -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
@@ -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
54 Task.throw $ E.ModuleNameReservedForKernel origin name
55 Task.throw $ E.ModuleNameReservedForKernel origin name
@@ -91,12 +92,18 @@ elmExists name srcDir =
91-- FIND KERNEL
92-- FIND KERNEL
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)
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
102− else Task.throw $ E.ModuleNotFound origin name [srcDir]
109+ Task.throw $ E.ModuleNotFound origin name [srcDir]