firefly-compiler 0.4.79 → 0.4.80

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 (158) hide show
  1. package/.hintrc +4 -4
  2. package/.vscode/settings.json +4 -4
  3. package/bin/Release.ff +153 -153
  4. package/bin/firefly.mjs +1 -1
  5. package/compiler/Builder.ff +257 -257
  6. package/compiler/Compiler.ff +227 -227
  7. package/compiler/Dependencies.ff +187 -187
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/Inference.ff +2 -1
  10. package/compiler/JsEmitter.ff +940 -946
  11. package/compiler/LspHook.ff +202 -202
  12. package/compiler/Main.ff +3 -3
  13. package/compiler/ModuleCache.ff +178 -178
  14. package/compiler/Tokenizer.ff +1 -1
  15. package/compiler/Unification.ff +1 -1
  16. package/compiler/Workspace.ff +88 -88
  17. package/core/.firefly/include/package-lock.json +564 -564
  18. package/core/.firefly/include/package.json +5 -5
  19. package/core/.firefly/include/prepare.sh +1 -1
  20. package/core/.firefly/package.ff +2 -2
  21. package/core/Array.ff +265 -265
  22. package/core/Atomic.ff +64 -64
  23. package/core/Box.ff +7 -7
  24. package/core/BrowserSystem.ff +40 -40
  25. package/core/BuildSystem.ff +148 -148
  26. package/core/Crypto.ff +96 -96
  27. package/core/Equal.ff +36 -36
  28. package/core/Float.ff +25 -0
  29. package/core/HttpClient.ff +148 -148
  30. package/core/JsSystem.ff +69 -69
  31. package/core/Json.ff +434 -434
  32. package/core/List.ff +486 -486
  33. package/core/Lock.ff +144 -144
  34. package/core/NodeSystem.ff +216 -216
  35. package/core/Ordering.ff +161 -161
  36. package/core/Path.ff +401 -401
  37. package/core/Random.ff +134 -134
  38. package/core/RbMap.ff +216 -216
  39. package/core/Show.ff +43 -43
  40. package/core/SourceLocation.ff +68 -68
  41. package/core/Stream.ff +9 -9
  42. package/core/Task.ff +141 -141
  43. package/core/Try.ff +25 -4
  44. package/experimental/benchmarks/ListGrab.ff +23 -23
  45. package/experimental/benchmarks/ListGrab.java +55 -55
  46. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  47. package/experimental/benchmarks/Pyrotek45.java +64 -64
  48. package/experimental/bidirectional/Bidi.ff +88 -88
  49. package/experimental/random/Index.ff +53 -53
  50. package/experimental/random/Process.ff +120 -120
  51. package/experimental/random/Scrape.ff +51 -51
  52. package/experimental/random/Symbols.ff +73 -73
  53. package/experimental/random/Tensor.ff +52 -52
  54. package/experimental/random/Units.ff +36 -36
  55. package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
  56. package/experimental/s3/S3TestPut.ff +16 -16
  57. package/experimental/tests/TestJson.ff +26 -26
  58. package/firefly.sh +0 -0
  59. package/fireflysite/.firefly/package.ff +4 -4
  60. package/fireflysite/CommunityOverview.ff +20 -20
  61. package/fireflysite/CountingButtonDemo.ff +58 -58
  62. package/fireflysite/DocumentParser.ff +331 -217
  63. package/fireflysite/ExamplesOverview.ff +40 -40
  64. package/fireflysite/FrontPage.ff +344 -360
  65. package/fireflysite/{GuideIntroduction.ff → GettingStarted.ff} +45 -52
  66. package/fireflysite/Guide.ff +443 -411
  67. package/fireflysite/Main.ff +141 -137
  68. package/fireflysite/MatchingPasswordsDemo.ff +82 -82
  69. package/fireflysite/PackagesOverview.ff +49 -49
  70. package/fireflysite/PostgresqlDemo.ff +34 -34
  71. package/fireflysite/ReferenceAll.ff +19 -0
  72. package/fireflysite/ReferenceIntroduction.ff +11 -0
  73. package/fireflysite/Styles.ff +567 -495
  74. package/fireflysite/Test.ff +38 -0
  75. package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -0
  76. package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +208 -0
  77. package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +168 -0
  78. package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -0
  79. package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -0
  80. package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -0
  81. package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -0
  82. package/fireflysite/assets/markdown/{ControlFlow.md → scratch/ControlFlow.md} +136 -136
  83. package/fireflysite/assets/markdown/scratch/Toc.md +41 -0
  84. package/lsp/.firefly/package.ff +1 -1
  85. package/lsp/CompletionHandler.ff +828 -828
  86. package/lsp/Handler.ff +714 -714
  87. package/lsp/HoverHandler.ff +79 -79
  88. package/lsp/LanguageServer.ff +272 -272
  89. package/lsp/SignatureHelpHandler.ff +55 -55
  90. package/lsp/SymbolHandler.ff +181 -181
  91. package/lsp/TestReferences.ff +17 -17
  92. package/lsp/TestReferencesCase.ff +7 -7
  93. package/lsp/stderr.txt +1 -1
  94. package/lsp/stdout.txt +34 -34
  95. package/lux/.firefly/package.ff +1 -1
  96. package/lux/Css.ff +648 -648
  97. package/lux/CssTest.ff +48 -48
  98. package/lux/Lux.ff +487 -487
  99. package/lux/LuxEvent.ff +116 -116
  100. package/lux/Main.ff +123 -123
  101. package/lux/Main2.ff +143 -143
  102. package/output/js/ff/compiler/Builder.mjs +47 -47
  103. package/output/js/ff/compiler/Dependencies.mjs +3 -3
  104. package/output/js/ff/compiler/Inference.mjs +2 -2
  105. package/output/js/ff/compiler/JsEmitter.mjs +18 -72
  106. package/output/js/ff/compiler/Main.mjs +4 -4
  107. package/output/js/ff/compiler/ModuleCache.mjs +4 -4
  108. package/output/js/ff/core/Array.mjs +59 -59
  109. package/output/js/ff/core/Atomic.mjs +36 -36
  110. package/output/js/ff/core/BrowserSystem.mjs +11 -11
  111. package/output/js/ff/core/BuildSystem.mjs +30 -30
  112. package/output/js/ff/core/Crypto.mjs +40 -40
  113. package/output/js/ff/core/Float.mjs +50 -0
  114. package/output/js/ff/core/HttpClient.mjs +56 -56
  115. package/output/js/ff/core/Json.mjs +147 -147
  116. package/output/js/ff/core/List.mjs +50 -50
  117. package/output/js/ff/core/Lock.mjs +97 -97
  118. package/output/js/ff/core/NodeSystem.mjs +87 -87
  119. package/output/js/ff/core/Ordering.mjs +8 -8
  120. package/output/js/ff/core/Path.mjs +231 -231
  121. package/output/js/ff/core/Random.mjs +56 -56
  122. package/output/js/ff/core/Task.mjs +39 -39
  123. package/output/js/ff/core/Try.mjs +98 -4
  124. package/package.json +1 -1
  125. package/postgresql/Pg.ff +1 -1
  126. package/rpc/.firefly/package.ff +1 -1
  127. package/rpc/Rpc.ff +70 -70
  128. package/s3/.firefly/package.ff +1 -1
  129. package/s3/S3.ff +94 -94
  130. package/unsafejs/UnsafeJs.ff +19 -19
  131. package/vscode/LICENSE.txt +21 -21
  132. package/vscode/Prepublish.ff +15 -15
  133. package/vscode/README.md +16 -16
  134. package/vscode/client/package.json +22 -22
  135. package/vscode/client/src/extension.ts +104 -104
  136. package/vscode/icons/firefly-icon.svg +10 -10
  137. package/vscode/language-configuration.json +61 -61
  138. package/vscode/package-lock.json +3623 -3623
  139. package/vscode/package.json +1 -1
  140. package/vscode/snippets.json +241 -241
  141. package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
  142. package/webserver/.firefly/include/package-lock.json +22 -22
  143. package/webserver/.firefly/include/package.json +5 -5
  144. package/webserver/.firefly/package.ff +2 -2
  145. package/webserver/WebServer.ff +685 -685
  146. package/websocket/.firefly/package.ff +1 -1
  147. package/websocket/WebSocket.ff +131 -131
  148. package/fireflysite/GuideAll.ff +0 -21
  149. package/fireflysite/GuideBaseTypes.ff +0 -168
  150. package/fireflysite/GuideControlFlow.ff +0 -212
  151. package/fireflysite/assets/markdown/Example.md +0 -78
  152. /package/fireflysite/assets/{NotoSansMono-Regular.ttf → font/NotoSansMono-Regular.ttf} +0 -0
  153. /package/fireflysite/assets/{NunitoSans-VariableFont_YTLC,opsz,wdth,wght.ttf → font/NunitoSans-VariableFont_YTLC,opsz,wdth,wght.ttf} +0 -0
  154. /package/fireflysite/assets/{autocomplete-small.png → image/autocomplete-small.png} +0 -0
  155. /package/fireflysite/assets/{autocomplete.png → image/autocomplete.png} +0 -0
  156. /package/fireflysite/assets/{edit-time-error.png → image/edit-time-error.png} +0 -0
  157. /package/fireflysite/assets/{firefly-logo-notext.png → image/firefly-logo-notext.png} +0 -0
  158. /package/fireflysite/assets/{firefly-logo-yellow.png → image/firefly-logo-yellow.png} +0 -0
