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
@@ -48,6 +48,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
48
48
 
49
49
  import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
50
50
 
51
+ import * as ff_core_Js from "../../ff/core/Js.mjs"
52
+
51
53
  import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
52
54
 
53
55
  import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
@@ -74,6 +76,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
74
76
 
75
77
  import * as ff_core_Path from "../../ff/core/Path.mjs"
76
78
 
79
+ import * as ff_core_Queue from "../../ff/core/Queue.mjs"
80
+
77
81
  import * as ff_core_Random from "../../ff/core/Random.mjs"
78
82
 
79
83
  import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
@@ -96,8 +100,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
96
100
 
97
101
  import * as ff_core_Unit from "../../ff/core/Unit.mjs"
98
102
 
99
- import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
100
-
101
103
  // type NodeSystem
102
104
 
103
105
 
@@ -113,45 +115,42 @@ return {problem_};
113
115
 
114
116
 
115
117
 
116
- export function internalAssets_(system_) {
117
- throw new Error('Function internalAssets is missing on this target in sync context.');
118
- }
119
-
120
118
  export function internalListDirectoryWithoutOpendir_(system_, path_) {
121
- throw new Error('Function internalListDirectoryWithoutOpendir is missing on this target in sync context.');
119
+ const fsPromises_ = import$0;
120
+ const nodePath_ = import$1;
121
+ const files_ = fsPromises_.readdir(path_.absolutePath_);
122
+ return ff_core_List.List_map(ff_core_JsValue.JsValue_grabArray(files_), ((file_) => {
123
+ return ff_core_Path.Path(nodePath_.join(path_.absolutePath_, file_))
124
+ }))
122
125
  }
123
126
 
124
127
  export function internalProcessError_(problem_) {
125
- return ff_core_Try.Try_catchAny(ff_core_Core.try_((() => {
128
+ try {
126
129
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_NodeSystem.ProcessException(problem_), ff_core_NodeSystem.ff_core_Any_HasAnyTag$ff_core_NodeSystem_ProcessException)})
127
- })), ((error_) => {
130
+ } catch(error_) {
128
131
  return error_
129
- }))
130
132
  }
131
-
132
- export async function internalAssets_$(system_, $task) {
133
- return system_.assets_
134
133
  }
135
134
 
136
135
  export async function internalListDirectoryWithoutOpendir_$(system_, path_, $task) {
137
-
138
- const fsPromises = import$0
139
- const path = import$1
140
- let files = await fsPromises.readdir(path_)
141
- return files.map(file => path.join(path_, file))
142
-
136
+ const fsPromises_ = import$0;
137
+ const nodePath_ = import$1;
138
+ const files_ = (await fsPromises_.readdir(path_.absolutePath_));
139
+ return ff_core_List.List_map(ff_core_JsValue.JsValue_grabArray(files_), ((file_) => {
140
+ return ff_core_Path.Path(nodePath_.join(path_.absolutePath_, file_))
141
+ }))
143
142
  }
144
143
 
145
144
  export async function internalProcessError_$(problem_, $task) {
146
- return ff_core_Try.Try_catchAny(ff_core_Core.try_((() => {
145
+ try {
147
146
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_NodeSystem.ProcessException(problem_), ff_core_NodeSystem.ff_core_Any_HasAnyTag$ff_core_NodeSystem_ProcessException)})
148
- })), ((error_) => {
147
+ } catch(error_) {
149
148
  return error_
150
- }))
149
+ }
151
150
  }
152
151
 
153
152
  export function NodeSystem_arguments(self_) {
154
- throw new Error('Function NodeSystem_arguments is missing on this target in sync context.');
153
+ return self_["array_"]
155
154
  }
156
155
 
157
156
  export function NodeSystem_assets(self_) {
@@ -170,44 +169,48 @@ return ff_core_Path.Path_readStream(file_)
170
169
  }
171
170
  return ff_core_AssetSystem.AssetSystem(ff_core_Stream.Stream_toMap(streams_(assetPkgSnapshotPath_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String))
172
171
  } else {
173
- return ff_core_NodeSystem.internalAssets_(self_)
172
+ return self_["assets_"]
174
173
  }
175
174
  }
176
175
 
