firefly-compiler 0.5.35 → 0.5.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/.hintrc +4 -4
  2. package/.vscode/settings.json +4 -4
  3. package/bin/Release.ff +157 -154
  4. package/bin/firefly.mjs +1 -1
  5. package/compiler/Builder.ff +275 -277
  6. package/compiler/Compiler.ff +234 -233
  7. package/compiler/Dependencies.ff +186 -187
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/Deriver.ff +23 -31
  10. package/compiler/Dictionaries.ff +1 -1
  11. package/compiler/Inference.ff +43 -20
  12. package/compiler/JsEmitter.ff +1437 -1282
  13. package/compiler/LspHook.ff +202 -202
  14. package/compiler/Main.ff +25 -24
  15. package/compiler/ModuleCache.ff +178 -178
  16. package/compiler/Parser.ff +36 -109
  17. package/compiler/Resolver.ff +5 -8
  18. package/compiler/Substitution.ff +1 -1
  19. package/compiler/Syntax.ff +1 -16
  20. package/compiler/Token.ff +9 -0
  21. package/compiler/Tokenizer.ff +4 -0
  22. package/compiler/Workspace.ff +88 -88
  23. package/core/.firefly/include/package.json +5 -5
  24. package/core/.firefly/package.ff +2 -2
  25. package/core/Any.ff +26 -30
  26. package/core/Array.ff +298 -265
  27. package/core/Atomic.ff +63 -64
  28. package/core/Box.ff +7 -7
  29. package/core/BrowserSystem.ff +40 -40
  30. package/core/Buffer.ff +185 -152
  31. package/core/BuildSystem.ff +156 -148
  32. package/core/Channel.ff +95 -92
  33. package/core/Char.ff +3 -2
  34. package/core/Core.ff +16 -23
  35. package/core/Crypto.ff +94 -96
  36. package/core/Equal.ff +41 -36
  37. package/core/Error.ff +15 -10
  38. package/core/FileHandle.ff +45 -37
  39. package/core/Float.ff +176 -200
  40. package/core/HttpClient.ff +142 -148
  41. package/core/Instant.ff +6 -8
  42. package/core/Int.ff +40 -24
  43. package/core/IntMap.ff +61 -39
  44. package/core/Js.ff +305 -0
  45. package/core/JsSystem.ff +135 -114
  46. package/core/JsValue.ff +303 -159
  47. package/core/Json.ff +423 -443
  48. package/core/List.ff +482 -486
  49. package/core/Lock.ff +108 -144
  50. package/core/Log.ff +25 -14
  51. package/core/NodeSystem.ff +198 -191
  52. package/core/Ordering.ff +160 -161
  53. package/core/Path.ff +377 -409
  54. package/core/Queue.ff +90 -0
  55. package/core/Random.ff +140 -134
  56. package/core/RbMap.ff +216 -216
  57. package/core/Serializable.ff +16 -13
  58. package/core/Show.ff +44 -43
  59. package/core/SourceLocation.ff +68 -68
  60. package/core/Stream.ff +1 -1
  61. package/core/String.ff +224 -202
  62. package/core/StringMap.ff +58 -36
  63. package/core/Task.ff +165 -149
  64. package/experimental/benchmarks/ListGrab.ff +23 -23
  65. package/experimental/benchmarks/ListGrab.java +55 -55
  66. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  67. package/experimental/benchmarks/Pyrotek45.java +64 -64
  68. package/experimental/bidirectional/Bidi.ff +88 -88
  69. package/experimental/lines/Main.ff +40 -0
  70. package/experimental/random/Index.ff +53 -53
  71. package/experimental/random/Process.ff +120 -120
  72. package/experimental/random/RunLength.ff +65 -65
  73. package/experimental/random/Scrape.ff +51 -51
  74. package/experimental/random/Symbols.ff +73 -73
  75. package/experimental/random/Tensor.ff +52 -52
  76. package/experimental/random/Units.ff +36 -36
  77. package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
  78. package/experimental/s3/S3TestPut.ff +16 -16
  79. package/experimental/tests/TestJson.ff +26 -26
  80. package/firefly.sh +0 -0
  81. package/fireflysite/.firefly/package.ff +4 -4
  82. package/fireflysite/CommunityOverview.ff +20 -20
  83. package/fireflysite/CountingButtonDemo.ff +58 -58
  84. package/fireflysite/DocumentParser.ff +325 -331
  85. package/fireflysite/ExamplesOverview.ff +40 -40
  86. package/fireflysite/FrontPage.ff +344 -344
  87. package/fireflysite/GettingStarted.ff +45 -45
  88. package/fireflysite/Guide.ff +456 -456
  89. package/fireflysite/Main.ff +163 -152
  90. package/fireflysite/MatchingPasswordsDemo.ff +82 -82
  91. package/fireflysite/PackagesOverview.ff +49 -49
  92. package/fireflysite/PostgresqlDemo.ff +34 -34
  93. package/fireflysite/ReferenceAll.ff +18 -18
  94. package/fireflysite/ReferenceIntroduction.ff +11 -11
  95. package/fireflysite/Styles.ff +567 -567
  96. package/fireflysite/Test.ff +121 -62
  97. package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
  98. package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
  99. package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
  100. package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
  101. package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
  102. package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
  103. package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
  104. package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
  105. package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
  106. package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
  107. package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
  108. package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
  109. package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
  110. package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
  111. package/lsp/.firefly/package.ff +1 -1
  112. package/lsp/CompletionHandler.ff +827 -827
  113. package/lsp/Handler.ff +714 -714
  114. package/lsp/HoverHandler.ff +79 -79
  115. package/lsp/LanguageServer.ff +272 -272
  116. package/lsp/SignatureHelpHandler.ff +55 -55
  117. package/lsp/SymbolHandler.ff +181 -181
  118. package/lsp/TestReferences.ff +17 -17
  119. package/lsp/TestReferencesCase.ff +7 -7
  120. package/lsp/stderr.txt +1 -1
  121. package/lsp/stdout.txt +34 -34
  122. package/lux/.firefly/package.ff +1 -1
  123. package/lux/Css.ff +648 -648
  124. package/lux/CssTest.ff +48 -48
  125. package/lux/Lux.ff +608 -617
  126. package/lux/LuxEvent.ff +79 -116
  127. package/lux/Main.ff +123 -123
  128. package/lux/Main2.ff +143 -143
  129. package/lux/TestDry.ff +28 -28
  130. package/output/js/ff/compiler/Builder.mjs +72 -71
  131. package/output/js/ff/compiler/Compiler.mjs +19 -13
  132. package/output/js/ff/compiler/Dependencies.mjs +8 -7
  133. package/output/js/ff/compiler/DependencyLock.mjs +6 -4
  134. package/output/js/ff/compiler/Deriver.mjs +26 -24
  135. package/output/js/ff/compiler/Dictionaries.mjs +14 -18
  136. package/output/js/ff/compiler/Environment.mjs +6 -4
  137. package/output/js/ff/compiler/Inference.mjs +238 -164
  138. package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
  139. package/output/js/ff/compiler/JsImporter.mjs +20 -18
  140. package/output/js/ff/compiler/LspHook.mjs +12 -10
  141. package/output/js/ff/compiler/Main.mjs +61 -41
  142. package/output/js/ff/compiler/ModuleCache.mjs +10 -8
  143. package/output/js/ff/compiler/Parser.mjs +153 -669
  144. package/output/js/ff/compiler/Patterns.mjs +12 -10
  145. package/output/js/ff/compiler/Resolver.mjs +52 -78
  146. package/output/js/ff/compiler/Substitution.mjs +12 -16
  147. package/output/js/ff/compiler/Syntax.mjs +50 -341
  148. package/output/js/ff/compiler/Token.mjs +126 -4
  149. package/output/js/ff/compiler/Tokenizer.mjs +62 -52
  150. package/output/js/ff/compiler/Unification.mjs +74 -90
  151. package/output/js/ff/compiler/Wildcards.mjs +4 -2
  152. package/output/js/ff/compiler/Workspace.mjs +26 -20
  153. package/output/js/ff/core/Any.mjs +20 -20
  154. package/output/js/ff/core/Array.mjs +268 -175
  155. package/output/js/ff/core/AssetSystem.mjs +8 -6
  156. package/output/js/ff/core/Atomic.mjs +84 -52
  157. package/output/js/ff/core/Bool.mjs +6 -4
  158. package/output/js/ff/core/BrowserSystem.mjs +38 -29
  159. package/output/js/ff/core/Buffer.mjs +285 -133
  160. package/output/js/ff/core/BuildSystem.mjs +36 -56
  161. package/output/js/ff/core/Channel.mjs +250 -97
  162. package/output/js/ff/core/Char.mjs +5 -3
  163. package/output/js/ff/core/Core.mjs +28 -34
  164. package/output/js/ff/core/Crypto.mjs +30 -52
  165. package/output/js/ff/core/Duration.mjs +4 -2
  166. package/output/js/ff/core/Equal.mjs +14 -12
  167. package/output/js/ff/core/Error.mjs +17 -11
  168. package/output/js/ff/core/FileHandle.mjs +76 -38
  169. package/output/js/ff/core/Float.mjs +92 -160
  170. package/output/js/ff/core/HttpClient.mjs +208 -76
  171. package/output/js/ff/core/Instant.mjs +8 -10
  172. package/output/js/ff/core/Int.mjs +36 -26
  173. package/output/js/ff/core/IntMap.mjs +79 -33
  174. package/output/js/ff/core/Js.mjs +751 -0
  175. package/output/js/ff/core/JsSystem.mjs +54 -60
  176. package/output/js/ff/core/JsValue.mjs +294 -143
  177. package/output/js/ff/core/Json.mjs +443 -253
  178. package/output/js/ff/core/List.mjs +262 -214
  179. package/output/js/ff/core/Lock.mjs +156 -125
  180. package/output/js/ff/core/Log.mjs +20 -10
  181. package/output/js/ff/core/Map.mjs +10 -8
  182. package/output/js/ff/core/NodeSystem.mjs +189 -123
  183. package/output/js/ff/core/Nothing.mjs +4 -2
  184. package/output/js/ff/core/Option.mjs +40 -38
  185. package/output/js/ff/core/Ordering.mjs +26 -20
  186. package/output/js/ff/core/Pair.mjs +4 -2
  187. package/output/js/ff/core/Path.mjs +517 -315
  188. package/output/js/ff/core/Queue.mjs +306 -0
  189. package/output/js/ff/core/Random.mjs +141 -77
  190. package/output/js/ff/core/RbMap.mjs +36 -34
  191. package/output/js/ff/core/Serializable.mjs +44 -28
  192. package/output/js/ff/core/Set.mjs +6 -4
  193. package/output/js/ff/core/Show.mjs +8 -6
  194. package/output/js/ff/core/SourceLocation.mjs +4 -2
  195. package/output/js/ff/core/Stream.mjs +30 -50
  196. package/output/js/ff/core/String.mjs +263 -172
  197. package/output/js/ff/core/StringMap.mjs +77 -31
  198. package/output/js/ff/core/Task.mjs +91 -76
  199. package/output/js/ff/core/Try.mjs +20 -18
  200. package/output/js/ff/core/Unit.mjs +4 -2
  201. package/package.json +1 -1
  202. package/postgresql/Pg.ff +53 -59
  203. package/rpc/.firefly/package.ff +1 -1
  204. package/rpc/Rpc.ff +70 -70
  205. package/s3/.firefly/package.ff +1 -1
  206. package/s3/S3.ff +92 -94
  207. package/vscode/LICENSE.txt +21 -21
  208. package/vscode/Prepublish.ff +15 -15
  209. package/vscode/README.md +16 -16
  210. package/vscode/client/package-lock.json +544 -544
  211. package/vscode/client/package.json +22 -22
  212. package/vscode/client/src/extension.ts +104 -104
  213. package/vscode/icons/firefly-icon.svg +10 -10
  214. package/vscode/language-configuration.json +61 -61
  215. package/vscode/package-lock.json +3623 -3623
  216. package/vscode/package.json +1 -1
  217. package/vscode/snippets.json +241 -241
  218. package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
  219. package/webserver/.firefly/include/package.json +5 -5
  220. package/webserver/.firefly/package.ff +2 -2
  221. package/webserver/WebServer.ff +647 -685
  222. package/websocket/.firefly/package.ff +1 -1
  223. package/websocket/WebSocket.ff +100 -131
  224. package/core/UnsafeJs.ff +0 -42
  225. package/output/js/ff/core/UnsafeJs.mjs +0 -191
