firefly-compiler 0.4.77 → 0.4.79
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/JsEmitter.ff +946 -946
- package/compiler/LspHook.ff +202 -202
- package/compiler/ModuleCache.ff +178 -178
- package/compiler/Workspace.ff +88 -88
- package/core/.firefly/include/package-lock.json +564 -394
- 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/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/String.ff +16 -0
- package/core/Task.ff +141 -141
- 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 -38
- package/experimental/s3/S3TestPut.ff +16 -15
- package/experimental/tests/TestJson.ff +26 -26
- package/firefly.sh +0 -0
- package/fireflysite/.firefly/package.ff +4 -0
- package/fireflysite/CommunityOverview.ff +20 -0
- package/fireflysite/CountingButtonDemo.ff +58 -0
- package/fireflysite/DocumentParser.ff +218 -0
- package/fireflysite/ExamplesOverview.ff +40 -0
- package/fireflysite/FrontPage.ff +360 -0
- package/fireflysite/Guide.ff +411 -0
- package/fireflysite/GuideAll.ff +21 -0
- package/fireflysite/GuideBaseTypes.ff +168 -0
- package/fireflysite/GuideControlFlow.ff +212 -0
- package/fireflysite/GuideIntroduction.ff +52 -0
- package/fireflysite/Main.ff +137 -15
- package/fireflysite/MatchingPasswordsDemo.ff +82 -0
- package/fireflysite/PackagesOverview.ff +49 -0
- package/fireflysite/PostgresqlDemo.ff +34 -0
- package/fireflysite/Styles.ff +495 -0
- package/fireflysite/assets/NotoSansMono-Regular.ttf +0 -0
- package/fireflysite/assets/NunitoSans-VariableFont_YTLC,opsz,wdth,wght.ttf +0 -0
- package/fireflysite/assets/autocomplete-small.png +0 -0
- package/fireflysite/assets/autocomplete.png +0 -0
- package/fireflysite/assets/edit-time-error.png +0 -0
- package/fireflysite/assets/firefly-logo-notext.png +0 -0
- package/fireflysite/assets/firefly-logo-yellow.png +0 -0
- package/fireflysite/assets/markdown/ControlFlow.md +136 -0
- package/fireflysite/assets/markdown/Example.md +78 -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 -144
- package/output/js/ff/compiler/Builder.mjs +43 -43
- package/output/js/ff/compiler/Dependencies.mjs +3 -3
- 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/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 +83 -83
- 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/String.mjs +20 -0
- package/output/js/ff/core/Task.mjs +31 -31
- package/package.json +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 +15 -1
- package/vscode/snippets.json +241 -241
- package/vscode/syntaxes/firefly-markdown-injection.json +45 -0
- package/webserver/.firefly/include/package-lock.json +22 -16
- 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
|
@@ -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
|
|
|
@@ -147,11 +147,11 @@ 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
|
|
|
@@ -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) {
|