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
@@ -1,5 +1,7 @@
1
1
  import * as import$0 from 'esbuild';
2
2
 
3
+ import * as import$1 from 'path';
4
+
3
5
  import * as ff_core_Any from "../../ff/core/Any.mjs"
4
6
 
5
7
  import * as ff_core_Array from "../../ff/core/Array.mjs"
@@ -42,6 +44,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
42
44
 
43
45
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
44
46
 
47
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
48
+
45
49
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
46
50
 
47
51
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -68,6 +72,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
68
72
 
69
73
  import * as ff_core_Path from "../../ff/core/Path.mjs"
70
74
 
75
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
76
+
71
77
  import * as ff_core_Random from "../../ff/core/Random.mjs"
72
78
 
73
79
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -90,8 +96,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
90
96
 
91
97
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
92
98
 
93
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
94
-
95
99
  // type BuildSystem
96
100
 
97
101
 
@@ -108,11 +112,13 @@ return {assetSystem_};
108
112
 
109
113
 
110
114
  export function internalCallEsBuild_(self_, mainJsFile_, outputPath_, minify_, sourceMap_) {
111
- throw new Error('Function internalCallEsBuild is missing on this target in sync context.');
115
+ const esbuild_ = import$0;
116
+ esbuild_.build({stdin: {contents: (("import {$run$} from './" + mainJsFile_) + "';"), resolveDir: "."}, bundle: true, minify: minify_, sourcemap: sourceMap_, platform: "browser", target: "es2017", external: ["../../../node_modules/*"], outfile: outputPath_})
112
117
  }
113
118
 
114
119
  export function internalNodeCallEsBuild_(self_, mainJsFile_, outputPath_, minify_) {
115
- throw new Error('Function internalNodeCallEsBuild is missing on this target in sync context.');
120
+ const esbuild_ = import$0;
121
+ esbuild_.build({entryPoints: [mainJsFile_], bundle: true, minify: minify_, sourcemap: true, platform: "node", target: "es2017", external: ["../../../node_modules/*"], outfile: outputPath_})
116
122
  }
117
123
 
118
124
  export function internalListDirectory_(path_) {
@@ -133,47 +139,26 @@ return ff_core_Path.Path_readStream(file_)
133
139
  }
134
140
 
135
141
  export function internalPath_(buildSystem_, absoluteOrRelative_) {
136
- throw new Error('Function internalPath is missing on this target in sync context.');
142
+ const nodePath_ = import$1;
143
+ return ff_core_Path.Path(nodePath_.resolve(absoluteOrRelative_))
137
144
  }
138
145
 
139
146
  export function internalCompile_(buildSystem_, mainFile_, target_) {
140
- throw new Error('Function internalCompile is missing on this target in sync context.');
147
+ $firefly_compiler["buildViaBuildSystem_$"](buildSystem_, ff_core_BuildSystem.internalPath_(buildSystem_, buildSystem_["fireflyPath_"]), ff_core_Path.Path_base(mainFile_), target_, $task)
141
148
  }
142
149
 
143
150
  export function internalMainPackagePair_(buildSystem_) {
144
- throw new Error('Function internalMainPackagePair is missing on this target in sync context.');
151
+ return ff_core_Pair.Pair(buildSystem_["mainPackagePair_"]["group_"], buildSystem_["mainPackagePair_"]["name_"])
145
152
  }
146
153
 
147
154
  export async function internalCallEsBuild_$(self_, mainJsFile_, outputPath_, minify_, sourceMap_, $task) {
148
-
149
- const esbuild = import$0
150
- return await esbuild.build({
151
- stdin: {contents: `import {$run$} from './${mainJsFile_}';`, resolveDir: '.'},
152
- bundle: true,
153
- minify: minify_,
154
- sourcemap: sourceMap_,
155
- platform: 'browser',
156
- target: 'es2017',
157
- external: ['../../../node_modules/*'], // TODO
158
- outfile: outputPath_
159
- })
160
-
155
+ const esbuild_ = import$0;
156
+ esbuild_.build({stdin: {contents: (("import {$run$} from './" + mainJsFile_) + "';"), resolveDir: "."}, bundle: true, minify: minify_, sourcemap: sourceMap_, platform: "browser", target: "es2017", external: ["../../../node_modules/*"], outfile: outputPath_})
161
157
  }
162
158
 
