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.
- package/.hintrc +4 -4
- package/.vscode/settings.json +4 -4
- package/bin/Release.ff +153 -153
- package/bin/firefly.mjs +1 -1
- package/compiler/Builder.ff +257 -257
- package/compiler/Compiler.ff +227 -227
- package/compiler/Dependencies.ff +187 -187
- package/compiler/DependencyLock.ff +17 -17
- package/compiler/Inference.ff +2 -1
- package/compiler/JsEmitter.ff +940 -946
- package/compiler/LspHook.ff +202 -202
- package/compiler/Main.ff +3 -3
- package/compiler/ModuleCache.ff +178 -178
- package/compiler/Tokenizer.ff +1 -1
- package/compiler/Unification.ff +1 -1
- package/compiler/Workspace.ff +88 -88
- package/core/.firefly/include/package-lock.json +564 -564
- package/core/.firefly/include/package.json +5 -5
- package/core/.firefly/include/prepare.sh +1 -1
- package/core/.firefly/package.ff +2 -2
- package/core/Array.ff +265 -265
- package/core/Atomic.ff +64 -64
- package/core/Box.ff +7 -7
- package/core/BrowserSystem.ff +40 -40
- package/core/BuildSystem.ff +148 -148
- package/core/Crypto.ff +96 -96
- package/core/Equal.ff +36 -36
- package/core/Float.ff +25 -0
- package/core/HttpClient.ff +148 -148
- package/core/JsSystem.ff +69 -69
- package/core/Json.ff +434 -434
- package/core/List.ff +486 -486
- package/core/Lock.ff +144 -144
- package/core/NodeSystem.ff +216 -216
- package/core/Ordering.ff +161 -161
- package/core/Path.ff +401 -401
- package/core/Random.ff +134 -134
- package/core/RbMap.ff +216 -216
- package/core/Show.ff +43 -43
- package/core/SourceLocation.ff +68 -68
- package/core/Stream.ff +9 -9
- package/core/Task.ff +141 -141
- package/core/Try.ff +25 -4
- package/experimental/benchmarks/ListGrab.ff +23 -23
- package/experimental/benchmarks/ListGrab.java +55 -55
- package/experimental/benchmarks/Pyrotek45.ff +30 -30
- package/experimental/benchmarks/Pyrotek45.java +64 -64
- package/experimental/bidirectional/Bidi.ff +88 -88
- package/experimental/random/Index.ff +53 -53
- package/experimental/random/Process.ff +120 -120
- package/experimental/random/Scrape.ff +51 -51
- package/experimental/random/Symbols.ff +73 -73
- package/experimental/random/Tensor.ff +52 -52
- package/experimental/random/Units.ff +36 -36
- package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
- package/experimental/s3/S3TestPut.ff +16 -16
- package/experimental/tests/TestJson.ff +26 -26
- package/firefly.sh +0 -0
- package/fireflysite/.firefly/package.ff +4 -4
- package/fireflysite/CommunityOverview.ff +20 -20
- package/fireflysite/CountingButtonDemo.ff +58 -58
- package/fireflysite/DocumentParser.ff +331 -217
- package/fireflysite/ExamplesOverview.ff +40 -40
- package/fireflysite/FrontPage.ff +344 -360
- package/fireflysite/{GuideIntroduction.ff → GettingStarted.ff} +45 -52
- package/fireflysite/Guide.ff +443 -411
- package/fireflysite/Main.ff +141 -137
- package/fireflysite/MatchingPasswordsDemo.ff +82 -82
- package/fireflysite/PackagesOverview.ff +49 -49
- package/fireflysite/PostgresqlDemo.ff +34 -34
- package/fireflysite/ReferenceAll.ff +19 -0
- package/fireflysite/ReferenceIntroduction.ff +11 -0
- package/fireflysite/Styles.ff +567 -495
- package/fireflysite/Test.ff +38 -0
- package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -0
- package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +208 -0
- package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +168 -0
- package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -0
- package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -0
- package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -0
- package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -0
- package/fireflysite/assets/markdown/{ControlFlow.md → scratch/ControlFlow.md} +136 -136
- package/fireflysite/assets/markdown/scratch/Toc.md +41 -0
- package/lsp/.firefly/package.ff +1 -1
- package/lsp/CompletionHandler.ff +828 -828
- package/lsp/Handler.ff +714 -714
- package/lsp/HoverHandler.ff +79 -79
- package/lsp/LanguageServer.ff +272 -272
- package/lsp/SignatureHelpHandler.ff +55 -55
- package/lsp/SymbolHandler.ff +181 -181
- package/lsp/TestReferences.ff +17 -17
- package/lsp/TestReferencesCase.ff +7 -7
- package/lsp/stderr.txt +1 -1
- package/lsp/stdout.txt +34 -34
- package/lux/.firefly/package.ff +1 -1
- package/lux/Css.ff +648 -648
- package/lux/CssTest.ff +48 -48
- package/lux/Lux.ff +487 -487
- package/lux/LuxEvent.ff +116 -116
- package/lux/Main.ff +123 -123
- package/lux/Main2.ff +143 -143
- package/output/js/ff/compiler/Builder.mjs +47 -47
- package/output/js/ff/compiler/Dependencies.mjs +3 -3
- package/output/js/ff/compiler/Inference.mjs +2 -2
- package/output/js/ff/compiler/JsEmitter.mjs +18 -72
- package/output/js/ff/compiler/Main.mjs +4 -4
- package/output/js/ff/compiler/ModuleCache.mjs +4 -4
- package/output/js/ff/core/Array.mjs +59 -59
- package/output/js/ff/core/Atomic.mjs +36 -36
- package/output/js/ff/core/BrowserSystem.mjs +11 -11
- package/output/js/ff/core/BuildSystem.mjs +30 -30
- package/output/js/ff/core/Crypto.mjs +40 -40
- package/output/js/ff/core/Float.mjs +50 -0
- package/output/js/ff/core/HttpClient.mjs +56 -56
- package/output/js/ff/core/Json.mjs +147 -147
- package/output/js/ff/core/List.mjs +50 -50
- package/output/js/ff/core/Lock.mjs +97 -97
- package/output/js/ff/core/NodeSystem.mjs +87 -87
- package/output/js/ff/core/Ordering.mjs +8 -8
- package/output/js/ff/core/Path.mjs +231 -231
- package/output/js/ff/core/Random.mjs +56 -56
- package/output/js/ff/core/Task.mjs +39 -39
- package/output/js/ff/core/Try.mjs +98 -4
- package/package.json +1 -1
- package/postgresql/Pg.ff +1 -1
- package/rpc/.firefly/package.ff +1 -1
- package/rpc/Rpc.ff +70 -70
- package/s3/.firefly/package.ff +1 -1
- package/s3/S3.ff +94 -94
- package/unsafejs/UnsafeJs.ff +19 -19
- package/vscode/LICENSE.txt +21 -21
- package/vscode/Prepublish.ff +15 -15
- package/vscode/README.md +16 -16
- package/vscode/client/package.json +22 -22
- package/vscode/client/src/extension.ts +104 -104
- package/vscode/icons/firefly-icon.svg +10 -10
- package/vscode/language-configuration.json +61 -61
- package/vscode/package-lock.json +3623 -3623
- package/vscode/package.json +1 -1
- package/vscode/snippets.json +241 -241
- package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
- package/webserver/.firefly/include/package-lock.json +22 -22
- package/webserver/.firefly/include/package.json +5 -5
- package/webserver/.firefly/package.ff +2 -2
- package/webserver/WebServer.ff +685 -685
- package/websocket/.firefly/package.ff +1 -1
- package/websocket/WebSocket.ff +131 -131
- package/fireflysite/GuideAll.ff +0 -21
- package/fireflysite/GuideBaseTypes.ff +0 -168
- package/fireflysite/GuideControlFlow.ff +0 -212
- package/fireflysite/assets/markdown/Example.md +0 -78
- /package/fireflysite/assets/{NotoSansMono-Regular.ttf → font/NotoSansMono-Regular.ttf} +0 -0
- /package/fireflysite/assets/{NunitoSans-VariableFont_YTLC,opsz,wdth,wght.ttf → font/NunitoSans-VariableFont_YTLC,opsz,wdth,wght.ttf} +0 -0
- /package/fireflysite/assets/{autocomplete-small.png → image/autocomplete-small.png} +0 -0
- /package/fireflysite/assets/{autocomplete.png → image/autocomplete.png} +0 -0
- /package/fireflysite/assets/{edit-time-error.png → image/edit-time-error.png} +0 -0
- /package/fireflysite/assets/{firefly-logo-notext.png → image/firefly-logo-notext.png} +0 -0
- /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.
|
|
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.
|
|
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) {
|