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.
Files changed (135) hide show
  1. package/.hintrc +4 -4
  2. package/.vscode/settings.json +4 -4
  3. package/bin/Release.ff +153 -153
  4. package/bin/firefly.mjs +1 -1
  5. package/compiler/Builder.ff +257 -257
  6. package/compiler/Compiler.ff +227 -227
  7. package/compiler/Dependencies.ff +187 -187
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/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 +564 -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 +148 -148
  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 +216 -216
  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/String.ff +16 -0
  37. package/core/Task.ff +141 -141
  38. package/experimental/benchmarks/ListGrab.ff +23 -23
  39. package/experimental/benchmarks/ListGrab.java +55 -55
  40. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  41. package/experimental/benchmarks/Pyrotek45.java +64 -64
  42. package/experimental/bidirectional/Bidi.ff +88 -88
  43. package/experimental/random/Index.ff +53 -53
  44. package/experimental/random/Process.ff +120 -120
  45. package/experimental/random/Scrape.ff +51 -51
  46. package/experimental/random/Symbols.ff +73 -73
  47. package/experimental/random/Tensor.ff +52 -52
  48. package/experimental/random/Units.ff +36 -36
  49. package/experimental/s3/S3TestAuthorizationHeader.ff +39 -38
  50. package/experimental/s3/S3TestPut.ff +16 -15
  51. package/experimental/tests/TestJson.ff +26 -26
  52. package/firefly.sh +0 -0
  53. package/fireflysite/.firefly/package.ff +4 -0
  54. package/fireflysite/CommunityOverview.ff +20 -0
  55. package/fireflysite/CountingButtonDemo.ff +58 -0
  56. package/fireflysite/DocumentParser.ff +218 -0
  57. package/fireflysite/ExamplesOverview.ff +40 -0
  58. package/fireflysite/FrontPage.ff +360 -0
  59. package/fireflysite/Guide.ff +411 -0
  60. package/fireflysite/GuideAll.ff +21 -0
  61. package/fireflysite/GuideBaseTypes.ff +168 -0
  62. package/fireflysite/GuideControlFlow.ff +212 -0
  63. package/fireflysite/GuideIntroduction.ff +52 -0
  64. package/fireflysite/Main.ff +137 -15
  65. package/fireflysite/MatchingPasswordsDemo.ff +82 -0
  66. package/fireflysite/PackagesOverview.ff +49 -0
  67. package/fireflysite/PostgresqlDemo.ff +34 -0
  68. package/fireflysite/Styles.ff +495 -0
  69. package/fireflysite/assets/NotoSansMono-Regular.ttf +0 -0
  70. package/fireflysite/assets/NunitoSans-VariableFont_YTLC,opsz,wdth,wght.ttf +0 -0
  71. package/fireflysite/assets/autocomplete-small.png +0 -0
  72. package/fireflysite/assets/autocomplete.png +0 -0
  73. package/fireflysite/assets/edit-time-error.png +0 -0
  74. package/fireflysite/assets/firefly-logo-notext.png +0 -0
  75. package/fireflysite/assets/firefly-logo-yellow.png +0 -0
  76. package/fireflysite/assets/markdown/ControlFlow.md +136 -0
  77. package/fireflysite/assets/markdown/Example.md +78 -0
  78. package/lsp/.firefly/package.ff +1 -1
  79. package/lsp/CompletionHandler.ff +828 -828
  80. package/lsp/Handler.ff +714 -714
  81. package/lsp/HoverHandler.ff +79 -79
  82. package/lsp/LanguageServer.ff +272 -272
  83. package/lsp/SignatureHelpHandler.ff +55 -55
  84. package/lsp/SymbolHandler.ff +181 -181
  85. package/lsp/TestReferences.ff +17 -17
  86. package/lsp/TestReferencesCase.ff +7 -7
  87. package/lsp/stderr.txt +1 -1
  88. package/lsp/stdout.txt +34 -34
  89. package/lux/.firefly/package.ff +1 -1
  90. package/lux/Css.ff +648 -648
  91. package/lux/CssTest.ff +48 -48
  92. package/lux/Lux.ff +487 -487
  93. package/lux/LuxEvent.ff +116 -116
  94. package/lux/Main.ff +123 -123
  95. package/lux/Main2.ff +143 -144
  96. package/output/js/ff/compiler/Builder.mjs +43 -43
  97. package/output/js/ff/compiler/Dependencies.mjs +3 -3
  98. package/output/js/ff/core/Array.mjs +59 -59
  99. package/output/js/ff/core/Atomic.mjs +36 -36
  100. package/output/js/ff/core/BrowserSystem.mjs +11 -11
  101. package/output/js/ff/core/BuildSystem.mjs +30 -30
  102. package/output/js/ff/core/Crypto.mjs +40 -40
  103. package/output/js/ff/core/HttpClient.mjs +56 -56
  104. package/output/js/ff/core/Json.mjs +147 -147
  105. package/output/js/ff/core/List.mjs +50 -50
  106. package/output/js/ff/core/Lock.mjs +97 -97
  107. package/output/js/ff/core/NodeSystem.mjs +83 -83
  108. package/output/js/ff/core/Ordering.mjs +8 -8
  109. package/output/js/ff/core/Path.mjs +231 -231
  110. package/output/js/ff/core/Random.mjs +56 -56
  111. package/output/js/ff/core/String.mjs +20 -0
  112. package/output/js/ff/core/Task.mjs +31 -31
  113. package/package.json +1 -1
  114. package/rpc/.firefly/package.ff +1 -1
  115. package/rpc/Rpc.ff +70 -70
  116. package/s3/.firefly/package.ff +1 -1
  117. package/s3/S3.ff +94 -94
  118. package/unsafejs/UnsafeJs.ff +19 -19
  119. package/vscode/LICENSE.txt +21 -21
  120. package/vscode/Prepublish.ff +15 -15
  121. package/vscode/README.md +16 -16
  122. package/vscode/client/package.json +22 -22
  123. package/vscode/client/src/extension.ts +104 -104
  124. package/vscode/icons/firefly-icon.svg +10 -10
  125. package/vscode/language-configuration.json +61 -61
  126. package/vscode/package-lock.json +3623 -3623
  127. package/vscode/package.json +15 -1
  128. package/vscode/snippets.json +241 -241
  129. package/vscode/syntaxes/firefly-markdown-injection.json +45 -0
  130. package/webserver/.firefly/include/package-lock.json +22 -16
  131. package/webserver/.firefly/include/package.json +5 -5
  132. package/webserver/.firefly/package.ff +2 -2
  133. package/webserver/WebServer.ff +685 -685
  134. package/websocket/.firefly/package.ff +1 -1
  135. package/websocket/WebSocket.ff +131 -131