@@ -96,26 +96,26 @@ import * as ff_core_Unit from "../../ff/core/Unit.mjs"
96
96
 
97
97
 
98
98
  export function new_() {
99
-
100
- return [];
99
+
100
+ return [];
101
101
 
102
102
  }
103
103
 
104
104
  export function fill_(size_, value_) {
105
-
106
- return new Array(size_).fill(value_);
105
+
106
+ return new Array(size_).fill(value_);
107
107
 
108
108
  }
109
109
 
110
110
  export function fillBy_(size_, body_) {
111
-
112
- return Array.from({length: size_}, (_, i) => body_(i));
111
+
112
+ return Array.from({length: size_}, (_, i) => body_(i));
113
113
 
114
114
  }
115
115
 
116
116
  export function range_(size_) {
117
-
118
- return Array.from({length: size_}, (_, i) => i);
117
+
118
+ return Array.from({length: size_}, (_, i) => i);
119
119
 
120
120
  }
121
121
 
@@ -124,8 +124,8 @@ return left_ === right_
124
124
  }
125
125
 
126
126
  export function internalGrab_(self_, index_) {
127
-
128
- return index_ < 0 || index_ >= self_.length ? ff_core_Try.internalThrowGrabException_() : self_[index_];
127
+
128
+ return index_ < 0 || index_ >= self_.length ? ff_core_Try.internalThrowGrabException_() : self_[index_];
129
129
 
130
130
  }