package/lux/Main2.ff CHANGED
@@ -1,143 +1,143 @@
1
- import HttpServer from ff:httpserver
2
-
3
- import Lux
4
- import LuxEvent
5
-
6
-
7
- mainComponent(lux: Lux, system: BrowserSystem) {
8
- sleepComponent(lux, system)
9
- }
10
-
11
- sleepComponent(lux: Lux, system: BrowserSystem) {
12
- lux.useState(False): start, setStart =>
13
- if(start) {
14
- lux.useSuspense {
15
- lux.div {
16
- lux.div {lux.text("Sleeping")}
17
- lux.button {
18
- lux.text("Cancel")
19
- lux.onClick {event =>
20
- event.preventDefault()
21
- setStart(False)
22
- }
23
- }
24
- }
25
- } {lux =>
26
- trySleep(lux.task, "A")
27
- lux.div {lux.text("Done sleeping")}
28
- }
29
- } else {
30
- lux.button {
31
- lux.text("Start")
32
- lux.onClick {event =>
33
- event.preventDefault()
34
- setStart(True)
35
- }
36
- }
37
- }
38
- }
39
-
40
- ifComponent(lux: Lux, system: BrowserSystem) {
41
- lux.useState(False): start, setStart =>
42
- if(start) {
43
- lux.div {lux.text("Started")}
44
- } else {
45
- lux.button {
46
- lux.text("Start")
47
- lux.onClick {event =>
48
- event.preventDefault()
49
- setStart(True)
50
- }
51
- }
52
- }
53
- }
54
-
55
- rhymeComponent(lux: Lux, system: BrowserSystem) {
56
- lux.div {
57
- lux.useState(0): count, setCount =>
58
- Log.debug("useState(0)")
59
- lux.useState("Ɛ"): text, setText =>
60
- lux.div {
61
- lux.button {
62
- lux.text("Count: " + count)
63
- lux.onClick {event =>
64
- setCount(count + 1)
65
- }
66
- }
67
- lux.div {
68
- lux.useCallback1(setText): setText =>
69
- lux.useLazy1(text): text =>
70
- lux.div {
71
- lux.div {
72
- lux.text("Text: " + text + " -> ")
73
- lux.useSuspense {lux.span {lux.text("Rhyming...")}} {lux =>
74
- lux.span {
75
- lux.text(rhyme(system, text))
76
- }
77
- }
78
- }
79
- lux.input {
80
- lux.setValue(text)
81
- Log.debug("setValue: " + text)
82
- lux.onInput {event =>
83
- Log.debug(text + " -> " + event.text())
84
- setText(event.text())
85
- }
86
- }
87
- }
88
- }
89
- }
90
- }
91
- }
92
-
93
-
94
- rhyme(system: BrowserSystem, text: String): String {
95
- let json = system.httpClient().get("https://api.datamuse.com/words?rel_rhy=" + text, []) {_.readJson()}
96
- json.index(0).field("word").getString().else {"?"}
97
- }
98
-
99
- browserMain(system: BrowserSystem): Unit {
100
- Lux.renderById(system, "main") {lux =>
101
- lux.div {
102
- mainComponent(lux, system)
103
- }
104
- }
105
- }
106
-
107
- nodeMain(system: NodeSystem): Unit {
108
- HttpServer.listen(system, "localhost", 8080) {request, response =>
109
- if(request.path() == "/") {
110
- response.setHeader("Content-Type", ["text/html; charset=UTF-8"])
111
- response.writeText("<!doctype html>")
112
- response.writeText("<div id='main'></div>")
113
- response.writeText("<script type='module' src='/js/script/script/Main2.mjs'></script>")
114
- } elseIf {request.path().startsWith("/js/") && !request.path().contains("..")} {
115
- response.setHeader("Content-Type", ["text/javascript; charset=UTF-8"])
116
- response.writeText(system.assets().readText(request.path()))
117
- } elseIf {request.path() == "/chat"} {
118
- system.mainTask().sleep(Duration(request.readText().size().toFloat()))
119
- response.setHeader("Content-Type", ["text/plain; charset=UTF-8"])
120
- response.writeText("Hello there!")
121
- } else {
122
- response.writeStatus(404, Some("Not found"))
123
- }
124
- }
125
- }
126
-
127
- buildMain(system: BuildSystem) {
128
- let browser = system.compileForBrowser("Main2.ff")
129
- let assets = AssetSystem.create().addAssets("/js", browser.assets())
130
- system.setAssets(assets)
131
- }
132
-
133
- trySleep(task: Task, name: String) {
134
- try {
135
- task.sleep(Duration(4.0))
136
- Log.debug("Slept!")
137
- } catchAny {error =>
138
- if(error.name() == "AbortError") {
139
- Log.debug(name + " aborted")
140
- }
141
- error.rethrow()
142
- }
143
- }
1
+ import HttpServer from ff:httpserver
2
+
3
+ import Lux
4
+ import LuxEvent
5
+
6
+
7
+ mainComponent(lux: Lux, system: BrowserSystem) {
8
+ sleepComponent(lux, system)
9
+ }
10
+
11
+ sleepComponent(lux: Lux, system: BrowserSystem) {
12
+ lux.useState(False): start, setStart =>
13
+ if(start) {
14
+ lux.useSuspense {
15
+ lux.div {
16
+ lux.div {lux.text("Sleeping")}
17
+ lux.button {
18
+ lux.text("Cancel")
19
+ lux.onClick {event =>
20
+ event.preventDefault()
21
+ setStart(False)
22
+ }
23
+ }
24
+ }
25
+ } {lux =>
26
+ trySleep(lux.task, "A")
27
+ lux.div {lux.text("Done sleeping")}
28
+ }
29
+ } else {
30
+ lux.button {
31
+ lux.text("Start")
32
+ lux.onClick {event =>
33
+ event.preventDefault()
34
+ setStart(True)
35
+ }
36
+ }
37
+ }
38
+ }
39
+
40
+ ifComponent(lux: Lux, system: BrowserSystem) {
41
+ lux.useState(False): start, setStart =>
42
+ if(start) {
43
+ lux.div {lux.text("Started")}
44
+ } else {
45
+ lux.button {
46
+ lux.text("Start")
47
+ lux.onClick {event =>
48
+ event.preventDefault()
49
+ setStart(True)
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ rhymeComponent(lux: Lux, system: BrowserSystem) {
56
+ lux.div {
57
+ lux.useState(0): count, setCount =>
58
+ Log.debug("useState(0)")
59
+ lux.useState("Ɛ"): text, setText =>
60
+ lux.div {
61
+ lux.button {
62
+ lux.text("Count: " + count)
63
+ lux.onClick {event =>
64
+ setCount(count + 1)
65
+ }
66
+ }
67
+ lux.div {
68
+ lux.useCallback1(setText): setText =>
69
+ lux.useLazy1(text): text =>
70
+ lux.div {
71
+ lux.div {
72
+ lux.text("Text: " + text + " -> ")
73
+ lux.useSuspense {lux.span {lux.text("Rhyming...")}} {lux =>
74
+ lux.span {
75
+ lux.text(rhyme(system, text))
76
+ }
77
+ }
78
+ }
79
+ lux.input {
80
+ lux.setValue(text)
81
+ Log.debug("setValue: " + text)
82
+ lux.onInput {event =>
83
+ Log.debug(text + " -> " + event.text())
84
+ setText(event.text())
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+
93
+
94
+ rhyme(system: BrowserSystem, text: String): String {
95
+ let json = system.httpClient().get("https://api.datamuse.com/words?rel_rhy=" + text, []) {_.readJson()}
96
+ json.index(0).field("word").getString().else {"?"}
97
+ }
98
+
99
+ browserMain(system: BrowserSystem): Unit {
100
+ Lux.renderById(system, "main") {lux =>
101
+ lux.div {
102
+ mainComponent(lux, system)
103
+ }
104
+ }
105
+ }
106
+
107
+ nodeMain(system: NodeSystem): Unit {
108
+ HttpServer.listen(system, "localhost", 8080) {request, response =>
109
+ if(request.path() == "/") {
110
+ response.setHeader("Content-Type", ["text/html; charset=UTF-8"])
111
+ response.writeText("<!doctype html>")
112
+ response.writeText("<div id='main'></div>")
113
+ response.writeText("<script type='module' src='/js/script/script/Main2.mjs'></script>")
114
+ } elseIf {request.path().startsWith("/js/") && !request.path().contains("..")} {
115
+ response.setHeader("Content-Type", ["text/javascript; charset=UTF-8"])
116
+ response.writeText(system.assets().readText(request.path()))
117
+ } elseIf {request.path() == "/chat"} {
118
+ system.mainTask().sleep(Duration(request.readText().size().toFloat()))
119
+ response.setHeader("Content-Type", ["text/plain; charset=UTF-8"])
120
+ response.writeText("Hello there!")
121
+ } else {
122
+ response.writeStatus(404, Some("Not found"))
123
+ }
124
+ }
125
+ }
126
+
127
+ buildMain(system: BuildSystem) {
128
+ let browser = system.compileForBrowser("Main2.ff")
129
+ let assets = AssetSystem.create().addAssets("/js", browser.assets())
130
+ system.setAssets(assets)
131
+ }
132
+
133
+ trySleep(task: Task, name: String) {
134
+ try {
135
+ task.sleep(Duration(4.0))
136
+ Log.debug("Slept!")
137
+ } catchAny {error =>
138
+ if(error.name() == "AbortError") {
139
+ Log.debug(name + " aborted")
140
+ }
141
+ error.rethrow()
142
+ }
143
+ }
package/lux/TestDry.ff CHANGED
@@ -1,28 +1,28 @@
1
- import Lux
2
-
3
- nodeMain(system: NodeSystem) {
4
-
5
-
6
-
7
- let html = Lux.renderToString(system, render)
8
- Log.trace(html.first)
9
-
10
- }
11
-
12
- render(lux: Lux): Unit {
13
- lux.div {
14
- lux.set("id", "its-me")
15
- lux.span {
16
- lux.text("Hello")
17
- lux.keyed("noegle"):
18
- lux.div {
19
- lux.set("id", "it's \"a-me\"")
20
- lux.span {
21
- lux.text("Hello ]]>")
22
- }
23
- lux.text("Hi")
24
- }
25
- }
26
- lux.text("Hi")
27
- }
28
- }
1
+ import Lux
2
+
3
+ nodeMain(system: NodeSystem) {
4
+
5
+
6
+
7
+ let html = Lux.renderToString(system, render)
8
+ Log.trace(html.first)
9
+
10
+ }
11
+
12
+ render(lux: Lux): Unit {
13
+ lux.div {
14
+ lux.set("id", "its-me")
15
+ lux.span {
16
+ lux.text("Hello")
17
+ lux.keyed("noegle"):
18
+ lux.div {
19
+ lux.set("id", "it's \"a-me\"")
20
+ lux.span {
21
+ lux.text("Hello ]]>")
22
+ }
23
+ lux.text("Hi")
24
+ }
25
+ }
26
+ lux.text("Hi")
27
+ }
28
+ }
@@ -66,6 +66,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
66
66
 
67
67
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
68
68
 
69
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
70
+
69
71
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
70
72
 
71
73
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -92,6 +94,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
92
94
 
93
95
  import * as ff_core_Path from "../../ff/core/Path.mjs"
94
96
 
97
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
98
+
95
99
  import * as ff_core_Random from "../../ff/core/Random.mjs"
96
100
 
97
101
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -114,8 +118,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
114
118
 
115
119
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
116
120
 
117
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
118
-
119
121
  // type PackageFiles
120
122
  export function PackageFiles(root_, packageFile_, files_) {
121
123
  return {root_, packageFile_, files_};
@@ -137,11 +139,13 @@ if(printMeasurements_) {
137
139
  ff_compiler_Compiler.Compiler_printMeasurements(compiler_)
138
140
  };
139
141
  ff_core_Map.Map_each(resolvedDependencies_.packagePaths_, ((packagePair_, packagePath_) => {
140
- for(const for_o = ff_core_Map.Map_get(resolvedDependencies_.packages_, packagePair_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair); for_o.Some;) {
141
- const packageInfo_ = for_o.value_;
142
+ {
143
+ const if_o = ff_core_Map.Map_get(resolvedDependencies_.packages_, packagePair_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair)
144
+ if(if_o.Some) {
145
+ const packageInfo_ = if_o.value_;
142
146
  ff_compiler_Builder.processNodeModules_(system_, jsPathFile_, packagePath_, packageInfo_);
143
147
  ff_compiler_Builder.processIncludes_(jsPathFile_, packagePath_, packageInfo_)
144
- break
148
+ }
145
149
  }
146
150
  }), ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair);
147
151
  return true
@@ -155,7 +159,7 @@ ff_core_Path.Path_renameTo(jsPathFile_, jsOutputPath_)
155
159
  }
156
160
 
157
161
  export function processIncludes_(jsPathFile_, packagePath_, info_) {
158
- for(let for_i = 0, for_a = info_.includes_, for_l = for_a.length; for_i < for_l; for_i++) {
162
+ for(let for_a = info_.includes_, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
159
163
  const include_ = for_a[for_i];
160
164
  const fromPath_ = ff_core_Path.Path_slash(ff_core_Path.Path_slash(ff_core_Path.Path_slash(packagePath_, ".firefly"), "include"), include_.path_);
161
165
  const toPath_ = ff_core_Path.Path_slash(ff_core_Path.Path_slash(jsPathFile_, ff_compiler_Syntax.PackagePair_groupName(info_.package_.packagePair_, "/")), include_.path_);
@@ -190,7 +194,7 @@ const fixedPackagePaths_ = (ff_core_Map.Map_contains(resolvedDependencies_.packa
190
194
  if((target_ !== "browser")) {
191
195
  ff_core_Core.panic_("buildViaBuildSystem is currently limited to browser target only - the restriction can be lifted")
192
196
  };
193
- ff_compiler_Builder.build_(system_, ff_compiler_JsEmitter.EmitBrowser(), resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(mainFile_, ff_core_String.String_size(".ff")), (((_c) => {
197
+ ff_compiler_Builder.build_(system_, ff_compiler_JsEmitter.EmitBrowser(), resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(mainFile_, ".ff".length), (((_c) => {
194
198
  return ff_compiler_Dependencies.ResolvedDependencies(_c.mainPackagePair_, _c.packages_, fixedPackagePaths_, _c.singleFilePackages_)
195
199
  }))(resolvedDependencies_), ff_core_Option.None(), ff_core_NodeSystem.NodeSystem_path(system_, ".firefly/temporary"), ff_core_Path.Path_slash(ff_core_NodeSystem.NodeSystem_path(system_, ".firefly/output"), target_), false, ff_compiler_ModuleCache.new_(0))
196
200
  }
@@ -203,14 +207,14 @@ return ff_compiler_Builder.findPackageFiles_(path_, mustContain_, skipFiles_)
203
207
  if(!_1 && ff_core_Path.Path_endsWith(path_, [".firefly", "package.ff"])) {
204
208
  return [ff_compiler_Builder.PackageFiles(ff_core_Option.Option_grab(ff_core_Path.Path_parent(path_)), ff_core_Option.Some(path_), [])]
205
209
  }
206
- if(!_1) {
210
+ {
207
211
  return [ff_compiler_Builder.PackageFiles(ff_core_Option.Option_grab(ff_core_Path.Path_parent(path_)), ff_core_Option.None(), [path_])]
208
212
  }
209
213
  }))(ff_core_Path.Path_isDirectory(path_));
210
214
  const errors_ = ff_core_Array.new_();
211
- for(let for_i = 0, for_a = ff_core_List.List_filter(packages_, ((_w1) => {
215
+ for(let for_a = ff_core_List.List_filter(packages_, ((_w1) => {
212
216
  return (!ff_core_List.List_isEmpty(_w1.files_))
213
- })), for_l = for_a.length; for_i < for_l; for_i++) {
217
+ })), for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
214
218
  const package_ = for_a[for_i];
215
219
  const firstFile_ = ff_core_List.List_grabFirst(package_.files_);
216
220
  const resolvedDependencies_ = ff_compiler_Dependencies.process_(ff_core_NodeSystem.NodeSystem_httpClient(system_), dependencyLock_, firstFile_);
@@ -227,14 +231,14 @@ const files_ = (checkDependencies_
227
231
  : ff_core_List.List_filter(package_.files_, ((_w1) => {
228
232
  return (!ff_core_Path.Path_contains(_w1, [".firefly", "dependencies"]))
229
233
  })));
230
- for(let for_i = 0, for_a = files_, for_l = for_a.length; for_i < for_l; for_i++) {
234
+ for(let for_a = files_, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
231
235
  const file_ = for_a[for_i];
232
236
  const localFile_ = ff_core_Path.Path_base(file_);
233
237
  ff_core_Try.Try_catch(ff_core_Try.Try_tryCatch(ff_core_Core.try_((() => {
234
238
  if(infer_) {
235
- ff_compiler_Compiler.Compiler_infer(compiler_, resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(localFile_, ff_core_String.String_size(".ff")))
239
+ ff_compiler_Compiler.Compiler_infer(compiler_, resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(localFile_, ".ff".length))
236
240
  } else {
237
- ff_compiler_Compiler.Compiler_resolve(compiler_, resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(localFile_, ff_core_String.String_size(".ff")))
241
+ ff_compiler_Compiler.Compiler_resolve(compiler_, resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(localFile_, ".ff".length))
238
242
  }
239
243
  })), ((_1, _2) => {
240
244
  {
@@ -314,32 +318,33 @@ ff_core_Path.Path_writeStream(p_, makeStream_(), false)
314
318
  return
315
319
  }
316
320
  }));
317
- const json_ = `{
318
- "name": "main",
319
- "bin": {
320
- "firefly-main": "Main.bundle.js"
321
- },
322
- "devDependencies": {
323
- "pkg": "^5.8.0"
324
- },
325
- "pkg": {
326
- "scripts": "Main.bundle.js",
327
- "outputPath": "bin",
328
- "assets": ["../assets/**/*"],
329
- "targets": [
330
- "node18-linux-x64",
331
- "node18-macos-x64",
332
- "node18-win-x64"
333
- ]
334
- }
335
- }`;
321
+ const json_ = `{
322
+ "name": "main",
323
+ "bin": {
324
+ "firefly-main": "Main.bundle.js"
325
+ },
326
+ "devDependencies": {
327
+ "pkg": "^5.8.0"
328
+ },
329
+ "pkg": {
330
+ "scripts": "Main.bundle.js",
331
+ "outputPath": "bin",
332
+ "assets": ["../assets/**/*"],
333
+ "targets": [
334
+ "node18-linux-x64",
335
+ "node18-macos-x64",
336
+ "node18-win-x64"
337
+ ]
338
+ }
339
+ }`;
336
340
  const packageFile_ = ff_core_Path.Path_slash(outputPath_, "executable/package.json");
337
341
  ff_core_Path.Path_writeText(packageFile_, json_);
338
342
  ff_compiler_Builder.internalCallPkg_(self_, packageFile_, outputPath_, targets_)
339
343
  }
340
344
 
341
345
  export function internalCallPkg_(self_, packageFile_, outputPath_, targets_) {
342
- throw new Error('Function internalCallPkg is missing on this target in sync context.');
346
+ const pkg_ = import$0;
347
+ pkg_.exec([packageFile_.absolutePath_, "--out-path", outputPath_.absolutePath_, "--target", ff_core_List.List_join(targets_, ",")])
343
348
  }
344
349
 
345
350
  export async function build_$(system_, emitTarget_, mainPackage_, mainModule_, resolvedDependencies_, compilerModulePath_, tempPath_, jsOutputPath_, printMeasurements_, moduleCache_, $task) {
@@ -356,11 +361,13 @@ if(printMeasurements_) {
356
361
  (await ff_compiler_Compiler.Compiler_printMeasurements$(compiler_, $task))
357
362
  };
358
363
  (await ff_core_Map.Map_each$(resolvedDependencies_.packagePaths_, (async (packagePair_, packagePath_, $task) => {
359
- for(const for_o = ff_core_Map.Map_get(resolvedDependencies_.packages_, packagePair_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair); for_o.Some;) {
360
- const packageInfo_ = for_o.value_;
364
+ {
365
+ const if_o = ff_core_Map.Map_get(resolvedDependencies_.packages_, packagePair_, ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair)
366
+ if(if_o.Some) {
367
+ const packageInfo_ = if_o.value_;
361
368
  (await ff_compiler_Builder.processNodeModules_$(system_, jsPathFile_, packagePath_, packageInfo_, $task));
362
369
  (await ff_compiler_Builder.processIncludes_$(jsPathFile_, packagePath_, packageInfo_, $task))
363
- break
370
+ }
364
371
  }
365
372
  }), ff_compiler_Syntax.ff_core_Ordering_Order$ff_compiler_Syntax_PackagePair, $task));
366
373
  return true
@@ -374,7 +381,7 @@ if((await ff_core_Path.Path_exists$(jsOutputPath_, false, false, false, $task)))
374
381
  }
375
382
 
376
383
  export async function processIncludes_$(jsPathFile_, packagePath_, info_, $task) {
377
- for(let for_i = 0, for_a = info_.includes_, for_l = for_a.length; for_i < for_l; for_i++) {
384
+ for(let for_a = info_.includes_, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
378
385
  const include_ = for_a[for_i];
379
386
  const fromPath_ = (await ff_core_Path.Path_slash$((await ff_core_Path.Path_slash$((await ff_core_Path.Path_slash$(packagePath_, ".firefly", $task)), "include", $task)), include_.path_, $task));
380
387
  const toPath_ = (await ff_core_Path.Path_slash$((await ff_core_Path.Path_slash$(jsPathFile_, ff_compiler_Syntax.PackagePair_groupName(info_.package_.packagePair_, "/"), $task)), include_.path_, $task));
@@ -409,7 +416,7 @@ const fixedPackagePaths_ = (ff_core_Map.Map_contains(resolvedDependencies_.packa
409
416
  if((target_ !== "browser")) {
410
417
  ff_core_Core.panic_("buildViaBuildSystem is currently limited to browser target only - the restriction can be lifted")
411
418
  };
412
- (await ff_compiler_Builder.build_$(system_, ff_compiler_JsEmitter.EmitBrowser(), resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(mainFile_, ff_core_String.String_size(".ff")), (((_c) => {
419
+ (await ff_compiler_Builder.build_$(system_, ff_compiler_JsEmitter.EmitBrowser(), resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(mainFile_, ".ff".length), (((_c) => {
413
420
  return ff_compiler_Dependencies.ResolvedDependencies(_c.mainPackagePair_, _c.packages_, fixedPackagePaths_, _c.singleFilePackages_)
414
421
  }))(resolvedDependencies_), ff_core_Option.None(), (await ff_core_NodeSystem.NodeSystem_path$(system_, ".firefly/temporary", $task)), (await ff_core_Path.Path_slash$((await ff_core_NodeSystem.NodeSystem_path$(system_, ".firefly/output", $task)), target_, $task)), false, ff_compiler_ModuleCache.new_(0), $task))
415
422
  }
@@ -422,14 +429,14 @@ return (await ff_compiler_Builder.findPackageFiles_$(path_, mustContain_, skipFi
422
429
  if(!_1 && (await ff_core_Path.Path_endsWith$(path_, [".firefly", "package.ff"], $task))) {
423
430
  return [ff_compiler_Builder.PackageFiles(ff_core_Option.Option_grab((await ff_core_Path.Path_parent$(path_, $task))), ff_core_Option.Some(path_), [])]
424
431
  }
425
- if(!_1) {
432
+ {
426
433
  return [ff_compiler_Builder.PackageFiles(ff_core_Option.Option_grab((await ff_core_Path.Path_parent$(path_, $task))), ff_core_Option.None(), [path_])]
427
434
  }
428
435
  }))((await ff_core_Path.Path_isDirectory$(path_, $task)), $task));
429
436
  const errors_ = ff_core_Array.new_();
430
- for(let for_i = 0, for_a = ff_core_List.List_filter(packages_, ((_w1) => {
437
+ for(let for_a = ff_core_List.List_filter(packages_, ((_w1) => {
431
438
  return (!ff_core_List.List_isEmpty(_w1.files_))
432
- })), for_l = for_a.length; for_i < for_l; for_i++) {
439
+ })), for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
433
440
  const package_ = for_a[for_i];
434
441
  const firstFile_ = ff_core_List.List_grabFirst(package_.files_);
435
442
  const resolvedDependencies_ = (await ff_compiler_Dependencies.process_$((await ff_core_NodeSystem.NodeSystem_httpClient$(system_, $task)), dependencyLock_, firstFile_, $task));
@@ -446,14 +453,14 @@ const files_ = (checkDependencies_
446
453
  : (await ff_core_List.List_filter$(package_.files_, (async (_w1, $task) => {
447
454
  return (!(await ff_core_Path.Path_contains$(_w1, [".firefly", "dependencies"], $task)))
448
455
  }), $task)));
449
- for(let for_i = 0, for_a = files_, for_l = for_a.length; for_i < for_l; for_i++) {
456
+ for(let for_a = files_, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
450
457
  const file_ = for_a[for_i];
451
458
  const localFile_ = (await ff_core_Path.Path_base$(file_, $task));
452
459
  ff_core_Try.Try_catch(ff_core_Try.Try_tryCatch((await ff_core_Core.try_$((async ($task) => {
453
460
  if(infer_) {
454
- (await ff_compiler_Compiler.Compiler_infer$(compiler_, resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(localFile_, ff_core_String.String_size(".ff")), $task))
461
+ (await ff_compiler_Compiler.Compiler_infer$(compiler_, resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(localFile_, ".ff".length), $task))
455
462
  } else {
456
- (await ff_compiler_Compiler.Compiler_resolve$(compiler_, resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(localFile_, ff_core_String.String_size(".ff")), $task))
463
+ (await ff_compiler_Compiler.Compiler_resolve$(compiler_, resolvedDependencies_.mainPackagePair_, ff_core_String.String_dropLast(localFile_, ".ff".length), $task))
457
464
  }
458
465
  }), $task)), ((_1, _2) => {
459
466
  {
@@ -533,39 +540,33 @@ const p_ = (await ff_core_Path.Path_slash$(assetOutputPath_, path_, $task));
533
540
  return
534
541
  }
535
542
  }), $task));
536
- const json_ = `{
537
- "name": "main",
538
- "bin": {
539
- "firefly-main": "Main.bundle.js"
540
- },
541
- "devDependencies": {
542
- "pkg": "^5.8.0"
543
- },
544
- "pkg": {
545
- "scripts": "Main.bundle.js",
546
- "outputPath": "bin",
547
- "assets": ["../assets/**/*"],
548
- "targets": [
549
- "node18-linux-x64",
550
- "node18-macos-x64",
551
- "node18-win-x64"
552
- ]
553
- }
554
- }`;
543
+ const json_ = `{
544
+ "name": "main",
545
+ "bin": {
546
+ "firefly-main": "Main.bundle.js"
547
+ },
548
+ "devDependencies": {
549
+ "pkg": "^5.8.0"
550
+ },
551
+ "pkg": {
552
+ "scripts": "Main.bundle.js",
553
+ "outputPath": "bin",
554
+ "assets": ["../assets/**/*"],
555
+ "targets": [
556
+ "node18-linux-x64",
557
+ "node18-macos-x64",
558
+ "node18-win-x64"
559
+ ]
560
+ }
561
+ }`;
555
562
  const packageFile_ = (await ff_core_Path.Path_slash$(outputPath_, "executable/package.json", $task));
556
563
  (await ff_core_Path.Path_writeText$(packageFile_, json_, $task));
557
564
  (await ff_compiler_Builder.internalCallPkg_$(self_, packageFile_, outputPath_, targets_, $task))
558
565
  }
559
566
 
560
567
  export async function internalCallPkg_$(self_, packageFile_, outputPath_, targets_, $task) {
561
-
562
- const pkg = import$0
563
- return await pkg.exec([
564
- packageFile_,
565
- '--out-path', outputPath_,
566
- '--target', targets_.join(',')
567
- ])
568
-
568
+ const pkg_ = import$0;
569
+ (await pkg_.exec([packageFile_.absolutePath_, "--out-path", outputPath_.absolutePath_, "--target", ff_core_List.List_join(targets_, ",")]))
569
570
  }
570
571
 
571
572