@@ -1,148 +1,148 @@
1
- capability HttpClient {}
2
- capability FetchBody {}
3
- capability FetchResponse {}
4
- data FetchRedirect {
5
- RedirectFollow
6
- RedirectError
7
- RedirectManual
8
- }
9
- data FetchOptions(
10
- redirect: FetchRedirect = RedirectFollow
11
- referrer: Option[String] = None
12
- integrity: Option[String] = None
13
- mode: Option[String] = None
14
- credentials: Option[String] = None
15
- cache: Option[String] = None
16
- )
17
-
18
- extend self: HttpClient {
19
-
20
- get[T](
21
- url: String
22
- headers: List[Pair[String, String]]
23
- body: FetchResponse => T
24
- ): T {
25
- self.fetch("GET", url, headers, None, FetchOptions(), body)
26
- }
27
-
28
- post[T](
29
- url: String
30
- headers: List[Pair[String, String]]
31
- payload: Buffer
32
- body: FetchResponse => T
33
- ): T {
34
- self.fetch("POST", url, headers, Some(payload), FetchOptions(), body)
35
- }
36
-
37
- put[T](
38
- url: String
39
- headers: List[Pair[String, String]]
40
- payload: Buffer
41
- body: FetchResponse => T
42
- ): T {
43
- self.fetch("PUT", url, headers, Some(payload), FetchOptions(), body)
44
- }
45
-
46
- delete[T](
47
- url: String
48
- headers: List[Pair[String, String]]
49
- body: FetchResponse => T
50
- ): T {
51
- self.fetch("DELETE", url, headers, None, FetchOptions(), body)
52
- }
53
-
54
- fetch[T](
55
- method: String
56
- url: String
57
- headers: List[Pair[String, String]] = []
58
- payload: Option[Buffer] = None
59
- options: FetchOptions = FetchOptions()
60
- body: FetchResponse => T
61
- ): T
62
- target js async """
63
- const fetchResponse = {response: null, statusChecked: false};
64
- try {
65
- const options = {headers: {}, signal: $task.controller.signal};
66
- options.method = method_;
67
- headers_.forEach(pair => {options.headers[pair.first_] = pair.second_});
68
- if(payload_.value_) options.body = payload_.value_;
69
- if(options_.redirect_.RedirectError) options.redirect = "error";
70
- else if(options_.redirect_.RedirectManual) options.redirect = "manual";
71
- if(options_.referrer_.value_) options.referrer = options_.referrer_.value_;
72
- if(options_.integrity_.value_) options.integrity = options_.integrity_.value_;
73
- if(options_.mode_.value_) options.mode = options_.mode_.value_;
74
- if(options_.credentials_.value_) options.credentials = options_.credentials_.value_;
75
- if(options_.cache_.value_) options.cache = options_.cache_.value_;
76
- fetchResponse.response = await self_.fetch(url_, options);
77
- const result = await body_(fetchResponse, $task);
78
- internalCheck_(fetchResponse);
79
- return result;
80
- } finally {
81
- fetchResponse.response = null;
82
- if($task.controller.signal.aborted) $task.controller = new AbortController()
83
- }
84
- """
85
-
86
- }
87
-
88
- extend self: FetchResponse {
89
-
90
- ok(): Bool
91
- target js async """
92
- self_.statusChecked = true;
93
- internalCheck_(self_);
94
- return self_.response.ok;
95
- """
96
-
97
- status(): Int
98
- target js async """
99
- self_.statusChecked = true;
100
- internalCheck_(self_);
101
- return self_.response.status;
102
- """
103
-
104
- statusText(): String
105
- target js async """
106
- self_.statusChecked = true;
107
- internalCheck_(self_);
108
- return self_.response.statusText;
109
- """
110
-
111
- header(name: String): Option[String]
112
- target js async """
113
- internalCheck_(self_);
114
- const header = self_.response.headers.get(name_);
115
- return header != null
116
- ? ff_core_Option.Some(header)
117
- : ff_core_Option.None();
118
- """
119
-
120
- readText(): String
121
- target js async """
122
- internalCheck_(self_);
123
- return await self_.response.text();
124
- """
125
-
126
- readJson(): Json
127
- target js async """
128
- internalCheck_(self_);
129
- return await self_.response.json();
130
- """
131
-
132
- readBuffer(): Buffer
133
- target js async """
134
- internalCheck_(self_);
135
- return new DataView(await self_.response.arrayBuffer());
136
- """
137
-
138
- }
139
-
140
- internalCheck(fetchResponse: FetchResponse)
141
- target js sync """
142
- if(fetchResponse_.response === null) {
143
- throw new Error("Response closed");
144
- }
145
- if(!fetchResponse_.statusChecked && !fetchResponse_.response.ok) {
146
- throw new Error("Unchecked HTTP status code: " + fetchResponse_.response.status);
147
- }
148
- """
1
+ capability HttpClient {}
2
+ capability FetchBody {}
3
+ capability FetchResponse {}
4
+ data FetchRedirect {
5
+ RedirectFollow
6
+ RedirectError
7
+ RedirectManual
8
+ }
9
+ data FetchOptions(
10
+ redirect: FetchRedirect = RedirectFollow
11
+ referrer: Option[String] = None
12
+ integrity: Option[String] = None
13
+ mode: Option[String] = None
14
+ credentials: Option[String] = None
15
+ cache: Option[String] = None
16
+ )
17
+
18
+ extend self: HttpClient {
19
+
20
+ get[T](
21
+ url: String
22
+ headers: List[Pair[String, String]]
23
+ body: FetchResponse => T
24
+ ): T {
25
+ self.fetch("GET", url, headers, None, FetchOptions(), body)
26
+ }
27
+
28
+ post[T](
29
+ url: String
30
+ headers: List[Pair[String, String]]
31
+ payload: Buffer
32
+ body: FetchResponse => T
33
+ ): T {
34
+ self.fetch("POST", url, headers, Some(payload), FetchOptions(), body)
35
+ }
36
+
37
+ put[T](
38
+ url: String
39
+ headers: List[Pair[String, String]]
40
+ payload: Buffer
41
+ body: FetchResponse => T
42
+ ): T {
43
+ self.fetch("PUT", url, headers, Some(payload), FetchOptions(), body)
44
+ }
45
+
46
+ delete[T](
47
+ url: String
48
+ headers: List[Pair[String, String]]
49
+ body: FetchResponse => T
50
+ ): T {
51
+ self.fetch("DELETE", url, headers, None, FetchOptions(), body)
52
+ }
53
+
54
+ fetch[T](
55
+ method: String
56
+ url: String
57
+ headers: List[Pair[String, String]] = []
58
+ payload: Option[Buffer] = None
59
+ options: FetchOptions = FetchOptions()
60
+ body: FetchResponse => T
61
+ ): T
62
+ target js async """
63
+ const fetchResponse = {response: null, statusChecked: false};
64
+ try {
65
+ const options = {headers: {}, signal: $task.controller.signal};
66
+ options.method = method_;
67
+ headers_.forEach(pair => {options.headers[pair.first_] = pair.second_});
68
+ if(payload_.value_) options.body = payload_.value_;
69
+ if(options_.redirect_.RedirectError) options.redirect = "error";
70
+ else if(options_.redirect_.RedirectManual) options.redirect = "manual";
71
+ if(options_.referrer_.value_) options.referrer = options_.referrer_.value_;
72
+ if(options_.integrity_.value_) options.integrity = options_.integrity_.value_;
73
+ if(options_.mode_.value_) options.mode = options_.mode_.value_;
74
+ if(options_.credentials_.value_) options.credentials = options_.credentials_.value_;
75
+ if(options_.cache_.value_) options.cache = options_.cache_.value_;
76
+ fetchResponse.response = await self_.fetch(url_, options);
77
+ const result = await body_(fetchResponse, $task);
78
+ internalCheck_(fetchResponse);
79
+ return result;
80
+ } finally {
81
+ fetchResponse.response = null;
82
+ if($task.controller.signal.aborted) $task.controller = new AbortController()
83
+ }
84
+ """
85
+
86
+ }
87
+
88
+ extend self: FetchResponse {
89
+
90
+ ok(): Bool
91
+ target js async """
92
+ self_.statusChecked = true;
93
+ internalCheck_(self_);
94
+ return self_.response.ok;
95
+ """
96
+
97
+ status(): Int
98
+ target js async """
99
+ self_.statusChecked = true;
100
+ internalCheck_(self_);
101
+ return self_.response.status;
102
+ """
103
+
104
+ statusText(): String
105
+ target js async """
106
+ self_.statusChecked = true;
107
+ internalCheck_(self_);
108
+ return self_.response.statusText;
109
+ """
110
+
111
+ header(name: String): Option[String]
112
+ target js async """
113
+ internalCheck_(self_);
114
+ const header = self_.response.headers.get(name_);
115
+ return header != null
116
+ ? ff_core_Option.Some(header)
117
+ : ff_core_Option.None();
118
+ """
119
+
120
+ readText(): String
121
+ target js async """
122
+ internalCheck_(self_);
123
+ return await self_.response.text();
124
+ """
125
+
126
+ readJson(): Json
127
+ target js async """
128
+ internalCheck_(self_);
129
+ return await self_.response.json();
130
+ """
131
+
132
+ readBuffer(): Buffer
133
+ target js async """
134
+ internalCheck_(self_);
135
+ return new DataView(await self_.response.arrayBuffer());
136
+ """
137
+
138
+ }
139
+
140
+ internalCheck(fetchResponse: FetchResponse)
141
+ target js sync """
142
+ if(fetchResponse_.response === null) {
143
+ throw new Error("Response closed");
144
+ }
145
+ if(!fetchResponse_.statusChecked && !fetchResponse_.response.ok) {
146
+ throw new Error("Unchecked HTTP status code: " + fetchResponse_.response.status);
147
+ }
148
+ """
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
+ }