131
131
 
@@ -138,12 +138,12 @@ throw new Error('Function fill is missing on this target in async context.');
138
138
  }
139
139
 
140
140
  export async function fillBy_$(size_, body_, $task) {
141
-
142
- const array = new Array(size_);
143
- for(let i = 0; i < size_; i++) {
144
- array[i] = await(body_(_i));
145
- }
146
- return array;
141
+
142
+ const array = new Array(size_);
143
+ for(let i = 0; i < size_; i++) {
144
+ array[i] = await(body_(_i));
145
+ }
146
+ return array;
147
147
 
148
148
  }
149
149
 
@@ -172,16 +172,16 @@ return self_.length
172
172
  }
173
173
 
174
174
  export function List_get(self_, index_) {
175
-
176
- return index_ >= 0 && index_ < self_.length
177
- ? ff_core_Option.Some(self_[index_])
178
- : ff_core_Option.None()
175
+
176
+ return index_ >= 0 && index_ < self_.length
177
+ ? ff_core_Option.Some(self_[index_])
178
+ : ff_core_Option.None()
179
179
 
180
180
  }
181
181
 
182
182
  export function List_grab(self_, index_) {
183
-
184
- return self_[index_] ?? internalGrab_(self_, index_);
183
+
184
+ return self_[index_] ?? internalGrab_(self_, index_);
185
185
 
186
186
  }
