blob: bbbba49786840e2447a2d7e65b982338129d9751 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
(.module:
[lux #*
[type (#+ :share)]
[abstract
["." monad (#+ Monad do)]]
[control
["." try (#+ Try)]
[security
["!" capability]]]
[data
[binary (#+ Binary)]
[text
["%" format (#+ format)]
["." encoding]]
[collection
["." row]
["." list ("#@." functor)]]]
[world
["." file (#+ File Directory)]]]
[program
[compositor
["." static (#+ Static)]]]
["." // (#+ Packager)
[//
["." archive
["." descriptor]
["." artifact]]
[cache
["." dependency]]
["." io #_
["#" archive]]
[//
[language
["$" lux
[generation (#+ Context)]]]]]])
## TODO: Delete ASAP
(type: (Action ! a)
(! (Try a)))
(def: (write-artifact monad file-system static context)
(All [!]
(-> (Monad !) (file.System !) Static Context
(Action ! Binary)))
(do (try.with monad)
[artifact (let [[module artifact] context]
(!.use (:: file-system file) [(io.artifact file-system static module (%.nat artifact))]))]
(!.use (:: artifact content) [])))
(def: (write-module monad file-system static sequence [module artifacts] so-far)
(All [! directive]
(-> (Monad !) (file.System !) Static (-> directive directive directive) [archive.ID (List artifact.ID)] directive
(Action ! directive)))
(monad.fold (:assume (try.with monad))
(function (_ artifact so-far)
(do (try.with monad)
[content (..write-artifact monad file-system static [module artifact])
content (:: monad wrap (encoding.from-utf8 content))]
(wrap (sequence so-far
(:share [directive]
{directive
so-far}
{directive
(:assume content)})))))
so-far
artifacts))
(def: #export (package header to-code sequence)
(All [! directive]
(-> directive
(-> directive Text)
(-> directive directive directive)
(Packager !)))
(function (package monad file-system static archive program)
(do {@ (try.with monad)}
[cache (!.use (:: file-system directory) [(get@ #static.target static)])
order (:: monad wrap (dependency.load-order $.key archive))]
(|> order
(list@map (function (_ [module [module-id [descriptor document]]])
[module-id
(|> descriptor
(get@ #descriptor.registry)
artifact.artifacts
row.to-list
(list@map (|>> (get@ #artifact.id))))]))
(monad.fold @ (..write-module monad file-system static sequence) header)
(:: @ map (|>> to-code encoding.to-utf8))))))
|