blob: 38253641735b9b069e00713eedaed76680a1747a (
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
|
(.using
[library
[lux (.except)
[type (.only sharing)]
[abstract
["[0]" monad (.only Monad do)]]
[control
["[0]" try (.only Try)]]
[data
[binary (.only Binary)]
["[0]" product]
[text
["%" \\format (.only format)]
[encoding
["[0]" utf8]]]
[collection
["[0]" sequence]
["[0]" set (.only Set)]
["[0]" list (.open: "[1]#[0]" functor)]]]]]
["[0]" // (.only Packager)
[//
["[0]" archive (.only Output)
["[0]" artifact]
["[0]" unit]
["[0]" module (.only)
["[0]" descriptor]]]
["[0]" cache
[dependency
["[1]/[0]" module]
["[1]/[0]" artifact]]]
["[0]" io
["[1]" archive]]
[//
[language
["$" lux]]]]])
(def: (write_module necessary_dependencies sequence [module_id output] so_far)
(All (_ directive)
(-> (Set unit.ID) (-> 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
(at utf8.codec decoded)
(at try.monad each
(|>> as_expected
(is directive)
(sharing [directive]
(is directive
so_far))
(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 (the archive.#output entry)]))
(monad.mix ! (..write_module necessary_dependencies sequence) header)
(at ! each (|>> scope
code
(at utf8.codec encoded)
{.#Left}))))))
|