firefly-compiler 0.4.51 → 0.4.52

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 (109) 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 +186 -186
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/JsEmitter.ff +946 -946
  10. package/compiler/LspHook.ff +202 -202
  11. package/compiler/ModuleCache.ff +178 -178
  12. package/compiler/Workspace.ff +88 -88
  13. package/core/.firefly/include/package-lock.json +394 -394
  14. package/core/.firefly/include/package.json +5 -5
  15. package/core/.firefly/include/prepare.sh +1 -1
  16. package/core/.firefly/package.ff +2 -2
  17. package/core/Array.ff +265 -265
  18. package/core/Atomic.ff +64 -64
  19. package/core/Box.ff +7 -7
  20. package/core/BrowserSystem.ff +40 -40
  21. package/core/BuildSystem.ff +148 -148
  22. package/core/Crypto.ff +96 -96
  23. package/core/Equal.ff +36 -36
  24. package/core/HttpClient.ff +87 -87
  25. package/core/JsSystem.ff +69 -69
  26. package/core/Json.ff +434 -434
  27. package/core/List.ff +486 -486
  28. package/core/Lock.ff +144 -144
  29. package/core/NodeSystem.ff +195 -189
  30. package/core/Ordering.ff +161 -161
  31. package/core/Path.ff +401 -401
  32. package/core/Random.ff +134 -134
  33. package/core/RbMap.ff +216 -216
  34. package/core/Show.ff +43 -43
  35. package/core/SourceLocation.ff +68 -68
  36. package/core/Task.ff +141 -141
  37. package/experimental/benchmarks/ListGrab.ff +23 -23
  38. package/experimental/benchmarks/ListGrab.java +55 -55
  39. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  40. package/experimental/benchmarks/Pyrotek45.java +64 -64
  41. package/experimental/bidirectional/Bidi.ff +88 -88
  42. package/experimental/random/Index.ff +53 -53
  43. package/experimental/random/Process.ff +120 -120
  44. package/experimental/random/Scrape.ff +51 -51
  45. package/experimental/random/Symbols.ff +73 -73
  46. package/experimental/random/Tensor.ff +52 -52
  47. package/experimental/random/Units.ff +36 -36
  48. package/experimental/s3/S3TestAuthorizationHeader.ff +38 -38
  49. package/experimental/s3/S3TestPut.ff +15 -15
  50. package/experimental/tests/TestJson.ff +26 -26
  51. package/firefly.sh +0 -0
  52. package/fireflysite/Main.ff +13 -13
  53. package/lsp/.firefly/package.ff +1 -1
  54. package/lsp/CompletionHandler.ff +808 -808
  55. package/lsp/Handler.ff +714 -714
  56. package/lsp/HoverHandler.ff +79 -79
  57. package/lsp/LanguageServer.ff +272 -272
  58. package/lsp/SignatureHelpHandler.ff +55 -55
  59. package/lsp/SymbolHandler.ff +181 -181
  60. package/lsp/TestReferences.ff +16 -16
  61. package/lsp/TestReferencesCase.ff +7 -7
  62. package/lsp/stderr.txt +1 -1
  63. package/lsp/stdin.txt +10 -10
  64. package/lsp/stdout.txt +40 -40
  65. package/lux/.firefly/package.ff +1 -1
  66. package/lux/Css.ff +648 -648
  67. package/lux/CssTest.ff +48 -48
  68. package/lux/Lux.ff +487 -487
  69. package/lux/LuxEvent.ff +116 -116
  70. package/lux/Main.ff +128 -128
  71. package/lux/Main2.ff +144 -144
  72. package/output/js/ff/compiler/Builder.mjs +43 -43
  73. package/output/js/ff/compiler/Dependencies.mjs +3 -3
  74. package/output/js/ff/core/Array.mjs +59 -59
  75. package/output/js/ff/core/Atomic.mjs +36 -36
  76. package/output/js/ff/core/BrowserSystem.mjs +11 -11
  77. package/output/js/ff/core/BuildSystem.mjs +30 -30
  78. package/output/js/ff/core/Crypto.mjs +40 -40
  79. package/output/js/ff/core/HttpClient.mjs +24 -24
  80. package/output/js/ff/core/Json.mjs +147 -147
  81. package/output/js/ff/core/List.mjs +50 -50
  82. package/output/js/ff/core/Lock.mjs +97 -97
  83. package/output/js/ff/core/NodeSystem.mjs +83 -77
  84. package/output/js/ff/core/Ordering.mjs +8 -8
  85. package/output/js/ff/core/Path.mjs +231 -231
  86. package/output/js/ff/core/Random.mjs +56 -56
  87. package/output/js/ff/core/Task.mjs +31 -31
  88. package/package.json +1 -1
  89. package/rpc/.firefly/package.ff +1 -1
  90. package/rpc/Rpc.ff +69 -69
  91. package/s3/.firefly/package.ff +1 -1
  92. package/s3/S3.ff +90 -90
  93. package/unsafejs/UnsafeJs.ff +19 -19
  94. package/vscode/LICENSE.txt +21 -21
  95. package/vscode/Prepublish.ff +15 -15
  96. package/vscode/README.md +16 -16
  97. package/vscode/client/package.json +22 -22
  98. package/vscode/client/src/extension.ts +104 -104
  99. package/vscode/icons/firefly-icon.svg +10 -10
  100. package/vscode/language-configuration.json +61 -61
  101. package/vscode/package-lock.json +3623 -3623
  102. package/vscode/package.json +1 -1
  103. package/vscode/snippets.json +241 -241
  104. package/webserver/.firefly/include/package-lock.json +16 -16
  105. package/webserver/.firefly/include/package.json +5 -5
  106. package/webserver/.firefly/package.ff +2 -2
  107. package/webserver/WebServer.ff +685 -685
  108. package/websocket/.firefly/package.ff +1 -1
  109. package/websocket/WebSocket.ff +131 -131
