firefly-compiler 0.4.51 → 0.4.53

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 +190 -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 +78 -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
@@ -96,8 +96,8 @@ import * as ff_core_Unit from "../../ff/core/Unit.mjs"
96
96
 
97
97
 
98
98
  export function new_(value_) {
99
-
100
- return {value: value_}
99
+
100
+ return {value: value_}
101
101
 
102
102
  }
103
103
 
@@ -106,68 +106,68 @@ throw new Error('Function new is missing on this target in async context.');
106
106
  }
107
107
 
108
108
  export function Atomic_modify(self_, body_) {
109
-
110
- return self_.value = body_(self_.value)
109
+
110
+ return self_.value = body_(self_.value)
111
111
 
112
112
  }
113
113
 
114
114
  export function Atomic_getAndModify(self_, body_) {
115
-
116
- const currentValue = self_.value
117
- self_.value = body_(currentValue)
118
- return currentValue
115
+
116
+ const currentValue = self_.value
117
+ self_.value = body_(currentValue)
118
+ return currentValue
119
119
 
120
120
  }
121
121
 
122
122
  export function Atomic_get(self_) {
123
-
124
- return self_.value
123
+
124
+ return self_.value
125
125
 
126
126
  }
127
127
 
128
128
  export function Atomic_set(self_, value_) {
129
-
130
- self_.value = value
129
+
130
+ self_.value = value
131
131
 
132
132
  }
133
133
 
134
134
  export function Atomic_getAndSet(self_, newValue_) {
135
-
136
- const currentValue = self_.value
137
- self_.value = newValue
138
- return currentValue
135
+
136
+ const currentValue = self_.value
137
+ self_.value = newValue
138
+ return currentValue
139
139
 
140
140
  }
141
141
 
142
142
  export function Atomic_compareAndSet(self_, currentValue_, newValue_) {
143
-
144
- if(self_.value !== currentValue) return false
145
- self_.value = newValue
146
- return true
143
+
144
+ if(self_.value !== currentValue) return false
145
+ self_.value = newValue
146
+ return true
147
147
 
148
148
  }
149
149
 
150
150
  export async function Atomic_modify$(self_, body_, $task) {
151
-
152
- let currentValue, newValue
153
- do {
154
- currentValue = self_.value
155
- newValue = await body_(currentValue)
156
- } while(currentValue !== self_.value)
157
- self_.value = newValue
158
- return newValue
151
+
152
+ let currentValue, newValue
153
+ do {
154
+ currentValue = self_.value
155
+ newValue = await body_(currentValue)
156
+ } while(currentValue !== self_.value)
157
+ self_.value = newValue
158
+ return newValue
159
159
 
160
160
  }
161
161
 
162
162
  export async function Atomic_getAndModify$(self_, body_, $task) {
163
-
164
- let currentValue, newValue
165
- do {
166
- currentValue = self_.value
167
- newValue = await body_(currentValue)
168
- } while(currentValue !== self_.value)
169
- self_.value = newValue
170
- return currentValue
163
+
164
+ let currentValue, newValue
165
+ do {
166
+ currentValue = self_.value
167
+ newValue = await body_(currentValue)
168
+ } while(currentValue !== self_.value)
169
+ self_.value = newValue
170
+ return currentValue
171
171
 
172
172
  }
173
173
 
@@ -148,29 +148,29 @@ return typeof globalThis !== 'undefined' ? globalThis : window
148
148
  }
149
149
 
150
150
  export async function BrowserSystem_url$(self_, $task) {
151
-
152
- return location.href;
151
+
152
+ return location.href;
153
153
 
154
154
  }
155
155
 
156
156
  export async function BrowserSystem_urlPath$(self_, $task) {
157
-
158
- return location.pathname;
157
+
158
+ return location.pathname;
159
159
 
160
160
  }
161
161
 
162
162
  export async function BrowserSystem_urlQuery$(self_, name_, $task) {
163
-
164
- const param = new URLSearchParams(location.search).get(name_)
165
- if(param == null) return ff_core_Option.None();
166
- return ff_core_Option.Some(param);
163
+
164
+ const param = new URLSearchParams(location.search).get(name_)
165
+ if(param == null) return ff_core_Option.None();
166
+ return ff_core_Option.Some(param);
167
167
 
168
168
  }
169
169
 
170
170
  export async function BrowserSystem_urlFragment$(self_, $task) {
171
-
172
- if(!location.hash.startsWith('#')) return ff_core_Option.None();
173
- return ff_core_Option.Some(location.hash.slice(1));
171
+
172
+ if(!location.hash.startsWith('#')) return ff_core_Option.None();
173
+ return ff_core_Option.Some(location.hash.slice(1));
174
174
 
175
175
  }
176
176
 
@@ -143,34 +143,34 @@ throw new Error('Function internalMainPackagePair is missing on this target in s
143
143
  }
144
144
 