187
187
 
@@ -303,13 +303,13 @@ return value_
303
303
  }
304
304
 
305
305
  export function List_modify(self_, index_, body_) {
306
-
307
- if(index_ < 0 || index_ >= self_.length) {
308
- ff_core_Try.internalThrowGrabException_()
309
- }
310
- let result = self_.slice();
311
- result[index_] = body_(result[index_]);
312
- return result;
306
+
307
+ if(index_ < 0 || index_ >= self_.length) {
308
+ ff_core_Try.internalThrowGrabException_()
309
+ }
310
+ let result = self_.slice();
311
+ result[index_] = body_(result[index_]);
312
+ return result;
313
313
 
314
314
  }
315
315
 
@@ -374,8 +374,8 @@ return {array: self_.slice()}
374
374
  }
375
375
 
376
376
  export function List_each(self_, body_) {
377
-
378
- return self_.forEach(body_);
377
+
378
+ return self_.forEach(body_);
379
379
 
380
380
  }
381
381
 
@@ -446,8 +446,8 @@ return (!body_(_w1))
446
446
  }
447
447
 
448
448
  export function List_map(self_, body_) {
449
-
450
- return self_.map(body_)
449
+
450
+ return self_.map(body_)
451
451
 
452
452
  }
453
453
 
@@ -659,13 +659,13 @@ return value_
659
659
  }
660
660
 
661
661
  export async function List_modify$(self_, index_, body_, $task) {
662
-
663
- if(index_ < 0 || index_ >= self_.length) {
664
- ff_core_Try.internalThrowGrabException_()
665
- }
666
- let result = self_.slice();
667
- result[index_] = await body_(result[index_], $task);
668
- return result;
662
+
663
+ if(index_ < 0 || index_ >= self_.length) {
664
+ ff_core_Try.internalThrowGrabException_()
665
+ }
666
+ let result = self_.slice();
667
+ result[index_] = await body_(result[index_], $task);
668
+ return result;
669
669
 
670
670
  }
671
671
 
@@ -730,10 +730,10 @@ throw new Error('Function List_toArray is missing on this target in async contex
730
730
  }
731
731
 
732
732
  export async function List_each$(self_, body_, $task) {
733
-
734
- for(let i = 0; i < self_.length; i++) {
735
- await body_(self_[i], $task)
736
- }
733
+
734
+ for(let i = 0; i < self_.length; i++) {
735
+ await body_(self_[i], $task)
736
+ }
737
737
 
738
738
  }
739
739
 
@@ -804,12 +804,12 @@ return (!(await body_(_w1, $task)))
804
804
  }
805
805
 
806
806
  export async function List_map$(self_, body_, $task) {
807
-
808
- let result = [];
809
- for(let i = 0; i < self_.length; i++) {
810
- result.push(await body_(self_[i], $task));
811
- }
812
- return result;
807
+
808
+ let result = [];
809
+ for(let i = 0; i < self_.length; i++) {
810
+ result.push(await body_(self_[i], $task));
811
+ }
812
+ return result;
813
813
 
814
814
  }
815
815
 
@@ -124,58 +124,58 @@ ff_core_Lock.Lock_release(self_)
124
124
  }
125
125
 
126
126
  export async function Lock_condition$(self_, $task) {
127
-
128
- return {lock: self_, stack: [], queue: []}
127
+
128
+ return {lock: self_, stack: [], queue: []}
129
129
 
130
130
  }
131
131
 
