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.
Files changed (225) hide show
  1. package/.hintrc +4 -4
  2. package/.vscode/settings.json +4 -4
  3. package/bin/Release.ff +157 -154
  4. package/bin/firefly.mjs +1 -1
  5. package/compiler/Builder.ff +275 -277
  6. package/compiler/Compiler.ff +234 -233
  7. package/compiler/Dependencies.ff +186 -187
  8. package/compiler/DependencyLock.ff +17 -17
  9. package/compiler/Deriver.ff +23 -31
  10. package/compiler/Dictionaries.ff +1 -1
  11. package/compiler/Inference.ff +43 -20
  12. package/compiler/JsEmitter.ff +1437 -1282
  13. package/compiler/LspHook.ff +202 -202
  14. package/compiler/Main.ff +25 -24
  15. package/compiler/ModuleCache.ff +178 -178
  16. package/compiler/Parser.ff +36 -109
  17. package/compiler/Resolver.ff +5 -8
  18. package/compiler/Substitution.ff +1 -1
  19. package/compiler/Syntax.ff +1 -16
  20. package/compiler/Token.ff +9 -0
  21. package/compiler/Tokenizer.ff +4 -0
  22. package/compiler/Workspace.ff +88 -88
  23. package/core/.firefly/include/package.json +5 -5
  24. package/core/.firefly/package.ff +2 -2
  25. package/core/Any.ff +26 -30
  26. package/core/Array.ff +298 -265
  27. package/core/Atomic.ff +63 -64
  28. package/core/Box.ff +7 -7
  29. package/core/BrowserSystem.ff +40 -40
  30. package/core/Buffer.ff +185 -152
  31. package/core/BuildSystem.ff +156 -148
  32. package/core/Channel.ff +95 -92
  33. package/core/Char.ff +3 -2
  34. package/core/Core.ff +16 -23
  35. package/core/Crypto.ff +94 -96
  36. package/core/Equal.ff +41 -36
  37. package/core/Error.ff +15 -10
  38. package/core/FileHandle.ff +45 -37
  39. package/core/Float.ff +176 -200
  40. package/core/HttpClient.ff +142 -148
  41. package/core/Instant.ff +6 -8
  42. package/core/Int.ff +40 -24
  43. package/core/IntMap.ff +61 -39
  44. package/core/Js.ff +305 -0
  45. package/core/JsSystem.ff +135 -114
  46. package/core/JsValue.ff +303 -159
  47. package/core/Json.ff +423 -443
  48. package/core/List.ff +482 -486
  49. package/core/Lock.ff +108 -144
  50. package/core/Log.ff +25 -14
  51. package/core/NodeSystem.ff +198 -191
  52. package/core/Ordering.ff +160 -161
  53. package/core/Path.ff +377 -409
  54. package/core/Queue.ff +90 -0
  55. package/core/Random.ff +140 -134
  56. package/core/RbMap.ff +216 -216
  57. package/core/Serializable.ff +16 -13
  58. package/core/Show.ff +44 -43
  59. package/core/SourceLocation.ff +68 -68
  60. package/core/Stream.ff +1 -1
  61. package/core/String.ff +224 -202
  62. package/core/StringMap.ff +58 -36
  63. package/core/Task.ff +165 -149
  64. package/experimental/benchmarks/ListGrab.ff +23 -23
  65. package/experimental/benchmarks/ListGrab.java +55 -55
  66. package/experimental/benchmarks/Pyrotek45.ff +30 -30
  67. package/experimental/benchmarks/Pyrotek45.java +64 -64
  68. package/experimental/bidirectional/Bidi.ff +88 -88
  69. package/experimental/lines/Main.ff +40 -0
  70. package/experimental/random/Index.ff +53 -53
  71. package/experimental/random/Process.ff +120 -120
  72. package/experimental/random/RunLength.ff +65 -65
  73. package/experimental/random/Scrape.ff +51 -51
  74. package/experimental/random/Symbols.ff +73 -73
  75. package/experimental/random/Tensor.ff +52 -52
  76. package/experimental/random/Units.ff +36 -36
  77. package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
  78. package/experimental/s3/S3TestPut.ff +16 -16
  79. package/experimental/tests/TestJson.ff +26 -26
  80. package/firefly.sh +0 -0
  81. package/fireflysite/.firefly/package.ff +4 -4
  82. package/fireflysite/CommunityOverview.ff +20 -20
  83. package/fireflysite/CountingButtonDemo.ff +58 -58
  84. package/fireflysite/DocumentParser.ff +325 -331
  85. package/fireflysite/ExamplesOverview.ff +40 -40
  86. package/fireflysite/FrontPage.ff +344 -344
  87. package/fireflysite/GettingStarted.ff +45 -45
  88. package/fireflysite/Guide.ff +456 -456
  89. package/fireflysite/Main.ff +163 -152
  90. package/fireflysite/MatchingPasswordsDemo.ff +82 -82
  91. package/fireflysite/PackagesOverview.ff +49 -49
  92. package/fireflysite/PostgresqlDemo.ff +34 -34
  93. package/fireflysite/ReferenceAll.ff +18 -18
  94. package/fireflysite/ReferenceIntroduction.ff +11 -11
  95. package/fireflysite/Styles.ff +567 -567
  96. package/fireflysite/Test.ff +121 -62
  97. package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
  98. package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
  99. package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
  100. package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
  101. package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
  102. package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
  103. package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
  104. package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
  105. package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
  106. package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
  107. package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
  108. package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
  109. package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
  110. package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
  111. package/lsp/.firefly/package.ff +1 -1
  112. package/lsp/CompletionHandler.ff +827 -827
  113. package/lsp/Handler.ff +714 -714
  114. package/lsp/HoverHandler.ff +79 -79
  115. package/lsp/LanguageServer.ff +272 -272
  116. package/lsp/SignatureHelpHandler.ff +55 -55
  117. package/lsp/SymbolHandler.ff +181 -181
  118. package/lsp/TestReferences.ff +17 -17
  119. package/lsp/TestReferencesCase.ff +7 -7
  120. package/lsp/stderr.txt +1 -1
  121. package/lsp/stdout.txt +34 -34
  122. package/lux/.firefly/package.ff +1 -1
  123. package/lux/Css.ff +648 -648
  124. package/lux/CssTest.ff +48 -48
  125. package/lux/Lux.ff +608 -617
  126. package/lux/LuxEvent.ff +79 -116
  127. package/lux/Main.ff +123 -123
  128. package/lux/Main2.ff +143 -143
  129. package/lux/TestDry.ff +28 -28
  130. package/output/js/ff/compiler/Builder.mjs +72 -71
  131. package/output/js/ff/compiler/Compiler.mjs +19 -13
  132. package/output/js/ff/compiler/Dependencies.mjs +8 -7
  133. package/output/js/ff/compiler/DependencyLock.mjs +6 -4
  134. package/output/js/ff/compiler/Deriver.mjs +26 -24
  135. package/output/js/ff/compiler/Dictionaries.mjs +14 -18
  136. package/output/js/ff/compiler/Environment.mjs +6 -4
  137. package/output/js/ff/compiler/Inference.mjs +238 -164
  138. package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
  139. package/output/js/ff/compiler/JsImporter.mjs +20 -18
  140. package/output/js/ff/compiler/LspHook.mjs +12 -10
  141. package/output/js/ff/compiler/Main.mjs +61 -41
  142. package/output/js/ff/compiler/ModuleCache.mjs +10 -8
  143. package/output/js/ff/compiler/Parser.mjs +153 -669
  144. package/output/js/ff/compiler/Patterns.mjs +12 -10
  145. package/output/js/ff/compiler/Resolver.mjs +52 -78
  146. package/output/js/ff/compiler/Substitution.mjs +12 -16
  147. package/output/js/ff/compiler/Syntax.mjs +50 -341
  148. package/output/js/ff/compiler/Token.mjs +126 -4
  149. package/output/js/ff/compiler/Tokenizer.mjs +62 -52
  150. package/output/js/ff/compiler/Unification.mjs +74 -90
  151. package/output/js/ff/compiler/Wildcards.mjs +4 -2
  152. package/output/js/ff/compiler/Workspace.mjs +26 -20
  153. package/output/js/ff/core/Any.mjs +20 -20
  154. package/output/js/ff/core/Array.mjs +268 -175
  155. package/output/js/ff/core/AssetSystem.mjs +8 -6
  156. package/output/js/ff/core/Atomic.mjs +84 -52
  157. package/output/js/ff/core/Bool.mjs +6 -4
  158. package/output/js/ff/core/BrowserSystem.mjs +38 -29
  159. package/output/js/ff/core/Buffer.mjs +285 -133
  160. package/output/js/ff/core/BuildSystem.mjs +36 -56
  161. package/output/js/ff/core/Channel.mjs +250 -97
  162. package/output/js/ff/core/Char.mjs +5 -3
  163. package/output/js/ff/core/Core.mjs +28 -34
  164. package/output/js/ff/core/Crypto.mjs +30 -52
  165. package/output/js/ff/core/Duration.mjs +4 -2
  166. package/output/js/ff/core/Equal.mjs +14 -12
  167. package/output/js/ff/core/Error.mjs +17 -11
  168. package/output/js/ff/core/FileHandle.mjs +76 -38
  169. package/output/js/ff/core/Float.mjs +92 -160
  170. package/output/js/ff/core/HttpClient.mjs +208 -76
  171. package/output/js/ff/core/Instant.mjs +8 -10
  172. package/output/js/ff/core/Int.mjs +36 -26
  173. package/output/js/ff/core/IntMap.mjs +79 -33
  174. package/output/js/ff/core/Js.mjs +751 -0
  175. package/output/js/ff/core/JsSystem.mjs +54 -60
  176. package/output/js/ff/core/JsValue.mjs +294 -143
  177. package/output/js/ff/core/Json.mjs +443 -253
  178. package/output/js/ff/core/List.mjs +262 -214
  179. package/output/js/ff/core/Lock.mjs +156 -125
  180. package/output/js/ff/core/Log.mjs +20 -10
  181. package/output/js/ff/core/Map.mjs +10 -8
  182. package/output/js/ff/core/NodeSystem.mjs +189 -123
  183. package/output/js/ff/core/Nothing.mjs +4 -2
  184. package/output/js/ff/core/Option.mjs +40 -38
  185. package/output/js/ff/core/Ordering.mjs +26 -20
  186. package/output/js/ff/core/Pair.mjs +4 -2
  187. package/output/js/ff/core/Path.mjs +517 -315
  188. package/output/js/ff/core/Queue.mjs +306 -0
  189. package/output/js/ff/core/Random.mjs +141 -77
  190. package/output/js/ff/core/RbMap.mjs +36 -34
  191. package/output/js/ff/core/Serializable.mjs +44 -28
  192. package/output/js/ff/core/Set.mjs +6 -4
  193. package/output/js/ff/core/Show.mjs +8 -6
  194. package/output/js/ff/core/SourceLocation.mjs +4 -2
  195. package/output/js/ff/core/Stream.mjs +30 -50
  196. package/output/js/ff/core/String.mjs +263 -172
  197. package/output/js/ff/core/StringMap.mjs +77 -31
  198. package/output/js/ff/core/Task.mjs +91 -76
  199. package/output/js/ff/core/Try.mjs +20 -18
  200. package/output/js/ff/core/Unit.mjs +4 -2
  201. package/package.json +1 -1
  202. package/postgresql/Pg.ff +53 -59
  203. package/rpc/.firefly/package.ff +1 -1
  204. package/rpc/Rpc.ff +70 -70
  205. package/s3/.firefly/package.ff +1 -1
  206. package/s3/S3.ff +92 -94
  207. package/vscode/LICENSE.txt +21 -21
  208. package/vscode/Prepublish.ff +15 -15
  209. package/vscode/README.md +16 -16
  210. package/vscode/client/package-lock.json +544 -544
  211. package/vscode/client/package.json +22 -22
  212. package/vscode/client/src/extension.ts +104 -104
  213. package/vscode/icons/firefly-icon.svg +10 -10
  214. package/vscode/language-configuration.json +61 -61
  215. package/vscode/package-lock.json +3623 -3623
  216. package/vscode/package.json +1 -1
  217. package/vscode/snippets.json +241 -241
  218. package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
  219. package/webserver/.firefly/include/package.json +5 -5
  220. package/webserver/.firefly/package.ff +2 -2
  221. package/webserver/WebServer.ff +647 -685
  222. package/websocket/.firefly/package.ff +1 -1
  223. package/websocket/WebSocket.ff +100 -131
  224. package/core/UnsafeJs.ff +0 -42
  225. 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,283 +94,442 @@ 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