177
176
  export function NodeSystem_path(self_, relativePath_) {
178
- throw new Error('Function NodeSystem_path is missing on this target in sync context.');
177
+ const nodePath_ = import$1;
178
+ return ff_core_Path.Path(nodePath_.resolve(relativePath_))
179
179
  }
180
180
 
181
181
  export function NodeSystem_pathFromUrl(self_, url_) {
182
- throw new Error('Function NodeSystem_pathFromUrl is missing on this target in sync context.');
182
+ const nodeUrl_ = import$2;
183
+ return ff_core_Path.Path(nodeUrl_.fileURLToPath((new URL(url_))))
183
184
  }
184
185
 
185
186
  export function NodeSystem_httpClient(self_) {
186
- throw new Error('Function NodeSystem_httpClient is missing on this target in sync context.');
187
+ return globalThis
187
188
  }
188
189
 
189
190
  export function NodeSystem_mainTask(self_) {
190
- throw new Error('Function NodeSystem_mainTask is missing on this target in sync context.');
191
+ return self_["task_"]
191
192
  }
192
193
 
193
194
  export function NodeSystem_crypto(self_) {
194
- throw new Error('Function NodeSystem_crypto is missing on this target in sync context.');
195
+ return globalThis.crypto
195
196
  }
196
197
 
197
198
  export function NodeSystem_js(self_) {
198
- throw new Error('Function NodeSystem_js is missing on this target in sync context.');
199
+ return globalThis
199
200
  }
200
201
 
201
202
  export function NodeSystem_exit(self_, exitCode_ = 0) {
202
- throw new Error('Function NodeSystem_exit is missing on this target in sync context.');
203
+ return process.exit(exitCode_)
203
204
  }
204
205
 
205
206
  export function NodeSystem_readStream(self_) {
206
- throw new Error('Function NodeSystem_readStream is missing on this target in sync context.');
207
+ return ff_core_Path.internalReadStream_((() => {
208
+ return process.stdin
209
+ }))
207
210
  }
208
211
 
209
212
  export function NodeSystem_writeBuffer(self_, buffer_) {
210
- throw new Error('Function NodeSystem_writeBuffer is missing on this target in sync context.');
213
+ process.stdout.write((new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength)))
211
214
  }
212
215
 
213
216
  export function NodeSystem_writeStream(self_, stream_) {
@@ -225,7 +228,7 @@ ff_core_NodeSystem.NodeSystem_writeText(self_, (text_ + "\n"))
225
228
  }
226
229
 
227
230
  export function NodeSystem_writeErrorBuffer(self_, buffer_) {
228
- throw new Error('Function NodeSystem_writeErrorBuffer is missing on this target in sync context.');
231
+ process.stderr.write((new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength)))
229
232
  }
230
233
 
231
234
  export function NodeSystem_writeErrorStream(self_, stream_) {
@@ -243,15 +246,81 @@ ff_core_NodeSystem.NodeSystem_writeErrorText(self_, (text_ + "\n"))
243
246
  }
244
247
 