132
132
  export async function Lock_acquire$(self_, reentrant_, $task) {
133
-
134
- if(self_.level === 0) {
135
- self_.owner = $task
136
- self_.level += 1
137
- } else {
138
- if(self_.owner !== $task || !reentrant_) {
139
- try {
140
- await new Promise((resolve, reject) => {
141
- $task.controller.signal.addEventListener('abort', reject)
142
- try {
143
- self_.queue.push({owner: $task, resolve: resolve})
144
- } finally {
145
- $task.controller.signal.removeEventListener('abort', reject)
146
- }
147
- })
148
- } finally {
149
- if($task.controller.signal.aborted) $task.controller = new AbortController()
150
- }
151
- } else {
152
- self_.level += 1
153
- }
154
- }
133
+
134
+ if(self_.level === 0) {
135
+ self_.owner = $task
136
+ self_.level += 1
137
+ } else {
138
+ if(self_.owner !== $task || !reentrant_) {
139
+ try {
140
+ await new Promise((resolve, reject) => {
141
+ $task.controller.signal.addEventListener('abort', reject)
142
+ try {
143
+ self_.queue.push({owner: $task, resolve: resolve})
144
+ } finally {
145
+ $task.controller.signal.removeEventListener('abort', reject)
146
+ }
147
+ })
148
+ } finally {
149
+ if($task.controller.signal.aborted) $task.controller = new AbortController()
150
+ }
151
+ } else {
152
+ self_.level += 1
153
+ }
154
+ }
155
155
 
156
156
  }
157
157
 
158
158
  export async function Lock_release$(self_, $task) {
159
-
160
- if(self_.owner !== $task) {
161
- throw new Error("Tried to release a lock without acquiring it first.")
162
- } else if(self_.level > 1) {
163
- self_.level -= 1
164
- } else {
165
- self_.owner = null
166
- self_.level = 0
167
- if(self_.stack.length === 0) {
168
- const empty = self_.stack
169
- self_.stack = self_.queue.reverse()
170
- self_.queue = empty
171
- }
172
- if(self_.stack.length !== 0) {
173
- const pending = self_.stack.pop()
174
- self_.owner = pending.owner
175
- self_.level = 1
176
- pending.resolve()
177
- }
178
- }
159
+
160
+ if(self_.owner !== $task) {
161
+ throw new Error("Tried to release a lock without acquiring it first.")
162
+ } else if(self_.level > 1) {
163
+ self_.level -= 1
164
+ } else {
165
+ self_.owner = null
166
+ self_.level = 0
167
+ if(self_.stack.length === 0) {
168
+ const empty = self_.stack
169
+ self_.stack = self_.queue.reverse()
170
+ self_.queue = empty
171
+ }
172
+ if(self_.stack.length !== 0) {
173
+ const pending = self_.stack.pop()
174
+ self_.owner = pending.owner
175
+ self_.level = 1
176
+ pending.resolve()
177
+ }
178
+ }
179
179
 
180
180
  }
181
181
 
@@ -225,37 +225,37 @@ throw new Error('Function LockCondition_wakeAll is missing on this target in syn
225
225
  }
226
226
 
227
227
  export async function LockCondition_sleep$(self_, $task) {
228
-
229
- if(self_.lock.owner !== $task) {
230
- throw new Error("Tried to sleep on a condition without acquiring it first.")
231
- }
232
- const level = self_.lock.level
233
- self_.lock.level = 1
234
- await ff_core_Lock.Lock_release$(self_.lock)
235
- try {
236
- await new Promise((resolve, reject) => {
237
- $task.controller.signal.addEventListener('abort', reject)
238
- try {
239
- self_.queue.push(resolve)
240
- } finally {
241
- $task.controller.signal.removeEventListener('abort', reject)
242
- if($task.controller.signal.aborted) $task.controller = new AbortController()
243
- }
244
- })
245
- } finally {
246
- let exception = null
247
- let acquired = false
248
- while(!acquired) {
249
- try {
250
- await ff_core_Lock.Lock_acquire$(self_.lock)
251
- self_.lock.level = level
252
- acquired = true
253
- } catch(e) {
254
- exception = e
255
- }
256
- }
257
- if(e !== null) throw e;
258
- }
228
+
229
+ if(self_.lock.owner !== $task) {
230
+ throw new Error("Tried to sleep on a condition without acquiring it first.")
231
+ }
232
+ const level = self_.lock.level
233
+ self_.lock.level = 1
234
+ await ff_core_Lock.Lock_release$(self_.lock)
235
+ try {
236
+ await new Promise((resolve, reject) => {
237
+ $task.controller.signal.addEventListener('abort', reject)
238
+ try {
239
+ self_.queue.push(resolve)
240
+ } finally {
241
+ $task.controller.signal.removeEventListener('abort', reject)
242
+ if($task.controller.signal.aborted) $task.controller = new AbortController()
243
+ }
244
+ })
245
+ } finally {
246
+ let exception = null
247
+ let acquired = false
248
+ while(!acquired) {
249
+ try {
250
+ await ff_core_Lock.Lock_acquire$(self_.lock)
251
+ self_.lock.level = level
252
+ acquired = true
253
+ } catch(e) {
254
+ exception = e
255
+ }
256
+ }
257
+ if(e !== null) throw e;
258
+ }
259
259
 
260
260
  }