145
145
  export async function internalCallEsBuild_$(self_, mainJsFile_, outputPath_, minify_, sourceMap_, $task) {
146
-
147
- const esbuild = import$0
148
- return await esbuild.build({
149
- entryPoints: [mainJsFile_],
150
- bundle: true,
151
- minify: minify_,
152
- sourcemap: sourceMap_,
153
- platform: 'browser',
154
- target: 'es6',
155
- external: ['../../../node_modules/*'], // TODO
156
- outfile: outputPath_
157
- })
146
+
147
+ const esbuild = import$0
148
+ return await esbuild.build({
149
+ entryPoints: [mainJsFile_],
150
+ bundle: true,
151
+ minify: minify_,
152
+ sourcemap: sourceMap_,
153
+ platform: 'browser',
154
+ target: 'es6',
155
+ external: ['../../../node_modules/*'], // TODO
156
+ outfile: outputPath_
157
+ })
158
158
 
159
159
  }
160
160
 
161
161
  export async function internalNodeCallEsBuild_$(self_, mainJsFile_, outputPath_, minify_, $task) {
162
-
163
- const esbuild = import$0
164
- return await esbuild.build({
165
- entryPoints: [mainJsFile_],
166
- bundle: true,
167
- minify: minify_,
168
- sourcemap: true,
169
- platform: 'node',
170
- target: 'es6',
171
- external: ['../../../node_modules/*'], // TODO
172
- outfile: outputPath_
173
- })
162
+
163
+ const esbuild = import$0
164
+ return await esbuild.build({
165
+ entryPoints: [mainJsFile_],
166
+ bundle: true,
167
+ minify: minify_,
168
+ sourcemap: true,
169
+ platform: 'node',
170
+ target: 'es6',
171
+ external: ['../../../node_modules/*'], // TODO
172
+ outfile: outputPath_
173
+ })
174
174
 
175
175
  }
176
176
 
@@ -192,20 +192,20 @@ return (await ff_core_Path.Path_readStream$(file_, $task))
192
192
  }
193
193
 
194
194
  export async function internalPath_$(buildSystem_, absoluteOrRelative_, $task) {
195
-
196
- return absoluteOrRelative_
195
+
196
+ return absoluteOrRelative_
197
197
 
198
198
  }
199
199
 
200
200
  export async function internalCompile_$(buildSystem_, mainFile_, target_, $task) {
201
-
202
- return await $firefly_compiler.buildViaBuildSystem_$(buildSystem_, buildSystem_.fireflyPath_, mainFile_, target_, $task)
201
+
202
+ return await $firefly_compiler.buildViaBuildSystem_$(buildSystem_, buildSystem_.fireflyPath_, mainFile_, target_, $task)
203
203
 
204
204
  }
205
205
 
206
206
  export async function internalMainPackagePair_$(buildSystem_, $task) {
207
-
208
- return {first_: buildSystem_.mainPackagePair_.group_, second_: buildSystem_.mainPackagePair_.name_}
207
+
208
+ return {first_: buildSystem_.mainPackagePair_.group_, second_: buildSystem_.mainPackagePair_.name_}
209
209
 
210
210
  }
211
211
 
@@ -100,25 +100,25 @@ throw new Error('Function internalHashPassword is missing on this target in sync
100
100
  }
101
101
 
102
102
  export async function internalHashPassword_$(system_, salt_, password_, iterations_, $task) {
103
-
104
- const keyMaterial = await crypto.subtle.importKey(
105
- 'raw',
106
- password_,
107
- {name: 'PBKDF2'},
108
- false,
109
- ['deriveBits']
110
- );
111
- const hashBuffer = await crypto.subtle.deriveBits(
112
- {
113
- name: 'PBKDF2',
114
- salt: salt_,
115
- iterations: iterations_,
116
- hash: 'SHA-256'
117
- },
118
- keyMaterial,
119
- 256
120
- );
121
- return new DataView(hashBuffer);
103
+
104
+ const keyMaterial = await crypto.subtle.importKey(
105
+ 'raw',
106
+ password_,
107
+ {name: 'PBKDF2'},
108
+ false,
109
+ ['deriveBits']
110
+ );
111
+ const hashBuffer = await crypto.subtle.deriveBits(
112
+ {
113
+ name: 'PBKDF2',
114
+ salt: salt_,
115
+ iterations: iterations_,
116
+ hash: 'SHA-256'
117
+ },
118
+ keyMaterial,
119
+ 256
120
+ );
121
+ return new DataView(hashBuffer);
122
122
 
123
123
  }
124
124
 
@@ -186,8 +186,8 @@ return (v_ === 0)
186
186
  }
187
187
 
188
188
  export async function Crypto_randomUuid$(self_, $task) {
189
-
190
- return self_.randomUUID();
189
+
190
+ return self_.randomUUID();
191
191
 
192
192
  }
193
193
 
@@ -198,33 +198,33 @@ return buffer_
198
198
  }
199
199
 
