blob: e014c340367ef996d221f9d923fbf347bcec9f54 (
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
|
(.using
[library
[lux "*"
[type {"+" :sharing}]
[abstract
["[0]" monad {"+" Monad do}]]
[control
["[0]" try {"+" Try}]]
[data
[binary {"+" Binary}]
["[0]" product]
[text
["%" format {"+" format}]
[encoding
["[0]" utf8]]]
[collection
["[0]" sequence]
["[0]" set {"+" Set}]
["[0]" list ("[1]#[0]" functor)]]]]]
[program
[compositor
["[0]" static {"+" Static}]]]
["[0]" // {"+" Packager}
[//
["[0]" archive {"+" Output}
["[0]" artifact]
["[0]" module]
["[0]" descriptor]]
["[0]" cache "_"
["[1]/[0]" module]
["[1]/[0]" artifact]]
["[0]" io "_"
["[1]" archive]]
[//
[language
["$" lux
[generation {"+" Context}]]]]]])
(def: (write_module necessary_dependencies sequence [module_id output] so_far)
(All (_ directive)
(-> (Set Context) (-> directive directive directive) [module.ID Output] directive
(Try directive)))
(|> output
sequence.list
(list.all (function (_ [artifact_id custom content])
(if (set.member? necessary_dependencies [module_id artifact_id])
{.#Some content}
{.#None})))
(monad.mix try.monad
(function (_ content so_far)
(|> content
(# utf8.codec decoded)
(# try.monad each
(|>> :expected
(:sharing [directive]
directive
so_far
directive)
(sequence so_far)))))
so_far)))
(def: .public (package header code sequence scope)
(All (_ directive)
(-> directive
(-> directive Text)
(-> directive directive directive)
(-> directive directive)
Packager))
(function (package host_dependencies archive program)
(do [! try.monad]
[.let [necessary_dependencies (cache/artifact.necessary_dependencies archive)]
order (cache/module.load_order $.key archive)]
(|> order
(list#each (function (_ [module [module_id entry]])
[module_id (value@ archive.#output entry)]))
(monad.mix ! (..write_module necessary_dependencies sequence) header)
(# ! each (|>> scope
code
(# utf8.codec encoded)
{.#Left}))))))
|