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.
- package/.hintrc +4 -4
- package/.vscode/settings.json +4 -4
- package/bin/Release.ff +157 -154
- package/bin/firefly.mjs +1 -1
- package/compiler/Builder.ff +275 -277
- package/compiler/Compiler.ff +234 -233
- package/compiler/Dependencies.ff +186 -187
- package/compiler/DependencyLock.ff +17 -17
- package/compiler/Deriver.ff +23 -31
- package/compiler/Dictionaries.ff +1 -1
- package/compiler/Inference.ff +43 -20
- package/compiler/JsEmitter.ff +1437 -1282
- package/compiler/LspHook.ff +202 -202
- package/compiler/Main.ff +25 -24
- package/compiler/ModuleCache.ff +178 -178
- package/compiler/Parser.ff +36 -109
- package/compiler/Resolver.ff +5 -8
- package/compiler/Substitution.ff +1 -1
- package/compiler/Syntax.ff +1 -16
- package/compiler/Token.ff +9 -0
- package/compiler/Tokenizer.ff +4 -0
- package/compiler/Workspace.ff +88 -88
- package/core/.firefly/include/package.json +5 -5
- package/core/.firefly/package.ff +2 -2
- package/core/Any.ff +26 -30
- package/core/Array.ff +298 -265
- package/core/Atomic.ff +63 -64
- package/core/Box.ff +7 -7
- package/core/BrowserSystem.ff +40 -40
- package/core/Buffer.ff +185 -152
- package/core/BuildSystem.ff +156 -148
- package/core/Channel.ff +95 -92
- package/core/Char.ff +3 -2
- package/core/Core.ff +16 -23
- package/core/Crypto.ff +94 -96
- package/core/Equal.ff +41 -36
- package/core/Error.ff +15 -10
- package/core/FileHandle.ff +45 -37
- package/core/Float.ff +176 -200
- package/core/HttpClient.ff +142 -148
- package/core/Instant.ff +6 -8
- package/core/Int.ff +40 -24
- package/core/IntMap.ff +61 -39
- package/core/Js.ff +305 -0
- package/core/JsSystem.ff +135 -114
- package/core/JsValue.ff +303 -159
- package/core/Json.ff +423 -443
- package/core/List.ff +482 -486
- package/core/Lock.ff +108 -144
- package/core/Log.ff +25 -14
- package/core/NodeSystem.ff +198 -191
- package/core/Ordering.ff +160 -161
- package/core/Path.ff +377 -409
- package/core/Queue.ff +90 -0
- package/core/Random.ff +140 -134
- package/core/RbMap.ff +216 -216
- package/core/Serializable.ff +16 -13
- package/core/Show.ff +44 -43
- package/core/SourceLocation.ff +68 -68
- package/core/Stream.ff +1 -1
- package/core/String.ff +224 -202
- package/core/StringMap.ff +58 -36
- package/core/Task.ff +165 -149
- 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/lines/Main.ff +40 -0
- package/experimental/random/Index.ff +53 -53
- package/experimental/random/Process.ff +120 -120
- package/experimental/random/RunLength.ff +65 -65
- 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 +325 -331
- package/fireflysite/ExamplesOverview.ff +40 -40
- package/fireflysite/FrontPage.ff +344 -344
- package/fireflysite/GettingStarted.ff +45 -45
- package/fireflysite/Guide.ff +456 -456
- package/fireflysite/Main.ff +163 -152
- package/fireflysite/MatchingPasswordsDemo.ff +82 -82
- package/fireflysite/PackagesOverview.ff +49 -49
- package/fireflysite/PostgresqlDemo.ff +34 -34
- package/fireflysite/ReferenceAll.ff +18 -18
- package/fireflysite/ReferenceIntroduction.ff +11 -11
- package/fireflysite/Styles.ff +567 -567
- package/fireflysite/Test.ff +121 -62
- package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
- package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
- package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
- package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
- package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
- package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
- package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
- package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
- package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
- package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
- package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
- package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
- package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
- package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
- package/lsp/.firefly/package.ff +1 -1
- package/lsp/CompletionHandler.ff +827 -827
- 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 +608 -617
- package/lux/LuxEvent.ff +79 -116
- package/lux/Main.ff +123 -123
- package/lux/Main2.ff +143 -143
- package/lux/TestDry.ff +28 -28
- package/output/js/ff/compiler/Builder.mjs +72 -71
- package/output/js/ff/compiler/Compiler.mjs +19 -13
- package/output/js/ff/compiler/Dependencies.mjs +8 -7
- package/output/js/ff/compiler/DependencyLock.mjs +6 -4
- package/output/js/ff/compiler/Deriver.mjs +26 -24
- package/output/js/ff/compiler/Dictionaries.mjs +14 -18
- package/output/js/ff/compiler/Environment.mjs +6 -4
- package/output/js/ff/compiler/Inference.mjs +238 -164
- package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
- package/output/js/ff/compiler/JsImporter.mjs +20 -18
- package/output/js/ff/compiler/LspHook.mjs +12 -10
- package/output/js/ff/compiler/Main.mjs +61 -41
- package/output/js/ff/compiler/ModuleCache.mjs +10 -8
- package/output/js/ff/compiler/Parser.mjs +153 -669
- package/output/js/ff/compiler/Patterns.mjs +12 -10
- package/output/js/ff/compiler/Resolver.mjs +52 -78
- package/output/js/ff/compiler/Substitution.mjs +12 -16
- package/output/js/ff/compiler/Syntax.mjs +50 -341
- package/output/js/ff/compiler/Token.mjs +126 -4
- package/output/js/ff/compiler/Tokenizer.mjs +62 -52
- package/output/js/ff/compiler/Unification.mjs +74 -90
- package/output/js/ff/compiler/Wildcards.mjs +4 -2
- package/output/js/ff/compiler/Workspace.mjs +26 -20
- package/output/js/ff/core/Any.mjs +20 -20
- package/output/js/ff/core/Array.mjs +268 -175
- package/output/js/ff/core/AssetSystem.mjs +8 -6
- package/output/js/ff/core/Atomic.mjs +84 -52
- package/output/js/ff/core/Bool.mjs +6 -4
- package/output/js/ff/core/BrowserSystem.mjs +38 -29
- package/output/js/ff/core/Buffer.mjs +285 -133
- package/output/js/ff/core/BuildSystem.mjs +36 -56
- package/output/js/ff/core/Channel.mjs +250 -97
- package/output/js/ff/core/Char.mjs +5 -3
- package/output/js/ff/core/Core.mjs +28 -34
- package/output/js/ff/core/Crypto.mjs +30 -52
- package/output/js/ff/core/Duration.mjs +4 -2
- package/output/js/ff/core/Equal.mjs +14 -12
- package/output/js/ff/core/Error.mjs +17 -11
- package/output/js/ff/core/FileHandle.mjs +76 -38
- package/output/js/ff/core/Float.mjs +92 -160
- package/output/js/ff/core/HttpClient.mjs +208 -76
- package/output/js/ff/core/Instant.mjs +8 -10
- package/output/js/ff/core/Int.mjs +36 -26
- package/output/js/ff/core/IntMap.mjs +79 -33
- package/output/js/ff/core/Js.mjs +751 -0
- package/output/js/ff/core/JsSystem.mjs +54 -60
- package/output/js/ff/core/JsValue.mjs +294 -143
- package/output/js/ff/core/Json.mjs +443 -253
- package/output/js/ff/core/List.mjs +262 -214
- package/output/js/ff/core/Lock.mjs +156 -125
- package/output/js/ff/core/Log.mjs +20 -10
- package/output/js/ff/core/Map.mjs +10 -8
- package/output/js/ff/core/NodeSystem.mjs +189 -123
- package/output/js/ff/core/Nothing.mjs +4 -2
- package/output/js/ff/core/Option.mjs +40 -38
- package/output/js/ff/core/Ordering.mjs +26 -20
- package/output/js/ff/core/Pair.mjs +4 -2
- package/output/js/ff/core/Path.mjs +517 -315
- package/output/js/ff/core/Queue.mjs +306 -0
- package/output/js/ff/core/Random.mjs +141 -77
- package/output/js/ff/core/RbMap.mjs +36 -34
- package/output/js/ff/core/Serializable.mjs +44 -28
- package/output/js/ff/core/Set.mjs +6 -4
- package/output/js/ff/core/Show.mjs +8 -6
- package/output/js/ff/core/SourceLocation.mjs +4 -2
- package/output/js/ff/core/Stream.mjs +30 -50
- package/output/js/ff/core/String.mjs +263 -172
- package/output/js/ff/core/StringMap.mjs +77 -31
- package/output/js/ff/core/Task.mjs +91 -76
- package/output/js/ff/core/Try.mjs +20 -18
- package/output/js/ff/core/Unit.mjs +4 -2
- package/package.json +1 -1
- package/postgresql/Pg.ff +53 -59
- package/rpc/.firefly/package.ff +1 -1
- package/rpc/Rpc.ff +70 -70
- package/s3/.firefly/package.ff +1 -1
- package/s3/S3.ff +92 -94
- package/vscode/LICENSE.txt +21 -21
- package/vscode/Prepublish.ff +15 -15
- package/vscode/README.md +16 -16
- package/vscode/client/package-lock.json +544 -544
- 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.json +5 -5
- package/webserver/.firefly/package.ff +2 -2
- package/webserver/WebServer.ff +647 -685
- package/websocket/.firefly/package.ff +1 -1
- package/websocket/WebSocket.ff +100 -131
- package/core/UnsafeJs.ff +0 -42
- package/output/js/ff/core/UnsafeJs.mjs +0 -191
|
@@ -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 Try
|
|
96
98
|
export function Success(value_) {
|
|
97
99
|
return {Success: true, value_};
|
|
@@ -120,7 +122,7 @@ return body_(value_)
|
|
|
120
122
|
}))
|
|
121
123
|
return
|
|
122
124
|
}
|
|
123
|
-
|
|
125
|
+
{
|
|
124
126
|
const error_ = _1.error_;
|
|
125
127
|
return ff_core_Try.Failure(error_)
|
|
126
128
|
}
|
|
@@ -171,7 +173,7 @@ const value_ = _1.value_;
|
|
|
171
173
|
body_();
|
|
172
174
|
return value_
|
|
173
175
|
}
|
|
174
|
-
|
|
176
|
+
{
|
|
175
177
|
body_();
|
|
176
178
|
return ff_core_Try.Try_grab(self_)
|
|
177
179
|
}
|
|
@@ -227,7 +229,7 @@ return value_
|
|
|
227
229
|
}))
|
|
228
230
|
return
|
|
229
231
|
}
|
|
230
|
-
|
|
232
|
+
{
|
|
231
233
|
{
|
|
232
234
|
const _1 = ff_core_Core.try_((() => {
|
|
233
235
|
return body_()
|
|
@@ -235,7 +237,7 @@ return body_()
|
|
|
235
237
|
if(_1.Success) {
|
|
236
238
|
return self_
|
|
237
239
|
}
|
|
238
|
-
|
|
240
|
+
{
|
|
239
241
|
const error_ = _1.error_;
|
|
240
242
|
return ff_core_Try.Failure(error_)
|
|
241
243
|
}
|
|
@@ -252,7 +254,7 @@ if(_1.Success) {
|
|
|
252
254
|
const value_ = _1.value_;
|
|
253
255
|
return value_
|
|
254
256
|
}
|
|
255
|
-
|
|
257
|
+
{
|
|
256
258
|
return body_()
|
|
257
259
|
}
|
|
258
260
|
}
|
|
@@ -265,7 +267,7 @@ if(_1.Success) {
|
|
|
265
267
|
const value_ = _1.value_;
|
|
266
268
|
return value_
|
|
267
269
|
}
|
|
268
|
-
|
|
270
|
+
{
|
|
269
271
|
const error_ = _1.error_;
|
|
270
272
|
return ff_core_Error.Error_rethrow(error_)
|
|
271
273
|
}
|
|
@@ -279,7 +281,7 @@ if(_1.Success) {
|
|
|
279
281
|
const value_ = _1.value_;
|
|
280
282
|
return ff_core_Option.Some(value_)
|
|
281
283
|
}
|
|
282
|
-
|
|
284
|
+
{
|
|
283
285
|
return ff_core_Option.None()
|
|
284
286
|
}
|
|
285
287
|
}
|
|
@@ -295,7 +297,7 @@ return (await body_(value_, $task))
|
|
|
295
297
|
}), $task))
|
|
296
298
|
return
|
|
297
299
|
}
|
|
298
|
-
|
|
300
|
+
{
|
|
299
301
|
const error_ = _1.error_;
|
|
300
302
|
return ff_core_Try.Failure(error_)
|
|
301
303
|
}
|
|
@@ -346,7 +348,7 @@ const value_ = _1.value_;
|
|
|
346
348
|
(await body_($task));
|
|
347
349
|
return value_
|
|
348
350
|
}
|
|
349
|
-
|
|
351
|
+
{
|
|
350
352
|
(await body_($task));
|
|
351
353
|
return ff_core_Try.Try_grab(self_)
|
|
352
354
|
}
|
|
@@ -402,7 +404,7 @@ return value_
|
|
|
402
404
|
}), $task))
|
|
403
405
|
return
|
|
404
406
|
}
|
|
405
|
-
|
|
407
|
+
{
|
|
406
408
|
{
|
|
407
409
|
const _1 = (await ff_core_Core.try_$((async ($task) => {
|
|
408
410
|
return (await body_($task))
|
|
@@ -410,7 +412,7 @@ return (await body_($task))
|
|
|
410
412
|
if(_1.Success) {
|
|
411
413
|
return self_
|
|
412
414
|
}
|
|
413
|
-
|
|
415
|
+
{
|
|
414
416
|
const error_ = _1.error_;
|
|
415
417
|
return ff_core_Try.Failure(error_)
|
|
416
418
|
}
|
|
@@ -427,7 +429,7 @@ if(_1.Success) {
|
|
|
427
429
|
const value_ = _1.value_;
|
|
428
430
|
return value_
|
|
429
431
|
}
|
|
430
|
-
|
|
432
|
+
{
|
|
431
433
|
return (await body_($task))
|
|
432
434
|
}
|
|
433
435
|
}
|
|
@@ -440,7 +442,7 @@ if(_1.Success) {
|
|
|
440
442
|
const value_ = _1.value_;
|
|
441
443
|
return value_
|
|
442
444
|
}
|
|
443
|
-
|
|
445
|
+
{
|
|
444
446
|
const error_ = _1.error_;
|
|
445
447
|
return ff_core_Error.Error_rethrow(error_)
|
|
446
448
|
}
|
|
@@ -454,7 +456,7 @@ if(_1.Success) {
|
|
|
454
456
|
const value_ = _1.value_;
|
|
455
457
|
return ff_core_Option.Some(value_)
|
|
456
458
|
}
|
|
457
|
-
|
|
459
|
+
{
|
|
458
460
|
return ff_core_Option.None()
|
|
459
461
|
}
|
|
460
462
|
}
|
|
@@ -471,7 +473,7 @@ if(_1.Success && _1.value_.Failure) {
|
|
|
471
473
|
const t_ = _1.value_;
|
|
472
474
|
return t_
|
|
473
475
|
}
|
|
474
|
-
|
|
476
|
+
{
|
|
475
477
|
const error_ = _1.error_;
|
|
476
478
|
return ff_core_Try.Failure(error_)
|
|
477
479
|
}
|
|
@@ -489,7 +491,7 @@ if(_1.Success && _1.value_.Failure) {
|
|
|
489
491
|
const t_ = _1.value_;
|
|
490
492
|
return t_
|
|
491
493
|
}
|
|
492
|
-
|
|
494
|
+
{
|
|
493
495
|
const error_ = _1.error_;
|
|
494
496
|
return ff_core_Try.Failure(error_)
|
|
495
497
|
}
|
|
@@ -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 Unit
|
|
96
98
|
const Unit$ = {Unit: true};
|
|
97
99
|
export function Unit() {
|
package/package.json
CHANGED
package/postgresql/Pg.ff
CHANGED
|
@@ -20,14 +20,13 @@ newPool(
|
|
|
20
20
|
maxConnections: Int = 10
|
|
21
21
|
allowExitOnIdle: Bool = True
|
|
22
22
|
): PgPool {
|
|
23
|
-
|
|
24
|
-
let
|
|
25
|
-
|
|
26
|
-
PgPool(pg.get("Pool").new1(js.object()
|
|
23
|
+
Js.throwIfCancelled()
|
|
24
|
+
let pg = Js.import("pg").get("default")
|
|
25
|
+
PgPool(pg.get("Pool").new1(Js.object()
|
|
27
26
|
.with("user", user)
|
|
28
27
|
.with("host", host)
|
|
29
28
|
.with("database", database)
|
|
30
|
-
.with("password",
|
|
29
|
+
.with("password", Js.function0(password))
|
|
31
30
|
.with("port", port)
|
|
32
31
|
.with("connectionTimeoutMillis", connectionTimeout.seconds * 1000)
|
|
33
32
|
.with("idleTimeoutMillis", idleTimeout.seconds * 1000)
|
|
@@ -44,10 +43,9 @@ newPoolFromConnectionString(
|
|
|
44
43
|
maxConnections: Int = 10
|
|
45
44
|
allowExitOnIdle: Bool = True
|
|
46
45
|
): PgPool {
|
|
47
|
-
|
|
48
|
-
let
|
|
49
|
-
|
|
50
|
-
PgPool(pg.get("Pool").new1(js.object()
|
|
46
|
+
Js.throwIfCancelled()
|
|
47
|
+
let pg = Js.import("pg").get("default")
|
|
48
|
+
PgPool(pg.get("Pool").new1(Js.object()
|
|
51
49
|
.with("connectionString", connectionString)
|
|
52
50
|
.with("connectionTimeoutMillis", connectionTimeout.seconds * 1000)
|
|
53
51
|
.with("idleTimeoutMillis", idleTimeout.seconds * 1000)
|
|
@@ -59,24 +57,24 @@ newPoolFromConnectionString(
|
|
|
59
57
|
extend self: PgPool {
|
|
60
58
|
|
|
61
59
|
connect(): PgConnection {
|
|
62
|
-
|
|
63
|
-
PgConnection(
|
|
60
|
+
Js.throwIfCancelled()
|
|
61
|
+
PgConnection(Js.await(self.jsValue->connect()))
|
|
64
62
|
}
|
|
65
63
|
|
|
66
64
|
close(): Unit {
|
|
67
|
-
|
|
65
|
+
Js.await(self.jsValue->end())
|
|
68
66
|
}
|
|
69
67
|
|
|
70
68
|
connectionCount(): Int {
|
|
71
|
-
self.jsValue
|
|
69
|
+
self.jsValue->totalCount.grabInt()
|
|
72
70
|
}
|
|
73
71
|
|
|
74
72
|
idleCount(): Int {
|
|
75
|
-
self.jsValue
|
|
73
|
+
self.jsValue->idleCount.grabInt()
|
|
76
74
|
}
|
|
77
75
|
|
|
78
76
|
waitingCount(): Int {
|
|
79
|
-
self.jsValue
|
|
77
|
+
self.jsValue->waitingCount.grabInt()
|
|
80
78
|
}
|
|
81
79
|
|
|
82
80
|
transaction[T](body: PgConnection => T, level: PgLevel = PgReadCommitted): T {
|
|
@@ -104,10 +102,10 @@ extend self: PgPool {
|
|
|
104
102
|
extend self: PgConnection {
|
|
105
103
|
|
|
106
104
|
release(): Unit {
|
|
107
|
-
if(
|
|
108
|
-
self.jsValue
|
|
105
|
+
if(Js.cancelled()) {
|
|
106
|
+
self.jsValue->release(True)
|
|
109
107
|
} else {
|
|
110
|
-
self.jsValue
|
|
108
|
+
self.jsValue->release()
|
|
111
109
|
}
|
|
112
110
|
}
|
|
113
111
|
|
|
@@ -148,138 +146,134 @@ extend self: PgConnection {
|
|
|
148
146
|
extend self: PgStatement {
|
|
149
147
|
|
|
150
148
|
withBool(name: String, value: Bool): PgStatement {
|
|
151
|
-
let p =
|
|
149
|
+
let p = Js.jsSystem().value(value)
|
|
152
150
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
153
151
|
}
|
|
154
152
|
|
|
155
153
|
withNullableBool(name: String, value: Option[Bool]): PgStatement {
|
|
156
|
-
let p = value.map(
|
|
154
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
157
155
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
158
156
|
}
|
|
159
157
|
|
|
160
158
|
withInt(name: String, value: Int): PgStatement {
|
|
161
|
-
let p =
|
|
159
|
+
let p = Js.jsSystem().value(value)
|
|
162
160
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
163
161
|
}
|
|
164
162
|
|
|
165
163
|
withNullableInt(name: String, value: Option[Int]): PgStatement {
|
|
166
|
-
let p = value.map(
|
|
164
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
167
165
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
168
166
|
}
|
|
169
167
|
|
|
170
168
|
withFloat(name: String, value: Float): PgStatement {
|
|
171
|
-
let p =
|
|
169
|
+
let p = Js.jsSystem().value(value)
|
|
172
170
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
173
171
|
}
|
|
174
172
|
|
|
175
173
|
withNullableFloat(name: String, value: Option[Float]): PgStatement {
|
|
176
|
-
let p = value.map(
|
|
174
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
177
175
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
178
176
|
}
|
|
179
177
|
|
|
180
178
|
withString(name: String, value: String): PgStatement {
|
|
181
|
-
let p =
|
|
179
|
+
let p = Js.jsSystem().value(value)
|
|
182
180
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
183
181
|
}
|
|
184
182
|
|
|
185
183
|
withNullableString(name: String, value: Option[String]): PgStatement {
|
|
186
|
-
let p = value.map(
|
|
184
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
187
185
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
188
186
|
}
|
|
189
187
|
|
|
190
188
|
withInstant(name: String, value: Instant): PgStatement {
|
|
191
|
-
let jsDate = UnsafeJs.jsSystem().globalThis().get("Date")
|
|
192
189
|
function toJsDate(instant: Instant): JsValue {
|
|
193
|
-
|
|
190
|
+
Js->Date->(instant.since1970.seconds * 1000.0)
|
|
194
191
|
}
|
|
195
192
|
let p = toJsDate(value)
|
|
196
193
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
197
194
|
}
|
|
198
195
|
|
|
199
196
|
withNullableInstant(name: String, value: Option[Instant]): PgStatement {
|
|
200
|
-
let jsDate = UnsafeJs.jsSystem().globalThis().get("Date")
|
|
201
197
|
function toJsDate(instant: Instant): JsValue {
|
|
202
|
-
|
|
198
|
+
Js->Date->(instant.since1970.seconds * 1000.0)
|
|
203
199
|
}
|
|
204
|
-
let p = value.map(toJsDate).else {
|
|
200
|
+
let p = value.map(toJsDate).else {Js.null()}
|
|
205
201
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
206
202
|
}
|
|
207
203
|
|
|
208
204
|
withBuffer(name: String, value: Buffer): PgStatement {
|
|
209
|
-
let p =
|
|
205
|
+
let p = Js.jsSystem().value(value)
|
|
210
206
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
211
207
|
}
|
|
212
208
|
|
|
213
209
|
withNullableBuffer(name: String, value: Option[Buffer]): PgStatement {
|
|
214
|
-
let p = value.map(
|
|
210
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
215
211
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
216
212
|
}
|
|
217
213
|
|
|
218
214
|
withBoolArray(name: String, value: List[Bool]): PgStatement {
|
|
219
|
-
let p =
|
|
215
|
+
let p = Js.jsSystem().value(value)
|
|
220
216
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
221
217
|
}
|
|
222
218
|
|
|
223
219
|
withNullableBoolArray(name: String, value: Option[List[Bool]]): PgStatement {
|
|
224
|
-
let p = value.map(
|
|
220
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
225
221
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
226
222
|
}
|
|
227
223
|
|
|
228
224
|
withIntArray(name: String, value: List[Int]): PgStatement {
|
|
229
|
-
let p =
|
|
225
|
+
let p = Js.jsSystem().value(value)
|
|
230
226
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
231
227
|
}
|
|
232
228
|
|
|
233
229
|
withNullableIntArray(name: String, value: Option[List[Int]]): PgStatement {
|
|
234
|
-
let p = value.map(
|
|
230
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
235
231
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
236
232
|
}
|
|
237
233
|
|
|
238
234
|
withFloatArray(name: String, value: List[Float]): PgStatement {
|
|
239
|
-
let p =
|
|
235
|
+
let p = Js.jsSystem().value(value)
|
|
240
236
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
241
237
|
}
|
|
242
238
|
|
|
243
239
|
withNullableFloatArray(name: String, value: Option[List[Float]]): PgStatement {
|
|
244
|
-
let p = value.map(
|
|
240
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
245
241
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
246
242
|
}
|
|
247
243
|
|
|
248
244
|
withStringArray(name: String, value: List[String]): PgStatement {
|
|
249
|
-
let p =
|
|
245
|
+
let p = Js.jsSystem().value(value)
|
|
250
246
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
251
247
|
}
|
|
252
248
|
|
|
253
249
|
withNullableStringArray(name: String, value: Option[List[String]]): PgStatement {
|
|
254
|
-
let p = value.map(
|
|
250
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
255
251
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
256
252
|
}
|
|
257
253
|
|
|
258
254
|
withInstantArray(name: String, value: List[Instant]): PgStatement {
|
|
259
|
-
let jsDate = UnsafeJs.jsSystem().globalThis().get("Date")
|
|
260
255
|
function toJsDate(instant: Instant): JsValue {
|
|
261
|
-
|
|
256
|
+
Js->Date->(instant.since1970.seconds * 1000.0)
|
|
262
257
|
}
|
|
263
|
-
let p =
|
|
258
|
+
let p = Js.jsSystem().value(value.map(toJsDate))
|
|
264
259
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
265
260
|
}
|
|
266
261
|
|
|
267
262
|
withNullableInstantArray(name: String, value: Option[List[Instant]]): PgStatement {
|
|
268
|
-
let jsDate = UnsafeJs.jsSystem().globalThis().get("Date")
|
|
269
263
|
function toJsDate(instant: Instant): JsValue {
|
|
270
|
-
|
|
264
|
+
Js->Date->(instant.since1970.seconds * 1000.0)
|
|
271
265
|
}
|
|
272
|
-
let p = value.map {_.map(toJsDate)}.map(
|
|
266
|
+
let p = value.map {_.map(toJsDate)}.map(Js.jsSystem().value).else {Js.null()}
|
|
273
267
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
274
268
|
}
|
|
275
269
|
|
|
276
270
|
withBufferArray(name: String, value: List[Buffer]): PgStatement {
|
|
277
|
-
let p =
|
|
271
|
+
let p = Js.jsSystem().value(value)
|
|
278
272
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
279
273
|
}
|
|
280
274
|
|
|
281
275
|
withNullableBufferArray(name: String, value: Option[List[Buffer]]): PgStatement {
|
|
282
|
-
let p = value.map(
|
|
276
|
+
let p = value.map(Js.jsSystem().value).else {Js.null()}
|
|
283
277
|
self.PgStatement(parameters = self.parameters.add(name, p))
|
|
284
278
|
}
|
|
285
279
|
|
|
@@ -292,7 +286,7 @@ extend self: PgStatement {
|
|
|
292
286
|
}
|
|
293
287
|
|
|
294
288
|
any(body: PgRow => Bool): Bool {
|
|
295
|
-
!self.all {
|
|
289
|
+
!self.all {row =>
|
|
296
290
|
!body(row)
|
|
297
291
|
}
|
|
298
292
|
}
|
|
@@ -374,10 +368,10 @@ internalGet[T](row: PgRow, name: String, lower: Bool, body: JsValue => T): Optio
|
|
|
374
368
|
}
|
|
375
369
|
|
|
376
370
|
internalRunStatement(statement: PgStatement, body: Option[PgRow => Bool]): Int {
|
|
377
|
-
|
|
371
|
+
Js.throwIfCancelled()
|
|
378
372
|
let pair = internalParseParameters(statement.sql)
|
|
379
373
|
let parameters = internalCheckParameters(pair.second, statement.parameters)
|
|
380
|
-
let result =
|
|
374
|
+
let result = Js.await(statement.connection.grab().jsValue->query(pair.first, parameters))
|
|
381
375
|
body.{
|
|
382
376
|
| None =>
|
|
383
377
|
result.get("rowCount").grabInt()
|
|
@@ -398,7 +392,7 @@ internalBatchStatements(
|
|
|
398
392
|
let sqlCache = statements.map {s => Pair(s.sql, s.sql)}.group().map {sql, list =>
|
|
399
393
|
let pair = internalParseParameters(sql)
|
|
400
394
|
let prepared = if(list.size() >= 10) {
|
|
401
|
-
let hash =
|
|
395
|
+
let hash = Js.import("crypto")
|
|
402
396
|
.call1("createHash", "md5")
|
|
403
397
|
.call1("update", pair.first)
|
|
404
398
|
.call1("update", "ffpgps")
|
|
@@ -408,18 +402,18 @@ internalBatchStatements(
|
|
|
408
402
|
Pair(sql, (newSql = pair.first, parameterNames = pair.second, prepared = prepared))
|
|
409
403
|
}
|
|
410
404
|
let promises = statements.map {statement =>
|
|
411
|
-
|
|
405
|
+
Js.throwIfCancelled()
|
|
412
406
|
let record = sqlCache.grab(statement.sql)
|
|
413
407
|
let parameters = internalCheckParameters(record.parameterNames, statement.parameters)
|
|
414
|
-
let query =
|
|
408
|
+
let query = Js.object()
|
|
415
409
|
.with("text", record.newSql)
|
|
416
410
|
.with("values", parameters)
|
|
417
|
-
connection.jsValue
|
|
411
|
+
connection.jsValue->query(record.prepared.map {query.with("name", _)}.else {query})
|
|
418
412
|
}
|
|
419
413
|
let results = promises.map {promise =>
|
|
420
|
-
|
|
421
|
-
let result =
|
|
422
|
-
|
|
414
|
+
Js.throwIfCancelled()
|
|
415
|
+
let result = Js.await(promise)
|
|
416
|
+
Js.throwIfCancelled()
|
|
423
417
|
body.{
|
|
424
418
|
| None =>
|
|
425
419
|
result.get("rowCount").grabInt()
|
package/rpc/.firefly/package.ff
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
package ff:rpc:0.0.0
|
|
1
|
+
package ff:rpc:0.0.0
|
package/rpc/Rpc.ff
CHANGED
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
trait I: Rpc[O] {}
|
|
2
|
-
|
|
3
|
-
capability RpcServer[I, O, C](
|
|
4
|
-
handlers: StringMap[(C, I) => O]
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
newServer[I, O, C](): RpcServer[I, O, C] {
|
|
8
|
-
RpcServer(StringMap.new())
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
extend self[I, O, C]: RpcServer[I, O, C] {
|
|
12
|
-
handle(name: String, context: C, input: I): Option[O] {
|
|
13
|
-
self.handlers.get(name).map {handler =>
|
|
14
|
-
handler(context, input)
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
addCustom(
|
|
19
|
-
handler: (C, I) => O
|
|
20
|
-
): Unit {
|
|
21
|
-
let name = "TODO"
|
|
22
|
-
self.handlers.set(name) {context, input =>
|
|
23
|
-
handler(context, input)
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
extend self[C]: RpcServer[Buffer, Buffer, C] {
|
|
29
|
-
add[I: Rpc[O]: HasAnyTag: Serializable, O: Serializable](
|
|
30
|
-
handler: (C, I) => O
|
|
31
|
-
): Unit {
|
|
32
|
-
let name = Any.anyTag[I]().show()
|
|
33
|
-
self.handlers.set(name) {context, message =>
|
|
34
|
-
let input = Serializable.deserialize(message)
|
|
35
|
-
let output = handler(context, input)
|
|
36
|
-
Serializable.serialize(output)
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
capability RpcClient(
|
|
42
|
-
binaryCall: (String, Buffer) => Buffer
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
extend self: RpcClient {
|
|
46
|
-
call[I: Rpc[O]: HasAnyTag: Serializable, O: Serializable](
|
|
47
|
-
message: I
|
|
48
|
-
): O {
|
|
49
|
-
let name = Any.anyTag[I]().show()
|
|
50
|
-
let input = Serializable.serialize(message)
|
|
51
|
-
let response = self.binaryCall(name, input)
|
|
52
|
-
Serializable.deserialize(response)
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
newClient(
|
|
57
|
-
httpClient: HttpClient
|
|
58
|
-
prefix: String
|
|
59
|
-
method: String = "POST"
|
|
60
|
-
): RpcClient {
|
|
61
|
-
RpcClient {name, buffer =>
|
|
62
|
-
httpClient.fetch(
|
|
63
|
-
method = method
|
|
64
|
-
url = prefix + name
|
|
65
|
-
headers = []
|
|
66
|
-
payload = Some(buffer)
|
|
67
|
-
options = FetchOptions()
|
|
68
|
-
) {_.readBuffer()}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
1
|
+
trait I: Rpc[O] {}
|
|
2
|
+
|
|
3
|
+
capability RpcServer[I, O, C](
|
|
4
|
+
handlers: StringMap[(C, I) => O]
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
newServer[I, O, C](): RpcServer[I, O, C] {
|
|
8
|
+
RpcServer(StringMap.new())
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
extend self[I, O, C]: RpcServer[I, O, C] {
|
|
12
|
+
handle(name: String, context: C, input: I): Option[O] {
|
|
13
|
+
self.handlers.get(name).map {handler =>
|
|
14
|
+
handler(context, input)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
addCustom(
|
|
19
|
+
handler: (C, I) => O
|
|
20
|
+
): Unit {
|
|
21
|
+
let name = "TODO"
|
|
22
|
+
self.handlers.set(name) {context, input =>
|
|
23
|
+
handler(context, input)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
extend self[C]: RpcServer[Buffer, Buffer, C] {
|
|
29
|
+
add[I: Rpc[O]: HasAnyTag: Serializable, O: Serializable](
|
|
30
|
+
handler: (C, I) => O
|
|
31
|
+
): Unit {
|
|
32
|
+
let name = Any.anyTag[I]().show()
|
|
33
|
+
self.handlers.set(name) {context, message =>
|
|
34
|
+
let input = Serializable.deserialize(message)
|
|
35
|
+
let output = handler(context, input)
|
|
36
|
+
Serializable.serialize(output)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
capability RpcClient(
|
|
42
|
+
binaryCall: (String, Buffer) => Buffer
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
extend self: RpcClient {
|
|
46
|
+
call[I: Rpc[O]: HasAnyTag: Serializable, O: Serializable](
|
|
47
|
+
message: I
|
|
48
|
+
): O {
|
|
49
|
+
let name = Any.anyTag[I]().show()
|
|
50
|
+
let input = Serializable.serialize(message)
|
|
51
|
+
let response = self.binaryCall(name, input)
|
|
52
|
+
Serializable.deserialize(response)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
newClient(
|
|
57
|
+
httpClient: HttpClient
|
|
58
|
+
prefix: String
|
|
59
|
+
method: String = "POST"
|
|
60
|
+
): RpcClient {
|
|
61
|
+
RpcClient {name, buffer =>
|
|
62
|
+
httpClient.fetch(
|
|
63
|
+
method = method
|
|
64
|
+
url = prefix + name
|
|
65
|
+
headers = []
|
|
66
|
+
payload = Some(buffer)
|
|
67
|
+
options = FetchOptions()
|
|
68
|
+
) {_.readBuffer()}
|
|
69
|
+
}
|
|
70
|
+
}
|
package/s3/.firefly/package.ff
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
package ff:s3:0.0.0
|
|
1
|
+
package ff:s3:0.0.0
|