200
200
  export async function Crypto_randomizeBuffer$(self_, buffer_, $task) {
201
-
202
- self_.getRandomValues(new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength));
201
+
202
+ self_.getRandomValues(new Uint8Array(buffer_.buffer, buffer_.byteOffset, buffer_.byteLength));
203
203
 
204
204
  }
205
205
 
206
206
  export async function Crypto_hmacSha256$(self_, key_, buffer_, $task) {
207
-
208
- const cryptoKey = await self_.subtle.importKey(
209
- 'raw',
210
- key_,
211
- {name: 'HMAC', hash: {name: 'SHA-256'}},
212
- false,
213
- ['sign']
214
- );
215
- const signature = await self_.subtle.sign(
216
- 'HMAC',
217
- cryptoKey,
218
- buffer_
219
- );
220
- return new DataView(signature);
207
+
208
+ const cryptoKey = await self_.subtle.importKey(
209
+ 'raw',
210
+ key_,
211
+ {name: 'HMAC', hash: {name: 'SHA-256'}},
212
+ false,
213
+ ['sign']
214
+ );
215
+ const signature = await self_.subtle.sign(
216
+ 'HMAC',
217
+ cryptoKey,
218
+ buffer_
219
+ );
220
+ return new DataView(signature);
221
221
 
222
222
  }
223
223
 
224
224
  export async function Crypto_sha256$(self_, buffer_, $task) {
225
-
226
- let hash = await self_.subtle.digest('SHA-256', buffer_);
227
- return new DataView(hash);
225
+
226
+ let hash = await self_.subtle.digest('SHA-256', buffer_);
227
+ return new DataView(hash);
228
228
 
229
229
  }
230
230
 
@@ -136,25 +136,25 @@ throw new Error('Function HttpClient_fetch is missing on this target in sync con
136
136
  }
137
137
 
138
138
  export async function HttpClient_fetch$(self_, url_, method_ = "GET", headers_ = ff_core_HttpClient.emptyList_, body_ = ff_core_Option.None(), redirect_ = ff_core_HttpClient.RedirectFollow(), referrer_ = ff_core_Option.None(), integrity_ = ff_core_Option.None(), mode_ = ff_core_Option.None(), credentials_ = ff_core_Option.None(), cache_ = ff_core_Option.None(), throw_ = true, $task) {
139
-
140
- try {
141
- const options = {headers: {}, signal: $task.controller.signal}
142
- options.method = method_
143
- headers_.forEach(pair => {options.headers[pair.first_] = pair.second_})
144
- if(body_.value_) options.body = body_.value_
145
- if(redirect_.RedirectError) options.redirect = "error"
146
- else if(redirect_.RedirectManual) options.redirect = "manual"
147
- if(referrer_.value_) options.referrer = referrer_.value_
148
- if(integrity_.value_) options.integrity = integrity_.value_
149
- if(mode_.value_) options.mode = mode_.value_
150
- if(credentials_.value_) options.credentials = credentials_.value_
151
- if(cache_.value_) options.cache = cache_.value_
152
- let result = await fetch(url_, options)
153
- if(throw_ && !result.ok) throw new Error("Unexpected HTTP status code: " + result.status)
154
- return result
155
- } finally {
156
- if($task.controller.signal.aborted) $task.controller = new AbortController()
157
- }
139
+
140
+ try {
141
+ const options = {headers: {}, signal: $task.controller.signal}
142
+ options.method = method_
143
+ headers_.forEach(pair => {options.headers[pair.first_] = pair.second_})
144
+ if(body_.value_) options.body = body_.value_
145
+ if(redirect_.RedirectError) options.redirect = "error"
146
+ else if(redirect_.RedirectManual) options.redirect = "manual"
147
+ if(referrer_.value_) options.referrer = referrer_.value_
148
+ if(integrity_.value_) options.integrity = integrity_.value_
149
+ if(mode_.value_) options.mode = mode_.value_
150
+ if(credentials_.value_) options.credentials = credentials_.value_
151
+ if(cache_.value_) options.cache = cache_.value_
152
+ let result = await fetch(url_, options)
153
+ if(throw_ && !result.ok) throw new Error("Unexpected HTTP status code: " + result.status)
154
+ return result
155
+ } finally {
156
+ if($task.controller.signal.aborted) $task.controller = new AbortController()
157
+ }
158
158
 
159
159
  }
160
160
 
@@ -199,11 +199,11 @@ return self_.statusText
199
199
  }
200
200
 
201
201
  export async function FetchResponse_header$(self_, name_, $task) {
202
-
203
- const header = self_.headers.get(name_)
204
- return header != null
205
- ? ff_core_Option.Some(header)
206
- : ff_core_Option.None()
202
+
203
+ const header = self_.headers.get(name_)
204
+ return header != null
205
+ ? ff_core_Option.Some(header)
206
+ : ff_core_Option.None()
207
207
 
208
208
  }
209
209