261
261
 
@@ -284,32 +284,32 @@ return
284
284
  }
285
285
 
286
286
  export async function LockCondition_wakeOne$(self_, $task) {
287
-
288
- if(self_.stack.length === 0) {
289
- const empty = self_.stack
290
- self_.stack = self_.queue.reverse()
291
- self_.queue = empty
292
- }
293
- if(self_.stack.length !== 0) {
294
- const resolve = self_.stack.pop()
295
- resolve()
296
- }
287
+
288
+ if(self_.stack.length === 0) {
289
+ const empty = self_.stack
290
+ self_.stack = self_.queue.reverse()
291
+ self_.queue = empty
292
+ }
293
+ if(self_.stack.length !== 0) {
294
+ const resolve = self_.stack.pop()
295
+ resolve()
296
+ }
297
297
 
298
298
  }
299
299
 
300
300
  export async function LockCondition_wakeAll$(self_, $task) {
301
-
302
- while(self_.stack.length !== 0) {
303
- const resolve = self_.stack.pop()
304
- resolve()
305
- }
306
- const empty = self_.stack
307
- self_.stack = self_.queue.reverse()
308
- self_.queue = empty
309
- while(self_.stack.length !== 0) {
310
- const resolve = self_.stack.pop()
311
- resolve()
312
- }
301
+
302
+ while(self_.stack.length !== 0) {
303
+ const resolve = self_.stack.pop()
304
+ resolve()
305
+ }
306
+ const empty = self_.stack
307
+ self_.stack = self_.queue.reverse()
308
+ self_.queue = empty
309
+ while(self_.stack.length !== 0) {
310
+ const resolve = self_.stack.pop()
311
+ resolve()
312
+ }
313
313
 
314
314
  }
315
315
 
@@ -120,11 +120,11 @@ throw new Error('Function internalListDirectoryWithoutOpendir is missing on this
120
120
  }
121
121
 
122
122
  export function internalProcessError_(problem_) {
123
- return ff_core_Try.Try_grab(ff_core_Try.Try_catchAny(ff_core_Core.try_((() => {
123
+ return ff_core_Try.Try_catchAny(ff_core_Core.try_((() => {
124
124
  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)})
125
125
  })), ((error_) => {
126
126
  return error_
127
- })))
127
+ }))
128
128
  }
129
129
 
130
130
  export function internalWindowsWhere_(system_, cmd_, command_, directory_ = ff_core_Option.None(), environment_ = ff_core_Option.None()) {
@@ -147,20 +147,20 @@ return system_.assets_
147
147
  }
148
148
 
149
149
  export async function internalListDirectoryWithoutOpendir_$(system_, path_, $task) {
150
-
151
- const fsPromises = import$0
152
- const path = import$1
153
- let files = await fsPromises.readdir(path_)
154
- return files.map(file => path.join(path_, file))
150
+
151
+ const fsPromises = import$0
152
+ const path = import$1
153
+ let files = await fsPromises.readdir(path_)
154
+ return files.map(file => path.join(path_, file))
155
155
 
156
156
  }
157
157
 