163
159
  export async function internalNodeCallEsBuild_$(self_, mainJsFile_, outputPath_, minify_, $task) {
164
-
165
- const esbuild = import$0
166
- return await esbuild.build({
167
- entryPoints: [mainJsFile_],
168
- bundle: true,
169
- minify: minify_,
170
- sourcemap: true,
171
- platform: 'node',
172
- target: 'es6',
173
- external: ['../../../node_modules/*'], // TODO
174
- outfile: outputPath_
175
- })
176
-
160
+ const esbuild_ = import$0;
161
+ esbuild_.build({entryPoints: [mainJsFile_], bundle: true, minify: minify_, sourcemap: true, platform: "node", target: "es2017", external: ["../../../node_modules/*"], outfile: outputPath_})
177
162
  }
178
163
 
179
164
  export async function internalListDirectory_$(path_, $task) {
@@ -194,21 +179,16 @@ return (await ff_core_Path.Path_readStream$(file_, $task))
194
179
  }
195
180
 
196
181
  export async function internalPath_$(buildSystem_, absoluteOrRelative_, $task) {
197
-
198
- return absoluteOrRelative_
199
-
182
+ const nodePath_ = import$1;
183
+ return ff_core_Path.Path(nodePath_.resolve(absoluteOrRelative_))
200
184
  }
201
185
 
202
186
  export async function internalCompile_$(buildSystem_, mainFile_, target_, $task) {
203
-
204
- return await $firefly_compiler.buildViaBuildSystem_$(buildSystem_, buildSystem_.fireflyPath_, mainFile_, target_, $task)
205
-
187
+ (await $firefly_compiler["buildViaBuildSystem_$"](buildSystem_, (await ff_core_BuildSystem.internalPath_$(buildSystem_, buildSystem_["fireflyPath_"], $task)), (await ff_core_Path.Path_base$(mainFile_, $task)), target_, $task))
206
188
  }
207
189
 
208
190
  export async function internalMainPackagePair_$(buildSystem_, $task) {
209
-
210
- return {first_: buildSystem_.mainPackagePair_.group_, second_: buildSystem_.mainPackagePair_.name_}
211
-
191
+ return ff_core_Pair.Pair(buildSystem_["mainPackagePair_"]["group_"], buildSystem_["mainPackagePair_"]["name_"])
212
192
  }
213
193
 