@@ -1,87 +1,87 @@
1
- capability HttpClient {}
2
- capability FetchBody {}
3
- capability FetchResponse {}
4
- data FetchRedirect {
5
- RedirectFollow
6
- RedirectError
7
- RedirectManual
8
- }
9
-
10
- extend self: HttpClient {
11
-
12
- fetch(
13
- url: String
14
- method: String = "GET"
15
- headers: List[Pair[String, String]] = emptyList
16
- body: Option[FetchBody] = None
17
- redirect: FetchRedirect = RedirectFollow
18
- // The rest of the options are only respected by browsers - see the MDN fetch() documentation
19
- referrer: Option[String] = None
20
- integrity: Option[String] = None
21
- mode: Option[String] = None
22
- credentials: Option[String] = None
23
- cache: Option[String] = None
24
- throw: Bool = True
25
- ): FetchResponse
26
- target js async """
27
- try {
28
- const options = {headers: {}, signal: $task.controller.signal}
29
- options.method = method_
30
- headers_.forEach(pair => {options.headers[pair.first_] = pair.second_})
31
- if(body_.value_) options.body = body_.value_
32
- if(redirect_.RedirectError) options.redirect = "error"
33
- else if(redirect_.RedirectManual) options.redirect = "manual"
34
- if(referrer_.value_) options.referrer = referrer_.value_
35
- if(integrity_.value_) options.integrity = integrity_.value_
36
- if(mode_.value_) options.mode = mode_.value_
37
- if(credentials_.value_) options.credentials = credentials_.value_
38
- if(cache_.value_) options.cache = cache_.value_
39
- let result = await fetch(url_, options)
40
- if(throw_ && !result.ok) throw new Error("Unexpected HTTP status code: " + result.status)
41
- return result
42
- } finally {
43
- if($task.controller.signal.aborted) $task.controller = new AbortController()
44
- }
45
- """
46
-
47
- }
48
-
49
- emptyList: List[Pair[String, String]] = [] // TODO: Why won't this type check when inlined? Probably some dangling unification variable?
50
-
51
- bodyText(body: String): FetchBody
52
- target js sync "return body_"
53
- target js async "return body_"
54
-
55
- bodyBuffer(body: Buffer): FetchBody
56
- target js sync "return body_"
57
- target js async "return body_"
58
-
59
- extend self: FetchResponse {
60
-
61
- ok(): Bool
62
- target js async "return self_.ok"
63
-
64
- status(): Int
65
- target js async "return self_.status"
66
-
67
- statusText(): String
68
- target js async "return self_.statusText"
69
-
70
- header(name: String): Option[String]
71
- target js async """
72
- const header = self_.headers.get(name_)
73
- return header != null
74
- ? ff_core_Option.Some(header)
75
- : ff_core_Option.None()
76
- """
77
-
78
- readText(): String
79
- target js async "return await self_.text()"
80
-
81
- readJson(): Json
82
- target js async "return await self_.json()"
83
-
84
- readBuffer(): Buffer
85
- target js async "return new DataView(await self_.arrayBuffer())"
86
-
87
- }
1
+ capability HttpClient {}
2
+ capability FetchBody {}
3
+ capability FetchResponse {}
4
+ data FetchRedirect {
5
+ RedirectFollow
6
+ RedirectError
7
+ RedirectManual
8
+ }
9
+
10
+ extend self: HttpClient {
11
+
12
+ fetch(
13
+ url: String
14
+ method: String = "GET"
15
+ headers: List[Pair[String, String]] = emptyList
16
+ body: Option[FetchBody] = None
17
+ redirect: FetchRedirect = RedirectFollow
18
+ // The rest of the options are only respected by browsers - see the MDN fetch() documentation
19
+ referrer: Option[String] = None
20
+ integrity: Option[String] = None
21
+ mode: Option[String] = None
22
+ credentials: Option[String] = None
23
+ cache: Option[String] = None
24
+ throw: Bool = True
25
+ ): FetchResponse
26
+ target js async """
27
+ try {
28
+ const options = {headers: {}, signal: $task.controller.signal}
29
+ options.method = method_
30
+ headers_.forEach(pair => {options.headers[pair.first_] = pair.second_})
31
+ if(body_.value_) options.body = body_.value_
32
+ if(redirect_.RedirectError) options.redirect = "error"
33
+ else if(redirect_.RedirectManual) options.redirect = "manual"
34
+ if(referrer_.value_) options.referrer = referrer_.value_
35
+ if(integrity_.value_) options.integrity = integrity_.value_
36
+ if(mode_.value_) options.mode = mode_.value_
37
+ if(credentials_.value_) options.credentials = credentials_.value_
38
+ if(cache_.value_) options.cache = cache_.value_
39
+ let result = await fetch(url_, options)
40
+ if(throw_ && !result.ok) throw new Error("Unexpected HTTP status code: " + result.status)
41
+ return result
42
+ } finally {
43
+ if($task.controller.signal.aborted) $task.controller = new AbortController()
44
+ }
45
+ """
46
+
47
+ }
48
+
49
+ emptyList: List[Pair[String, String]] = [] // TODO: Why won't this type check when inlined? Probably some dangling unification variable?
50
+
51
+ bodyText(body: String): FetchBody
52
+ target js sync "return body_"
53
+ target js async "return body_"
54
+
55
+ bodyBuffer(body: Buffer): FetchBody
56
+ target js sync "return body_"
57
+ target js async "return body_"
58
+
59
+ extend self: FetchResponse {
60
+
61
+ ok(): Bool
62
+ target js async "return self_.ok"
63
+
64
+ status(): Int
65
+ target js async "return self_.status"
66
+
67
+ statusText(): String
68
+ target js async "return self_.statusText"
69
+
70
+ header(name: String): Option[String]
71
+ target js async """
72
+ const header = self_.headers.get(name_)
73
+ return header != null
74
+ ? ff_core_Option.Some(header)
75
+ : ff_core_Option.None()
76
+ """
77
+
78
+ readText(): String
79
+ target js async "return await self_.text()"
80
+
81
+ readJson(): Json
82
+ target js async "return await self_.json()"
83
+
84
+ readBuffer(): Buffer
85
+ target js async "return new DataView(await self_.arrayBuffer())"
86
+
87
+ }
package/core/JsSystem.ff CHANGED
@@ -1,69 +1,69 @@
1
- class JsSystem {} // TODO: It has to be async if the async ffi is to be called - solve in the compiler?
2
-
3
- extend self: JsSystem {
4
-
5
- global(): JsValue
6
- target js sync "return self_"
7
-
8
- parseJson(json: String): JsValue
9
- target js sync "return JSON.parse(json_)"
10
-
11
- null(): JsValue
12
- target js sync "return null"
13
-
14
- undefined(): JsValue
15
- target js sync "return void 0"
16
-
17
- value[T: IsJsValue](jsValue: T): JsValue
18
- target js sync "return jsValue_"
19
-
20
- object(): JsValue
21
- target js sync "return {}"
22
-
23
- array(values: List[JsValue]): JsValue
24
- target js sync "return values_.slice()"
25
-
26
- json(value: Json): JsValue
27
- target js sync "return value_"
28
-
29
- function0[R](body: () => R): JsValue
30
- target js sync "return body_"
31
- target js async "return () => body_($task)"
32
-
33
- function1[R](body: JsValue => R): JsValue
34
- target js sync "return body_"
35
- target js async "return a1 => body_(a1, $task)"
36
-
37
- function2[R](body: (JsValue, JsValue) => R): JsValue
38
- target js sync "return body_"
39
- target js async "return (a1, a2) => body_(a1, a2, $task)"
40
-
41
- function3[R](body: (JsValue, JsValue, JsValue) => R): JsValue
42
- target js sync "return body_"
43
- target js async "return (a1, a2, a3) => body_(a1, a2, a3, $task)"
44
-
45
- function4[R](body: (JsValue, JsValue, JsValue, JsValue) => R): JsValue
46
- target js sync "return body_"
47
- target js async "return (a1, a2, a3, a4) => body_(a1, a2, a3, a4, $task)"
48
-
49
- function5[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
50
- target js sync "return body_"
51
- target js async "return (a1, a2, a3, a4, a5) => body_(a1, a2, a3, a4, a5, $task)"
52
-
53
- function6[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
54
- target js sync "return body_"
55
- target js async "return (a1, a2, a3, a4, a5, a6) => body_(a1, a2, a3, a4, a5, a6, $task)"
56
-
57
- function7[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
58
- target js sync "return body_"
59
- target js async "return (a1, a2, a3, a4, a5, a6, a7) => body_(a1, a2, a3, a4, a5, a6, a7, $task)"
60
-
61
- function8[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
62
- target js sync "return body_"
63
- target js async "return (a1, a2, a3, a4, a5, a6, a7, a8) => body_(a1, a2, a3, a4, a5, a6, a7, a8, $task)"
64
-
65
- function9[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
66
- target js sync "return body_"
67
- target js async "return (a1, a2, a3, a4, a5, a6, a7, a8, a9) => body_(a1, a2, a3, a4, a5, a6, a7, a8, a9, $task)"
68
-
69
- }
1
+ class JsSystem {} // TODO: It has to be async if the async ffi is to be called - solve in the compiler?
2
+
3
+ extend self: JsSystem {
4
+
5
+ global(): JsValue
6
+ target js sync "return self_"
7
+
8
+ parseJson(json: String): JsValue
9
+ target js sync "return JSON.parse(json_)"
10
+
11
+ null(): JsValue
12
+ target js sync "return null"
13
+
14
+ undefined(): JsValue
15
+ target js sync "return void 0"
16
+
17
+ value[T: IsJsValue](jsValue: T): JsValue
18
+ target js sync "return jsValue_"
19
+
20
+ object(): JsValue
21
+ target js sync "return {}"
22
+
23
+ array(values: List[JsValue]): JsValue
24
+ target js sync "return values_.slice()"
25
+
26
+ json(value: Json): JsValue
27
+ target js sync "return value_"
28
+
29
+ function0[R](body: () => R): JsValue
30
+ target js sync "return body_"
31
+ target js async "return () => body_($task)"
32
+
33
+ function1[R](body: JsValue => R): JsValue
34
+ target js sync "return body_"
35
+ target js async "return a1 => body_(a1, $task)"
36
+
37
+ function2[R](body: (JsValue, JsValue) => R): JsValue
38
+ target js sync "return body_"
39
+ target js async "return (a1, a2) => body_(a1, a2, $task)"
40
+
41
+ function3[R](body: (JsValue, JsValue, JsValue) => R): JsValue
42
+ target js sync "return body_"
43
+ target js async "return (a1, a2, a3) => body_(a1, a2, a3, $task)"
44
+
45
+ function4[R](body: (JsValue, JsValue, JsValue, JsValue) => R): JsValue
46
+ target js sync "return body_"
47
+ target js async "return (a1, a2, a3, a4) => body_(a1, a2, a3, a4, $task)"
48
+
49
+ function5[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
50
+ target js sync "return body_"
51
+ target js async "return (a1, a2, a3, a4, a5) => body_(a1, a2, a3, a4, a5, $task)"
52
+
53
+ function6[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
54
+ target js sync "return body_"
55
+ target js async "return (a1, a2, a3, a4, a5, a6) => body_(a1, a2, a3, a4, a5, a6, $task)"
56
+
57
+ function7[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
58
+ target js sync "return body_"
59
+ target js async "return (a1, a2, a3, a4, a5, a6, a7) => body_(a1, a2, a3, a4, a5, a6, a7, $task)"
60
+
61
+ function8[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
62
+ target js sync "return body_"
63
+ target js async "return (a1, a2, a3, a4, a5, a6, a7, a8) => body_(a1, a2, a3, a4, a5, a6, a7, a8, $task)"
64
+
65
+ function9[R](body: (JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue, JsValue) => R): JsValue
66
+ target js sync "return body_"
67
+ target js async "return (a1, a2, a3, a4, a5, a6, a7, a8, a9) => body_(a1, a2, a3, a4, a5, a6, a7, a8, a9, $task)"
68
+
69
+ }