158
158
  export async function internalProcessError_$(problem_, $task) {
159
- return ff_core_Try.Try_grab(ff_core_Try.Try_catchAny(ff_core_Core.try_((() => {
159
+ return ff_core_Try.Try_catchAny(ff_core_Core.try_((() => {
160
160
  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)})
161
161
  })), ((error_) => {
162
162
  return error_
163
- })))
163
+ }))
164
164
  }
165
165
 
166
166
  export async function internalWindowsWhere_$(system_, cmd_, command_, directory_ = ff_core_Option.None(), environment_ = ff_core_Option.None(), $task) {
@@ -303,16 +303,16 @@ return (await ff_core_NodeSystem.internalAssets_$(self_, $task))
303
303
  }
304
304
 
305
305
  export async function NodeSystem_path$(self_, relativePath_, $task) {
306
-
307
- const path = import$1
308
- return path.resolve(relativePath_)
306
+
307
+ const path = import$1
308
+ return path.resolve(relativePath_)
309
309
 
310
310
  }
311
311
 
312
312
  export async function NodeSystem_pathFromUrl$(self_, url_, $task) {
313
-
314
- const url = import$2;
315
- return url.fileURLToPath(new URL(url_));
313
+
314
+ const url = import$2;
315
+ return url.fileURLToPath(new URL(url_));
316
316
 
317
317
  }
318
318
 
@@ -337,8 +337,8 @@ process.exit(exitCode_)
337
337
  }
338
338
 
339
339
  export async function NodeSystem_readStream$(self_, $task) {
340
-
341
- return ff_core_Path.internalReadStream_$(() => process.stdin)
340
+
341
+ return ff_core_Path.internalReadStream_$(() => process.stdin)
342
342
 
343
343
  }
344
344
 
@@ -379,80 +379,80 @@ export async function NodeSystem_writeErrorLine$(self_, text_, $task) {
379
379
  }
380
380
 