245
248
  export function NodeSystem_environment(self_) {
246
- throw new Error('Function NodeSystem_environment is missing on this target in sync context.');
249
+ let result_ = ff_core_Map.new_();
250
+ ff_core_JsValue.JsValue_each(process.env, ((key_) => {
251
+ result_ = ff_core_Map.Map_add(result_, key_, process.env[key_], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
252
+ }));
253
+ return result_
247
254
  }
248
255
 
249
256
  export function NodeSystem_execute(self_, command_, arguments_, standardIn_ = ff_core_Buffer.new_(0), directory_ = ff_core_Option.None(), environment_ = ff_core_Option.None(), maxBuffer_ = 16777216, killSignal_ = 9, shell_ = false) {
250
- throw new Error('Function NodeSystem_execute is missing on this target in sync context.');
257
+ const childProcess_ = import$3;
258
+ const env_ = ff_core_Option.Option_else(ff_core_Option.Option_map(environment_, ((e_) => {
259
+ const o_ = {};
260
+ ff_core_Map.Map_each(e_, ((k_, v_) => {
261
+ o_[k_] = v_
262
+ }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
263
+ return o_
264
+ })), (() => {
265
+ return process.env
266
+ }));
267
+ return ff_core_Js.withSignal_(((signal_) => {
268
+ return ff_core_Js.awaitCancellablePromise_(((resolve_, reject_, onSettle_) => {
269
+ const newProcess_ = childProcess_.spawn(command_, arguments_, {cwd: ff_core_Option.Option_else(ff_core_Option.Option_map(directory_, ((_w1) => {
270
+ return _w1.absolutePath_
271
+ })), (() => {
272
+ return (void 0)
273
+ })), windowsHide: true, signal: signal_, killSignal: killSignal_, env: env_, shell: shell_});
274
+ let size_ = 0;
275
+ const out_ = ff_core_Array.new_();
276
+ const err_ = ff_core_Array.new_();
277
+ newProcess_.stdout.on("data", ((data_) => {
278
+ if((size_ <= maxBuffer_)) {
279
+ size_ += data_.byteLength;
280
+ if((size_ > maxBuffer_)) {
281
+ newProcess_.kill(killSignal_)
282
+ } else {
283
+ out_.array.push(data_)
284
+ }
285
+ }
286
+ }));
287
+ newProcess_.stderr.on("data", ((data_) => {
288
+ if((size_ <= maxBuffer_)) {
289
+ size_ += data_.byteLength;
290
+ if((size_ > maxBuffer_)) {
291
+ newProcess_.kill(killSignal_)
292
+ } else {
293
+ err_.array.push(data_)
294
+ }
295
+ }
296
+ }));
297
+ if((standardIn_.byteLength !== 0)) {
298
+ newProcess_.stdin.write(standardIn_)
299
+ };
300
+ newProcess_.stdin.end();
301
+ newProcess_.on("error", ((error_) => {
302
+ if((size_ > maxBuffer_)) {
303
+ return reject_(ff_core_NodeSystem.internalProcessError_("maxBuffer exceeded"))
304
+ } else {
305
+ reject_(ff_core_NodeSystem.internalProcessError_(error_.message))
306
+ }
307
+ }));
308
+ newProcess_.on("close", ((code_) => {
309
+ const o_ = Buffer.concat(ff_core_Array.Array_drain(out_));
310
+ const e_ = Buffer.concat(ff_core_Array.Array_drain(err_));
311
+ return resolve_(ff_core_NodeSystem.ProcessResult(code_, (new DataView(o_.buffer, o_.byteOffset, o_.byteLength)), (new DataView(e_.buffer, e_.byteOffset, e_.byteLength))))
312
+ }));
313
+ onSettle_(((fulfilled_) => {
314
+ if((!fulfilled_)) {
315
+ newProcess_.kill(killSignal_)
316
+ }
317
+ }))
318
+ }))
319
+ }))
251
320
  }
252
321
 
253
322
  export async function NodeSystem_arguments$(self_, $task) {
254
- return self_.array_
323
+ return self_["array_"]
255
324
  }
256
325
 
257
326
  export async function NodeSystem_assets$(self_, $task) {
@@ -270,52 +339,48 @@ return (await ff_core_Path.Path_readStream$(file_, $task))
270
339
  }
271
340
  return ff_core_AssetSystem.AssetSystem((await ff_core_Stream.Stream_toMap$((await streams_$(assetPkgSnapshotPath_, $task)), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String, $task)))
272
341
  } else {
273
- return (await ff_core_NodeSystem.internalAssets_$(self_, $task))
342
+ return self_["assets_"]
274
343
  }
275
344
  }
276
345
 
277
346
  export async function NodeSystem_path$(self_, relativePath_, $task) {
278
-
279
- const path = import$1
280
- return path.resolve(relativePath_)
281
-
347
+ const nodePath_ = import$1;
348
+ return ff_core_Path.Path(nodePath_.resolve(relativePath_))
282
349
  }
283
350
 
284
351
  export async function NodeSystem_pathFromUrl$(self_, url_, $task) {
285
-
286
- const url = import$2;
287
- return url.fileURLToPath(new URL(url_));
288
-
352
+ const nodeUrl_ = import$2;
353
+ return ff_core_Path.Path(nodeUrl_.fileURLToPath((new URL(url_))))
289
354
  }
290
355
 
291
356
  export async function NodeSystem_httpClient$(self_, $task) {
292
- return typeof globalThis !== 'undefined' ? globalThis : window
357
+ return globalThis
293
358
  }
294
359
 
295
360
  export async function NodeSystem_mainTask$(self_, $task) {
296
- return self_.task_
361
+ return self_["task_"]
297
362
  }
298
363
 
299
364
  export async function NodeSystem_crypto$(self_, $task) {
300
- return (typeof globalThis !== 'undefined' ? globalThis : window).crypto
365
+ return globalThis.crypto
301
366
  }
302
367
 
303
368
  export async function NodeSystem_js$(self_, $task) {
304
- return typeof globalThis !== 'undefined' ? globalThis : window
369
+ return globalThis
305
370
  }
306
371
 
307
372
  export async function NodeSystem_exit$(self_, exitCode_ = 0, $task) {
308
- process.exit(exitCode_)
373
+ return process.exit(exitCode_)
309
374
  }
310
375
 
311
376
  export async function NodeSystem_readStream$(self_, $task) {
312
-
313
- return ff_core_Path.internalReadStream_$(() => process.stdin)
314
-
377
+ return (await ff_core_Path.internalReadStream_$((async ($task) => {
378
+ return process.stdin
379
+ }), $task))
315
380
  }
316
381
 
317
382
  export async function NodeSystem_writeBuffer$(self_, buffer_, $task) {
318
- process.stdout.write(new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength))
383
+ process.stdout.write((new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength)))
319
384
  }
