firefly-compiler 0.5.35 → 0.5.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.hintrc +4 -4
- package/.vscode/settings.json +4 -4
- package/bin/Release.ff +157 -154
- package/bin/firefly.mjs +1 -1
- package/compiler/Builder.ff +275 -277
- package/compiler/Compiler.ff +234 -233
- package/compiler/Dependencies.ff +186 -187
- package/compiler/DependencyLock.ff +17 -17
- package/compiler/Deriver.ff +23 -31
- package/compiler/Dictionaries.ff +1 -1
- package/compiler/Inference.ff +43 -20
- package/compiler/JsEmitter.ff +1437 -1282
- package/compiler/LspHook.ff +202 -202
- package/compiler/Main.ff +25 -24
- package/compiler/ModuleCache.ff +178 -178
- package/compiler/Parser.ff +36 -109
- package/compiler/Resolver.ff +5 -8
- package/compiler/Substitution.ff +1 -1
- package/compiler/Syntax.ff +1 -16
- package/compiler/Token.ff +9 -0
- package/compiler/Tokenizer.ff +4 -0
- package/compiler/Workspace.ff +88 -88
- package/core/.firefly/include/package.json +5 -5
- package/core/.firefly/package.ff +2 -2
- package/core/Any.ff +26 -30
- package/core/Array.ff +298 -265
- package/core/Atomic.ff +63 -64
- package/core/Box.ff +7 -7
- package/core/BrowserSystem.ff +40 -40
- package/core/Buffer.ff +185 -152
- package/core/BuildSystem.ff +156 -148
- package/core/Channel.ff +95 -92
- package/core/Char.ff +3 -2
- package/core/Core.ff +16 -23
- package/core/Crypto.ff +94 -96
- package/core/Equal.ff +41 -36
- package/core/Error.ff +15 -10
- package/core/FileHandle.ff +45 -37
- package/core/Float.ff +176 -200
- package/core/HttpClient.ff +142 -148
- package/core/Instant.ff +6 -8
- package/core/Int.ff +40 -24
- package/core/IntMap.ff +61 -39
- package/core/Js.ff +305 -0
- package/core/JsSystem.ff +135 -114
- package/core/JsValue.ff +303 -159
- package/core/Json.ff +423 -443
- package/core/List.ff +482 -486
- package/core/Lock.ff +108 -144
- package/core/Log.ff +25 -14
- package/core/NodeSystem.ff +198 -191
- package/core/Ordering.ff +160 -161
- package/core/Path.ff +377 -409
- package/core/Queue.ff +90 -0
- package/core/Random.ff +140 -134
- package/core/RbMap.ff +216 -216
- package/core/Serializable.ff +16 -13
- package/core/Show.ff +44 -43
- package/core/SourceLocation.ff +68 -68
- package/core/Stream.ff +1 -1
- package/core/String.ff +224 -202
- package/core/StringMap.ff +58 -36
- package/core/Task.ff +165 -149
- package/experimental/benchmarks/ListGrab.ff +23 -23
- package/experimental/benchmarks/ListGrab.java +55 -55
- package/experimental/benchmarks/Pyrotek45.ff +30 -30
- package/experimental/benchmarks/Pyrotek45.java +64 -64
- package/experimental/bidirectional/Bidi.ff +88 -88
- package/experimental/lines/Main.ff +40 -0
- package/experimental/random/Index.ff +53 -53
- package/experimental/random/Process.ff +120 -120
- package/experimental/random/RunLength.ff +65 -65
- package/experimental/random/Scrape.ff +51 -51
- package/experimental/random/Symbols.ff +73 -73
- package/experimental/random/Tensor.ff +52 -52
- package/experimental/random/Units.ff +36 -36
- package/experimental/s3/S3TestAuthorizationHeader.ff +39 -39
- package/experimental/s3/S3TestPut.ff +16 -16
- package/experimental/tests/TestJson.ff +26 -26
- package/firefly.sh +0 -0
- package/fireflysite/.firefly/package.ff +4 -4
- package/fireflysite/CommunityOverview.ff +20 -20
- package/fireflysite/CountingButtonDemo.ff +58 -58
- package/fireflysite/DocumentParser.ff +325 -331
- package/fireflysite/ExamplesOverview.ff +40 -40
- package/fireflysite/FrontPage.ff +344 -344
- package/fireflysite/GettingStarted.ff +45 -45
- package/fireflysite/Guide.ff +456 -456
- package/fireflysite/Main.ff +163 -152
- package/fireflysite/MatchingPasswordsDemo.ff +82 -82
- package/fireflysite/PackagesOverview.ff +49 -49
- package/fireflysite/PostgresqlDemo.ff +34 -34
- package/fireflysite/ReferenceAll.ff +18 -18
- package/fireflysite/ReferenceIntroduction.ff +11 -11
- package/fireflysite/Styles.ff +567 -567
- package/fireflysite/Test.ff +121 -62
- package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
- package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
- package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
- package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
- package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
- package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
- package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
- package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
- package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
- package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
- package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
- package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
- package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
- package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
- package/lsp/.firefly/package.ff +1 -1
- package/lsp/CompletionHandler.ff +827 -827
- package/lsp/Handler.ff +714 -714
- package/lsp/HoverHandler.ff +79 -79
- package/lsp/LanguageServer.ff +272 -272
- package/lsp/SignatureHelpHandler.ff +55 -55
- package/lsp/SymbolHandler.ff +181 -181
- package/lsp/TestReferences.ff +17 -17
- package/lsp/TestReferencesCase.ff +7 -7
- package/lsp/stderr.txt +1 -1
- package/lsp/stdout.txt +34 -34
- package/lux/.firefly/package.ff +1 -1
- package/lux/Css.ff +648 -648
- package/lux/CssTest.ff +48 -48
- package/lux/Lux.ff +608 -617
- package/lux/LuxEvent.ff +79 -116
- package/lux/Main.ff +123 -123
- package/lux/Main2.ff +143 -143
- package/lux/TestDry.ff +28 -28
- package/output/js/ff/compiler/Builder.mjs +72 -71
- package/output/js/ff/compiler/Compiler.mjs +19 -13
- package/output/js/ff/compiler/Dependencies.mjs +8 -7
- package/output/js/ff/compiler/DependencyLock.mjs +6 -4
- package/output/js/ff/compiler/Deriver.mjs +26 -24
- package/output/js/ff/compiler/Dictionaries.mjs +14 -18
- package/output/js/ff/compiler/Environment.mjs +6 -4
- package/output/js/ff/compiler/Inference.mjs +238 -164
- package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
- package/output/js/ff/compiler/JsImporter.mjs +20 -18
- package/output/js/ff/compiler/LspHook.mjs +12 -10
- package/output/js/ff/compiler/Main.mjs +61 -41
- package/output/js/ff/compiler/ModuleCache.mjs +10 -8
- package/output/js/ff/compiler/Parser.mjs +153 -669
- package/output/js/ff/compiler/Patterns.mjs +12 -10
- package/output/js/ff/compiler/Resolver.mjs +52 -78
- package/output/js/ff/compiler/Substitution.mjs +12 -16
- package/output/js/ff/compiler/Syntax.mjs +50 -341
- package/output/js/ff/compiler/Token.mjs +126 -4
- package/output/js/ff/compiler/Tokenizer.mjs +62 -52
- package/output/js/ff/compiler/Unification.mjs +74 -90
- package/output/js/ff/compiler/Wildcards.mjs +4 -2
- package/output/js/ff/compiler/Workspace.mjs +26 -20
- package/output/js/ff/core/Any.mjs +20 -20
- package/output/js/ff/core/Array.mjs +268 -175
- package/output/js/ff/core/AssetSystem.mjs +8 -6
- package/output/js/ff/core/Atomic.mjs +84 -52
- package/output/js/ff/core/Bool.mjs +6 -4
- package/output/js/ff/core/BrowserSystem.mjs +38 -29
- package/output/js/ff/core/Buffer.mjs +285 -133
- package/output/js/ff/core/BuildSystem.mjs +36 -56
- package/output/js/ff/core/Channel.mjs +250 -97
- package/output/js/ff/core/Char.mjs +5 -3
- package/output/js/ff/core/Core.mjs +28 -34
- package/output/js/ff/core/Crypto.mjs +30 -52
- package/output/js/ff/core/Duration.mjs +4 -2
- package/output/js/ff/core/Equal.mjs +14 -12
- package/output/js/ff/core/Error.mjs +17 -11
- package/output/js/ff/core/FileHandle.mjs +76 -38
- package/output/js/ff/core/Float.mjs +92 -160
- package/output/js/ff/core/HttpClient.mjs +208 -76
- package/output/js/ff/core/Instant.mjs +8 -10
- package/output/js/ff/core/Int.mjs +36 -26
- package/output/js/ff/core/IntMap.mjs +79 -33
- package/output/js/ff/core/Js.mjs +751 -0
- package/output/js/ff/core/JsSystem.mjs +54 -60
- package/output/js/ff/core/JsValue.mjs +294 -143
- package/output/js/ff/core/Json.mjs +443 -253
- package/output/js/ff/core/List.mjs +262 -214
- package/output/js/ff/core/Lock.mjs +156 -125
- package/output/js/ff/core/Log.mjs +20 -10
- package/output/js/ff/core/Map.mjs +10 -8
- package/output/js/ff/core/NodeSystem.mjs +189 -123
- package/output/js/ff/core/Nothing.mjs +4 -2
- package/output/js/ff/core/Option.mjs +40 -38
- package/output/js/ff/core/Ordering.mjs +26 -20
- package/output/js/ff/core/Pair.mjs +4 -2
- package/output/js/ff/core/Path.mjs +517 -315
- package/output/js/ff/core/Queue.mjs +306 -0
- package/output/js/ff/core/Random.mjs +141 -77
- package/output/js/ff/core/RbMap.mjs +36 -34
- package/output/js/ff/core/Serializable.mjs +44 -28
- package/output/js/ff/core/Set.mjs +6 -4
- package/output/js/ff/core/Show.mjs +8 -6
- package/output/js/ff/core/SourceLocation.mjs +4 -2
- package/output/js/ff/core/Stream.mjs +30 -50
- package/output/js/ff/core/String.mjs +263 -172
- package/output/js/ff/core/StringMap.mjs +77 -31
- package/output/js/ff/core/Task.mjs +91 -76
- package/output/js/ff/core/Try.mjs +20 -18
- package/output/js/ff/core/Unit.mjs +4 -2
- package/package.json +1 -1
- package/postgresql/Pg.ff +53 -59
- package/rpc/.firefly/package.ff +1 -1
- package/rpc/Rpc.ff +70 -70
- package/s3/.firefly/package.ff +1 -1
- package/s3/S3.ff +92 -94
- package/vscode/LICENSE.txt +21 -21
- package/vscode/Prepublish.ff +15 -15
- package/vscode/README.md +16 -16
- package/vscode/client/package-lock.json +544 -544
- package/vscode/client/package.json +22 -22
- package/vscode/client/src/extension.ts +104 -104
- package/vscode/icons/firefly-icon.svg +10 -10
- package/vscode/language-configuration.json +61 -61
- package/vscode/package-lock.json +3623 -3623
- package/vscode/package.json +1 -1
- package/vscode/snippets.json +241 -241
- package/vscode/syntaxes/firefly-markdown-injection.json +45 -45
- package/webserver/.firefly/include/package.json +5 -5
- package/webserver/.firefly/package.ff +2 -2
- package/webserver/WebServer.ff +647 -685
- package/websocket/.firefly/package.ff +1 -1
- package/websocket/WebSocket.ff +100 -131
- package/core/UnsafeJs.ff +0 -42
- package/output/js/ff/core/UnsafeJs.mjs +0 -191
|
@@ -42,6 +42,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
|
|
|
42
42
|
|
|
43
43
|
import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
|
|
44
44
|
|
|
45
|
+
import * as ff_core_Js from "../../ff/core/Js.mjs"
|
|
46
|
+
|
|
45
47
|
import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
|
|
46
48
|
|
|
47
49
|
import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
|
|
@@ -68,6 +70,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
|
|
|
68
70
|
|
|
69
71
|
import * as ff_core_Path from "../../ff/core/Path.mjs"
|
|
70
72
|
|
|
73
|
+
import * as ff_core_Queue from "../../ff/core/Queue.mjs"
|
|
74
|
+
|
|
71
75
|
import * as ff_core_Random from "../../ff/core/Random.mjs"
|
|
72
76
|
|
|
73
77
|
import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
|
|
@@ -90,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
|
-
|
|
94
|
-
|
|
95
|
-
// type Json
|
|
96
|
-
|
|
97
|
+
// newtype Json
|
|
97
98
|
|
|
98
99
|
|
|
99
100
|
|
|
100
101
|
export function read_(json_) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
142
|
+
const result_ = {};
|
|
143
|
+
body_(((k_, v_) => {
|
|
144
|
+
result_[k_] = v_
|
|
145
|
+
}));
|
|
146
|
+
return result_
|
|
164
147
|
}
|
|
165
148
|
|
|
166
|
-
export function
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
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
|
-
|
|
299
|
+
return json_
|
|
256
300
|
}
|
|
257
301
|
|
|
258
302
|
export async function int_$(json_, $task) {
|
|
259
|
-
|
|
303
|
+
return json_
|
|
260
304
|
}
|
|
261
305
|
|
|
262
306
|
export async function float_$(json_, $task) {
|
|
263
|
-
|
|
307
|
+
return json_
|
|
264
308
|
}
|
|
265
309
|
|
|
266
310
|
export async function bool_$(json_, $task) {
|
|
267
|
-
|
|
311
|
+
return json_
|
|
268
312
|
}
|
|
269
313
|
|
|
270
314
|
export async function null_$($task) {
|
|
271
|
-
|
|
315
|
+
return null
|
|
272
316
|
}
|
|
273
317
|
|
|
274
318
|
export async function array_$(json_, $task) {
|
|
275
|
-
|
|
319
|
+
return json_
|
|
276
320
|
}
|
|
277
321
|
|
|
278
322
|
export async function object_$($task) {
|
|
279
|
-
|
|
323
|
+
return {}
|
|
280
324
|
}
|
|
281
325
|
|
|
282
326
|
export async function new0_$($task) {
|
|
283
|
-
|
|
327
|
+
return {}
|
|
284
328
|
}
|
|
285
329
|
|
|
286
330
|
export async function fields_$(body_, $task) {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
|
295
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
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
|
-
|
|
339
|
-
|
|
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
|
-
|
|
346
|
-
|
|
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
|
-
|
|
353
|
-
|
|
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
|
-
|
|
360
|
-
|
|
361
|
-
|
|
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
|
-
|
|
368
|
-
|
|
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
|
-
|
|
465
|
-
|
|
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
|
-
|
|
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
|
-
|
|
484
|
-
|
|
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
|
-
|
|
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
|
-
|
|
497
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
802
|
+
return ((typeof self_) === "string")
|
|
627
803
|
}
|
|
628
804
|
|
|
629
805
|
export async function Json_isInt$(self_, $task) {
|
|
630
|
-
|
|
806
|
+
return Number.isSafeInteger(self_)
|
|
631
807
|
}
|
|
632
808
|
|
|
633
809
|
export async function Json_isFloat$(self_, $task) {
|
|
634
|
-
|
|
810
|
+
return ((typeof self_) === "number")
|
|
635
811
|
}
|
|
636
812
|
|
|
637
813
|
export async function Json_isBool$(self_, $task) {
|
|
638
|
-
|
|
814
|
+
return ((typeof self_) === "boolean")
|
|
639
815
|
}
|
|
640
816
|
|
|
641
817
|
export async function Json_isArray$(self_, $task) {
|
|
642
|
-
|
|
818
|
+
return Array.isArray(self_)
|
|
643
819
|
}
|
|
644
820
|
|
|
645
821
|
export async function Json_isObject$(self_, $task) {
|
|
646
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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_
|