381
381
  export async function NodeSystem_environment$(self_, $task) {
382
-
383
- const result = [];
384
- for(const key in process.env) {
385
- result.push(ff_core_Pair.Pair(key, process.env[key]));
386
- }
387
- return ff_core_List.List_toMap(result, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
382
+
383
+ const result = [];
384
+ for(const key in process.env) {
385
+ result.push(ff_core_Pair.Pair(key, process.env[key]));
386
+ }
387
+ return ff_core_List.List_toMap(result, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
388
388
 
389
389
  }
390
390
 
391
391
  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, windowsWhere_ = true, $task) {
392
-
393
- const childProcess = import$3;
394
- const environment = environment_.value_ !== void 0 ? {} : process.env;
395
- if(environment_.value_ !== void 0) {
396
- ff_core_Map.Map_each(
397
- environment_.value_,
398
- (k, v) => environment[k] = v,
399
- ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String
400
- );
401
- }
402
- if(windowsWhere_ && process.platform === 'win32') {
403
- const cmd = process.env.ComSpec || "cmd.exe";
404
- command_ = (
405
- await internalWindowsWhere_$(self_, cmd, command_, directory_, environment_, $task)
406
- ).value_ || command_;
407
- }
408
- const newProcess = childProcess.spawn(command_, arguments_, {
409
- cwd: directory_.value_,
410
- windowsHide: true,
411
- signal: $task.controller.signal,
412
- killSignal: killSignal_,
413
- env: environment,
414
- });
415
-
416
- let size = 0;
417
- const out = [];
418
- const err = [];
419
-
420
- newProcess.stdout.on('data', (data) => {
421
- if(size > maxBuffer_) return;
422
- size += data.byteLength;
423
- if(size > maxBuffer_) newProcess.kill(killSignal_);
424
- else out.push(data);
425
- });
426
-
427
- newProcess.stderr.on('data', (data) => {
428
- if(size > maxBuffer_) return;
429
- size += data.byteLength;
430
- if(size > maxBuffer_) newProcess.kill(killSignal_);
431
- else err.push(data);
432
- });
433
-
434
- return await new Promise((resolve, reject) => {
435
- if(standardIn_.byteLength !== 0) {
436
- newProcess.stdin.write(standardIn_);
437
- }
438
- newProcess.stdin.end();
439
- newProcess.on('error', error => {
440
- if(size > maxBuffer_) {
441
- reject(internalProcessError_("maxBuffer exceeded"));
442
- } else {
443
- reject(internalProcessError_(error.message));
444
- }
445
- });
446
- newProcess.on('close', code => {
447
- const o = Buffer.concat(out);
448
- const e = Buffer.concat(err);
449
- resolve(ProcessResult(
450
- code,
451
- new DataView(o.buffer, o.byteOffset, o.byteLength),
452
- new DataView(e.buffer, e.byteOffset, e.byteLength),
453
- ));
454
- });
455
- });
392
+
393
+ const childProcess = import$3;
394
+ const environment = environment_.value_ !== void 0 ? {} : process.env;
395
+ if(environment_.value_ !== void 0) {
396
+ ff_core_Map.Map_each(
397
+ environment_.value_,
398
+ (k, v) => environment[k] = v,
399
+ ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String
400
+ );
401
+ }
402
+ if(windowsWhere_ && process.platform === 'win32') {
403
+ const cmd = process.env.ComSpec || "cmd.exe";
404
+ command_ = (
405
+ await internalWindowsWhere_$(self_, cmd, command_, directory_, environment_, $task)
406
+ ).value_ || command_;
407
+ }
408
+ const newProcess = childProcess.spawn(command_, arguments_, {
409
+ cwd: directory_.value_,
410
+ windowsHide: true,
411
+ signal: $task.controller.signal,
412
+ killSignal: killSignal_,
413
+ env: environment,
414
+ });
415
+
416
+ let size = 0;
417
+ const out = [];
418
+ const err = [];
419
+
420
+ newProcess.stdout.on('data', (data) => {
421
+ if(size > maxBuffer_) return;
422
+ size += data.byteLength;
423
+ if(size > maxBuffer_) newProcess.kill(killSignal_);
424
+ else out.push(data);
425
+ });
426
+
427
+ newProcess.stderr.on('data', (data) => {
428
+ if(size > maxBuffer_) return;
429
+ size += data.byteLength;
430
+ if(size > maxBuffer_) newProcess.kill(killSignal_);
431
+ else err.push(data);
432
+ });
433
+
434
+ return await new Promise((resolve, reject) => {
435
+ if(standardIn_.byteLength !== 0) {
436
+ newProcess.stdin.write(standardIn_);
437
+ }
438
+ newProcess.stdin.end();
439
+ newProcess.on('error', error => {
440
+ if(size > maxBuffer_) {
441
+ reject(internalProcessError_("maxBuffer exceeded"));
442
+ } else {
443
+ reject(internalProcessError_(error.message));
444
+ }
445
+ });
446
+ newProcess.on('close', code => {
447
+ const o = Buffer.concat(out);
448
+ const e = Buffer.concat(err);
449
+ resolve(ProcessResult(
450
+ code,
451
+ new DataView(o.buffer, o.byteOffset, o.byteLength),
452
+ new DataView(e.buffer, e.byteOffset, e.byteLength),
453
+ ));
454
+ });
455
+ });
456
456
 
457
457
  }
458
458
 
@@ -413,14 +413,14 @@ return ff_core_Ordering.fromFloat_((x_ - y_))
413
413
 
414
414
  export const ff_core_Ordering_Order$ff_core_String_String = {
415
415
  compare_(x_, y_) {
416
-
417
- if(x_ < y_) {
418
- return ff_core_Ordering.OrderingBefore()
419
- } else if(x_ > y_) {
420
- return ff_core_Ordering.OrderingAfter()
421
- } else {
422
- return ff_core_Ordering.OrderingSame()
423
- }
416
+
417
+ if(x_ < y_) {
418
+ return ff_core_Ordering.OrderingBefore()
419
+ } else if(x_ > y_) {
420
+ return ff_core_Ordering.OrderingAfter()
421
+ } else {
422
+ return ff_core_Ordering.OrderingSame()
423
+ }
424
424
 
425
425
  },
426
426
  async compare_$(x_, y_, $task) {