320
385
 
321
386
  export async function NodeSystem_writeStream$(self_, stream_, $task) {
@@ -333,7 +398,7 @@ export async function NodeSystem_writeLine$(self_, text_, $task) {
333
398
  }
334
399
 
335
400
  export async function NodeSystem_writeErrorBuffer$(self_, buffer_, $task) {
336
- process.stderr.write(new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength))
401
+ process.stderr.write((new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength)))
337
402
  }
338
403
 
339
404
  export async function NodeSystem_writeErrorStream$(self_, stream_, $task) {
@@ -351,76 +416,77 @@ export async function NodeSystem_writeErrorLine$(self_, text_, $task) {
351
416
  }
352
417
 
353
418
  export async function NodeSystem_environment$(self_, $task) {
354
-
355
- const result = [];
356
- for(const key in process.env) {
357
- result.push(ff_core_Pair.Pair(key, process.env[key]));
358
- }
359
- return ff_core_List.List_toMap(result, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
360
-
419
+ let result_ = ff_core_Map.new_();
420
+ ff_core_JsValue.JsValue_each(process.env, ((key_) => {
421
+ result_ = ff_core_Map.Map_add(result_, key_, process.env[key_], ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
422
+ }));
423
+ return result_
361
424
  }
362
425
 
363
426
  export async function NodeSystem_execute$(self_, command_, arguments_, standardIn_ = ff_core_Buffer.new_(0), directory_ = ff_core_Option.None(), environment_ = ff_core_Option.None(), maxBuffer_ = 16777216, killSignal_ = 9, shell_ = false, $task) {
364
-
365
- const childProcess = import$3;
366
- const environment = environment_.value_ !== void 0 ? {} : process.env;
367
- if(environment_.value_ !== void 0) {
368
- ff_core_Map.Map_each(
369
- environment_.value_,
370
- (k, v) => environment[k] = v,
371
- ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String
372
- );
373
- }
374
- const newProcess = childProcess.spawn(command_, arguments_, {
375
- cwd: directory_.value_,
376
- windowsHide: true,
377
- signal: $task.controller.signal,
378
- killSignal: killSignal_,
379
- env: environment,
380
- shell: shell_
381
- });
382
-
383
- let size = 0;
384
- const out = [];
385
- const err = [];
386
-
387
- newProcess.stdout.on('data', (data) => {
388
- if(size > maxBuffer_) return;
389
- size += data.byteLength;
390
- if(size > maxBuffer_) newProcess.kill(killSignal_);
391
- else out.push(data);
392
- });
393
-
394
- newProcess.stderr.on('data', (data) => {
395
- if(size > maxBuffer_) return;
396
- size += data.byteLength;
397
- if(size > maxBuffer_) newProcess.kill(killSignal_);
398
- else err.push(data);
399
- });
400
-
401
- return await new Promise((resolve, reject) => {
402
- if(standardIn_.byteLength !== 0) {
403
- newProcess.stdin.write(standardIn_);
404
- }
405
- newProcess.stdin.end();
406
- newProcess.on('error', error => {
407
- if(size > maxBuffer_) {
408
- reject(internalProcessError_("maxBuffer exceeded"));
409
- } else {
410
- reject(internalProcessError_(error.message));
411
- }
412
- });
413
- newProcess.on('close', code => {
414
- const o = Buffer.concat(out);
415
- const e = Buffer.concat(err);
416
- resolve(ProcessResult(
417
- code,
418
- new DataView(o.buffer, o.byteOffset, o.byteLength),
419
- new DataView(e.buffer, e.byteOffset, e.byteLength),
420
- ));
421
- });
422
- });
423
-
427
+ const childProcess_ = import$3;
428
+ const env_ = ff_core_Option.Option_else(ff_core_Option.Option_map(environment_, ((e_) => {
429
+ const o_ = {};
430
+ ff_core_Map.Map_each(e_, ((k_, v_) => {
431
+ o_[k_] = v_
432
+ }), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
433
+ return o_
434
+ })), (() => {
435
+ return process.env
436
+ }));
437
+ return (await ff_core_Js.withSignal_$((async (signal_, $task) => {
438
+ return (await ff_core_Js.awaitCancellablePromise_$(((resolve_, reject_, onSettle_) => {
439
+ const newProcess_ = childProcess_.spawn(command_, arguments_, {cwd: ff_core_Option.Option_else(ff_core_Option.Option_map(directory_, ((_w1) => {
440
+ return _w1.absolutePath_
441
+ })), (() => {
442
+ return (void 0)
443
+ })), windowsHide: true, signal: signal_, killSignal: killSignal_, env: env_, shell: shell_});
444
+ let size_ = 0;
445
+ const out_ = ff_core_Array.new_();
446
+ const err_ = ff_core_Array.new_();
447
+ newProcess_.stdout.on("data", ((data_) => {
448
+ if((size_ <= maxBuffer_)) {
449
+ size_ += data_.byteLength;
450
+ if((size_ > maxBuffer_)) {
451
+ newProcess_.kill(killSignal_)
452
+ } else {
453
+ out_.array.push(data_)
454
+ }
455
+ }
456
+ }));
457
+ newProcess_.stderr.on("data", ((data_) => {
458
+ if((size_ <= maxBuffer_)) {
459
+ size_ += data_.byteLength;
460
+ if((size_ > maxBuffer_)) {
461
+ newProcess_.kill(killSignal_)
462
+ } else {
463
+ err_.array.push(data_)
464
+ }
465
+ }
466
+ }));
467
+ if((standardIn_.byteLength !== 0)) {
468
+ newProcess_.stdin.write(standardIn_)
469
+ };
470
+ newProcess_.stdin.end();
471
+ newProcess_.on("error", ((error_) => {
472
+ if((size_ > maxBuffer_)) {
473
+ return reject_(ff_core_NodeSystem.internalProcessError_("maxBuffer exceeded"))
474
+ } else {
475
+ reject_(ff_core_NodeSystem.internalProcessError_(error_.message))
476
+ }
477
+ }));
478
+ newProcess_.on("close", ((code_) => {
479
+ const o_ = Buffer.concat(ff_core_Array.Array_drain(out_));
480
+ const e_ = Buffer.concat(ff_core_Array.Array_drain(err_));
481
+ return resolve_(ff_core_NodeSystem.ProcessResult(code_, (new DataView(o_.buffer, o_.byteOffset, o_.byteLength)), (new DataView(e_.buffer, e_.byteOffset, e_.byteLength))))
482
+ }));
483
+ onSettle_(((fulfilled_) => {
484
+ if((!fulfilled_)) {
485
+ newProcess_.kill(killSignal_)
486
+ }
487
+ }))
488
+ }), $task))
489
+ }), $task))
424
490
  }
425
491
 
426
492
  export const ff_core_Any_HasAnyTag$ff_core_NodeSystem_ProcessException = {
@@ -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
  // type Nothing
96
98
 
97
99