- // type Json
96
-
97
+ // newtype Json
97
98
 
98
99
 
99
100
 
100
101
  export function read_(json_) {
101
-
102
- try {
103
- return ff_core_Option.Some(JSON.parse(json_));
104
- } catch(e) {
105
- return ff_core_Option.None();
106
- }
107
-
102
+ try {
103
+ return ff_core_Option.Some(JSON.parse(json_))
104
+ } catch {
105
+ return ff_core_Option.None()
106
+ }
108
107
  }
109
108
 
110
109
  export function string_(json_) {
111
-
112
- return json_;
113
-
110
+ return json_
114
111
  }
115
112
 
116
113
  export function int_(json_) {
117
-
118
- return json_;
119
-
114
+ return json_
120
115
  }
121
116
 
122
117
  export function float_(json_) {
123
-
124
- return json_;
125
-
118
+ return json_
126
119
  }
127
120
 
128
121
  export function bool_(json_) {
129
-
130
- return json_;
131
-
122
+ return json_
132
123
  }
133
124
 
134
125
  export function null_() {
135
-
136
- return null;
137
-
126
+ return null
138
127
  }
139
128
 
140
129
  export function array_(json_) {
141
-
142
- return json_;
143
-
130
+ return json_
144
131
  }
145
132
 
146
133
  export function object_() {
147
-
148
- return {};
149
-
134
+ return {}
150
135
  }