214
194
  export function BuildSystem_compileForBrowser(self_, mainFile_) {
@@ -219,11 +199,11 @@ return ff_core_BuildSystem.BrowserCode(mainPackagePair_.first_, mainPackagePair_
219
199
  }
220
200
 
221
201
  export function BuildSystem_buildMode(self_) {
222
- throw new Error('Function BuildSystem_buildMode is missing on this target in sync context.');
202
+ return (!(!self_["buildMode_"]))
223
203
  }
224
204
 
225
205
  export function BuildSystem_setAssets(self_, assetSystem_) {
226
- throw new Error('Function BuildSystem_setAssets is missing on this target in sync context.');
206
+ self_["assets_"] = assetSystem_
227
207
  }
228
208
 
229
209
  export function BuildSystem_packageAssets(self_) {
@@ -236,15 +216,15 @@ return ff_core_Core.panic_("dependencyAssets not yet implemented")
236
216
  }
237
217
 
238
218
  export function BuildSystem_arguments(self_) {
239
- throw new Error('Function BuildSystem_arguments is missing on this target in sync context.');
219
+ return self_["array_"]
240
220
  }
241
221
 
242
222
  export function BuildSystem_mainTask(self_) {
243
- throw new Error('Function BuildSystem_mainTask is missing on this target in sync context.');
223
+ return self_["task_"]
244
224
  }
245
225
 
246
226
  export function BuildSystem_crypto(self_) {
247
- throw new Error('Function BuildSystem_crypto is missing on this target in sync context.');
227
+ return crypto
248
228
  }
249
229
 
250
230
  export async function BuildSystem_compileForBrowser$(self_, mainFile_, $task) {
@@ -255,11 +235,11 @@ return ff_core_BuildSystem.BrowserCode(mainPackagePair_.first_, mainPackagePair_
255
235
  }
256
236
 
257
237
  export async function BuildSystem_buildMode$(self_, $task) {
258
- return !!self_.buildMode_
238
+ return (!(!self_["buildMode_"]))
259
239
  }
260
240
 
261
241
  export async function BuildSystem_setAssets$(self_, assetSystem_, $task) {
262
- self_.assets_ = assetSystem_
242
+ self_["assets_"] = assetSystem_
263
243
  }
264
244
 
265
245
  export async function BuildSystem_packageAssets$(self_, $task) {
@@ -272,15 +252,15 @@ return ff_core_Core.panic_("dependencyAssets not yet implemented")
272
252
  }
273
253
 
274
254
  export async function BuildSystem_arguments$(self_, $task) {
275
- return self_.array_
255
+ return self_["array_"]
276
256
  }
277
257
 
278
258
  export async function BuildSystem_mainTask$(self_, $task) {
279
- return self_.task_
259
+ return self_["task_"]
280
260
  }
281
261
 
282
262
  export async function BuildSystem_crypto$(self_, $task) {
283
- return (typeof globalThis !== 'undefined' ? globalThis : window).crypto
263
+ return crypto
284
264
  }
285
265
 
286
266
  export function BrowserCode_assets(self_) {
@@ -294,10 +274,10 @@ const mainJsFile_ = ((((((prefix_ + "/") + self_.packageGroup_) + "/") + self_.p
294
274
  const mainDirectory_ = ff_core_Option.Option_grab(ff_core_Path.Path_parent(self_.mainFile_));
295
275
  const file_ = (prefix_ + "/Main.bundle.js");
296
276
  ff_core_BuildSystem.internalCallEsBuild_(self_, mainJsFile_, file_, minify_, sourceMap_);
297
- const assets_ = ff_core_AssetSystem.AssetSystem(ff_core_List.List_toMap([ff_core_Pair.Pair(ff_core_String.String_dropFirst(file_, ff_core_String.String_size(prefix_)), (() => {
277
+ const assets_ = ff_core_AssetSystem.AssetSystem(ff_core_List.List_toMap([ff_core_Pair.Pair(ff_core_String.String_dropFirst(file_, prefix_.length), (() => {
298
278
  return ff_core_Path.Path_readStream(ff_core_Path.Path_path(mainDirectory_, file_))
299
279
  })), ...(sourceMap_
300
- ? [ff_core_Pair.Pair((ff_core_String.String_dropFirst(file_, ff_core_String.String_size(prefix_)) + ".map"), (() => {
280
+ ? [ff_core_Pair.Pair((ff_core_String.String_dropFirst(file_, prefix_.length) + ".map"), (() => {
301
281
  return ff_core_Path.Path_readStream(ff_core_Path.Path_path(mainDirectory_, (file_ + ".map")))
302
282
  }))]
303
283
  : [])], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String));
@@ -315,10 +295,10 @@ const mainJsFile_ = ((((((prefix_ + "/") + self_.packageGroup_) + "/") + self_.p
315
295
  const mainDirectory_ = ff_core_Option.Option_grab((await ff_core_Path.Path_parent$(self_.mainFile_, $task)));
316
296
  const file_ = (prefix_ + "/Main.bundle.js");
317
297
  (await ff_core_BuildSystem.internalCallEsBuild_$(self_, mainJsFile_, file_, minify_, sourceMap_, $task));
318
- const assets_ = ff_core_AssetSystem.AssetSystem(ff_core_List.List_toMap([ff_core_Pair.Pair(ff_core_String.String_dropFirst(file_, ff_core_String.String_size(prefix_)), (async ($task) => {
298
+ const assets_ = ff_core_AssetSystem.AssetSystem(ff_core_List.List_toMap([ff_core_Pair.Pair(ff_core_String.String_dropFirst(file_, prefix_.length), (async ($task) => {
319
299
  return (await ff_core_Path.Path_readStream$((await ff_core_Path.Path_path$(mainDirectory_, file_, $task)), $task))
320
300
  })), ...(sourceMap_
321
- ? [ff_core_Pair.Pair((ff_core_String.String_dropFirst(file_, ff_core_String.String_size(prefix_)) + ".map"), (async ($task) => {
301
+ ? [ff_core_Pair.Pair((ff_core_String.String_dropFirst(file_, prefix_.length) + ".map"), (async ($task) => {
322
302
  return (await ff_core_Path.Path_readStream$((await ff_core_Path.Path_path$(mainDirectory_, (file_ + ".map"), $task)), $task))
323
303
  }))]
324
304
  : [])], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String));
@@ -42,6 +42,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
42
42
 
43
43
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
44
44
 
45
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
46
+
45
47
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
46
48
 
47
49
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -68,6 +70,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
68
70
 
69
71
  import * as ff_core_Path from "../../ff/core/Path.mjs"
70
72
 
73
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
74
+
71
75
  import * as ff_core_Random from "../../ff/core/Random.mjs"
72
76
 
73
77
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -90,121 +94,270 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
90
94
 
91
95
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
92
96
 
93
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
94
-
95
97
  // type Channel
96
-
98
+ export function Channel(capacity_, buffer_, readers_, writers_) {
99
+ return {capacity_, buffer_, readers_, writers_};
100
+ }
97
101
 
98
102
  // type ChannelAction
99
-
103
+ export function ChannelAction(channel_, body_, message_, previous_) {
104
+ return {channel_, body_, message_, previous_};
105
+ }
100
106
 
101
107
 
102
108
 
103
109
  export function readOr_(channel_, body_) {
104
- throw new Error('Function readOr is missing on this target in sync context.');
110
+ return ff_core_Channel.ChannelAction(channel_, body_, ff_core_Option.None(), ff_core_Option.None())
105
111
  }
106
112
 
107
113
  export function writeOr_(channel_, message_, body_) {
108
- throw new Error('Function writeOr is missing on this target in sync context.');
114
+ return ff_core_Channel.ChannelAction(channel_, body_, ff_core_Option.Some(message_), ff_core_Option.None())
109
115
  }
110
116
 
111
117
  export function internalRunChannelAction_(action_, mode_) {
112
- throw new Error('Function internalRunChannelAction is missing on this target in sync context.');
118
+ ;
119
+ const actions_ = ff_core_List.List_toArray([]);
120
+ function findActions_(action_) {
121
+ actions_.array.push(action_);
122
+ {
123
+ const if_o = action_.previous_
124
+ if(if_o.Some) {
125
+ const _w1 = if_o.value_;
126
+ findActions_(_w1)
127
+ }
128
+ }
129
+ }
130
+ findActions_(action_);
131
+ let foundPromise_ = ff_core_Option.None();
132
+ for(let for_a = actions_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
133
+ const action_ = for_a[for_i];
134
+ do {
135
+ const _1 = action_.message_;
136
+ if(_1.Some) {
137
+ const message_ = _1.value_;
138
+ if((action_.channel_.readers_.size !== 0)) {
139
+ const reader_ = action_.channel_.readers_.values().next().value;
140
+ action_.channel_.readers_.delete(reader_);
141
+ reader_.resolve(message_);
142
+ foundPromise_ = ff_core_Option.Some(action_.body_($task))
143
+ break
144
+ }
145
+ }
146
+ if(_1.Some) {
147
+ const message_ = _1.value_;
148
+ if((action_.channel_.buffer_.array.length < action_.channel_.capacity_)) {
149
+ action_.channel_.buffer_.array.push(message_);
150
+ foundPromise_ = ff_core_Option.Some(action_.body_($task))
151
+ break
152
+ }
153
+ }
154
+ if(_1.Some) {
155
+
156
+ break
157
+ }
158
+ if(_1.None && (action_.channel_.buffer_.array.length !== 0)) {
159
+ ff_core_Array.Array_reverse(action_.channel_.buffer_);
160
+ const message_ = ff_core_Array.Array_pop(action_.channel_.buffer_);
161
+ ff_core_Array.Array_reverse(action_.channel_.buffer_);
162
+ foundPromise_ = ff_core_Option.Some(action_.body_(message_, $task))
163
+ break
164
+ }
165
+ if(_1.None && (action_.channel_.writers_.size !== 0)) {
166
+ const writer_ = action_.channel_.writers_.values().next().value;
167
+ action_.channel_.writers_.delete(writer_);
168
+ writer_.resolve();
169
+ foundPromise_ = ff_core_Option.Some(action_.body_(writer_.message, $task))
170
+ break
171
+ }
172
+ {
173
+
174
+ }
175
+ } while(false);
176
+ if(!ff_core_Option.Option_isEmpty(foundPromise_)) break
177
+ };
178
+ return ff_core_Option.Option_else(ff_core_Option.Option_map(foundPromise_, ((_w1) => {
179
+ return _w1
180
+ })), (() => {
181
+ if(ff_core_Option.Option_any(mode_, ((_w1) => {
182
+ return ff_core_Option.Option_isEmpty(_w1.second_)
183
+ }))) {
184
+ const makePromise_ = ff_core_Option.Option_grab(mode_).first_;
185
+ return makePromise_()
186
+ } else {
187
+ const body_ = ff_core_Js.awaitCancellablePromise_(((resolve_, reject_, onSettled_) => {
188
+ {
189
+ const if_o = mode_
190
+ if(if_o.Some) {
191
+ const m_ = if_o.value_;
192
+ const timeout_ = setTimeout((() => {
193
+ return resolve_(m_.first_)
194
+ }), (ff_core_Option.Option_grab(m_.second_) * 1000.0));
195
+ onSettled_(((_) => {
196
+ clearTimeout(timeout_)
197
+ }))
198
+ }
199
+ };
200
+ for(let for_a = actions_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
201
+ const action_ = for_a[for_i];
202
+ do {
203
+ const _1 = action_.message_;
204
+ if(_1.Some) {
205
+ const message_ = _1.value_;
206
+ const writer_ = {resolve: (() => {
207
+ return resolve_((() => {
208
+ return action_.body_($task)
209
+ }))
210
+ }), message: message_};
211
+ action_.channel_.writers_.add(writer_);
212
+ onSettled_(((_) => {
213
+ action_.channel_.writers_.delete(writer_)
214
+ }))
215
+ break
216
+ }
217
+ {
218
+ const reader_ = {resolve: ((m_) => {
219
+ return resolve_((() => {
220
+ return action_.body_(m_, $task)
221
+ }))
222
+ })};
223
+ action_.channel_.readers_.add(reader_);
224
+ onSettled_(((_) => {
225
+ action_.channel_.readers_.delete(reader_)
226
+ }))
227
+ }
228
+ } while(false)
229
+ }
230
+ }));
231
+ return body_()
232
+ }
233
+ }))
113
234
  }
114
235
 
115
236
  export async function readOr_$(channel_, body_, $task) {
116
- return {channel: channel_, body: body_, previous: null}
237
+ return ff_core_Channel.ChannelAction(channel_, body_, ff_core_Option.None(), ff_core_Option.None())
117
238
  }
118
239
 
119
240
  export async function writeOr_$(channel_, message_, body_, $task) {
120
- return {channel: channel_, body: body_, message: message_, previous: null}
241
+ return ff_core_Channel.ChannelAction(channel_, body_, ff_core_Option.Some(message_), ff_core_Option.None())
121
242
  }
122
243
 
123
244
  export async function internalRunChannelAction_$(action_, mode_, $task) {
124
-
125
- ff_core_Task.Task_throwIfAborted($task)
126
-
127
- // Convert the linked actions into an array.
128
- let actions = []
129
- while(action_ != null) {
130
- actions.push(action_)
131
- action_ = action_.previous
132
- }
133
- actions.reverse()
134
-
135
- // If any reads or writes can be done immediately, do the first one and return.
136
- for(let action of actions) {
137
- if(action.hasOwnProperty("message")) {
138
- if(action.channel.readers.size != 0) {
139
- let reader = action.channel.readers.values().next().value
140
- action.channel.readers.delete(reader)
141
- reader.resolve(action.message)
142
- return await action.body($task)
143
- } else if(action.channel.buffer.length < action.channel.capacity) {
144
- action.channel.buffer.push(action.message)
145
- return await action.body($task)
146
- }
147
- } else {
148
- if(action.channel.buffer.length != 0) {
149
- return await action.body(action.channel.buffer.shift(), $task)
150
- } else if(action.channel.writers.size != 0) {
151
- let writer = action.channel.writers.values().next().value
152
- action.channel.writers.delete(writer)
153
- writer.resolve()
154
- return await action.body(writer.message, $task)
155
- }
156
- }
157
- }
158
-
159
- // If there's an "immediately(body)" action, do that now.
160
- if(mode_.value_ && mode_.value_.second_.value_ == null) return await mode_.value_.first_($task)
161
-
162
- // Otherwise, start waiting for one of the readers or writers (or timeout(body), or cancellation) to happen.
163
- let abort = null
164
- let finish = null
165
- let cleanups = []
166
- function doCleanup() {
167
- for(let cleanup of cleanups) cleanup()
168
- }
169
- let promise = new Promise((resolve, reject) => {
170
- if(mode_.value_) finish = () => {doCleanup(); resolve(() => mode_.value_.first_($task))}
171
- abort = () => {doCleanup(); reject($task.controller.signal.reason)}
172
- for(let action of actions) {
173
- if(action.hasOwnProperty("message")) {
174
- let writer = {
175
- resolve: () => {
176
- doCleanup()
177
- resolve(() => action.body($task))
178
- },
179
- message: action.message
180
- }
181
- cleanups.push(() => action.channel.writers.delete(writer))
182
- action.channel.writers.add(writer)
183
- } else {
184
- let reader = {
185
- resolve: m => {
186
- doCleanup()
187
- resolve(() => action.body(m, $task))
188
- }
189
- }
190
- cleanups.push(() => action.channel.readers.delete(reader))
191
- action.channel.readers.add(reader)
192
- }
193
- }
194
- })
195
- let timeout = null
196
- try {
197
- $task.controller.signal.addEventListener('abort', abort)
198
- if(finish != null) timeout = setTimeout(finish, mode_.value_.second_.value_ * 1000)
199
- let body = await promise
200
- if(timeout != null) { clearTimeout(timeout); timeout = null }
201
- return await body()
202
- } finally {
203
- if(timeout != null) clearTimeout(timeout)
204
- $task.controller.signal.removeEventListener('abort', abort)
205
- if($task.controller.signal.aborted) $task.controller = new AbortController()
206
- }
207
-
245
+ ff_core_Task.Task_throwIfAborted($task);
246
+ const actions_ = ff_core_List.List_toArray([]);
247
+ function findActions_(action_) {
248
+ actions_.array.push(action_);
249
+ {
250
+ const if_o = action_.previous_
251
+ if(if_o.Some) {
252
+ const _w1 = if_o.value_;
253
+ findActions_(_w1)
254
+ }
255
+ }
256
+ }
257
+ findActions_(action_);
258
+ let foundPromise_ = ff_core_Option.None();
259
+ for(let for_a = actions_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
260
+ const action_ = for_a[for_i];
261
+ do {
262
+ const _1 = action_.message_;
263
+ if(_1.Some) {
264
+ const message_ = _1.value_;
265
+ if((action_.channel_.readers_.size !== 0)) {
266
+ const reader_ = action_.channel_.readers_.values().next().value;
267
+ action_.channel_.readers_.delete(reader_);
268
+ reader_.resolve(message_);
269
+ foundPromise_ = ff_core_Option.Some(action_.body_($task))
270
+ break
271
+ }
272
+ }
273
+ if(_1.Some) {
274
+ const message_ = _1.value_;
275
+ if((action_.channel_.buffer_.array.length < action_.channel_.capacity_)) {
276
+ action_.channel_.buffer_.array.push(message_);
277
+ foundPromise_ = ff_core_Option.Some(action_.body_($task))
278
+ break
279
+ }
280
+ }
281
+ if(_1.Some) {
282
+
283
+ break
284
+ }
285
+ if(_1.None && (action_.channel_.buffer_.array.length !== 0)) {
286
+ ff_core_Array.Array_reverse(action_.channel_.buffer_);
287
+ const message_ = ff_core_Array.Array_pop(action_.channel_.buffer_);
288
+ ff_core_Array.Array_reverse(action_.channel_.buffer_);
289
+ foundPromise_ = ff_core_Option.Some(action_.body_(message_, $task))
290
+ break
291
+ }
292
+ if(_1.None && (action_.channel_.writers_.size !== 0)) {
293
+ const writer_ = action_.channel_.writers_.values().next().value;
294
+ action_.channel_.writers_.delete(writer_);
295
+ writer_.resolve();
296
+ foundPromise_ = ff_core_Option.Some(action_.body_(writer_.message, $task))
297
+ break
298
+ }
299
+ {
300
+
301
+ }
302
+ } while(false);
303
+ if(!ff_core_Option.Option_isEmpty(foundPromise_)) break
304
+ };
305
+ return (await ff_core_Option.Option_else$((await ff_core_Option.Option_map$(foundPromise_, (async (_w1, $task) => {
306
+ return (await _w1)
307
+ }), $task)), (async ($task) => {
308
+ if(ff_core_Option.Option_any(mode_, ((_w1) => {
309
+ return ff_core_Option.Option_isEmpty(_w1.second_)
310
+ }))) {
311
+ const makePromise_ = ff_core_Option.Option_grab(mode_).first_;
312
+ return (await (await makePromise_($task)))
313
+ } else {
314
+ const body_ = (await ff_core_Js.awaitCancellablePromise_$(((resolve_, reject_, onSettled_) => {
315
+ {
316
+ const if_o = mode_
317
+ if(if_o.Some) {
318
+ const m_ = if_o.value_;
319
+ const timeout_ = setTimeout((() => {
320
+ return resolve_(m_.first_)
321
+ }), (ff_core_Option.Option_grab(m_.second_) * 1000.0));
322
+ onSettled_(((_) => {
323
+ clearTimeout(timeout_)
324
+ }))
325
+ }
326
+ };
327
+ for(let for_a = actions_.array, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
328
+ const action_ = for_a[for_i];
329
+ do {
330
+ const _1 = action_.message_;
331
+ if(_1.Some) {
332
+ const message_ = _1.value_;
333
+ const writer_ = {resolve: (() => {
334
+ return resolve_((async ($task) => {
335
+ return action_.body_($task)
336
+ }))
337
+ }), message: message_};
338
+ action_.channel_.writers_.add(writer_);
339
+ onSettled_(((_) => {
340
+ action_.channel_.writers_.delete(writer_)
341
+ }))
342
+ break
343
+ }
344
+ {
345
+ const reader_ = {resolve: ((m_) => {
346
+ return resolve_((async ($task) => {
347
+ return action_.body_(m_, $task)
348
+ }))
349
+ })};
350
+ action_.channel_.readers_.add(reader_);
351
+ onSettled_(((_) => {
352
+ action_.channel_.readers_.delete(reader_)
353
+ }))
354
+ }
355
+ } while(false)
356
+ }
357
+ }), $task));
358
+ return (await body_($task))
359
+ }
360
+ }), $task))
208
361
  }
209
362
 
210
363
  export function Channel_read(self_) {
@@ -232,11 +385,11 @@ export async function Channel_write$(self_, message_, $task) {
232
385
  }
233
386
 
234
387
  export function ChannelAction_readOr(self_, channel_, body_) {
235
- throw new Error('Function ChannelAction_readOr is missing on this target in sync context.');
388
+ return ff_core_Channel.ChannelAction(channel_, body_, ff_core_Option.None(), ff_core_Option.Some(self_))
236
389
  }
237
390
 
238
391
  export function ChannelAction_writeOr(self_, channel_, message_, body_) {
239
- throw new Error('Function ChannelAction_writeOr is missing on this target in sync context.');
392
+ return ff_core_Channel.ChannelAction(channel_, body_, ff_core_Option.Some(message_), ff_core_Option.Some(self_))
240
393
  }
241
394
 
242
395
  export function ChannelAction_wait(self_) {
@@ -252,11 +405,11 @@ return ff_core_Channel.internalRunChannelAction_(self_, ff_core_Option.Some(ff_c
252
405
  }
253
406
 
254
407
  export async function ChannelAction_readOr$(self_, channel_, body_, $task) {
255
- return {channel: channel_, body: body_, previous: self_}
408
+ return ff_core_Channel.ChannelAction(channel_, body_, ff_core_Option.None(), ff_core_Option.Some(self_))
256
409
  }
257
410
 
258
411
  export async function ChannelAction_writeOr$(self_, channel_, message_, body_, $task) {
259
- return {channel: channel_, body: body_, message: message_, previous: self_}
412
+ return ff_core_Channel.ChannelAction(channel_, body_, ff_core_Option.Some(message_), ff_core_Option.Some(self_))
260
413
  }
261
414
 
262
415
  export async function ChannelAction_wait$(self_, $task) {
@@ -42,6 +42,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
42
42
 
43
43
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
44
44
 
45
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
46
+
45
47
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
46
48
 
47
49
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -68,6 +70,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
68
70
 
69
71
  import * as ff_core_Path from "../../ff/core/Path.mjs"
70
72
 
73
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
74
+
71
75
  import * as ff_core_Random from "../../ff/core/Random.mjs"
72
76
 
73
77
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -90,8 +94,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
90
94
 
91
95
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
92
96
 
93
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
94
-
95
97
  // newtype Char
96
98
 
97
99
 
@@ -145,7 +147,7 @@ return ((self_ >= 48) && (self_ <= 57))
145
147
  }
146
148
 
147
149
  export async function Char_toString$(self_, $task) {
148
- throw new Error('Function Char_toString is missing on this target in async context.');
150
+ return String.fromCharCode(self_)
149
151
  }
150
152
 
151
153