on master help sign in
Allow use of VirtualDom kernel stuff under certain circumstances
commit37609ffa8443e98ba8f3157fe0fd8dfb6af82eb3 authorEvan Czaplicki <evancz@users.noreply.github.com> dateWed 25 Apr 2018, 17:18 (9 years ago) parent665d3d9
2 files changed+18−4
builder/src/File/Crawl.hs+7 builder/src/File/Find.hs+11−4
builder/src/File/Crawl.hs+7
@@ -182,6 +182,9 @@ dfs summary chan oldPending oldSeen unvisited graph =
182182 let newGraph = graph { _foreigns = foreigns }
183183 dfs summary chan (pending - 1) seen [] newGraph
184184
185+ Right ForeignKernel ->
186+ dfs summary chan (pending - 1) seen [] graph
187+
185188 Left problem ->
186189 do let problems = problem : _problems graph
187190 let newGraph = graph { _problems = problems }
@@ -217,6 +220,7 @@ data Asset
217220 = Local Module.Raw Header.Info
218221 | Kernel Module.Raw (FilePath, Maybe FilePath)
219222 | Foreign Module.Raw Pkg.Package
223+ | ForeignKernel
220224
221225
222226toVisitor :: Summary -> Unvisited -> Task.Task_ E.Problem Asset
@@ -232,6 +236,9 @@ toVisitor summary (Unvisited origin name) =
232236 Find.Kernel clientPath maybeServerPath ->
233237 return $ Kernel name (clientPath, maybeServerPath)
234238
239+ Find.ForeignKernel ->
240+ return ForeignKernel
241+
235242
236243
237244-- VISIT KERNELS
builder/src/File/Find.hs+11−4
@@ -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]