151
136
 
152
137
  export function new0_() {
153
-
154
- return {};
155
-
138
+ return {}
156
139
  }
157
140
 
158
141
  export function fields_(body_) {
159
-
160
- const result = {};
161
- body_((k, v) => {result[k] = v});
162
- return result;
163
-
142
+ const result_ = {};
143
+ body_(((k_, v_) => {
144
+ result_[k_] = v_
145
+ }));
146
+ return result_
164
147
  }
165
148
 
166
- export function internalWith_(self_, field_, value_) {
167
-
168
- if(typeof self_ !== 'object' || self_ === null || Array.isArray(self_)) {
169
- throw new Error('Not an object: ' + JSON.stringify(self_));
170
- }
171
- return {...self_, [field_]: value_};
172
-
149
+ export function internalEquals_(a_, b_) {
150
+ if((a_ === b_)) {
151
+ return true
152
+ } else {
153
+ if((ff_core_JsValue.JsValue_isArray(a_) || ff_core_JsValue.JsValue_isArray(b_))) {
154
+ if(((!ff_core_JsValue.JsValue_isArray(a_)) || (!ff_core_JsValue.JsValue_isArray(b_)))) {
155
+ return false
156
+ } else {
157
+ if((a_.length !== b_.length)) {
158
+ return false
159
+ } else {
160
+ let equal_ = true;
161
+ for(let for_i = 0, for_e = a_.length; for_i < for_e; for_i++) {
162
+ const i_ = for_i;
163
+ equal_ = ff_core_Json.internalEquals_(a_[i_], b_[i_]);
164
+ if(!equal_) break
165
+ };
166
+ return equal_
167
+ }
168
+ }
169
+ } else {
170
+ if((ff_core_Json.Json_isObject(a_) && ff_core_Json.Json_isObject(b_))) {
171
+ const aKeys_ = Object.keys(a_);
172
+ const bKeys_ = Object.keys(b_);
173
+ if((aKeys_.length !== bKeys_.length)) {
174
+ return false
175
+ } else {
176
+ let equal_ = true;
177
+ ff_core_JsValue.JsValue_eachWhile(aKeys_, ((key_) => {
178
+ equal_ = (ff_core_JsValue.JsValue_hasOwn(b_, key_) && ff_core_Json.internalEquals_(a_[key_], b_[key_]));
179
+ return equal_
180
+ }));
181
+ return equal_
182
+ }
183
+ } else {
184
+ return false
173
185
  }
174
-
175
- export function internalEach_(self_, body_) {
176
- for(const [key, value] of Object.entries(self_)) body_(key, value)
177
186
  }
178
-
179
- export function internalEachWhile_(self_, body_) {
180
- for(const [key, value] of Object.entries(self_)) if(!body_(key, value)) break
181
187
  }
182
-
183
- export function internalEquals_(a_, b_) {
184
-
185
- if(a_ === b_) {
186
- return true;
187
- } else if(Array.isArray(a_) || Array.isArray(b_)) {
188
- if(!Array.isArray(a_) || !Array.isArray(b_)) return false;
189
- if(a_.length !== b_.length) return false;
190
- for(let i = 0; i < a_.length; i++) {
191
- if(!internalEquals_(a_[i], b_[i])) return false;
192
- }
193
- return true;
194
- } else if(typeof a_ === 'object' && typeof b_ === 'object' && a_ !== null && b_ !== null) {
195
- const aKeys = Object.keys(a_);
196
- const bKeys = Object.keys(b_);
197
- if(aKeys.length !== bKeys.length) return false;
198
- for(const key of aKeys) {
199
- if(!Object.hasOwn(b_, key) || !internalEquals_(a_[key], b_[key])) return false;
200
- }
201
- return true;
202
- } else {
203
- return false;
204
- }
205
-
206
188
  }
207
189
 
208
190
  export function internalCompare_(a_, b_) {
209
-
210
- if(a_ === b_) {
211
- return 0;
212
- } else if (a_ === null || b_ === null) {
213
- return a_ === null ? -1 : 1;
214
- } else if (typeof a_ === 'boolean' || typeof b_ === 'boolean') {
215
- if(typeof b_ !== 'boolean') return -1;
216
- if(typeof a_ !== 'boolean') return 1;
217
- return a_ < b_ ? -1 : 1;
218
- } else if (typeof a_ === 'number' || typeof b_ === 'number') {
219
- if(typeof b_ !== 'number') return -1;
220
- if(typeof a_ !== 'number') return 1;
221
- if(isNaN(a_)) return isNaN(b_) ? 0 : -1;
222
- if(isNaN(b_)) return 1;
223
- return a_ < b_ ? -1 : 1;
224
- } else if (typeof a_ === 'string' || typeof b_ === 'string') {
225
- if(typeof b_ !== 'string') return -1;
226
- if(typeof a_ !== 'string') return 1;
227
- return a_.localeCompare(b_, 'en');
228
- } else if(Array.isArray(a_) || Array.isArray(b_)) {
229
- if(!Array.isArray(a_) || !Array.isArray(b_)) return a_ < b_ ? -1 : 1;
230
- const length = Math.min(a_.length, b_.length);
231
- for(let i = 0; i < length; i++) {
232
- const cmp = internalCompare_(a_[i], b_[i]);
233
- if(cmp !== 0) return cmp;
234
- }
235
- return a_.length - b_.length;
236
- } else {
237
- const aKeys = Object.keys(a_).sort();
238
- const bKeys = Object.keys(b_).sort();
239
- const keyResult = internalCompare_(aKeys, bKeys);
240
- if(keyResult !== 0) return keyResult;
241
- for(const key of aKeys) {
242
- const result = internalCompare_(a_[key], b_[key]);
243
- if(result !== 0) return result;
244
- }
245
- return 0;
246
- }
247
-
191
+ if((a_ === b_)) {
192
+ return 0
193
+ } else {
194
+ if(((a_ === null) || (b_ === null))) {
195
+ if((a_ === null)) {
196
+ return (-1)
197
+ } else {
198
+ return 1
199
+ }
200
+ } else {
201
+ if((ff_core_Json.Json_isBool(a_) || ff_core_Json.Json_isBool(b_))) {
202
+ if(((!ff_core_Json.Json_isBool(b_)) || b_)) {
203
+ return (-1)
204
+ } else {
205
+ return 1
206
+ }
207
+ } else {
208
+ if((ff_core_Json.Json_isFloat(a_) || ff_core_Json.Json_isFloat(b_))) {
209
+ if((!ff_core_Json.Json_isFloat(b_))) {
210
+ return (-1)
211
+ } else {
212
+ if((!ff_core_Json.Json_isFloat(a_))) {
213
+ return 1
214
+ } else {
215
+ if(ff_core_JsValue.JsValue_isNan(a_)) {
216
+ if(ff_core_JsValue.JsValue_isNan(b_)) {
217
+ return 0
218
+ } else {
219
+ return (-1)
220
+ }
221
+ } else {
222
+ if(ff_core_JsValue.JsValue_isNan(b_)) {
223
+ return 1
224
+ } else {
225
+ if(ff_core_Ordering.before_(a_, b_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_Nothing_Nothing)) {
226
+ return (-1)
227
+ } else {
228
+ return 1
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
234
+ } else {
235
+ if((ff_core_Json.Json_isString(a_) || ff_core_Json.Json_isString(b_))) {
236
+ if((!ff_core_Json.Json_isString(b_))) {
237
+ return (-1)
238
+ } else {
239
+ if((!ff_core_Json.Json_isString(a_))) {
240
+ return 1
241
+ } else {
242
+ return a_.localeCompare(b_, "en")
243
+ }
244
+ }
245
+ } else {
246
+ if((ff_core_Json.Json_isArray(a_) || ff_core_Json.Json_isArray(b_))) {
247
+ if((!ff_core_Json.Json_isArray(b_))) {
248
+ return (-1)
249
+ } else {
250
+ if((!ff_core_Json.Json_isArray(a_))) {
251
+ return 1
252
+ } else {
253
+ const aLength_ = a_.length;
254
+ const bLength_ = b_.length;
255
+ let result_ = 0;
256
+ for(let for_i = 0, for_e = ff_core_Int.Int_min(aLength_, bLength_); for_i < for_e; for_i++) {
257
+ const i_ = for_i;
258
+ result_ = ff_core_Json.internalCompare_(a_[i_], b_[i_]);
259
+ if(!(result_ === 0)) break
260
+ };
261
+ if((result_ !== 0)) {
262
+ return result_
263
+ } else {
264
+ return (aLength_ - bLength_)
265
+ }
266
+ }
267
+ }
268
+ } else {
269
+ const aKeys_ = Object.keys(a_).sort();
270
+ const bKeys_ = Object.keys(b_).sort();
271
+ const keyResult_ = ff_core_Json.internalCompare_(aKeys_, bKeys_);
272
+ if((keyResult_ !== 0)) {
273
+ return keyResult_
274
+ } else {
275
+ let result_ = 0;
276
+ ff_core_JsValue.JsValue_eachWhile(aKeys_, ((key_) => {
277
+ result_ = ff_core_Json.internalCompare_(a_[key_], b_[key_]);
278
+ return (result_ === 0)
279
+ }));
280
+ return result_
281
+ }
282
+ }
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
248
288
  }
249
289
 
250
290
  export async function read_$(json_, $task) {
251
- throw new Error('Function read is missing on this target in async context.');
291
+ try {
292
+ return ff_core_Option.Some(JSON.parse(json_))
293
+ } catch {
294
+ return ff_core_Option.None()
295
+ }
252
296
  }
253
297
 
254
298
  export async function string_$(json_, $task) {
255
- throw new Error('Function string is missing on this target in async context.');
299
+ return json_
256
300
  }
257
301
 
258
302
  export async function int_$(json_, $task) {
259
- throw new Error('Function int is missing on this target in async context.');
303
+ return json_
260
304
  }
261
305
 
262
306
  export async function float_$(json_, $task) {
263
- throw new Error('Function float is missing on this target in async context.');
307
+ return json_
264
308
  }
265
309
 
266
310
  export async function bool_$(json_, $task) {
267
- throw new Error('Function bool is missing on this target in async context.');
311
+ return json_
268
312
  }
269
313
 
270
314
  export async function null_$($task) {
271
- throw new Error('Function null is missing on this target in async context.');
315
+ return null
272
316
  }
273
317
 
274
318
  export async function array_$(json_, $task) {
275
- throw new Error('Function array is missing on this target in async context.');
319
+ return json_
276
320
  }
277
321
 
278
322
  export async function object_$($task) {
279
- throw new Error('Function object is missing on this target in async context.');
323
+ return {}
280
324
  }
281
325
 
282
326
  export async function new0_$($task) {
283
- throw new Error('Function new0 is missing on this target in async context.');
327
+ return {}
284
328
  }
285
329
 
286
330
  export async function fields_$(body_, $task) {
287
-
288
- const result = {};
289
- await body_((k, v) => {result[k] = v}, $task);
290
- return result;
291
-
331
+ const result_ = {};
332
+ (await body_((async (k_, v_, $task) => {
333
+ result_[k_] = v_
334
+ }), $task));
335
+ return result_
292
336
  }
293
337
 
294
- export async function internalWith_$(self_, field_, value_, $task) {
295
- throw new Error('Function internalWith is missing on this target in async context.');
338
+ export async function internalEquals_$(a_, b_, $task) {
339
+ if((a_ === b_)) {
340
+ return true
341
+ } else {
342
+ if((ff_core_JsValue.JsValue_isArray(a_) || ff_core_JsValue.JsValue_isArray(b_))) {
343
+ if(((!ff_core_JsValue.JsValue_isArray(a_)) || (!ff_core_JsValue.JsValue_isArray(b_)))) {
344
+ return false
345
+ } else {
346
+ if((a_.length !== b_.length)) {
347
+ return false
348
+ } else {
349
+ let equal_ = true;
350
+ for(let for_i = 0, for_e = a_.length; for_i < for_e; for_i++) {
351
+ const i_ = for_i;
352
+ equal_ = ff_core_Json.internalEquals_(a_[i_], b_[i_]);
353
+ if(!equal_) break
354
+ };
355
+ return equal_
356
+ }
357
+ }
358
+ } else {
359
+ if((ff_core_Json.Json_isObject(a_) && ff_core_Json.Json_isObject(b_))) {
360
+ const aKeys_ = Object.keys(a_);
361
+ const bKeys_ = Object.keys(b_);
362
+ if((aKeys_.length !== bKeys_.length)) {
363
+ return false
364
+ } else {
365
+ let equal_ = true;
366
+ ff_core_JsValue.JsValue_eachWhile(aKeys_, ((key_) => {
367
+ equal_ = (ff_core_JsValue.JsValue_hasOwn(b_, key_) && ff_core_Json.internalEquals_(a_[key_], b_[key_]));
368
+ return equal_
369
+ }));
370
+ return equal_
371
+ }
372
+ } else {
373
+ return false
296
374
  }
297
-
298
- export async function internalEach_$(self_, body_, $task) {
299
- for(const [key, value] of Object.entries(self_)) await body_(key, value, $task)
300
375
  }
301
-
302
- export async function internalEachWhile_$(self_, body_, $task) {
303
- for(const [key, value] of Object.entries(self_)) if(!await body_(key, value, $task)) break
304
376
  }
305
-
306
- export async function internalEquals_$(a_, b_, $task) {
307
- throw new Error('Function internalEquals is missing on this target in async context.');
308
377
  }
309
378
 
310
379
  export async function internalCompare_$(a_, b_, $task) {
311
- throw new Error('Function internalCompare is missing on this target in async context.');
380
+ if((a_ === b_)) {
381
+ return 0
382
+ } else {
383
+ if(((a_ === null) || (b_ === null))) {
384
+ if((a_ === null)) {
385
+ return (-1)
386
+ } else {
387
+ return 1
388
+ }
389
+ } else {
390
+ if((ff_core_Json.Json_isBool(a_) || ff_core_Json.Json_isBool(b_))) {
391
+ if(((!ff_core_Json.Json_isBool(b_)) || b_)) {
392
+ return (-1)
393
+ } else {
394
+ return 1
395
+ }
396
+ } else {
397
+ if((ff_core_Json.Json_isFloat(a_) || ff_core_Json.Json_isFloat(b_))) {
398
+ if((!ff_core_Json.Json_isFloat(b_))) {
399
+ return (-1)
400
+ } else {
401
+ if((!ff_core_Json.Json_isFloat(a_))) {
402
+ return 1
403
+ } else {
404
+ if(ff_core_JsValue.JsValue_isNan(a_)) {
405
+ if(ff_core_JsValue.JsValue_isNan(b_)) {
406
+ return 0
407
+ } else {
408
+ return (-1)
409
+ }
410
+ } else {
411
+ if(ff_core_JsValue.JsValue_isNan(b_)) {
412
+ return 1
413
+ } else {
414
+ if(ff_core_Ordering.before_(a_, b_, ff_core_Ordering.ff_core_Ordering_Order$ff_core_Nothing_Nothing)) {
415
+ return (-1)
416
+ } else {
417
+ return 1
418
+ }
419
+ }
420
+ }
421
+ }
422
+ }
423
+ } else {
424
+ if((ff_core_Json.Json_isString(a_) || ff_core_Json.Json_isString(b_))) {
425
+ if((!ff_core_Json.Json_isString(b_))) {
426
+ return (-1)
427
+ } else {
428
+ if((!ff_core_Json.Json_isString(a_))) {
429
+ return 1
430
+ } else {
431
+ return a_.localeCompare(b_, "en")
432
+ }
433
+ }
434
+ } else {
435
+ if((ff_core_Json.Json_isArray(a_) || ff_core_Json.Json_isArray(b_))) {
436
+ if((!ff_core_Json.Json_isArray(b_))) {
437
+ return (-1)
438
+ } else {
439
+ if((!ff_core_Json.Json_isArray(a_))) {
440
+ return 1
441
+ } else {
442
+ const aLength_ = a_.length;
443
+ const bLength_ = b_.length;
444
+ let result_ = 0;
445
+ for(let for_i = 0, for_e = ff_core_Int.Int_min(aLength_, bLength_); for_i < for_e; for_i++) {
446
+ const i_ = for_i;
447
+ result_ = ff_core_Json.internalCompare_(a_[i_], b_[i_]);
448
+ if(!(result_ === 0)) break
449
+ };
450
+ if((result_ !== 0)) {
451
+ return result_
452
+ } else {
453
+ return (aLength_ - bLength_)
454
+ }
455
+ }
456
+ }
457
+ } else {
458
+ const aKeys_ = Object.keys(a_).sort();
459
+ const bKeys_ = Object.keys(b_).sort();
460
+ const keyResult_ = ff_core_Json.internalCompare_(aKeys_, bKeys_);
461
+ if((keyResult_ !== 0)) {
462
+ return keyResult_
463
+ } else {
464
+ let result_ = 0;
465
+ ff_core_JsValue.JsValue_eachWhile(aKeys_, ((key_) => {
466
+ result_ = ff_core_Json.internalCompare_(a_[key_], b_[key_]);
467
+ return (result_ === 0)
468
+ }));
469
+ return result_
470
+ }
471
+ }
472
+ }
473
+ }
474
+ }
475
+ }
476
+ }
312
477
  }
313
478
 
314
479
  export function Json_write(self_, indentation_ = ff_core_Option.None()) {
315
-
316
- return JSON.stringify(self_, null, indentation_.value_);
317
-
480
+ return JSON.stringify(self_, null, ff_core_Js.orUndefined_(indentation_, ff_core_JsValue.ff_core_JsValue_IsJsValue$ff_core_String_String))
318
481
  }
319
482
 
320
483
  export function Json_with(self_, field_, value_, ff_core_Json_JsonLike$T) {
321
- return ff_core_Json.internalWith_(self_, field_, ff_core_Json_JsonLike$T.toJson_(value_))
484
+ if((!ff_core_Json.Json_isObject(self_))) {
485
+ throw (new Error(("Not an object: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
486
+ };
487
+ return {...self_, [field_]: ff_core_Json_JsonLike$T.toJson_(value_)}
322
488
  }
323
489
 
324
490
  export function Json_merge(self_, that_) {
325
-
326
- if(typeof self_ !== 'object' || self_ === null || Array.isArray(self_)) {
327
- throw new Error('Not an object: ' + JSON.stringify(self_));
328
- }
329
- if(typeof that_ !== 'object' || that_ === null || Array.isArray(that_)) {
330
- throw new Error('Not an object: ' + JSON.stringify(that_));
331
- }
332
- return {...self_, ...that_};
333
-
491
+ if((!ff_core_Json.Json_isObject(self_))) {
492
+ throw (new Error(("Not an object: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
493
+ };
494
+ if((!ff_core_Json.Json_isObject(that_))) {
495
+ throw (new Error(("Not an object: " + ff_core_Json.Json_write(that_, ff_core_Option.None()))))
496
+ };
497
+ return ff_core_JsValue.JsValue_assign({}, self_, that_)
334
498
  }
335
499
 
336
500
  export function Json_grabString(self_) {
337
-
338
- if(typeof self_ !== 'string') throw new Error('Not a string: ' + JSON.stringify(self_));
339
- return self_;
340
-
501
+ if((!ff_core_Json.Json_isString(self_))) {
502
+ throw (new Error(("Not a String: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
503
+ };
504
+ return self_
341
505
  }
342
506
 
343
507
  export function Json_grabInt(self_) {
344
-
345
- if(!Number.isSafeInteger(self_)) throw new Error('Not an int: ' + JSON.stringify(self_));
346
- return Math.trunc(self_);
347
-
508
+ if((!ff_core_Json.Json_isInt(self_))) {
509
+ throw (new Error(("Not an Int: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
510
+ };
511
+ return self_
348
512
  }
349
513
 
350
514
  export function Json_grabFloat(self_) {
351
-
352
- if(typeof self_ !== 'number') throw new Error('Not a float: ' + JSON.stringify(self_));
353
- return self_;
354
-
515
+ if((!ff_core_Json.Json_isFloat(self_))) {
516
+ throw (new Error(("Not a Float: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
517
+ };
518
+ return self_
355
519
  }
356
520
 
357
521
  export function Json_grabBool(self_) {
358
-
359
- if(self_ === true) return true;
360
- if(self_ === false) return false;
361
- throw new Error('Not a bool: ' + JSON.stringify(self_));
362
-
522
+ if((!ff_core_Json.Json_isBool(self_))) {
523
+ throw (new Error(("Not a Bool: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
524
+ };
525
+ return self_
363
526
  }
364
527
 
365
528
  export function Json_grabArray(self_) {
366
-
367
- if(!Array.isArray(self_)) throw new Error('Not an array: ' + JSON.stringify(self_));
368
- return self_;
369
-
529
+ if((!ff_core_Json.Json_isArray(self_))) {
530
+ throw (new Error(("Not an array: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
531
+ };
532
+ return self_
370
533
  }
371
534
 
372
535
  export function Json_grabMap(self_) {
@@ -414,45 +577,31 @@ return ff_core_Option.Some(ff_core_Json.Json_grabMap(self_))
414
577
  }
415
578
 
416
579
  export function Json_isString(self_) {
417
-
418
- return typeof self_ === 'string';
419
-
580
+ return ((typeof self_) === "string")
420
581
  }
421
582
 
422
583
  export function Json_isInt(self_) {
423
-
424
- return Number.isSafeInteger(self_);
425
-
584
+ return Number.isSafeInteger(self_)
426
585
  }
427
586
 
428
587
  export function Json_isFloat(self_) {
429
-
430
- return typeof self_ === 'number';
431
-
588
+ return ((typeof self_) === "number")
432
589
  }
433
590
 
434
591
  export function Json_isBool(self_) {
435
-
436
- return typeof self_ === 'boolean';
437
-
592
+ return ((typeof self_) === "boolean")
438
593
  }
439
594
 
440
595
  export function Json_isArray(self_) {
441
-
442
- return Array.isArray(self_);
443
-
596
+ return Array.isArray(self_)
444
597
  }
445
598
 
446
599
  export function Json_isObject(self_) {
447
-
448
- return typeof self_ === 'object' && self_ !== null && !Array.isArray(self_);
449
-
600
+ return ((((typeof self_) === "object") && (!ff_core_JsValue.JsValue_isNull(self_))) && (!ff_core_JsValue.JsValue_isArray(self_)))
450
601
  }
451
602
 
452
603
  export function Json_isNull(self_) {
453
-
454
- return self_ === null;
455
-
604
+ return ff_core_JsValue.JsValue_isNull(self_)
456
605
  }
457
606
 
458
607
  export function Json_get(self_, key_) {
@@ -460,42 +609,41 @@ return ff_core_Json.Json_field(self_, key_)
460
609
  }
461
610
 
462
611
  export function Json_field(self_, key_) {
463
-
464
- return typeof self_ === 'object' && self_ !== null && !Array.isArray(self_) && Object.hasOwn(self_, key_)
465
- ? self_[key_] : null;
466
-
612
+ if((ff_core_Json.Json_isObject(self_) && ff_core_JsValue.JsValue_hasOwn(self_, key_))) {
613
+ return self_[key_]
614
+ } else {
615
+ return null
616
+ }
467
617
  }
468
618
 
469
619
  export function Json_index(self_, key_) {
470
-
471
- return Array.isArray(self_) ? self_[key_] ?? null : null;
472
-
620
+ if(ff_core_Json.Json_isArray(self_)) {
621
+ return ff_core_JsValue.JsValue_coalesce(self_[key_], null, ff_core_JsValue.ff_core_JsValue_IsJsValue$ff_core_JsValue_JsValue)
622
+ } else {
623
+ return null
624
+ }
473
625
  }
474
626
 
475
627
  export function Json_hasField(self_, key_) {
476
-
477
- return typeof self_ === 'object' && self_ !== null && !Array.isArray(self_) && Object.hasOwn(self_, key_);
478
-
628
+ return (ff_core_Json.Json_isObject(self_) && ff_core_JsValue.JsValue_hasOwn(self_, key_))
479
629
  }
480
630
 
481
631
  export function Json_getField(self_, key_) {
482
-
483
- return typeof self_ === 'object' && self_ !== null && !Array.isArray(self_) && Object.hasOwn(self_, key_)
484
- ? ff_core_Option.Some(self_[key_]) : ff_core_Option.None();
485
-
632
+ if(ff_core_Json.Json_hasField(self_, key_)) {
633
+ return ff_core_Option.Some(ff_core_Json.Json_get(self_, key_))
634
+ } else return ff_core_Option.None()
486
635
  }
487
636
 
488
637
  export function Json_getIndex(self_, key_) {
489
-
490
- return Array.isArray(self_) ? ff_core_Option.Some(self_[key_] ?? null) : ff_core_Option.None();
491
-
638
+ if((ff_core_Json.Json_isArray(self_) && (!ff_core_JsValue.JsValue_isUndefined(self_[key_])))) {
639
+ return ff_core_Option.Some(self_[key_])
640
+ } else return ff_core_Option.None()
492
641
  }
493
642
 
494
643
  export function Json_getFields(self_) {
495
-
496
- return typeof self_ === 'object' && self_ !== null && !Array.isArray(self_)
497
- ? ff_core_Option.Some(Object.keys(self_)) : ff_core_Option.None();
498
-
644
+ if(ff_core_Json.Json_isObject(self_)) {
645
+ return ff_core_Option.Some(Object.keys(self_))
646
+ } else return ff_core_Option.None()
499
647
  }
500
648
 
501
649
  export function Json_grabField(self_, key_) {
@@ -536,46 +684,74 @@ export function Json_each(self_, body_) {
536
684
  if((!ff_core_Json.Json_isObject(self_))) {
537
685
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
538
686
  };
539
- ff_core_Json.internalEach_(self_, body_)
687
+ ff_core_JsValue.JsValue_each(Object.entries(self_), ((p_) => {
688
+ body_(p_[0], p_[1])
689
+ }))
540
690
  }
541
691
 
542
692
  export function Json_eachWhile(self_, body_) {
543
693
  if((!ff_core_Json.Json_isObject(self_))) {
544
694
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
545
695
  };
546
- ff_core_Json.internalEachWhile_(self_, body_)
696
+ ff_core_JsValue.JsValue_eachWhile(Object.entries(self_), ((p_) => {
697
+ return body_(p_[0], p_[1])
698
+ }))
547
699
  }
548
700
 
549
701
  export async function Json_write$(self_, indentation_ = ff_core_Option.None(), $task) {
550
- throw new Error('Function Json_write is missing on this target in async context.');
702
+ return JSON.stringify(self_, null, ff_core_Js.orUndefined_(indentation_, ff_core_JsValue.ff_core_JsValue_IsJsValue$ff_core_String_String))
551
703
  }
552
704
 
553
705
  export async function Json_with$(self_, field_, value_, ff_core_Json_JsonLike$T, $task) {
554
- return ff_core_Json.internalWith_(self_, field_, ff_core_Json_JsonLike$T.toJson_(value_))
706
+ if((!ff_core_Json.Json_isObject(self_))) {
707
+ throw (new Error(("Not an object: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
708
+ };
709
+ return {...self_, [field_]: ff_core_Json_JsonLike$T.toJson_(value_)}
555
710
  }
556
711
 
557
712
  export async function Json_merge$(self_, that_, $task) {
558
- throw new Error('Function Json_merge is missing on this target in async context.');
713
+ if((!ff_core_Json.Json_isObject(self_))) {
714
+ throw (new Error(("Not an object: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
715
+ };
716
+ if((!ff_core_Json.Json_isObject(that_))) {
717
+ throw (new Error(("Not an object: " + ff_core_Json.Json_write(that_, ff_core_Option.None()))))
718
+ };
719
+ return ff_core_JsValue.JsValue_assign({}, self_, that_)
559
720
  }
560
721
 
561
722
  export async function Json_grabString$(self_, $task) {
562
- throw new Error('Function Json_grabString is missing on this target in async context.');
723
+ if((!ff_core_Json.Json_isString(self_))) {
724
+ throw (new Error(("Not a String: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
725
+ };
726
+ return self_
563
727
  }
564
728
 
565
729
  export async function Json_grabInt$(self_, $task) {
566
- throw new Error('Function Json_grabInt is missing on this target in async context.');
730
+ if((!ff_core_Json.Json_isInt(self_))) {
731
+ throw (new Error(("Not an Int: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
732
+ };
733
+ return self_
567
734
  }
568
735
 
569
736
  export async function Json_grabFloat$(self_, $task) {
570
- throw new Error('Function Json_grabFloat is missing on this target in async context.');
737
+ if((!ff_core_Json.Json_isFloat(self_))) {
738
+ throw (new Error(("Not a Float: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
739
+ };
740
+ return self_
571
741
  }
572
742
 
573
743
  export async function Json_grabBool$(self_, $task) {
574
- throw new Error('Function Json_grabBool is missing on this target in async context.');
744
+ if((!ff_core_Json.Json_isBool(self_))) {
745
+ throw (new Error(("Not a Bool: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
746
+ };
747
+ return self_
575
748
  }
576
749
 
577
750
  export async function Json_grabArray$(self_, $task) {
578
- throw new Error('Function Json_grabArray is missing on this target in async context.');
751
+ if((!ff_core_Json.Json_isArray(self_))) {
752
+ throw (new Error(("Not an array: " + ff_core_Json.Json_write(self_, ff_core_Option.None()))))
753
+ };
754
+ return self_
579
755
  }
580
756
 
581
757
  export async function Json_grabMap$(self_, $task) {
@@ -623,31 +799,31 @@ return ff_core_Option.Some(ff_core_Json.Json_grabMap(self_))
623
799
  }
624
800
 
625
801
  export async function Json_isString$(self_, $task) {
626
- throw new Error('Function Json_isString is missing on this target in async context.');
802
+ return ((typeof self_) === "string")
627
803
  }
628
804
 
629
805
  export async function Json_isInt$(self_, $task) {
630
- throw new Error('Function Json_isInt is missing on this target in async context.');
806
+ return Number.isSafeInteger(self_)
631
807
  }
632
808
 
633
809
  export async function Json_isFloat$(self_, $task) {
634
- throw new Error('Function Json_isFloat is missing on this target in async context.');
810
+ return ((typeof self_) === "number")
635
811
  }
636
812
 
637
813
  export async function Json_isBool$(self_, $task) {
638
- throw new Error('Function Json_isBool is missing on this target in async context.');
814
+ return ((typeof self_) === "boolean")
639
815
  }
640
816
 
641
817
  export async function Json_isArray$(self_, $task) {
642
- throw new Error('Function Json_isArray is missing on this target in async context.');
818
+ return Array.isArray(self_)
643
819
  }
644
820
 
645
821
  export async function Json_isObject$(self_, $task) {
646
- throw new Error('Function Json_isObject is missing on this target in async context.');
822
+ return ((((typeof self_) === "object") && (!ff_core_JsValue.JsValue_isNull(self_))) && (!ff_core_JsValue.JsValue_isArray(self_)))
647
823
  }
648
824
 
649
825
  export async function Json_isNull$(self_, $task) {
650
- throw new Error('Function Json_isNull is missing on this target in async context.');
826
+ return ff_core_JsValue.JsValue_isNull(self_)
651
827
  }
652
828
 
653
829
  export async function Json_get$(self_, key_, $task) {
@@ -655,27 +831,41 @@ return ff_core_Json.Json_field(self_, key_)
655
831
  }
656
832
 
657
833
  export async function Json_field$(self_, key_, $task) {
658
- throw new Error('Function Json_field is missing on this target in async context.');
834
+ if((ff_core_Json.Json_isObject(self_) && ff_core_JsValue.JsValue_hasOwn(self_, key_))) {
835
+ return self_[key_]
836
+ } else {
837
+ return null
838
+ }
659
839
  }
660
840
 
661
841
  export async function Json_index$(self_, key_, $task) {
662
- throw new Error('Function Json_index is missing on this target in async context.');
842
+ if(ff_core_Json.Json_isArray(self_)) {
843
+ return ff_core_JsValue.JsValue_coalesce(self_[key_], null, ff_core_JsValue.ff_core_JsValue_IsJsValue$ff_core_JsValue_JsValue)
844
+ } else {
845
+ return null
846
+ }
663
847
  }
664
848
 
665
849
  export async function Json_hasField$(self_, key_, $task) {
666
- throw new Error('Function Json_hasField is missing on this target in async context.');
850
+ return (ff_core_Json.Json_isObject(self_) && ff_core_JsValue.JsValue_hasOwn(self_, key_))
667
851
  }
668
852
 
669
853
  export async function Json_getField$(self_, key_, $task) {
670
- throw new Error('Function Json_getField is missing on this target in async context.');
854
+ if(ff_core_Json.Json_hasField(self_, key_)) {
855
+ return ff_core_Option.Some(ff_core_Json.Json_get(self_, key_))
856
+ } else return ff_core_Option.None()
671
857
  }
672
858
 
673
859
  export async function Json_getIndex$(self_, key_, $task) {
674
- throw new Error('Function Json_getIndex is missing on this target in async context.');
860
+ if((ff_core_Json.Json_isArray(self_) && (!ff_core_JsValue.JsValue_isUndefined(self_[key_])))) {
861
+ return ff_core_Option.Some(self_[key_])
862
+ } else return ff_core_Option.None()
675
863
  }
676
864
 
677
865
  export async function Json_getFields$(self_, $task) {
678
- throw new Error('Function Json_getFields is missing on this target in async context.');
866
+ if(ff_core_Json.Json_isObject(self_)) {
867
+ return ff_core_Option.Some(Object.keys(self_))
868
+ } else return ff_core_Option.None()
679
869
  }
680
870
 
681
871
  export async function Json_grabField$(self_, key_, $task) {
@@ -716,14 +906,18 @@ export async function Json_each$(self_, body_, $task) {
716
906
  if((!ff_core_Json.Json_isObject(self_))) {
717
907
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
718
908
  };
719
- (await ff_core_Json.internalEach_$(self_, body_, $task))
909
+ (await ff_core_JsValue.JsValue_each$(Object.entries(self_), (async (p_, $task) => {
910
+ (await body_(p_[0], p_[1], $task))
911
+ }), $task))
720
912
  }
721
913
 
722
914
  export async function Json_eachWhile$(self_, body_, $task) {
723
915
  if((!ff_core_Json.Json_isObject(self_))) {
724
916
  throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
725
917
  };
726
- (await ff_core_Json.internalEachWhile_$(self_, body_, $task))
918
+ (await ff_core_JsValue.JsValue_eachWhile$(Object.entries(self_), (async (p_, $task) => {
919
+ return (await body_(p_[0], p_[1], $task))
920
+ }), $task))
727
921
  }
728
922
 
729
923
  export const ff_core_Json_JsonLike$ff_core_Json_Json = {
@@ -843,7 +1037,7 @@ fromJson_(json_) {
843
1037
  return ff_core_Option.Option_flatMap(ff_core_Json.Json_getArray(json_), ((array_) => {
844
1038
  let convertible_ = true;
845
1039
  const result_ = ff_core_Array.new_();
846
- for(let for_i = 0, for_a = array_, for_l = for_a.length; for_i < for_l; for_i++) {
1040
+ for(let for_a = array_, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
847
1041
  const item_ = for_a[for_i];
848
1042
  do {
849
1043
  const _1 = ff_core_Json_JsonLike$T.fromJson_(item_);
@@ -851,10 +1045,9 @@ if(_1.None) {
851
1045
  convertible_ = false
852
1046
  break
853
1047
  }
854
- if(_1.Some) {
1048
+ {
855
1049
  const value_ = _1.value_;
856
1050
  result_.array.push(value_)
857
- break
858
1051
  }
859
1052
  } while(false);
860
1053
  if(!convertible_) break
@@ -873,7 +1066,7 @@ async fromJson_$(json_, $task) {
873
1066
  return ff_core_Option.Option_flatMap(ff_core_Json.Json_getArray(json_), ((array_) => {
874
1067
  let convertible_ = true;
875
1068
  const result_ = ff_core_Array.new_();
876
- for(let for_i = 0, for_a = array_, for_l = for_a.length; for_i < for_l; for_i++) {
1069
+ for(let for_a = array_, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
877
1070
  const item_ = for_a[for_i];
878
1071
  do {
879
1072
  const _1 = ff_core_Json_JsonLike$T.fromJson_(item_);
@@ -881,10 +1074,9 @@ if(_1.None) {
881
1074
  convertible_ = false
882
1075
  break
883
1076
  }
884
- if(_1.Some) {
1077
+ {
885
1078
  const value_ = _1.value_;
886
1079
  result_.array.push(value_)
887
- break
888
1080
  }
889
1081
  } while(false);
890
1082
  if(!convertible_) break
@@ -916,10 +1108,9 @@ if(_1.None) {
916
1108
  convertible_ = false
917
1109
  break
918
1110
  }
919
- if(_1.Some) {
1111
+ {
920
1112
  const v_ = _1.value_;
921
1113
  ff_core_StringMap.StringMap_set(map_, key_, v_)
922
- break
923
1114
  }
924
1115
  } while(false);
925
1116
  return convertible_
@@ -949,10 +1140,9 @@ if(_1.None) {
949
1140
  convertible_ = false
950
1141
  break
951
1142
  }
952
- if(_1.Some) {
1143
+ {
953
1144
  const v_ = _1.value_;
954
1145
  ff_core_StringMap.StringMap_set(map_, key_, v_)
955
- break
956
1146
  }
957
1147
  } while(false);
958
1148
  return convertible_