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,8 +94,6 @@ 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
97
|
// type String
|
|
96
98
|
|
|
97
99
|
|
|
@@ -106,12 +108,10 @@ return self_.length
|
|
|
106
108
|
}
|
|
107
109
|
|
|
108
110
|
export function String_grab(self_, index_) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return self_.charCodeAt(index_)
|
|
114
|
-
|
|
111
|
+
if(((index_ < 0) || (index_ >= self_.length))) {
|
|
112
|
+
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)})
|
|
113
|
+
};
|
|
114
|
+
return self_.charCodeAt(index_)
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
export function String_replace(self_, needle_, replacement_) {
|
|
@@ -123,7 +123,7 @@ return self_.replace(needle_, replacement_)
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
export function String_reverse(self_) {
|
|
126
|
-
return
|
|
126
|
+
return self_.split("").reverse().join("")
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
export function String_repeat(self_, count_) {
|
|
@@ -151,19 +151,19 @@ return self_.toUpperCase()
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
export function String_dropWhile(self_, p_) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
154
|
+
let i_ = 0;
|
|
155
|
+
while(((i_ < self_.length) && p_(self_.charCodeAt(i_)))) {
|
|
156
|
+
i_ += 1
|
|
157
|
+
};
|
|
158
|
+
return self_.slice(i_)
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
export function String_takeWhile(self_, p_) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
162
|
+
let i_ = 0;
|
|
163
|
+
while(((i_ < self_.length) && p_(self_.charCodeAt(i_)))) {
|
|
164
|
+
i_ += 1
|
|
165
|
+
};
|
|
166
|
+
return self_.slice(0, i_)
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
export function String_slice(self_, from_, until_) {
|
|
@@ -175,20 +175,14 @@ return self_.split(String.fromCharCode(char_))
|
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
export function String_splitFirst(self_, char_) {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
: ff_core_Option.None()
|
|
183
|
-
|
|
178
|
+
const array_ = self_.split(String.fromCharCode(char_), 2);
|
|
179
|
+
if((array_.length === 2)) {
|
|
180
|
+
return ff_core_Option.Some(ff_core_Pair.Pair(array_[0], array_[1]))
|
|
181
|
+
} else return ff_core_Option.None()
|
|
184
182
|
}
|
|
185
183
|
|
|
186
184
|
export function String_lines(self_) {
|
|
187
|
-
|
|
188
|
-
return self_.split(
|
|
189
|
-
new RegExp("[" + String.fromCharCode(13) + "]?[" + String.fromCharCode(10) + "]", "g")
|
|
190
|
-
)
|
|
191
|
-
|
|
185
|
+
return self_.split((new RegExp((((("[" + String.fromCharCode(13)) + "]?[") + String.fromCharCode(10)) + "]"), "g")))
|
|
192
186
|
}
|
|
193
187
|
|
|
194
188
|
export function String_dropFirst(self_, count_ = 1) {
|
|
@@ -196,80 +190,57 @@ return self_.slice(count_)
|
|
|
196
190
|
}
|
|
197
191
|
|
|
198
192
|
export function String_dropLast(self_, count_ = 1) {
|
|
199
|
-
return self_.slice(0, self_.length - count_)
|
|
193
|
+
return self_.slice(0, (self_.length - count_))
|
|
200
194
|
}
|
|
201
195
|
|
|
202
196
|
export function String_getInt(self_) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
const c = self_.codePointAt(i)
|
|
209
|
-
if(c < 48 || c > 57) return ff_core_Option.None()
|
|
210
|
-
}
|
|
211
|
-
return ff_core_Option.Some(parseInt(self_, 10));
|
|
212
|
-
|
|
197
|
+
if(((self_.length > 0) && ff_core_String.String_all(self_, ((c_) => {
|
|
198
|
+
return ((48 <= c_) && (c_ <= 57))
|
|
199
|
+
})))) {
|
|
200
|
+
return ff_core_Option.Some(parseInt(self_, 10))
|
|
201
|
+
} else return ff_core_Option.None()
|
|
213
202
|
}
|
|
214
203
|
|
|
215
204
|
export function String_getFloat(self_) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
return ff_core_Option.Some(result);
|
|
222
|
-
|
|
205
|
+
const result_ = parseFloat(self_, 10);
|
|
206
|
+
if(isFinite(result_)) {
|
|
207
|
+
return ff_core_Option.Some(result_)
|
|
208
|
+
} else return ff_core_Option.None()
|
|
223
209
|
}
|
|
224
210
|
|
|
225
211
|
export function String_grabInt(self_) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
for(let i = 0; i < self_.length; i++) {
|
|
231
|
-
const c = self_.codePointAt(i)
|
|
232
|
-
if(c < 48 || c > 57) ff_core_Try.internalThrowGrabException_()
|
|
233
|
-
}
|
|
234
|
-
return parseInt(self_, 10);
|
|
235
|
-
|
|
212
|
+
return ff_core_Option.Option_else(ff_core_String.String_getInt(self_), (() => {
|
|
213
|
+
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)})
|
|
214
|
+
}))
|
|
236
215
|
}
|
|
237
216
|
|
|
238
217
|
export function String_grabFloat(self_) {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
ff_core_Try.internalThrowGrabException_()
|
|
243
|
-
}
|
|
244
|
-
return result;
|
|
245
|
-
|
|
218
|
+
return ff_core_Option.Option_else(ff_core_String.String_getFloat(self_), (() => {
|
|
219
|
+
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)})
|
|
220
|
+
}))
|
|
246
221
|
}
|
|
247
222
|
|
|
248
223
|
export function String_first(self_) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
: ff_core_Option.None()
|
|
253
|
-
|
|
224
|
+
if((self_.length > 0)) {
|
|
225
|
+
return ff_core_Option.Some(self_.charCodeAt(0))
|
|
226
|
+
} else return ff_core_Option.None()
|
|
254
227
|
}
|
|
255
228
|
|
|
256
229
|
export function String_last(self_) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
: ff_core_Option.None()
|
|
261
|
-
|
|
230
|
+
if((self_.length > 0)) {
|
|
231
|
+
return ff_core_Option.Some(self_.charCodeAt((self_.length - 1)))
|
|
232
|
+
} else return ff_core_Option.None()
|
|
262
233
|
}
|
|
263
234
|
|
|
264
235
|
export function String_grabFirst(self_) {
|
|
265
236
|
return ff_core_Option.Option_else(ff_core_String.String_first(self_), (() => {
|
|
266
|
-
|
|
237
|
+
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)})
|
|
267
238
|
}))
|
|
268
239
|
}
|
|
269
240
|
|
|
270
241
|
export function String_grabLast(self_) {
|
|
271
242
|
return ff_core_Option.Option_else(ff_core_String.String_last(self_), (() => {
|
|
272
|
-
|
|
243
|
+
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)})
|
|
273
244
|
}))
|
|
274
245
|
}
|
|
275
246
|
|
|
@@ -287,7 +258,7 @@ return self_.endsWith(prefix_)
|
|
|
287
258
|
|
|
288
259
|
export function String_removeFirst(self_, prefix_) {
|
|
289
260
|
if(ff_core_String.String_startsWith(self_, prefix_, 0)) {
|
|
290
|
-
return ff_core_Option.Some(ff_core_String.String_dropFirst(self_,
|
|
261
|
+
return ff_core_Option.Some(ff_core_String.String_dropFirst(self_, prefix_.length))
|
|
291
262
|
} else {
|
|
292
263
|
return ff_core_Option.None()
|
|
293
264
|
}
|
|
@@ -295,194 +266,261 @@ return ff_core_Option.None()
|
|
|
295
266
|
|
|
296
267
|
export function String_removeLast(self_, suffix_) {
|
|
297
268
|
if(ff_core_String.String_endsWith(self_, suffix_)) {
|
|
298
|
-
return ff_core_Option.Some(ff_core_String.String_dropLast(self_,
|
|
269
|
+
return ff_core_Option.Some(ff_core_String.String_dropLast(self_, suffix_.length))
|
|
299
270
|
} else {
|
|
300
271
|
return ff_core_Option.None()
|
|
301
272
|
}
|
|
302
273
|
}
|
|
303
274
|
|
|
304
275
|
export function String_padStart(self_, length_, padding_ = " ") {
|
|
305
|
-
|
|
306
|
-
return self_.padStart(length_, padding_);
|
|
307
|
-
|
|
276
|
+
return self_.padStart(length_, padding_)
|
|
308
277
|
}
|
|
309
278
|
|
|
310
279
|
export function String_padEnd(self_, length_, padding_ = " ") {
|
|
311
|
-
|
|
312
|
-
return self_.padEnd(length_, padding_);
|
|
313
|
-
|
|
280
|
+
return self_.padEnd(length_, padding_)
|
|
314
281
|
}
|
|
315
282
|
|
|
316
|
-
export function
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
283
|
+
export function String_each(self_, body_) {
|
|
284
|
+
let i_ = 0;
|
|
285
|
+
while((i_ < self_.length)) {
|
|
286
|
+
body_(self_.charCodeAt(i_));
|
|
287
|
+
i_ += 1
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export function String_eachWhile(self_, body_) {
|
|
292
|
+
let i_ = 0;
|
|
293
|
+
while((i_ < self_.length)) {
|
|
294
|
+
if(body_(self_.charCodeAt(i_))) {
|
|
295
|
+
i_ += 1
|
|
296
|
+
} else {
|
|
297
|
+
i_ = self_.length
|
|
298
|
+
}
|
|
299
|
+
}
|
|
323
300
|
}
|
|
324
301
|
|
|
325
302
|
export function String_all(self_, body_) {
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
303
|
+
let result_ = true;
|
|
304
|
+
ff_core_String.String_eachWhile(self_, ((x_) => {
|
|
305
|
+
result_ = body_(x_);
|
|
306
|
+
return result_
|
|
307
|
+
}));
|
|
308
|
+
return result_
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
export function String_any(self_, body_) {
|
|
312
|
+
let result_ = false;
|
|
313
|
+
ff_core_String.String_eachWhile(self_, ((x_) => {
|
|
314
|
+
result_ = body_(x_);
|
|
315
|
+
return (!result_)
|
|
316
|
+
}));
|
|
317
|
+
return result_
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export function String_find(self_, body_) {
|
|
321
|
+
let result_ = ff_core_Option.None();
|
|
322
|
+
ff_core_String.String_eachWhile(self_, ((x_) => {
|
|
323
|
+
if(body_(x_)) {
|
|
324
|
+
result_ = ff_core_Option.Some(x_);
|
|
325
|
+
return false
|
|
326
|
+
} else {
|
|
327
|
+
return true
|
|
328
|
+
}
|
|
329
|
+
}));
|
|
330
|
+
return result_
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export function String_indexOf(self_, needle_, position_ = 0) {
|
|
334
|
+
const index_ = self_.indexOf(needle_, position_);
|
|
335
|
+
if((index_ !== (-1))) {
|
|
336
|
+
return ff_core_Option.Some(index_)
|
|
337
|
+
} else return ff_core_Option.None()
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export function String_indexWhere(self_, body_) {
|
|
341
|
+
let i_ = (-1);
|
|
342
|
+
let result_ = false;
|
|
343
|
+
ff_core_String.String_eachWhile(self_, ((x_) => {
|
|
344
|
+
i_ += 1;
|
|
345
|
+
result_ = body_(x_);
|
|
346
|
+
return (!result_)
|
|
347
|
+
}));
|
|
348
|
+
if(result_) {
|
|
349
|
+
return ff_core_Option.Some(i_)
|
|
350
|
+
} else return ff_core_Option.None()
|
|
332
351
|
}
|
|
333
352
|
|
|
334
353
|
export function String_filter(self_, body_) {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
354
|
+
const result_ = ff_core_Array.new_();
|
|
355
|
+
ff_core_String.String_each(self_, ((x_) => {
|
|
356
|
+
if(body_(x_)) {
|
|
357
|
+
result_.array.push(ff_core_Char.Char_toString(x_))
|
|
358
|
+
}
|
|
359
|
+
}));
|
|
360
|
+
return ff_core_Array.Array_join(result_, "")
|
|
342
361
|
}
|
|
343
362
|
|
|
344
363
|
export function String_toBuffer(self_) {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
return new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength)
|
|
348
|
-
|
|
364
|
+
const encoded_ = (new TextEncoder()).encode(self_);
|
|
365
|
+
return (new DataView(encoded_.buffer, encoded_.byteOffset, encoded_.byteLength))
|
|
349
366
|
}
|
|
350
367
|
|
|
351
368
|
export async function String_size$(self_, $task) {
|
|
352
|
-
|
|
369
|
+
return self_.length
|
|
353
370
|
}
|
|
354
371
|
|
|
355
372
|
export async function String_grab$(self_, index_, $task) {
|
|
356
|
-
|
|
373
|
+
if(((index_ < 0) || (index_ >= self_.length))) {
|
|
374
|
+
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)})
|
|
375
|
+
};
|
|
376
|
+
return self_.charCodeAt(index_)
|
|
357
377
|
}
|
|
358
378
|
|
|
359
379
|
export async function String_replace$(self_, needle_, replacement_, $task) {
|
|
360
|
-
|
|
380
|
+
return self_.replaceAll(needle_, replacement_)
|
|
361
381
|
}
|
|
362
382
|
|
|
363
383
|
export async function String_replaceFirst$(self_, needle_, replacement_, $task) {
|
|
364
|
-
|
|
384
|
+
return self_.replace(needle_, replacement_)
|
|
365
385
|
}
|
|
366
386
|
|
|
367
387
|
export async function String_reverse$(self_, $task) {
|
|
368
|
-
|
|
388
|
+
return self_.split("").reverse().join("")
|
|
369
389
|
}
|
|
370
390
|
|
|
371
391
|
export async function String_repeat$(self_, count_, $task) {
|
|
372
|
-
|
|
392
|
+
return self_.repeat(count_)
|
|
373
393
|
}
|
|
374
394
|
|
|
375
395
|
export async function String_trim$(self_, $task) {
|
|
376
|
-
|
|
396
|
+
return self_.trim()
|
|
377
397
|
}
|
|
378
398
|
|
|
379
399
|
export async function String_trimStart$(self_, $task) {
|
|
380
|
-
|
|
400
|
+
return self_.trimStart()
|
|
381
401
|
}
|
|
382
402
|
|
|
383
403
|
export async function String_trimEnd$(self_, $task) {
|
|
384
|
-
|
|
404
|
+
return self_.trimEnd()
|
|
385
405
|
}
|
|
386
406
|
|
|
387
407
|
export async function String_lower$(self_, $task) {
|
|
388
|
-
|
|
408
|
+
return self_.toLowerCase()
|
|
389
409
|
}
|
|
390
410
|
|
|
391
411
|
export async function String_upper$(self_, $task) {
|
|
392
|
-
|
|
412
|
+
return self_.toUpperCase()
|
|
393
413
|
}
|
|
394
414
|
|
|
395
415
|
export async function String_dropWhile$(self_, p_, $task) {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
416
|
+
let i_ = 0;
|
|
417
|
+
while(((i_ < self_.length) && (await p_(self_.charCodeAt(i_), $task)))) {
|
|
418
|
+
i_ += 1
|
|
419
|
+
};
|
|
420
|
+
return self_.slice(i_)
|
|
401
421
|
}
|
|
402
422
|
|
|
403
423
|
export async function String_takeWhile$(self_, p_, $task) {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
424
|
+
let i_ = 0;
|
|
425
|
+
while(((i_ < self_.length) && (await p_(self_.charCodeAt(i_), $task)))) {
|
|
426
|
+
i_ += 1
|
|
427
|
+
};
|
|
428
|
+
return self_.slice(0, i_)
|
|
409
429
|
}
|
|
410
430
|
|
|
411
431
|
export async function String_slice$(self_, from_, until_, $task) {
|
|
412
|
-
|
|
432
|
+
return self_.slice(from_, until_)
|
|
413
433
|
}
|
|
414
434
|
|
|
415
435
|
export async function String_split$(self_, char_, $task) {
|
|
416
|
-
|
|
436
|
+
return self_.split(String.fromCharCode(char_))
|
|
417
437
|
}
|
|
418
438
|
|
|
419
439
|
export async function String_splitFirst$(self_, char_, $task) {
|
|
420
|
-
|
|
440
|
+
const array_ = self_.split(String.fromCharCode(char_), 2);
|
|
441
|
+
if((array_.length === 2)) {
|
|
442
|
+
return ff_core_Option.Some(ff_core_Pair.Pair(array_[0], array_[1]))
|
|
443
|
+
} else return ff_core_Option.None()
|
|
421
444
|
}
|
|
422
445
|
|
|
423
446
|
export async function String_lines$(self_, $task) {
|
|
424
|
-
|
|
447
|
+
return self_.split((new RegExp((((("[" + String.fromCharCode(13)) + "]?[") + String.fromCharCode(10)) + "]"), "g")))
|
|
425
448
|
}
|
|
426
449
|
|
|
427
450
|
export async function String_dropFirst$(self_, count_ = 1, $task) {
|
|
428
|
-
|
|
451
|
+
return self_.slice(count_)
|
|
429
452
|
}
|
|
430
453
|
|
|
431
454
|
export async function String_dropLast$(self_, count_ = 1, $task) {
|
|
432
|
-
|
|
455
|
+
return self_.slice(0, (self_.length - count_))
|
|
433
456
|
}
|
|
434
457
|
|
|
435
458
|
export async function String_getInt$(self_, $task) {
|
|
436
|
-
|
|
459
|
+
if(((self_.length > 0) && ff_core_String.String_all(self_, ((c_) => {
|
|
460
|
+
return ((48 <= c_) && (c_ <= 57))
|
|
461
|
+
})))) {
|
|
462
|
+
return ff_core_Option.Some(parseInt(self_, 10))
|
|
463
|
+
} else return ff_core_Option.None()
|
|
437
464
|
}
|
|
438
465
|
|
|
439
466
|
export async function String_getFloat$(self_, $task) {
|
|
440
|
-
|
|
467
|
+
const result_ = parseFloat(self_, 10);
|
|
468
|
+
if(isFinite(result_)) {
|
|
469
|
+
return ff_core_Option.Some(result_)
|
|
470
|
+
} else return ff_core_Option.None()
|
|
441
471
|
}
|
|
442
472
|
|
|
443
473
|
export async function String_grabInt$(self_, $task) {
|
|
444
|
-
|
|
474
|
+
return ff_core_Option.Option_else(ff_core_String.String_getInt(self_), (() => {
|
|
475
|
+
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)})
|
|
476
|
+
}))
|
|
445
477
|
}
|
|
446
478
|
|
|
447
479
|
export async function String_grabFloat$(self_, $task) {
|
|
448
|
-
|
|
480
|
+
return ff_core_Option.Option_else(ff_core_String.String_getFloat(self_), (() => {
|
|
481
|
+
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)})
|
|
482
|
+
}))
|
|
449
483
|
}
|
|
450
484
|
|
|
451
485
|
export async function String_first$(self_, $task) {
|
|
452
|
-
|
|
486
|
+
if((self_.length > 0)) {
|
|
487
|
+
return ff_core_Option.Some(self_.charCodeAt(0))
|
|
488
|
+
} else return ff_core_Option.None()
|
|
453
489
|
}
|
|
454
490
|
|
|
455
491
|
export async function String_last$(self_, $task) {
|
|
456
|
-
|
|
492
|
+
if((self_.length > 0)) {
|
|
493
|
+
return ff_core_Option.Some(self_.charCodeAt((self_.length - 1)))
|
|
494
|
+
} else return ff_core_Option.None()
|
|
457
495
|
}
|
|
458
496
|
|
|
459
497
|
export async function String_grabFirst$(self_, $task) {
|
|
460
498
|
return ff_core_Option.Option_else(ff_core_String.String_first(self_), (() => {
|
|
461
|
-
|
|
499
|
+
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)})
|
|
462
500
|
}))
|
|
463
501
|
}
|
|
464
502
|
|
|
465
503
|
export async function String_grabLast$(self_, $task) {
|
|
466
504
|
return ff_core_Option.Option_else(ff_core_String.String_last(self_), (() => {
|
|
467
|
-
|
|
505
|
+
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)})
|
|
468
506
|
}))
|
|
469
507
|
}
|
|
470
508
|
|
|
471
509
|
export async function String_contains$(self_, substring_, $task) {
|
|
472
|
-
|
|
510
|
+
return self_.includes(substring_)
|
|
473
511
|
}
|
|
474
512
|
|
|
475
513
|
export async function String_startsWith$(self_, prefix_, offset_ = 0, $task) {
|
|
476
|
-
|
|
514
|
+
return self_.startsWith(prefix_, offset_)
|
|
477
515
|
}
|
|
478
516
|
|
|
479
517
|
export async function String_endsWith$(self_, prefix_, $task) {
|
|
480
|
-
|
|
518
|
+
return self_.endsWith(prefix_)
|
|
481
519
|
}
|
|
482
520
|
|
|
483
521
|
export async function String_removeFirst$(self_, prefix_, $task) {
|
|
484
522
|
if(ff_core_String.String_startsWith(self_, prefix_, 0)) {
|
|
485
|
-
return ff_core_Option.Some(ff_core_String.String_dropFirst(self_,
|
|
523
|
+
return ff_core_Option.Some(ff_core_String.String_dropFirst(self_, prefix_.length))
|
|
486
524
|
} else {
|
|
487
525
|
return ff_core_Option.None()
|
|
488
526
|
}
|
|
@@ -490,50 +528,103 @@ return ff_core_Option.None()
|
|
|
490
528
|
|
|
491
529
|
export async function String_removeLast$(self_, suffix_, $task) {
|
|
492
530
|
if(ff_core_String.String_endsWith(self_, suffix_)) {
|
|
493
|
-
return ff_core_Option.Some(ff_core_String.String_dropLast(self_,
|
|
531
|
+
return ff_core_Option.Some(ff_core_String.String_dropLast(self_, suffix_.length))
|
|
494
532
|
} else {
|
|
495
533
|
return ff_core_Option.None()
|
|
496
534
|
}
|
|
497
535
|
}
|
|
498
536
|
|
|
499
537
|
export async function String_padStart$(self_, length_, padding_ = " ", $task) {
|
|
500
|
-
|
|
538
|
+
return self_.padStart(length_, padding_)
|
|
501
539
|
}
|
|
502
540
|
|
|
503
541
|
export async function String_padEnd$(self_, length_, padding_ = " ", $task) {
|
|
504
|
-
|
|
542
|
+
return self_.padEnd(length_, padding_)
|
|
505
543
|
}
|
|
506
544
|
|
|
507
|
-
export async function
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
545
|
+
export async function String_each$(self_, body_, $task) {
|
|
546
|
+
let i_ = 0;
|
|
547
|
+
while((i_ < self_.length)) {
|
|
548
|
+
(await body_(self_.charCodeAt(i_), $task));
|
|
549
|
+
i_ += 1
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
export async function String_eachWhile$(self_, body_, $task) {
|
|
554
|
+
let i_ = 0;
|
|
555
|
+
while((i_ < self_.length)) {
|
|
556
|
+
if((await body_(self_.charCodeAt(i_), $task))) {
|
|
557
|
+
i_ += 1
|
|
558
|
+
} else {
|
|
559
|
+
i_ = self_.length
|
|
560
|
+
}
|
|
561
|
+
}
|
|
514
562
|
}
|
|
515
563
|
|
|
516
564
|
export async function String_all$(self_, body_, $task) {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
565
|
+
let result_ = true;
|
|
566
|
+
(await ff_core_String.String_eachWhile$(self_, (async (x_, $task) => {
|
|
567
|
+
result_ = (await body_(x_, $task));
|
|
568
|
+
return result_
|
|
569
|
+
}), $task));
|
|
570
|
+
return result_
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
export async function String_any$(self_, body_, $task) {
|
|
574
|
+
let result_ = false;
|
|
575
|
+
(await ff_core_String.String_eachWhile$(self_, (async (x_, $task) => {
|
|
576
|
+
result_ = (await body_(x_, $task));
|
|
577
|
+
return (!result_)
|
|
578
|
+
}), $task));
|
|
579
|
+
return result_
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
export async function String_find$(self_, body_, $task) {
|
|
583
|
+
let result_ = ff_core_Option.None();
|
|
584
|
+
(await ff_core_String.String_eachWhile$(self_, (async (x_, $task) => {
|
|
585
|
+
if((await body_(x_, $task))) {
|
|
586
|
+
result_ = ff_core_Option.Some(x_);
|
|
587
|
+
return false
|
|
588
|
+
} else {
|
|
589
|
+
return true
|
|
590
|
+
}
|
|
591
|
+
}), $task));
|
|
592
|
+
return result_
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
export async function String_indexOf$(self_, needle_, position_ = 0, $task) {
|
|
596
|
+
const index_ = self_.indexOf(needle_, position_);
|
|
597
|
+
if((index_ !== (-1))) {
|
|
598
|
+
return ff_core_Option.Some(index_)
|
|
599
|
+
} else return ff_core_Option.None()
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
export async function String_indexWhere$(self_, body_, $task) {
|
|
603
|
+
let i_ = (-1);
|
|
604
|
+
let result_ = false;
|
|
605
|
+
(await ff_core_String.String_eachWhile$(self_, (async (x_, $task) => {
|
|
606
|
+
i_ += 1;
|
|
607
|
+
result_ = (await body_(x_, $task));
|
|
608
|
+
return (!result_)
|
|
609
|
+
}), $task));
|
|
610
|
+
if(result_) {
|
|
611
|
+
return ff_core_Option.Some(i_)
|
|
612
|
+
} else return ff_core_Option.None()
|
|
523
613
|
}
|
|
524
614
|
|
|
525
615
|
export async function String_filter$(self_, body_, $task) {
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
616
|
+
const result_ = ff_core_Array.new_();
|
|
617
|
+
(await ff_core_String.String_each$(self_, (async (x_, $task) => {
|
|
618
|
+
if((await body_(x_, $task))) {
|
|
619
|
+
result_.array.push(ff_core_Char.Char_toString(x_))
|
|
620
|
+
}
|
|
621
|
+
}), $task));
|
|
622
|
+
return ff_core_Array.Array_join(result_, "")
|
|
533
623
|
}
|
|
534
624
|
|
|
535
625
|
export async function String_toBuffer$(self_, $task) {
|
|
536
|
-
|
|
626
|
+
const encoded_ = (new TextEncoder()).encode(self_);
|
|
627
|
+
return (new DataView(encoded_.buffer, encoded_.byteOffset, encoded_.byteLength))
|
|
537
628
|
}
|
|
538
629
|
|
|
539
630
|
export const ff_core_Any_HasAnyTag$ff_core_String_String = {
|