firefly-compiler 0.4.34 → 0.4.35
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/bin/Release.ff +47 -4
- package/compiler/Compiler.ff +1 -0
- package/core/Digest.ff +51 -0
- package/core/NodeSystem.ff +1 -1
- package/core/Pair.ff +9 -0
- package/experimental/s3/S3.ff +126 -0
- package/output/js/ff/compiler/Builder.mjs +2 -0
- package/output/js/ff/compiler/Compiler.mjs +3 -1
- package/output/js/ff/compiler/Dependencies.mjs +2 -0
- package/output/js/ff/compiler/DependencyLock.mjs +2 -0
- package/output/js/ff/compiler/Deriver.mjs +2 -0
- package/output/js/ff/compiler/Dictionaries.mjs +2 -0
- package/output/js/ff/compiler/Environment.mjs +2 -0
- package/output/js/ff/compiler/Inference.mjs +2 -0
- package/output/js/ff/compiler/JsEmitter.mjs +2 -0
- package/output/js/ff/compiler/JsImporter.mjs +2 -0
- package/output/js/ff/compiler/LspHook.mjs +2 -0
- package/output/js/ff/compiler/Main.mjs +2 -0
- package/output/js/ff/compiler/ModuleCache.mjs +2 -0
- package/output/js/ff/compiler/Parser.mjs +2 -0
- package/output/js/ff/compiler/Patterns.mjs +2 -0
- package/output/js/ff/compiler/Resolver.mjs +2 -0
- package/output/js/ff/compiler/Substitution.mjs +2 -0
- package/output/js/ff/compiler/Syntax.mjs +2 -0
- package/output/js/ff/compiler/Token.mjs +2 -0
- package/output/js/ff/compiler/Tokenizer.mjs +2 -0
- package/output/js/ff/compiler/Unification.mjs +2 -0
- package/output/js/ff/compiler/Wildcards.mjs +2 -0
- package/output/js/ff/compiler/Workspace.mjs +2 -0
- package/output/js/ff/core/Any.mjs +2 -0
- package/output/js/ff/core/Array.mjs +2 -0
- package/output/js/ff/core/AssetSystem.mjs +2 -0
- package/output/js/ff/core/Atomic.mjs +2 -0
- package/output/js/ff/core/Bool.mjs +2 -0
- package/output/js/ff/core/BrowserSystem.mjs +2 -0
- package/output/js/ff/core/Buffer.mjs +2 -0
- package/output/js/ff/core/BuildSystem.mjs +2 -0
- package/output/js/ff/core/Channel.mjs +2 -0
- package/output/js/ff/core/Char.mjs +2 -0
- package/output/js/ff/core/Core.mjs +2 -0
- package/output/js/ff/core/Digest.mjs +190 -0
- package/output/js/ff/core/Duration.mjs +2 -0
- package/output/js/ff/core/Equal.mjs +2 -0
- package/output/js/ff/core/Error.mjs +2 -0
- package/output/js/ff/core/FileHandle.mjs +2 -0
- package/output/js/ff/core/Float.mjs +2 -0
- package/output/js/ff/core/HttpClient.mjs +2 -0
- package/output/js/ff/core/Instant.mjs +2 -0
- package/output/js/ff/core/Int.mjs +2 -0
- package/output/js/ff/core/IntMap.mjs +2 -0
- package/output/js/ff/core/JsSystem.mjs +2 -0
- package/output/js/ff/core/JsValue.mjs +2 -0
- package/output/js/ff/core/Json.mjs +2 -0
- package/output/js/ff/core/List.mjs +2 -0
- package/output/js/ff/core/Lock.mjs +2 -0
- package/output/js/ff/core/Log.mjs +2 -0
- package/output/js/ff/core/Map.mjs +2 -0
- package/output/js/ff/core/NodeSystem.mjs +3 -1
- package/output/js/ff/core/Nothing.mjs +2 -0
- package/output/js/ff/core/Option.mjs +2 -0
- package/output/js/ff/core/Ordering.mjs +2 -0
- package/output/js/ff/core/Pair.mjs +10 -0
- package/output/js/ff/core/Path.mjs +2 -0
- package/output/js/ff/core/Random.mjs +2 -0
- package/output/js/ff/core/RbMap.mjs +2 -0
- package/output/js/ff/core/Serializable.mjs +2 -0
- package/output/js/ff/core/Set.mjs +2 -0
- package/output/js/ff/core/Show.mjs +2 -0
- package/output/js/ff/core/SourceLocation.mjs +2 -0
- package/output/js/ff/core/Stream.mjs +2 -0
- package/output/js/ff/core/String.mjs +2 -0
- package/output/js/ff/core/StringMap.mjs +2 -0
- package/output/js/ff/core/Task.mjs +2 -0
- package/output/js/ff/core/Try.mjs +2 -0
- package/output/js/ff/core/Unit.mjs +2 -0
- package/package.json +1 -1
- package/vscode/package.json +1 -1
package/bin/Release.ff
CHANGED
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
nodeMain(system: NodeSystem) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
run(system, "node", ["output/js/ff/compiler/Main.mjs", "bootstrap"], system.path(".."))
|
|
3
|
+
run(system, "node", ["output/js/ff/compiler/Main.mjs", "bootstrap"], system.path(".."))
|
|
4
|
+
run(system, "node", ["output/js/ff/compiler/Main.mjs", "bootstrap"], system.path(".."))
|
|
5
|
+
bumpMinorVersion(system, system.path("../package.json"))
|
|
6
|
+
bumpMinorVersion(system, system.path("../vscode/package.json"))
|
|
7
|
+
run(system, "npm", ["publish"], system.path(".."))
|
|
8
|
+
run(system, "vsce", ["publish"], system.path("../vscode"))
|
|
9
|
+
// tar gz core etc. and upload to s3
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
run(system: NodeSystem, command: String, arguments: List[String], workingDirectory: Path) {
|
|
13
|
+
system.writeLine("")
|
|
14
|
+
system.writeLine(command + " " + arguments.join(" "))
|
|
15
|
+
let out = system.execute(command, arguments, workingDirectory = Some(workingDirectory))
|
|
16
|
+
system.writeBuffer(out.standardOut)
|
|
17
|
+
system.writeErrorBuffer(out.standardError)
|
|
18
|
+
if(out.exitCode != 0) {
|
|
19
|
+
system.writeErrorLine("Exit code: " + out.exitCode)
|
|
20
|
+
system.exit(1)
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
bumpMinorVersion(system: NodeSystem, packageJsonPath: Path) {
|
|
25
|
+
let prefix = " \"version\": \""
|
|
26
|
+
mutable bumps = 0
|
|
27
|
+
system.writeLine("")
|
|
28
|
+
system.writeLine("Bumping version in " + packageJsonPath.absolute())
|
|
29
|
+
let newContent = packageJsonPath.readText().lines().map {
|
|
30
|
+
| line {
|
|
31
|
+
line.removeFirst(prefix).flatMap {_.removeLast("\",")} | Some(v)
|
|
32
|
+
} {
|
|
33
|
+
v.split('.') | [major, minor, patch]
|
|
34
|
+
} {
|
|
35
|
+
patch.getInt() | Some(p)
|
|
36
|
+
} =>
|
|
37
|
+
bumps += 1
|
|
38
|
+
let newVersion = major + "." + minor + "." + (p + 1)
|
|
39
|
+
system.writeLine("Will bump version: " + v + " to " + newVersion)
|
|
40
|
+
prefix + newVersion + "\","
|
|
41
|
+
| line =>
|
|
42
|
+
line
|
|
43
|
+
}.join("\n")
|
|
44
|
+
if(bumps != 1) {
|
|
45
|
+
system.writeErrorLine("Failed to bump version.")
|
|
46
|
+
system.exit(1)
|
|
47
|
+
}
|
|
48
|
+
packageJsonPath.writeText(newContent)
|
|
6
49
|
}
|
package/compiler/Compiler.ff
CHANGED
package/core/Digest.ff
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
class Digest {}
|
|
2
|
+
|
|
3
|
+
hmacSha256(key: Buffer, buffer: Buffer = Buffer.new(0)): Digest {
|
|
4
|
+
new("sha256", Some(key), buffer)
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
sha256(buffer: Buffer = Buffer.new(0)): Digest {
|
|
8
|
+
new("sha256", None, buffer)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
new(algorithm: String, hmacKey: Option[Buffer] = None, buffer: Buffer = Buffer.new(0)): Digest
|
|
12
|
+
target node sync """
|
|
13
|
+
import * as crypto from 'node:crypto'
|
|
14
|
+
const digest = typeof hmacKey_.value_ !== 'undefined'
|
|
15
|
+
? crypto.createHmac(algorithm_, hmacKey_.value_)
|
|
16
|
+
: crypto.createHash(algorithm_);
|
|
17
|
+
if(buffer_.byteLength > 0) digest.update(buffer_);
|
|
18
|
+
return digest;
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
extend self: Digest {
|
|
22
|
+
|
|
23
|
+
writeText(text: String, encoding: String = "utf8"): Unit
|
|
24
|
+
target node sync """
|
|
25
|
+
self_.update(text_, encoding_);
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
writeBuffer(buffer: Buffer): Unit
|
|
29
|
+
target node sync """
|
|
30
|
+
self_.update(buffer_);
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
writeStream(stream: Stream[Buffer]): Unit {
|
|
34
|
+
stream.each {self.writeBuffer(_)}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
toBuffer(): Buffer
|
|
38
|
+
target node sync """
|
|
39
|
+
const b = self_.digest();
|
|
40
|
+
return new DataView(b.buffer, b.byteOffset, b.length);
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
toHex(): String {
|
|
44
|
+
self.toBuffer().toHex()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
toBase64(): String {
|
|
48
|
+
self.toBuffer().toBase64()
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
}
|
package/core/NodeSystem.ff
CHANGED
|
@@ -156,7 +156,7 @@ extend self: NodeSystem {
|
|
|
156
156
|
const o = Buffer.concat(out);
|
|
157
157
|
const e = Buffer.concat(err);
|
|
158
158
|
resolve(ProcessResult(
|
|
159
|
-
|
|
159
|
+
code,
|
|
160
160
|
new DataView(o.buffer, o.byteOffset, o.byteLength),
|
|
161
161
|
new DataView(e.buffer, e.byteOffset, e.byteLength),
|
|
162
162
|
));
|
package/core/Pair.ff
CHANGED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import Digest from ff:core
|
|
2
|
+
|
|
3
|
+
nodeMain(system: NodeSystem) {
|
|
4
|
+
system.writeLine(Digest.sha256("".toBuffer()).toHex())
|
|
5
|
+
system.writeLine(Digest.hmacSha256("key".toBuffer(), "The quick brown fox jumps over the lazy dog".toBuffer()).toHex())
|
|
6
|
+
|
|
7
|
+
// Trying to reproduce the result from an example here
|
|
8
|
+
// https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html
|
|
9
|
+
let expectedHeader = "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd"
|
|
10
|
+
let amzDate = "20130524T000000Z" // TODO
|
|
11
|
+
let headerDate = "Fri, 24 May 2013 00:00:00 GMT" // TODO
|
|
12
|
+
let bucket = "examplebucket"
|
|
13
|
+
let body = "Welcome to Amazon S3.".toBuffer()
|
|
14
|
+
let actualHeader = makeS3AuthorizationHeader(
|
|
15
|
+
system = system
|
|
16
|
+
accessKeyId = "AKIAIOSFODNN7EXAMPLE"
|
|
17
|
+
secretAccessKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
|
|
18
|
+
region = "us-east-1"
|
|
19
|
+
bucket = bucket
|
|
20
|
+
objectKey = "test%24file.text" // TODO URI encoded "test$file.text"
|
|
21
|
+
body = body
|
|
22
|
+
canonicalHeaders = [
|
|
23
|
+
Pair("date", headerDate)
|
|
24
|
+
Pair("host", bucket + ".s3.amazonaws.com")
|
|
25
|
+
Pair("x-amz-date", amzDate)
|
|
26
|
+
Pair("x-amz-content-sha256", Digest.sha256(body).toHex())
|
|
27
|
+
Pair("x-amz-storage-class", "REDUCED_REDUNDANCY")
|
|
28
|
+
]
|
|
29
|
+
amzDate = amzDate
|
|
30
|
+
)
|
|
31
|
+
system.writeLine("")
|
|
32
|
+
system.writeLine("actual : " + actualHeader)
|
|
33
|
+
system.writeLine("")
|
|
34
|
+
system.writeLine("expected: " + expectedHeader)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
/*put(system,
|
|
39
|
+
accessKeyId = ""
|
|
40
|
+
secretAccessKey = ""
|
|
41
|
+
region = "eu-central-1"
|
|
42
|
+
bucket = "firefly-site"
|
|
43
|
+
objectKey = "tmp/test2"
|
|
44
|
+
"Hello S3".toBuffer()
|
|
45
|
+
)*/
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
put(
|
|
49
|
+
system: NodeSystem
|
|
50
|
+
accessKeyId: String
|
|
51
|
+
secretAccessKey: String
|
|
52
|
+
region: String
|
|
53
|
+
bucket: String
|
|
54
|
+
objectKey: String
|
|
55
|
+
body: Buffer
|
|
56
|
+
): Unit {
|
|
57
|
+
let amzDate = "20240523T122636Z" // TODO
|
|
58
|
+
let headerDate = "Thu May 23 2024 12:20:09 GMT" // TODO
|
|
59
|
+
let contentHash = Digest.sha256(body).toHex()
|
|
60
|
+
let host = bucket + ".s3.amazonaws.com"
|
|
61
|
+
let canonicalHeaders = [
|
|
62
|
+
Pair("date", headerDate)
|
|
63
|
+
Pair("host", host)
|
|
64
|
+
Pair("x-amz-date", amzDate)
|
|
65
|
+
Pair("x-amz-content-sha256", contentHash)
|
|
66
|
+
Pair("x-amz-storage-class", "REDUCED_REDUNDANCY")
|
|
67
|
+
Pair("Content-Type", "text/plain")
|
|
68
|
+
]
|
|
69
|
+
let authenticationHeader = makeS3AuthorizationHeader(system, accessKeyId, secretAccessKey, region, bucket, objectKey, body, canonicalHeaders, amzDate)
|
|
70
|
+
let headers = [...canonicalHeaders, Pair("Authorization", authenticationHeader)]
|
|
71
|
+
|
|
72
|
+
let url = "https://" + host + "/" + objectKey
|
|
73
|
+
let response = system.httpClient().fetch(url, method = "PUT", headers = headers, body = Some(HttpClient.bodyBuffer(body)), throw = False)
|
|
74
|
+
system.writeLine("" + response.status())
|
|
75
|
+
system.writeLine(response.statusText())
|
|
76
|
+
system.writeLine(response.readText())
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
makeS3AuthorizationHeader(
|
|
80
|
+
system: NodeSystem
|
|
81
|
+
accessKeyId: String
|
|
82
|
+
secretAccessKey: String
|
|
83
|
+
region: String
|
|
84
|
+
bucket: String
|
|
85
|
+
objectKey: String
|
|
86
|
+
body: Buffer
|
|
87
|
+
canonicalHeaders: List[Pair[String, String]]
|
|
88
|
+
amzDate: String
|
|
89
|
+
): String {
|
|
90
|
+
let scopeDate = amzDate.slice(0, 8) // YYYYMMDD
|
|
91
|
+
|
|
92
|
+
// CanonicalRequest
|
|
93
|
+
let canonicalQuerystring = "";
|
|
94
|
+
let contentHash = Digest.sha256(body).toHex()
|
|
95
|
+
let headers = canonicalHeaders.map {_.mapFirst {_.lower()}.mapSecond {_.trim()}}.sort()
|
|
96
|
+
let signedHeaders = headers.map {_.first}.join(";")
|
|
97
|
+
let canonicalRequest = [
|
|
98
|
+
"PUT"
|
|
99
|
+
"/" + objectKey
|
|
100
|
+
canonicalQuerystring
|
|
101
|
+
...headers.map {p => p.first + ":" + p.second}
|
|
102
|
+
""
|
|
103
|
+
signedHeaders
|
|
104
|
+
contentHash
|
|
105
|
+
].join("\n")
|
|
106
|
+
|
|
107
|
+
// StringToSign
|
|
108
|
+
let credentialScope = [scopeDate, region, "s3", "aws4_request"].join("/")
|
|
109
|
+
let algorithm = "AWS4-HMAC-SHA256"
|
|
110
|
+
let stringToSign = [
|
|
111
|
+
algorithm
|
|
112
|
+
amzDate
|
|
113
|
+
credentialScope
|
|
114
|
+
Digest.sha256(canonicalRequest.toBuffer()).toHex()
|
|
115
|
+
].join("\n")
|
|
116
|
+
|
|
117
|
+
// Signature
|
|
118
|
+
let signingKey = hmacSha256(hmacSha256(hmacSha256(hmacSha256(("AWS4" + secretAccessKey).toBuffer(), scopeDate), region), "s3"), "aws4_request")
|
|
119
|
+
let signature = hmacSha256(signingKey, stringToSign).toHex()
|
|
120
|
+
|
|
121
|
+
algorithm + " Credential=" + accessKeyId + "/" + credentialScope + ",SignedHeaders=" + signedHeaders + ",Signature=" + signature
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
hmacSha256(key: Buffer, message: String): Buffer {
|
|
125
|
+
Digest.hmacSha256(key, message.toBuffer()).toBuffer()
|
|
126
|
+
}
|
|
@@ -46,6 +46,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
46
46
|
|
|
47
47
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
48
48
|
|
|
49
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
50
|
+
|
|
49
51
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
50
52
|
|
|
51
53
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -46,6 +46,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
46
46
|
|
|
47
47
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
48
48
|
|
|
49
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
50
|
+
|
|
49
51
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
50
52
|
|
|
51
53
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -117,7 +119,7 @@ export function Compiler(emitTarget_, task_, compilerModulePath_, jsOutputPath_,
|
|
|
117
119
|
return {emitTarget_, task_, compilerModulePath_, jsOutputPath_, packagePaths_, singleFilePackages_, virtualFiles_, cache_, lspHook_, phaseDurationDelta_, phaseDurations_};
|
|
118
120
|
}
|
|
119
121
|
|
|
120
|
-
export const coreImports_ = ff_core_List.List_map(["Any", "Array", "AssetSystem", "Atomic", "Bool", "BrowserSystem", "Buffer", "BuildSystem", "Channel", "Char", "Core", "Duration", "Equal", "Error", "FileHandle", "Float", "HttpClient", "Instant", "Int", "IntMap", "Json", "JsValue", "JsSystem", "List", "Lock", "Log", "Map", "NodeSystem", "Nothing", "Option", "Ordering", "Pair", "Path", "Random", "Serializable", "Set", "Show", "SourceLocation", "Stream", "String", "StringMap", "Task", "Try", "Unit"], ((moduleName_) => {
|
|
122
|
+
export const coreImports_ = ff_core_List.List_map(["Any", "Array", "AssetSystem", "Atomic", "Bool", "BrowserSystem", "Buffer", "BuildSystem", "Channel", "Char", "Core", "Digest", "Duration", "Equal", "Error", "FileHandle", "Float", "HttpClient", "Instant", "Int", "IntMap", "Json", "JsValue", "JsSystem", "List", "Lock", "Log", "Map", "NodeSystem", "Nothing", "Option", "Ordering", "Pair", "Path", "Random", "Serializable", "Set", "Show", "SourceLocation", "Stream", "String", "StringMap", "Task", "Try", "Unit"], ((moduleName_) => {
|
|
121
123
|
return ff_compiler_Syntax.DImport(ff_compiler_Syntax.Location("<prelude>", 1, 1), moduleName_, ff_compiler_Syntax.PackagePair("ff", "core"), [], moduleName_)
|
|
122
124
|
}));
|
|
123
125
|
|
|
@@ -36,6 +36,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
36
36
|
|
|
37
37
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
38
38
|
|
|
39
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
40
|
+
|
|
39
41
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
40
42
|
|
|
41
43
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -24,6 +24,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
24
24
|
|
|
25
25
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
26
26
|
|
|
27
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
28
|
+
|
|
27
29
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
28
30
|
|
|
29
31
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -30,6 +30,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
30
30
|
|
|
31
31
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
32
32
|
|
|
33
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
34
|
+
|
|
33
35
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
34
36
|
|
|
35
37
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -34,6 +34,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
34
34
|
|
|
35
35
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
36
36
|
|
|
37
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
38
|
+
|
|
37
39
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
38
40
|
|
|
39
41
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -30,6 +30,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
30
30
|
|
|
31
31
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
32
32
|
|
|
33
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
34
|
+
|
|
33
35
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
34
36
|
|
|
35
37
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -30,6 +30,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
30
30
|
|
|
31
31
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
32
32
|
|
|
33
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
34
|
+
|
|
33
35
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
34
36
|
|
|
35
37
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -50,6 +50,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
50
50
|
|
|
51
51
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
52
52
|
|
|
53
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
54
|
+
|
|
53
55
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
54
56
|
|
|
55
57
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -32,6 +32,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
32
32
|
|
|
33
33
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
34
34
|
|
|
35
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
36
|
+
|
|
35
37
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
36
38
|
|
|
37
39
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -28,6 +28,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
28
28
|
|
|
29
29
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
30
30
|
|
|
31
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
32
|
+
|
|
31
33
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
32
34
|
|
|
33
35
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -24,6 +24,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
24
24
|
|
|
25
25
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
26
26
|
|
|
27
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
28
|
+
|
|
27
29
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
28
30
|
|
|
29
31
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -30,6 +30,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
30
30
|
|
|
31
31
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
32
32
|
|
|
33
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
34
|
+
|
|
33
35
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
34
36
|
|
|
35
37
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -28,6 +28,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
28
28
|
|
|
29
29
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
30
30
|
|
|
31
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
32
|
+
|
|
31
33
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
32
34
|
|
|
33
35
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -26,6 +26,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
26
26
|
|
|
27
27
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
28
28
|
|
|
29
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
30
|
+
|
|
29
31
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
30
32
|
|
|
31
33
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|
|
@@ -22,6 +22,8 @@ import * as ff_core_Char from "../../ff/core/Char.mjs"
|
|
|
22
22
|
|
|
23
23
|
import * as ff_core_Core from "../../ff/core/Core.mjs"
|
|
24
24
|
|
|
25
|
+
import * as ff_core_Digest from "../../ff/core/Digest.mjs"
|
|
26
|
+
|
|
25
27
|
import * as ff_core_Duration from "../../ff/core/Duration.mjs"
|
|
26
28
|
|
|
27
29
|
import * as ff_core_Equal from "../../ff/core/Equal.mjs"
|