@sdkgen/fsharp-generator 0.0.0-dev.20230106165109 → 0.0.0-dev.20230109111624
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/dist/fsharp-server.js +90 -0
- package/dist/helpers.js +488 -0
- package/dist/index.js +2 -0
- package/package.json +5 -23
- package/dist/src/fsharp-server.d.ts +0 -2
- package/dist/src/fsharp-server.js +0 -93
- package/dist/src/helpers.d.ts +0 -9
- package/dist/src/helpers.js +0 -497
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +0 -17
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { astToJson, VoidPrimitiveType } from "@sdkgen/parser";
|
|
2
|
+
import { capitalize, decodeType, encodeType, generateEnum, generateStruct, generateTypeName, ident } from "./helpers.js";
|
|
3
|
+
export function generateFSharpServerSource(ast) {
|
|
4
|
+
let code = `module rec SdkgenGenerated
|
|
5
|
+
open Sdkgen.Runtime
|
|
6
|
+
open Sdkgen.Helpers
|
|
7
|
+
open Sdkgen.Context
|
|
8
|
+
open System.Threading.Tasks
|
|
9
|
+
open System.Text.Json
|
|
10
|
+
open System
|
|
11
|
+
open System.Globalization
|
|
12
|
+
#if NET5_0
|
|
13
|
+
// To use tasks as computation expression in .NET 5 install https://www.nuget.org/packages/TaskBuilder.fs/
|
|
14
|
+
open FSharp.Control.Tasks.V2.ContextInsensitive
|
|
15
|
+
#endif
|
|
16
|
+
`;
|
|
17
|
+
for (const error of ast.errors) {
|
|
18
|
+
code += `
|
|
19
|
+
type ${error.name}Exception =
|
|
20
|
+
inherit SdkgenException
|
|
21
|
+
|
|
22
|
+
new(message: string) = {
|
|
23
|
+
inherit SdkgenException("${error.name}", message, null)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
new(message: string, inner: Exception) = {
|
|
27
|
+
inherit SdkgenException("${error.name}", message, inner)
|
|
28
|
+
}\n`;
|
|
29
|
+
}
|
|
30
|
+
for (const type of ast.enumTypes) {
|
|
31
|
+
code += `\n${generateEnum(type)}\n`;
|
|
32
|
+
}
|
|
33
|
+
for (const type of ast.structTypes) {
|
|
34
|
+
code += `\n${generateStruct(type)}\n`;
|
|
35
|
+
}
|
|
36
|
+
code += `
|
|
37
|
+
type Api() =`;
|
|
38
|
+
for (const op of ast.operations) {
|
|
39
|
+
const returnTypeAngle = op.returnType instanceof VoidPrimitiveType ? "" : `<${generateTypeName(op.returnType)}>`;
|
|
40
|
+
const argsInRecord = op.args.length > 0 ? `{| ${op.args.map(arg => `${arg.name}: ${generateTypeName(arg.type)};`).join("")} |} ->` : "";
|
|
41
|
+
code += `
|
|
42
|
+
member val ${capitalize(op.name)}: Context -> ${argsInRecord} Task${returnTypeAngle} =
|
|
43
|
+
fun _ -> (raise (FatalException("Function '${op.name}' not implemented.")))
|
|
44
|
+
with get, set
|
|
45
|
+
`;
|
|
46
|
+
}
|
|
47
|
+
code += `
|
|
48
|
+
interface BaseApi with
|
|
49
|
+
member __.ExecuteFunction(context_: Context, resultWriter_: Utf8JsonWriter) : Task =
|
|
50
|
+
task {
|
|
51
|
+
match context_.Name with`;
|
|
52
|
+
for (const op of ast.operations) {
|
|
53
|
+
code += `
|
|
54
|
+
| ${JSON.stringify(op.name)} ->`;
|
|
55
|
+
for (const arg of op.args) {
|
|
56
|
+
code += `
|
|
57
|
+
let ${arg.name}Json_ =
|
|
58
|
+
match context_.Args.TryGetValue(${JSON.stringify(arg.name)}) with
|
|
59
|
+
| true, v -> v
|
|
60
|
+
| _ -> raise (FatalException("'${op.name}().args.${arg.name}' must be set to a value of type ${arg.type.name}."))
|
|
61
|
+
|
|
62
|
+
let ${ident(arg.name)} =
|
|
63
|
+
${decodeType(arg.type, `${arg.name}Json_`, `"${op.name}().args.${arg.name}"`, ident(arg.name)).replace(/\n/gu, "\n ")}`;
|
|
64
|
+
}
|
|
65
|
+
if (op.returnType instanceof VoidPrimitiveType) {
|
|
66
|
+
code += `
|
|
67
|
+
|
|
68
|
+
do! (__.${capitalize(op.name)} context_ ${op.args.length > 0 ? "{|" : ""} ${op.args
|
|
69
|
+
.map(arg => `${arg.name} = ${ident(arg.name)}`)
|
|
70
|
+
.join("; ")} ${op.args.length > 0 ? "|}" : ""})
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
code += `
|
|
75
|
+
|
|
76
|
+
let! result_ = (__.${capitalize(op.name)} context_ ${op.args.length > 0 ? "{|" : ""} ${op.args
|
|
77
|
+
.map(arg => `${arg.name} = ${ident(arg.name)}`)
|
|
78
|
+
.join("; ")} ${op.args.length > 0 ? "|}" : ""})
|
|
79
|
+
${encodeType(op.returnType, `result_`, `"${op.name}().ret"`, 1, false).replace(/\n/gu, "\n ")}`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
code += `
|
|
83
|
+
|
|
84
|
+
| _ -> raise (FatalException($"Unknown function '{context_.Name}'."))
|
|
85
|
+
} :> Task`;
|
|
86
|
+
code += `
|
|
87
|
+
member __.GetAstJson() = """${JSON.stringify(astToJson(ast), null, 4).replace(/\n/gu, "\n ")}""";`;
|
|
88
|
+
return code;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnNoYXJwLXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mc2hhcnAtc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekgsTUFBTSxVQUFVLDBCQUEwQixDQUFDLEdBQVk7SUFDckQsSUFBSSxJQUFJLEdBQUc7Ozs7Ozs7Ozs7OztDQVlaLENBQUM7SUFFQSxLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDOUIsSUFBSSxJQUFJO09BQ0wsS0FBSyxDQUFDLElBQUk7Ozs7K0JBSWMsS0FBSyxDQUFDLElBQUk7Ozs7K0JBSVYsS0FBSyxDQUFDLElBQUk7TUFDbkMsQ0FBQztLQUNKO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFO1FBQ2hDLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0tBQ3JDO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFO1FBQ2xDLElBQUksSUFBSSxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0tBQ3ZDO0lBRUQsSUFBSSxJQUFJO2FBQ0csQ0FBQztJQUVaLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtRQUMvQixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsVUFBVSxZQUFZLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFF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SUFBSSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1NBQ2xIO0tBQ0Y7SUFFRCxJQUFJLElBQUk7OztrQkFHUSxDQUFDO0lBRWpCLElBQUksSUFBSTtrQ0FDd0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUU1RyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFzdFJvb3QgfSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcbmltcG9ydCB7IGFzdFRvSnNvbiwgVm9pZFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcblxuaW1wb3J0IHsgY2FwaXRhbGl6ZSwgZGVjb2RlVHlwZSwgZW5jb2RlVHlwZSwgZ2VuZXJhdGVFbnVtLCBnZW5lcmF0ZVN0cnVjdCwgZ2VuZXJhdGVUeXBlTmFtZSwgaWRlbnQgfSBmcm9tIFwiLi9oZWxwZXJzLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUZTaGFycFNlcnZlclNvdXJjZShhc3Q6IEFzdFJvb3QpOiBzdHJpbmcge1xuICBsZXQgY29kZSA9IGBtb2R1bGUgcmVjIFNka2dlbkdlbmVyYXRlZFxub3BlbiBTZGtnZW4uUnVudGltZVxub3BlbiBTZGtnZW4uSGVscGVyc1xub3BlbiBTZGtnZW4uQ29udGV4dFxub3BlbiBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzXG5vcGVuIFN5c3RlbS5UZXh0Lkpzb25cbm9wZW4gU3lzdGVtXG5vcGVuIFN5c3RlbS5HbG9iYWxpemF0aW9uXG4jaWYgTkVUNV8wXG4vLyBUbyB1c2UgdGFza3MgYXMgY29tcHV0YXRpb24gZXhwcmVzc2lvbiBpbiAuTkVUIDUgaW5zdGFsbCBodHRwczovL3d3dy5udWdldC5vcmcvcGFja2FnZXMvVGFza0J1aWxkZXIuZnMvXG5vcGVuIEZTaGFycC5Db250cm9sLlRhc2tzLlYyLkNvbnRleHRJbnNlbnNpdGl2ZVxuI2VuZGlmXG5gO1xuXG4gIGZvciAoY29uc3QgZXJyb3Igb2YgYXN0LmVycm9ycykge1xuICAgIGNvZGUgKz0gYFxudHlwZSAke2Vycm9yLm5hbWV9RXhjZXB0aW9uID1cbiAgaW5oZXJpdCBTZGtnZW5FeGNlcHRpb25cblxuICBuZXcobWVzc2FnZTogc3RyaW5nKSA9IHtcbiAgICBpbmhlcml0IFNka2dlbkV4Y2VwdGlvbihcIiR7ZXJyb3IubmFtZX1cIiwgbWVzc2FnZSwgbnVsbClcbiAgfVxuXG4gIG5ldyhtZXNzYWdlOiBzdHJpbmcsIGlubmVyOiBFeGNlcHRpb24pID0ge1xuICAgIGluaGVyaXQgU2RrZ2VuRXhjZXB0aW9uKFwiJHtlcnJvci5uYW1lfVwiLCBtZXNzYWdlLCBpbm5lcilcbiAgfVxcbmA7XG4gIH1cblxuICBmb3IgKGNvbnN0IHR5cGUgb2YgYXN0LmVudW1UeXBlcykge1xuICAgIGNvZGUgKz0gYFxcbiR7Z2VuZXJhdGVFbnVtKHR5cGUpfVxcbmA7XG4gIH1cblxuICBmb3IgKGNvbnN0IHR5cGUgb2YgYXN0LnN0cnVjdFR5cGVzKSB7XG4gICAgY29kZSArPSBgXFxuJHtnZW5lcmF0ZVN0cnVjdCh0eXBlKX1cXG5gO1xuICB9XG5cbiAgY29kZSArPSBgXG50eXBlIEFwaSgpID1gO1xuXG4gIGZvciAoY29uc3Qgb3Agb2YgYXN0Lm9wZXJhdGlvbnMpIHtcbiAgICBjb25zdCByZXR1cm5UeXBlQW5nbGUgPSBvcC5yZXR1cm5UeXBlIGluc3RhbmNlb2YgVm9pZFByaW1pdGl2ZVR5cGUgPyBcIlwiIDogYDwke2dlbmVyYXRlVHlwZU5hbWUob3AucmV0dXJuVHlwZSl9PmA7XG5cbiAgICBjb25zdCBhcmdzSW5SZWNvcmQgPSBvcC5hcmdzLmxlbmd0aCA+IDAgPyBge3wgJHtvcC5hcmdzLm1hcChhcmcgPT4gYCR7YXJnLm5hbWV9OiAke2dlbmVyYXRlVHlwZU5hbWUoYXJnLnR5cGUpfTtgKS5qb2luKFwiXCIpfSB8fSAtPmAgOiBcIlwiO1xuXG4gICAgY29kZSArPSBgXG4gIG1lbWJlciB2YWwgJHtjYXBpdGFsaXplKG9wLm5hbWUpfTogQ29udGV4dCAtPiAke2FyZ3NJblJlY29yZH0gVGFzayR7cmV0dXJuVHlwZUFuZ2xlfSA9XG4gICAgZnVuIF8gLT4gKHJhaXNlIChGYXRhbEV4Y2VwdGlvbihcIkZ1bmN0aW9uICcke29wLm5hbWV9JyBub3QgaW1wbGVtZW50ZWQuXCIpKSlcbiAgICB3aXRoIGdldCwgc2V0XG4gICAgYDtcbiAgfVxuXG4gIGNvZGUgKz0gYFxuICBpbnRlcmZhY2UgQmFzZUFwaSB3aXRoXG4gICAgbWVtYmVyIF9fLkV4ZWN1dGVGdW5jdGlvbihjb250ZXh0XzogQ29udGV4dCwgcmVzdWx0V3JpdGVyXzogVXRmOEpzb25Xcml0ZXIpIDogVGFzayA9XG4gICAgICAgIHRhc2sge1xuICAgICAgICAgIG1hdGNoIGNvbnRleHRfLk5hbWUgd2l0aGA7XG5cbiAgZm9yIChjb25zdCBvcCBvZiBhc3Qub3BlcmF0aW9ucykge1xuICAgIGNvZGUgKz0gYFxuICAgICAgICAgIHwgJHtKU09OLnN0cmluZ2lmeShvcC5uYW1lKX0gLT5gO1xuICAgIGZvciAoY29uc3QgYXJnIG9mIG9wLmFyZ3MpIHtcbiAgICAgIGNvZGUgKz0gYFxuICAgICAgICAgICAgbGV0ICR7YXJnLm5hbWV9SnNvbl8gPVxuICAgICAgICAgICAgICBtYXRjaCBjb250ZXh0Xy5BcmdzLlRyeUdldFZhbHVlKCR7SlNPTi5zdHJpbmdpZnkoYXJnLm5hbWUpfSkgd2l0aFxuICAgICAgICAgICAgICB8IHRydWUsIHYgLT4gdlxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKFwiJyR7b3AubmFtZX0oKS5hcmdzLiR7YXJnLm5hbWV9JyBtdXN0IGJlIHNldCB0byBhIHZhbHVlIG9mIHR5cGUgJHthcmcudHlwZS5uYW1lfS5cIikpXG5cbiAgICAgICAgICAgIGxldCAke2lkZW50KGFyZy5uYW1lKX0gPVxuICAgICAgICAgICAgICAke2RlY29kZVR5cGUoYXJnLnR5cGUsIGAke2FyZy5uYW1lfUpzb25fYCwgYFwiJHtvcC5uYW1lfSgpLmFyZ3MuJHthcmcubmFtZX1cImAsIGlkZW50KGFyZy5uYW1lKSkucmVwbGFjZSgvXFxuL2d1LCBcIlxcbiAgICAgICAgICAgIFwiKX1gO1xuICAgIH1cblxuICAgIGlmIChvcC5yZXR1cm5UeXBlIGluc3RhbmNlb2YgVm9pZFByaW1pdGl2ZVR5cGUpIHtcbiAgICAgIGNvZGUgKz0gYFxuXG4gICAgICAgICAgICBkbyEgKF9fLiR7Y2FwaXRhbGl6ZShvcC5uYW1lKX0gY29udGV4dF8gJHtvcC5hcmdzLmxlbmd0aCA+IDAgPyBcInt8XCIgOiBcIlwifSAke29wLmFyZ3NcbiAgICAgICAgLm1hcChhcmcgPT4gYCR7YXJnLm5hbWV9ID0gJHtpZGVudChhcmcubmFtZSl9YClcbiAgICAgICAgLmpvaW4oXCI7IFwiKX0gJHtvcC5hcmdzLmxlbmd0aCA+IDAgPyBcInx9XCIgOiBcIlwifSlcbiAgICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGUgKz0gYFxuXG4gICAgICAgICAgICBsZXQhIHJlc3VsdF8gPSAoX18uJHtjYXBpdGFsaXplKG9wLm5hbWUpfSBjb250ZXh0XyAke29wLmFyZ3MubGVuZ3RoID4gMCA/IFwie3xcIiA6IFwiXCJ9ICR7b3AuYXJnc1xuICAgICAgICAubWFwKGFyZyA9PiBgJHthcmcubmFtZX0gPSAke2lkZW50KGFyZy5uYW1lKX1gKVxuICAgICAgICAuam9pbihcIjsgXCIpfSAke29wLmFyZ3MubGVuZ3RoID4gMCA/IFwifH1cIiA6IFwiXCJ9KVxuICAgICAgICAgICAgJHtlbmNvZGVUeXBlKG9wLnJldHVyblR5cGUsIGByZXN1bHRfYCwgYFwiJHtvcC5uYW1lfSgpLnJldFwiYCwgMSwgZmFsc2UpLnJlcGxhY2UoL1xcbi9ndSwgXCJcXG4gICAgICAgICAgICBcIil9YDtcbiAgICB9XG4gIH1cblxuICBjb2RlICs9IGBcblxuICAgICAgICAgIHwgXyAtPiByYWlzZSAoRmF0YWxFeGNlcHRpb24oJFwiVW5rbm93biBmdW5jdGlvbiAne2NvbnRleHRfLk5hbWV9Jy5cIikpXG4gICAgICAgIH0gOj4gVGFza2A7XG5cbiAgY29kZSArPSBgXG4gICAgbWVtYmVyIF9fLkdldEFzdEpzb24oKSA9IFwiXCJcIiR7SlNPTi5zdHJpbmdpZnkoYXN0VG9Kc29uKGFzdCksIG51bGwsIDQpLnJlcGxhY2UoL1xcbi9ndSwgXCJcXG4gICAgICAgIFwiKX1cIlwiXCI7YDtcblxuICByZXR1cm4gY29kZTtcbn1cbiJdfQ==
|
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import { ArrayType, Base64PrimitiveType, BigIntPrimitiveType, BoolPrimitiveType, BytesPrimitiveType, CnpjPrimitiveType, CpfPrimitiveType, DatePrimitiveType, DateTimePrimitiveType, EmailPrimitiveType, EnumType, FloatPrimitiveType, HexPrimitiveType, HtmlPrimitiveType, IntPrimitiveType, JsonPrimitiveType, MoneyPrimitiveType, OptionalType, StringPrimitiveType, StructType, TypeReference, UIntPrimitiveType, UrlPrimitiveType, UuidPrimitiveType, VoidPrimitiveType, XmlPrimitiveType, } from "@sdkgen/parser";
|
|
2
|
+
const reservedWords = [
|
|
3
|
+
"abstract",
|
|
4
|
+
"as",
|
|
5
|
+
"base",
|
|
6
|
+
"bool",
|
|
7
|
+
"break",
|
|
8
|
+
"byte",
|
|
9
|
+
"case",
|
|
10
|
+
"catch",
|
|
11
|
+
"char",
|
|
12
|
+
"checked",
|
|
13
|
+
"class",
|
|
14
|
+
"const",
|
|
15
|
+
"continue",
|
|
16
|
+
"decimal",
|
|
17
|
+
"default",
|
|
18
|
+
"delegate",
|
|
19
|
+
"do",
|
|
20
|
+
"double",
|
|
21
|
+
"else",
|
|
22
|
+
"enum",
|
|
23
|
+
"event",
|
|
24
|
+
"explicit",
|
|
25
|
+
"extern",
|
|
26
|
+
"false",
|
|
27
|
+
"finally",
|
|
28
|
+
"fixed",
|
|
29
|
+
"float",
|
|
30
|
+
"for",
|
|
31
|
+
"foreach",
|
|
32
|
+
"goto",
|
|
33
|
+
"if",
|
|
34
|
+
"implicit",
|
|
35
|
+
"in",
|
|
36
|
+
"int",
|
|
37
|
+
"interface",
|
|
38
|
+
"internal",
|
|
39
|
+
"is",
|
|
40
|
+
"lock",
|
|
41
|
+
"long",
|
|
42
|
+
"namespace",
|
|
43
|
+
"new",
|
|
44
|
+
"null",
|
|
45
|
+
"object",
|
|
46
|
+
"operator",
|
|
47
|
+
"out",
|
|
48
|
+
"override",
|
|
49
|
+
"params",
|
|
50
|
+
"private",
|
|
51
|
+
"protected",
|
|
52
|
+
"public",
|
|
53
|
+
"readonly",
|
|
54
|
+
"ref",
|
|
55
|
+
"return",
|
|
56
|
+
"sbyte",
|
|
57
|
+
"sealed",
|
|
58
|
+
"short",
|
|
59
|
+
"sizeof",
|
|
60
|
+
"stackalloc",
|
|
61
|
+
"static",
|
|
62
|
+
"string",
|
|
63
|
+
"struct",
|
|
64
|
+
"switch",
|
|
65
|
+
"this",
|
|
66
|
+
"throw",
|
|
67
|
+
"true",
|
|
68
|
+
"try",
|
|
69
|
+
"typeof",
|
|
70
|
+
"uint",
|
|
71
|
+
"ulong",
|
|
72
|
+
"unchecked",
|
|
73
|
+
"unsafe",
|
|
74
|
+
"ushort",
|
|
75
|
+
"using",
|
|
76
|
+
"using",
|
|
77
|
+
"static",
|
|
78
|
+
"virtual",
|
|
79
|
+
"void",
|
|
80
|
+
"volatile",
|
|
81
|
+
"while",
|
|
82
|
+
"type",
|
|
83
|
+
"end",
|
|
84
|
+
"id",
|
|
85
|
+
];
|
|
86
|
+
const typesWithNativeNullable = [
|
|
87
|
+
StringPrimitiveType,
|
|
88
|
+
HtmlPrimitiveType,
|
|
89
|
+
CpfPrimitiveType,
|
|
90
|
+
CnpjPrimitiveType,
|
|
91
|
+
BytesPrimitiveType,
|
|
92
|
+
EmailPrimitiveType,
|
|
93
|
+
UrlPrimitiveType,
|
|
94
|
+
UuidPrimitiveType,
|
|
95
|
+
HexPrimitiveType,
|
|
96
|
+
Base64PrimitiveType,
|
|
97
|
+
XmlPrimitiveType,
|
|
98
|
+
StructType,
|
|
99
|
+
ArrayType,
|
|
100
|
+
];
|
|
101
|
+
const needsTempVarForNullable = [
|
|
102
|
+
BigIntPrimitiveType,
|
|
103
|
+
DatePrimitiveType,
|
|
104
|
+
DateTimePrimitiveType,
|
|
105
|
+
FloatPrimitiveType,
|
|
106
|
+
IntPrimitiveType,
|
|
107
|
+
MoneyPrimitiveType,
|
|
108
|
+
UIntPrimitiveType,
|
|
109
|
+
ArrayType,
|
|
110
|
+
];
|
|
111
|
+
export function ident(name) {
|
|
112
|
+
return reservedWords.includes(name) ? `${name}'` : name;
|
|
113
|
+
}
|
|
114
|
+
export function capitalize(name) {
|
|
115
|
+
return name[0].toUpperCase() + name.slice(1);
|
|
116
|
+
}
|
|
117
|
+
export function generateTypeName(type) {
|
|
118
|
+
switch (type.constructor) {
|
|
119
|
+
case StringPrimitiveType:
|
|
120
|
+
return "string";
|
|
121
|
+
case IntPrimitiveType:
|
|
122
|
+
return "int";
|
|
123
|
+
case UIntPrimitiveType:
|
|
124
|
+
return "uint";
|
|
125
|
+
case FloatPrimitiveType:
|
|
126
|
+
return "double";
|
|
127
|
+
case BigIntPrimitiveType:
|
|
128
|
+
return "bigint";
|
|
129
|
+
case DatePrimitiveType:
|
|
130
|
+
case DateTimePrimitiveType:
|
|
131
|
+
return "DateTime";
|
|
132
|
+
case BoolPrimitiveType:
|
|
133
|
+
return "bool";
|
|
134
|
+
case BytesPrimitiveType:
|
|
135
|
+
return "byte[]";
|
|
136
|
+
case MoneyPrimitiveType:
|
|
137
|
+
return "decimal";
|
|
138
|
+
case UuidPrimitiveType:
|
|
139
|
+
return "Guid";
|
|
140
|
+
case CpfPrimitiveType:
|
|
141
|
+
case CnpjPrimitiveType:
|
|
142
|
+
case EmailPrimitiveType:
|
|
143
|
+
case HtmlPrimitiveType:
|
|
144
|
+
case UrlPrimitiveType:
|
|
145
|
+
case HexPrimitiveType:
|
|
146
|
+
case Base64PrimitiveType:
|
|
147
|
+
case XmlPrimitiveType:
|
|
148
|
+
return "string";
|
|
149
|
+
case VoidPrimitiveType:
|
|
150
|
+
return "void";
|
|
151
|
+
case JsonPrimitiveType:
|
|
152
|
+
return "JsonElement";
|
|
153
|
+
case OptionalType:
|
|
154
|
+
return `${generateTypeName(type.base)} option`;
|
|
155
|
+
case ArrayType:
|
|
156
|
+
return `${generateTypeName(type.base)} list`;
|
|
157
|
+
case StructType:
|
|
158
|
+
return type.name;
|
|
159
|
+
case EnumType:
|
|
160
|
+
return type.name;
|
|
161
|
+
case TypeReference:
|
|
162
|
+
return generateTypeName(type.type);
|
|
163
|
+
default:
|
|
164
|
+
throw new Error(`BUG: generateTypeName with ${type.constructor.name}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export function decodeType(type, jsonElementVar, path, targetVar, suffix = 1, maybeNull = true) {
|
|
168
|
+
switch (type.constructor) {
|
|
169
|
+
case IntPrimitiveType: {
|
|
170
|
+
return `
|
|
171
|
+
decodeInt32 ${jsonElementVar} ${path}
|
|
172
|
+
`
|
|
173
|
+
.replace(/\n {16}/gu, "\n")
|
|
174
|
+
.trim();
|
|
175
|
+
}
|
|
176
|
+
case UIntPrimitiveType: {
|
|
177
|
+
return `
|
|
178
|
+
decodeUInt32 ${jsonElementVar} ${path}
|
|
179
|
+
`
|
|
180
|
+
.replace(/\n {16}/gu, "\n")
|
|
181
|
+
.trim();
|
|
182
|
+
}
|
|
183
|
+
case MoneyPrimitiveType: {
|
|
184
|
+
return `
|
|
185
|
+
(decodeMoney ${jsonElementVar} ${path}) / 100m
|
|
186
|
+
`
|
|
187
|
+
.replace(/\n {16}/gu, "\n")
|
|
188
|
+
.trim();
|
|
189
|
+
}
|
|
190
|
+
case FloatPrimitiveType: {
|
|
191
|
+
return `
|
|
192
|
+
decodeFloat ${jsonElementVar} ${path}
|
|
193
|
+
`
|
|
194
|
+
.replace(/\n {16}/gu, "\n")
|
|
195
|
+
.trim();
|
|
196
|
+
}
|
|
197
|
+
case BigIntPrimitiveType: {
|
|
198
|
+
return `
|
|
199
|
+
decodeBigInt ${jsonElementVar} ${path}
|
|
200
|
+
`
|
|
201
|
+
.replace(/\n {16}/gu, "\n")
|
|
202
|
+
.trim();
|
|
203
|
+
}
|
|
204
|
+
case StringPrimitiveType: {
|
|
205
|
+
return `
|
|
206
|
+
decodeString ${jsonElementVar} ${path}
|
|
207
|
+
`
|
|
208
|
+
.replace(/\n {16}/gu, "\n")
|
|
209
|
+
.trim();
|
|
210
|
+
}
|
|
211
|
+
case HtmlPrimitiveType: {
|
|
212
|
+
// TODO: validate HTML
|
|
213
|
+
return `
|
|
214
|
+
decodeHtml ${jsonElementVar} ${path}
|
|
215
|
+
`
|
|
216
|
+
.replace(/\n {16}/gu, "\n")
|
|
217
|
+
.trim();
|
|
218
|
+
}
|
|
219
|
+
case CpfPrimitiveType: {
|
|
220
|
+
// TODO: validate CPF
|
|
221
|
+
return `
|
|
222
|
+
decodeCpf ${jsonElementVar} ${path}
|
|
223
|
+
`
|
|
224
|
+
.replace(/\n {16}/gu, "\n")
|
|
225
|
+
.trim();
|
|
226
|
+
}
|
|
227
|
+
case CnpjPrimitiveType: {
|
|
228
|
+
// TODO: validate CNPJ
|
|
229
|
+
return `
|
|
230
|
+
decodeCnpj ${jsonElementVar} ${path}
|
|
231
|
+
`
|
|
232
|
+
.replace(/\n {16}/gu, "\n")
|
|
233
|
+
.trim();
|
|
234
|
+
}
|
|
235
|
+
case EmailPrimitiveType: {
|
|
236
|
+
// TODO: validate Email
|
|
237
|
+
return `
|
|
238
|
+
decodeEmail ${jsonElementVar} ${path}
|
|
239
|
+
`
|
|
240
|
+
.replace(/\n {16}/gu, "\n")
|
|
241
|
+
.trim();
|
|
242
|
+
}
|
|
243
|
+
case UrlPrimitiveType: {
|
|
244
|
+
// TODO: validate URL
|
|
245
|
+
return `
|
|
246
|
+
decodeUrl ${jsonElementVar} ${path}
|
|
247
|
+
`
|
|
248
|
+
.replace(/\n {16}/gu, "\n")
|
|
249
|
+
.trim();
|
|
250
|
+
}
|
|
251
|
+
case UuidPrimitiveType: {
|
|
252
|
+
// TODO: validate UUID
|
|
253
|
+
return `
|
|
254
|
+
decodeUuid ${jsonElementVar} ${path}
|
|
255
|
+
`
|
|
256
|
+
.replace(/\n {16}/gu, "\n")
|
|
257
|
+
.trim();
|
|
258
|
+
}
|
|
259
|
+
case HexPrimitiveType: {
|
|
260
|
+
// TODO: validate Hex
|
|
261
|
+
return `
|
|
262
|
+
decodeHex ${jsonElementVar} ${path}
|
|
263
|
+
`
|
|
264
|
+
.replace(/\n {16}/gu, "\n")
|
|
265
|
+
.trim();
|
|
266
|
+
}
|
|
267
|
+
case Base64PrimitiveType: {
|
|
268
|
+
// TODO: validate Base64
|
|
269
|
+
return `
|
|
270
|
+
decodeBase64 ${jsonElementVar} ${path}
|
|
271
|
+
`
|
|
272
|
+
.replace(/\n {16}/gu, "\n")
|
|
273
|
+
.trim();
|
|
274
|
+
}
|
|
275
|
+
case XmlPrimitiveType: {
|
|
276
|
+
// TODO: validate XML
|
|
277
|
+
return `
|
|
278
|
+
decodeXml ${jsonElementVar} ${path}
|
|
279
|
+
`
|
|
280
|
+
.replace(/\n {16}/gu, "\n")
|
|
281
|
+
.trim();
|
|
282
|
+
}
|
|
283
|
+
case BoolPrimitiveType: {
|
|
284
|
+
return `
|
|
285
|
+
decodeBool ${jsonElementVar} ${path}
|
|
286
|
+
`
|
|
287
|
+
.replace(/\n {16}/gu, "\n")
|
|
288
|
+
.trim();
|
|
289
|
+
}
|
|
290
|
+
case BytesPrimitiveType: {
|
|
291
|
+
return `
|
|
292
|
+
decodeBytes ${jsonElementVar} ${path}
|
|
293
|
+
`
|
|
294
|
+
.replace(/\n {16}/gu, "\n")
|
|
295
|
+
.trim();
|
|
296
|
+
}
|
|
297
|
+
case TypeReference:
|
|
298
|
+
return decodeType(type.type, jsonElementVar, path, targetVar, suffix);
|
|
299
|
+
case OptionalType:
|
|
300
|
+
if (needsTempVarForNullable.includes(type.base.constructor)) {
|
|
301
|
+
return `match ${jsonElementVar}.ValueKind with
|
|
302
|
+
| JsonValueKind.Null | JsonValueKind.Undefined -> None
|
|
303
|
+
| _ ->
|
|
304
|
+
(${decodeType(type.base, jsonElementVar, path, targetVar, suffix, false).replace(/\n/gu, "\n ")}) |> Some
|
|
305
|
+
`
|
|
306
|
+
.replace(/\n {16}/gu, "\n")
|
|
307
|
+
.trim();
|
|
308
|
+
}
|
|
309
|
+
if (type.base instanceof OptionalType || type.base instanceof ArrayType) {
|
|
310
|
+
return `
|
|
311
|
+
(>.>) decodeOptional ${decodeType(type.base, jsonElementVar, path, targetVar, suffix, false)}
|
|
312
|
+
`
|
|
313
|
+
.replace(/\n {16}/gu, "\n")
|
|
314
|
+
.trim();
|
|
315
|
+
}
|
|
316
|
+
return `
|
|
317
|
+
decodeOptional ${decodeType(type.base, jsonElementVar, path, targetVar, suffix, false)}
|
|
318
|
+
`
|
|
319
|
+
.replace(/\n {16}/gu, "\n")
|
|
320
|
+
.trim();
|
|
321
|
+
case EnumType:
|
|
322
|
+
case StructType:
|
|
323
|
+
return `Decode${type.name} ${jsonElementVar} ${path}`;
|
|
324
|
+
case JsonPrimitiveType:
|
|
325
|
+
if (maybeNull) {
|
|
326
|
+
return `
|
|
327
|
+
${jsonElementVar}
|
|
328
|
+
`
|
|
329
|
+
.replace(/\n {16}/gu, "\n")
|
|
330
|
+
.trim();
|
|
331
|
+
}
|
|
332
|
+
return `${targetVar} <- ${jsonElementVar}`;
|
|
333
|
+
case DateTimePrimitiveType: {
|
|
334
|
+
return `
|
|
335
|
+
decodeDateTime ${jsonElementVar} ${path}
|
|
336
|
+
`
|
|
337
|
+
.replace(/\n {16}/gu, "\n")
|
|
338
|
+
.trim();
|
|
339
|
+
}
|
|
340
|
+
case DatePrimitiveType: {
|
|
341
|
+
return `
|
|
342
|
+
decodeDate ${jsonElementVar} ${path}
|
|
343
|
+
`
|
|
344
|
+
.replace(/\n {16}/gu, "\n")
|
|
345
|
+
.trim();
|
|
346
|
+
}
|
|
347
|
+
case ArrayType: {
|
|
348
|
+
return `
|
|
349
|
+
match ${jsonElementVar}.ValueKind with
|
|
350
|
+
| JsonValueKind.Array ->
|
|
351
|
+
let mutable list_ = List.empty
|
|
352
|
+
for i1 in 0 .. (${jsonElementVar}.GetArrayLength() - 1) do
|
|
353
|
+
let item = ${jsonElementVar}.[i1]
|
|
354
|
+
let partialResult =
|
|
355
|
+
${decodeType(type.base, `${jsonElementVar}.[i1]`, `${path.slice(0, -1)}.{i1}"`, targetVar, suffix, false).replace(/\n/gu, "\n ")}
|
|
356
|
+
list_ <- list_ |> List.append [ partialResult ]
|
|
357
|
+
list_
|
|
358
|
+
| _ -> raise (FatalException(${path.slice(0, -1)} must be an array."))
|
|
359
|
+
`
|
|
360
|
+
.replace(/\n {16}/gu, "\n")
|
|
361
|
+
.trim();
|
|
362
|
+
}
|
|
363
|
+
default:
|
|
364
|
+
throw new Error(`BUG: decodeType with ${type.constructor.name}`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
export function encodeType(type, valueVar, path, suffix = 1, isRef = true) {
|
|
368
|
+
switch (type.constructor) {
|
|
369
|
+
case StringPrimitiveType: {
|
|
370
|
+
return `resultWriter_.WriteStringValue(${valueVar})`;
|
|
371
|
+
}
|
|
372
|
+
case FloatPrimitiveType:
|
|
373
|
+
case UIntPrimitiveType:
|
|
374
|
+
case IntPrimitiveType: {
|
|
375
|
+
return `resultWriter_.WriteNumberValue(${valueVar})`;
|
|
376
|
+
}
|
|
377
|
+
case MoneyPrimitiveType: {
|
|
378
|
+
return `resultWriter_.WriteNumberValue(int (Math.Round(${valueVar} * 100m)))`;
|
|
379
|
+
}
|
|
380
|
+
case BigIntPrimitiveType: {
|
|
381
|
+
return `resultWriter_.WriteStringValue(${valueVar}.ToString())`;
|
|
382
|
+
}
|
|
383
|
+
case BoolPrimitiveType: {
|
|
384
|
+
return `resultWriter_.WriteBooleanValue(${valueVar})`;
|
|
385
|
+
}
|
|
386
|
+
case BytesPrimitiveType: {
|
|
387
|
+
return `resultWriter_.WriteStringValue(Convert.ToBase64String(${valueVar}))`;
|
|
388
|
+
}
|
|
389
|
+
case DateTimePrimitiveType: {
|
|
390
|
+
return `resultWriter_.WriteStringValue(${valueVar}.ToString("yyyy-MM-ddTHH:mm:ss.FFFFFF'Z'"))`;
|
|
391
|
+
}
|
|
392
|
+
case DatePrimitiveType: {
|
|
393
|
+
return `resultWriter_.WriteStringValue(${valueVar}.ToString("yyyy-MM-dd"))`;
|
|
394
|
+
}
|
|
395
|
+
// TODO: format those
|
|
396
|
+
case CpfPrimitiveType:
|
|
397
|
+
case CnpjPrimitiveType:
|
|
398
|
+
case EmailPrimitiveType:
|
|
399
|
+
case HtmlPrimitiveType:
|
|
400
|
+
case UrlPrimitiveType:
|
|
401
|
+
case UuidPrimitiveType:
|
|
402
|
+
case Base64PrimitiveType:
|
|
403
|
+
case HexPrimitiveType:
|
|
404
|
+
case XmlPrimitiveType: {
|
|
405
|
+
return `resultWriter_.WriteStringValue(${valueVar})`;
|
|
406
|
+
}
|
|
407
|
+
case OptionalType: {
|
|
408
|
+
let realBaseType = type.base;
|
|
409
|
+
while (realBaseType instanceof TypeReference) {
|
|
410
|
+
realBaseType = realBaseType.type;
|
|
411
|
+
}
|
|
412
|
+
return `
|
|
413
|
+
if (${valueVar}.IsNone) then
|
|
414
|
+
resultWriter_.WriteNullValue()
|
|
415
|
+
else
|
|
416
|
+
${encodeType(realBaseType, `${valueVar}.Value`, path, suffix, isRef)}
|
|
417
|
+
`
|
|
418
|
+
.replace(/\n {14}/gu, "\n")
|
|
419
|
+
.trim();
|
|
420
|
+
}
|
|
421
|
+
case TypeReference:
|
|
422
|
+
return encodeType(type.type, valueVar, path, suffix, isRef);
|
|
423
|
+
case EnumType:
|
|
424
|
+
return `Encode${type.name} ${valueVar} resultWriter_ ${path}`;
|
|
425
|
+
case StructType:
|
|
426
|
+
return `Encode${type.name} ${valueVar} resultWriter_ ${path}`;
|
|
427
|
+
case JsonPrimitiveType:
|
|
428
|
+
return `${valueVar}.WriteTo(resultWriter_)`;
|
|
429
|
+
case ArrayType: {
|
|
430
|
+
return `
|
|
431
|
+
resultWriter_.WriteStartArray()
|
|
432
|
+
for i${suffix} in 0..${valueVar}.Length - 1 do
|
|
433
|
+
${encodeType(type.base, `${valueVar}.[i${suffix}]`, `${path}`, suffix + 1).replace(/\n/gu, "\n ")}
|
|
434
|
+
resultWriter_.WriteEndArray()
|
|
435
|
+
`
|
|
436
|
+
.replace(/\n {14}/gu, "\n")
|
|
437
|
+
.trim();
|
|
438
|
+
}
|
|
439
|
+
default:
|
|
440
|
+
throw new Error(`BUG: encodeType with ${type.constructor.name}`);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
export function generateStruct(struct) {
|
|
444
|
+
return `
|
|
445
|
+
type ${struct.name} = {
|
|
446
|
+
${struct.fields.map(field => `${capitalize(field.name)}: ${generateTypeName(field.type)}`).join(";\n ")}
|
|
447
|
+
} with
|
|
448
|
+
static member Create (${struct.fields.map(field => `${ident(field.name)}: ${generateTypeName(field.type)}`).join(", ")}): ${struct.name} =
|
|
449
|
+
{ ${struct.fields.map(field => `${capitalize(field.name)} = ${ident(field.name)}`).join("; ")} }
|
|
450
|
+
|
|
451
|
+
let Decode${struct.name} (json_: JsonElement) (path_: string): ${struct.name} =
|
|
452
|
+
if (json_.ValueKind <> JsonValueKind.Object) then raise (FatalException($"'{path_}' must be an object."))
|
|
453
|
+
${struct.fields
|
|
454
|
+
.map(field => `
|
|
455
|
+
let ${field.name}Json_ = decodeJsonElementStrict ${JSON.stringify(field.name)} json_ $"{path_}.${field.name}"
|
|
456
|
+
let ${ident(field.name)} =
|
|
457
|
+
${decodeType(field.type, `${field.name}Json_`, `$"{path_}.${field.name}"`, ident(field.name)).replace(/\n/gu, "\n ")}
|
|
458
|
+
`)
|
|
459
|
+
.join("")}
|
|
460
|
+
{ ${struct.fields.map(field => `${capitalize(field.name)} = ${ident(field.name)}`).join("; ")} }
|
|
461
|
+
|
|
462
|
+
let Encode${struct.name} (obj_: ${struct.name}) (resultWriter_: Utf8JsonWriter) (path_: string) =
|
|
463
|
+
resultWriter_.WriteStartObject()
|
|
464
|
+
${struct.fields
|
|
465
|
+
.map(field => `
|
|
466
|
+
resultWriter_.WritePropertyName(${JSON.stringify(field.name)})
|
|
467
|
+
${encodeType(field.type, `obj_.${capitalize(field.name)}`, `$"{path_}.${field.name}"`).replace(/\n/gu, "\n ")}`)
|
|
468
|
+
.join("\n")}
|
|
469
|
+
resultWriter_.WriteEndObject()`;
|
|
470
|
+
}
|
|
471
|
+
export function generateEnum(type) {
|
|
472
|
+
return `
|
|
473
|
+
type ${type.name} =
|
|
474
|
+
${type.values.map(({ value }) => `| ${capitalize(value)}`).join("\n ")}
|
|
475
|
+
|
|
476
|
+
let Decode${type.name} (json_: JsonElement) (path_: string): ${type.name} =
|
|
477
|
+
if (json_.ValueKind <> JsonValueKind.String) then raise (FatalException($"'{path_}' must be a string."))
|
|
478
|
+
match json_.GetString() with
|
|
479
|
+
${type.values.map(({ value }) => `| "${value}" -> ${type.name}.${capitalize(value)}`).join("\n ")}
|
|
480
|
+
| _ -> raise (FatalException($"'{path_}' must be one of: (${type.values.map(({ value }) => `'${value}'`).join(", ")})."))
|
|
481
|
+
|
|
482
|
+
let Encode${type.name} (obj_: ${type.name}) (resultWriter_: Utf8JsonWriter) (path_: string) =
|
|
483
|
+
match obj_ with
|
|
484
|
+
${type.values.map(({ value }) => `| ${type.name}.${capitalize(value)} -> resultWriter_.WriteStringValue("${value}")`).join("\n ")}
|
|
485
|
+
|
|
486
|
+
`;
|
|
487
|
+
}
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsTUFBTSxhQUFhLEdBQUc7SUFDcEIsVUFBVTtJQUNWLElBQUk7SUFDSixNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sU0FBUztJQUNULE9BQU87SUFDUCxPQUFPO0lBQ1AsVUFBVTtJQUNWLFNBQVM7SUFDVCxTQUFTO0lBQ1QsVUFBVTtJQUNWLElBQUk7SUFDSixRQUFRO0lBQ1IsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsVUFBVTtJQUNWLFFBQVE7SUFDUixPQUFPO0lBQ1AsU0FBUztJQUNULE9BQU87SUFDUCxPQUFPO0lBQ1AsS0FBSztJQUNMLFNBQVM7SUFDVCxNQUFNO0lBQ04sSUFBSTtJQUNKLFVBQVU7SUFDVixJQUFJO0lBQ0osS0FBSztJQUNMLFdBQVc7SUFDWCxVQUFVO0lBQ1YsSUFBSTtJQUNKLE1BQU07SUFDTixNQUFNO0lBQ04sV0FBVztJQUNYLEtBQUs7SUFDTCxNQUFN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TztPQUNGLElBQUksQ0FBQyxJQUFJO0lBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7WUFFN0QsSUFBSSxDQUFDLElBQUksMENBQTBDLElBQUksQ0FBQyxJQUFJOzs7SUFHcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs4REFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7WUFFekcsSUFBSSxDQUFDLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSTs7SUFFckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDOztDQUVuSSxDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gXCJAc2RrZ2VuL3BhcnNlclwiO1xuaW1wb3J0IHtcbiAgQXJyYXlUeXBlLFxuICBCYXNlNjRQcmltaXRpdmVUeXBlLFxuICBCaWdJbnRQcmltaXRpdmVUeXBlLFxuICBCb29sUHJpbWl0aXZlVHlwZSxcbiAgQnl0ZXNQcmltaXRpdmVUeXBlLFxuICBDbnBqUHJpbWl0aXZlVHlwZSxcbiAgQ3BmUHJpbWl0aXZlVHlwZSxcbiAgRGF0ZVByaW1pdGl2ZVR5cGUsXG4gIERhdGVUaW1lUHJpbWl0aXZlVHlwZSxcbiAgRW1haWxQcmltaXRpdmVUeXBlLFxuICBFbnVtVHlwZSxcbiAgRmxvYXRQcmltaXRpdmVUeXBlLFxuICBIZXhQcmltaXRpdmVUeXBlLFxuICBIdG1sUHJpbWl0aXZlVHlwZSxcbiAgSW50UHJpbWl0aXZlVHlwZSxcbiAgSnNvblByaW1pdGl2ZVR5cGUsXG4gIE1vbmV5UHJpbWl0aXZlVHlwZSxcbiAgT3B0aW9uYWxUeXBlLFxuICBTdHJpbmdQcmltaXRpdmVUeXBlLFxuICBTdHJ1Y3RUeXBlLFxuICBUeXBlUmVmZXJlbmNlLFxuICBVSW50UHJpbWl0aXZlVHlwZSxcbiAgVXJsUHJpbWl0aXZlVHlwZSxcbiAgVXVpZFByaW1pdGl2ZVR5cGUsXG4gIFZvaWRQcmltaXRpdmVUeXBlLFxuICBYbWxQcmltaXRpdmVUeXBlLFxufSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcblxuY29uc3QgcmVzZXJ2ZWRXb3JkcyA9IFtcbiAgXCJhYnN0cmFjdFwiLFxuICBcImFzXCIsXG4gIFwiYmFzZVwiLFxuICBcImJvb2xcIixcbiAgXCJicmVha1wiLFxuICBcImJ5dGVcIixcbiAgXCJjYXNlXCIsXG4gIFwiY2F0Y2hcIixcbiAgXCJjaGFyXCIsXG4gIFwiY2hlY2tlZFwiLFxuICBcImNsYXNzXCIsXG4gIFwiY29uc3RcIixcbiAgXCJjb250aW51ZVwiLFxuICBcImRlY2ltYWxcIixcbiAgXCJkZWZhdWx0XCIsXG4gIFwiZGVsZWdhdGVcIixcbiAgXCJkb1wiLFxuICBcImRvdWJsZVwiLFxuICBcImVsc2VcIixcbiAgXCJlbnVtXCIsXG4gIFwiZXZlbnRcIixcbiAgXCJleHBsaWNpdFwiLFxuICBcImV4dGVyblwiLFxuICBcImZhbHNlXCIsXG4gIFwiZmluYWxseVwiLFxuICBcImZpeGVkXCIsXG4gIFwiZmxvYXRcIixcbiAgXCJmb3JcIixcbiAgXCJmb3JlYWNoXCIsXG4gIFwiZ290b1wiLFxuICBcImlmXCIsXG4gIFwiaW1wbGljaXRcIixcbiAgXCJpblwiLFxuICBcImludFwiLFxuICBcImludGVyZmFjZVwiLFxuICBcImludGVybmFsXCIsXG4gIFwiaXNcIixcbiAgXCJsb2NrXCIsXG4gIFwibG9uZ1wiLFxuICBcIm5hbWVzcGFjZVwiLFxuICBcIm5ld1wiLFxuICBcIm51bGxcIixcbiAgXCJvYmplY3RcIixcbiAgXCJvcGVyYXRvclwiLFxuICBcIm91dFwiLFxuICBcIm92ZXJyaWRlXCIsXG4gIFwicGFyYW1zXCIsXG4gIFwicHJpdmF0ZVwiLFxuICBcInByb3RlY3RlZFwiLFxuICBcInB1YmxpY1wiLFxuICBcInJlYWRvbmx5XCIsXG4gIFwicmVmXCIsXG4gIFwicmV0dXJuXCIsXG4gIFwic2J5dGVcIixcbiAgXCJzZWFsZWRcIixcbiAgXCJzaG9ydFwiLFxuICBcInNpemVvZlwiLFxuICBcInN0YWNrYWxsb2NcIixcbiAgXCJzdGF0aWNcIixcbiAgXCJzdHJpbmdcIixcbiAgXCJzdHJ1Y3RcIixcbiAgXCJzd2l0Y2hcIixcbiAgXCJ0aGlzXCIsXG4gIFwidGhyb3dcIixcbiAgXCJ0cnVlXCIsXG4gIFwidHJ5XCIsXG4gIFwidHlwZW9mXCIsXG4gIFwidWludFwiLFxuICBcInVsb25nXCIsXG4gIFwidW5jaGVja2VkXCIsXG4gIFwidW5zYWZlXCIsXG4gIFwidXNob3J0XCIsXG4gIFwidXNpbmdcIixcbiAgXCJ1c2luZ1wiLFxuICBcInN0YXRpY1wiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2b2lkXCIsXG4gIFwidm9sYXRpbGVcIixcbiAgXCJ3aGlsZVwiLFxuICBcInR5cGVcIixcbiAgXCJlbmRcIixcbiAgXCJpZFwiLFxuXTtcblxuY29uc3QgdHlwZXNXaXRoTmF0aXZlTnVsbGFibGU6IEZ1bmN0aW9uW10gPSBbXG4gIFN0cmluZ1ByaW1pdGl2ZVR5cGUsXG4gIEh0bWxQcmltaXRpdmVUeXBlLFxuICBDcGZQcmltaXRpdmVUeXBlLFxuICBDbnBqUHJpbWl0aXZlVHlwZSxcbiAgQnl0ZXNQcmltaXRpdmVUeXBlLFxuICBFbWFpbFByaW1pdGl2ZVR5cGUsXG4gIFVybFByaW1pdGl2ZVR5cGUsXG4gIFV1aWRQcmltaXRpdmVUeXBlLFxuICBIZXhQcmltaXRpdmVUeXBlLFxuICBCYXNlNjRQcmltaXRpdmVUeXBlLFxuICBYbWxQcmltaXRpdmVUeXBlLFxuICBTdHJ1Y3RUeXBlLFxuICBBcnJheVR5cGUsXG5dO1xuXG5jb25zdCBuZWVkc1RlbXBWYXJGb3JOdWxsYWJsZTogRnVuY3Rpb25bXSA9IFtcbiAgQmlnSW50UHJpbWl0aXZlVHlwZSxcbiAgRGF0ZVByaW1pdGl2ZVR5cGUsXG4gIERhdGVUaW1lUHJpbWl0aXZlVHlwZSxcbiAgRmxvYXRQcmltaXRpdmVUeXBlLFxuICBJbnRQcmltaXRpdmVUeXBlLFxuICBNb25leVByaW1pdGl2ZVR5cGUsXG4gIFVJbnRQcmltaXRpdmVUeXBlLFxuICBBcnJheVR5cGUsXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc2VydmVkV29yZHMuaW5jbHVkZXMobmFtZSkgPyBgJHtuYW1lfSdgIDogbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVbMF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVR5cGVOYW1lKHR5cGU6IFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUuY29uc3RydWN0b3IpIHtcbiAgICBjYXNlIFN0cmluZ1ByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIEludFByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJpbnRcIjtcbiAgICBjYXNlIFVJbnRQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwidWludFwiO1xuICAgIGNhc2UgRmxvYXRQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwiZG91YmxlXCI7XG4gICAgY2FzZSBCaWdJbnRQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwiYmlnaW50XCI7XG4gICAgY2FzZSBEYXRlUHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIERhdGVUaW1lUHJpbWl0aXZlVHlwZTpcbiAgICAgIHJldHVybiBcIkRhdGVUaW1lXCI7XG4gICAgY2FzZSBCb29sUHJpbWl0aXZlVHlwZTpcbiAgICAgIHJldHVybiBcImJvb2xcIjtcbiAgICBjYXNlIEJ5dGVzUHJpbWl0aXZlVHlwZTpcbiAgICAgIHJldHVybiBcImJ5dGVbXVwiO1xuICAgIGNhc2UgTW9uZXlQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwiZGVjaW1hbFwiO1xuICAgIGNhc2UgVXVpZFByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJHdWlkXCI7XG4gICAgY2FzZSBDcGZQcmltaXRpdmVUeXBlOlxuICAgIGNhc2UgQ25walByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBFbWFpbFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBIdG1sUHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIFVybFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBIZXhQcmltaXRpdmVUeXBlOlxuICAgIGNhc2UgQmFzZTY0UHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIFhtbFByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFZvaWRQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgSnNvblByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJKc29uRWxlbWVudFwiO1xuICAgIGNhc2UgT3B0aW9uYWxUeXBlOlxuICAgICAgcmV0dXJuIGAke2dlbmVyYXRlVHlwZU5hbWUoKHR5cGUgYXMgT3B0aW9uYWxUeXBlKS5iYXNlKX0gb3B0aW9uYDtcbiAgICBjYXNlIEFycmF5VHlwZTpcbiAgICAgIHJldHVybiBgJHtnZW5lcmF0ZVR5cGVOYW1lKCh0eXBlIGFzIEFycmF5VHlwZSkuYmFzZSl9IGxpc3RgO1xuICAgIGNhc2UgU3RydWN0VHlwZTpcbiAgICAgIHJldHVybiB0eXBlLm5hbWU7XG4gICAgY2FzZSBFbnVtVHlwZTpcbiAgICAgIHJldHVybiB0eXBlLm5hbWU7XG4gICAgY2FzZSBUeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIGdlbmVyYXRlVHlwZU5hbWUoKHR5cGUgYXMgVHlwZVJlZmVyZW5jZSkudHlwZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBnZW5lcmF0ZVR5cGVOYW1lIHdpdGggJHt0eXBlLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVR5cGUodHlwZTogVHlwZSwganNvbkVsZW1lbnRWYXI6IHN0cmluZywgcGF0aDogc3RyaW5nLCB0YXJnZXRWYXI6IHN0cmluZywgc3VmZml4ID0gMSwgbWF5YmVOdWxsID0gdHJ1ZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAodHlwZS5jb25zdHJ1Y3Rvcikge1xuICAgIGNhc2UgSW50UHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgZGVjb2RlSW50MzIgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBVSW50UHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgZGVjb2RlVUludDMyICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgTW9uZXlQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIChkZWNvZGVNb25leSAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9KSAvIDEwMG1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgRmxvYXRQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZUZsb2F0ICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgQmlnSW50UHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICBkZWNvZGVCaWdJbnQgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBTdHJpbmdQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZVN0cmluZyAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIEh0bWxQcmltaXRpdmVUeXBlOiB7XG4gICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBIVE1MXG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZUh0bWwgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBDcGZQcmltaXRpdmVUeXBlOiB7XG4gICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBDUEZcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlQ3BmICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgQ25walByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIC8vIFRPRE86IHZhbGlkYXRlIENOUEpcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlQ25waiAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIEVtYWlsUHJpbWl0aXZlVHlwZToge1xuICAgICAgLy8gVE9ETzogdmFsaWRhdGUgRW1haWxcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlRW1haWwgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBVcmxQcmltaXRpdmVUeXBlOiB7XG4gICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBVUkxcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlVXJsICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgVXVpZFByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIC8vIFRPRE86IHZhbGlkYXRlIFVVSURcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlVXVpZCAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIEhleFByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIC8vIFRPRE86IHZhbGlkYXRlIEhleFxuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICBkZWNvZGVIZXggJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBCYXNlNjRQcmltaXRpdmVUeXBlOiB7XG4gICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBCYXNlNjRcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlQmFzZTY0ICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgWG1sUHJpbWl0aXZlVHlwZToge1xuICAgICAgLy8gVE9ETzogdmFsaWRhdGUgWE1MXG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZVhtbCAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIEJvb2xQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZUJvb2wgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBCeXRlc1ByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlQnl0ZXMgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBUeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIGRlY29kZVR5cGUoKHR5cGUgYXMgVHlwZVJlZmVyZW5jZSkudHlwZSwganNvbkVsZW1lbnRWYXIsIHBhdGgsIHRhcmdldFZhciwgc3VmZml4KTtcbiAgICBjYXNlIE9wdGlvbmFsVHlwZTpcbiAgICAgIGlmIChuZWVkc1RlbXBWYXJGb3JOdWxsYWJsZS5pbmNsdWRlcygodHlwZSBhcyBPcHRpb25hbFR5cGUpLmJhc2UuY29uc3RydWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBgbWF0Y2ggJHtqc29uRWxlbWVudFZhcn0uVmFsdWVLaW5kIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgSnNvblZhbHVlS2luZC5OdWxsIHwgSnNvblZhbHVlS2luZC5VbmRlZmluZWQgLT4gTm9uZVxuICAgICAgICAgICAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICAgICAgICAgICgke2RlY29kZVR5cGUoKHR5cGUgYXMgT3B0aW9uYWxUeXBlKS5iYXNlLCBqc29uRWxlbWVudFZhciwgcGF0aCwgdGFyZ2V0VmFyLCBzdWZmaXgsIGZhbHNlKS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgIC9cXG4vZ3UsXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgICAgIFwiLFxuICAgICAgICAgICAgICAgICAgICApfSkgfD4gU29tZVxuICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgICAgLnRyaW0oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0eXBlIGFzIEFycmF5VHlwZSkuYmFzZSBpbnN0YW5jZW9mIE9wdGlvbmFsVHlwZSB8fCAodHlwZSBhcyBBcnJheVR5cGUpLmJhc2UgaW5zdGFuY2VvZiBBcnJheVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAoPi4+KSBkZWNvZGVPcHRpb25hbCAke2RlY29kZVR5cGUoKHR5cGUgYXMgT3B0aW9uYWxUeXBlKS5iYXNlLCBqc29uRWxlbWVudFZhciwgcGF0aCwgdGFyZ2V0VmFyLCBzdWZmaXgsIGZhbHNlKX1cbiAgICAgICAgICAgIGBcbiAgICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgICAgLnRyaW0oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICBkZWNvZGVPcHRpb25hbCAke2RlY29kZVR5cGUoKHR5cGUgYXMgT3B0aW9uYWxUeXBlKS5iYXNlLCBqc29uRWxlbWVudFZhciwgcGF0aCwgdGFyZ2V0VmFyLCBzdWZmaXgsIGZhbHNlKX1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIGNhc2UgRW51bVR5cGU6XG4gICAgY2FzZSBTdHJ1Y3RUeXBlOlxuICAgICAgcmV0dXJuIGBEZWNvZGUke3R5cGUubmFtZX0gJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofWA7XG4gICAgY2FzZSBKc29uUHJpbWl0aXZlVHlwZTpcbiAgICAgIGlmIChtYXliZU51bGwpIHtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAke2pzb25FbGVtZW50VmFyfVxuICAgICAgICAgICAgYFxuICAgICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgICAudHJpbSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7dGFyZ2V0VmFyfSA8LSAke2pzb25FbGVtZW50VmFyfWA7XG5cbiAgICBjYXNlIERhdGVUaW1lUHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICBkZWNvZGVEYXRlVGltZSAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIERhdGVQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZURhdGUgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBBcnJheVR5cGU6IHtcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgbWF0Y2ggJHtqc29uRWxlbWVudFZhcn0uVmFsdWVLaW5kIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgSnNvblZhbHVlS2luZC5BcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICBsZXQgbXV0YWJsZSBsaXN0XyA9IExpc3QuZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgZm9yIGkxIGluIDAgLi4gKCR7anNvbkVsZW1lbnRWYXJ9LkdldEFycmF5TGVuZ3RoKCkgLSAxKSBkb1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gJHtqc29uRWxlbWVudFZhcn0uW2kxXVxuICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0aWFsUmVzdWx0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICR7ZGVjb2RlVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgYXMgQXJyYXlUeXBlKS5iYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtqc29uRWxlbWVudFZhcn0uW2kxXWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhdGguc2xpY2UoMCwgLTEpfS57aTF9XCJgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICApLnJlcGxhY2UoL1xcbi9ndSwgXCJcXG4gICAgICAgICAgICAgICAgICAgICAgXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIGxpc3RfIDwtIGxpc3RfIHw+IExpc3QuYXBwZW5kIFsgcGFydGlhbFJlc3VsdCBdXG4gICAgICAgICAgICAgICAgICAgIGxpc3RfXG4gICAgICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKCR7cGF0aC5zbGljZSgwLCAtMSl9IG11c3QgYmUgYW4gYXJyYXkuXCIpKVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBkZWNvZGVUeXBlIHdpdGggJHt0eXBlLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVR5cGUodHlwZTogVHlwZSwgdmFsdWVWYXI6IHN0cmluZywgcGF0aDogc3RyaW5nLCBzdWZmaXggPSAxLCBpc1JlZiA9IHRydWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUuY29uc3RydWN0b3IpIHtcbiAgICBjYXNlIFN0cmluZ1ByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgcmVzdWx0V3JpdGVyXy5Xcml0ZVN0cmluZ1ZhbHVlKCR7dmFsdWVWYXJ9KWA7XG4gICAgfVxuXG4gICAgY2FzZSBGbG9hdFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBVSW50UHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIEludFByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgcmVzdWx0V3JpdGVyXy5Xcml0ZU51bWJlclZhbHVlKCR7dmFsdWVWYXJ9KWA7XG4gICAgfVxuXG4gICAgY2FzZSBNb25leVByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgcmVzdWx0V3JpdGVyXy5Xcml0ZU51bWJlclZhbHVlKGludCAoTWF0aC5Sb3VuZCgke3ZhbHVlVmFyfSAqIDEwMG0pKSlgO1xuICAgIH1cblxuICAgIGNhc2UgQmlnSW50UHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGByZXN1bHRXcml0ZXJfLldyaXRlU3RyaW5nVmFsdWUoJHt2YWx1ZVZhcn0uVG9TdHJpbmcoKSlgO1xuICAgIH1cblxuICAgIGNhc2UgQm9vbFByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgcmVzdWx0V3JpdGVyXy5Xcml0ZUJvb2xlYW5WYWx1ZSgke3ZhbHVlVmFyfSlgO1xuICAgIH1cblxuICAgIGNhc2UgQnl0ZXNQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYHJlc3VsdFdyaXRlcl8uV3JpdGVTdHJpbmdWYWx1ZShDb252ZXJ0LlRvQmFzZTY0U3RyaW5nKCR7dmFsdWVWYXJ9KSlgO1xuICAgIH1cblxuICAgIGNhc2UgRGF0ZVRpbWVQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYHJlc3VsdFdyaXRlcl8uV3JpdGVTdHJpbmdWYWx1ZSgke3ZhbHVlVmFyfS5Ub1N0cmluZyhcInl5eXktTU0tZGRUSEg6bW06c3MuRkZGRkZGJ1onXCIpKWA7XG4gICAgfVxuXG4gICAgY2FzZSBEYXRlUHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGByZXN1bHRXcml0ZXJfLldyaXRlU3RyaW5nVmFsdWUoJHt2YWx1ZVZhcn0uVG9TdHJpbmcoXCJ5eXl5LU1NLWRkXCIpKWA7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZm9ybWF0IHRob3NlXG4gICAgY2FzZSBDcGZQcmltaXRpdmVUeXBlOlxuICAgIGNhc2UgQ25walByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBFbWFpbFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBIdG1sUHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIFVybFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBVdWlkUHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIEJhc2U2NFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBIZXhQcmltaXRpdmVUeXBlOlxuICAgIGNhc2UgWG1sUHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGByZXN1bHRXcml0ZXJfLldyaXRlU3RyaW5nVmFsdWUoJHt2YWx1ZVZhcn0pYDtcbiAgICB9XG5cbiAgICBjYXNlIE9wdGlvbmFsVHlwZToge1xuICAgICAgbGV0IHJlYWxCYXNlVHlwZSA9ICh0eXBlIGFzIE9wdGlvbmFsVHlwZSkuYmFzZTtcblxuICAgICAgd2hpbGUgKHJlYWxCYXNlVHlwZSBpbnN0YW5jZW9mIFR5cGVSZWZlcmVuY2UpIHtcbiAgICAgICAgcmVhbEJhc2VUeXBlID0gcmVhbEJhc2VUeXBlLnR5cGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgIGlmICgke3ZhbHVlVmFyfS5Jc05vbmUpIHRoZW5cbiAgICAgICAgICAgICAgICByZXN1bHRXcml0ZXJfLldyaXRlTnVsbFZhbHVlKClcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICR7ZW5jb2RlVHlwZShyZWFsQmFzZVR5cGUsIGAke3ZhbHVlVmFyfS5WYWx1ZWAsIHBhdGgsIHN1ZmZpeCwgaXNSZWYpfVxuICAgICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE0fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIFR5cGVSZWZlcmVuY2U6XG4gICAgICByZXR1cm4gZW5jb2RlVHlwZSgodHlwZSBhcyBUeXBlUmVmZXJlbmNlKS50eXBlLCB2YWx1ZVZhciwgcGF0aCwgc3VmZml4LCBpc1JlZik7XG4gICAgY2FzZSBFbnVtVHlwZTpcbiAgICAgIHJldHVybiBgRW5jb2RlJHt0eXBlLm5hbWV9ICR7dmFsdWVWYXJ9IHJlc3VsdFdyaXRlcl8gJHtwYXRofWA7XG4gICAgY2FzZSBTdHJ1Y3RUeXBlOlxuICAgICAgcmV0dXJuIGBFbmNvZGUke3R5cGUubmFtZX0gJHt2YWx1ZVZhcn0gcmVzdWx0V3JpdGVyXyAke3BhdGh9YDtcbiAgICBjYXNlIEpzb25QcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIGAke3ZhbHVlVmFyfS5Xcml0ZVRvKHJlc3VsdFdyaXRlcl8pYDtcbiAgICBjYXNlIEFycmF5VHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgcmVzdWx0V3JpdGVyXy5Xcml0ZVN0YXJ0QXJyYXkoKVxuICAgICAgICAgICAgICBmb3IgaSR7c3VmZml4fSBpbiAwLi4ke3ZhbHVlVmFyfS5MZW5ndGggLSAxIGRvXG4gICAgICAgICAgICAgICAgJHtlbmNvZGVUeXBlKCh0eXBlIGFzIEFycmF5VHlwZSkuYmFzZSwgYCR7dmFsdWVWYXJ9LltpJHtzdWZmaXh9XWAsIGAke3BhdGh9YCwgc3VmZml4ICsgMSkucmVwbGFjZSgvXFxuL2d1LCBcIlxcbiAgICAgICAgICAgICAgICBcIil9XG4gICAgICAgICAgICAgIHJlc3VsdFdyaXRlcl8uV3JpdGVFbmRBcnJheSgpXG4gICAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTR9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogZW5jb2RlVHlwZSB3aXRoICR7dHlwZS5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0cnVjdChzdHJ1Y3Q6IFN0cnVjdFR5cGUpOiBzdHJpbmcge1xuICByZXR1cm4gYFxudHlwZSAke3N0cnVjdC5uYW1lfSA9IHtcbiAgJHtzdHJ1Y3QuZmllbGRzLm1hcChmaWVsZCA9PiBgJHtjYXBpdGFsaXplKGZpZWxkLm5hbWUpfTogJHtnZW5lcmF0ZVR5cGVOYW1lKGZpZWxkLnR5cGUpfWApLmpvaW4oXCI7XFxuICBcIil9XG59IHdpdGhcbiAgc3RhdGljIG1lbWJlciBDcmVhdGUgKCR7c3RydWN0LmZpZWxkcy5tYXAoZmllbGQgPT4gYCR7aWRlbnQoZmllbGQubmFtZSl9OiAke2dlbmVyYXRlVHlwZU5hbWUoZmllbGQudHlwZSl9YCkuam9pbihcIiwgXCIpfSk6ICR7c3RydWN0Lm5hbWV9ID1cbiAgICB7ICR7c3RydWN0LmZpZWxkcy5tYXAoZmllbGQgPT4gYCR7Y2FwaXRhbGl6ZShmaWVsZC5uYW1lKX0gPSAke2lkZW50KGZpZWxkLm5hbWUpfWApLmpvaW4oXCI7IFwiKX0gfVxuXG5sZXQgRGVjb2RlJHtzdHJ1Y3QubmFtZX0gKGpzb25fOiBKc29uRWxlbWVudCkgKHBhdGhfOiBzdHJpbmcpOiAke3N0cnVjdC5uYW1lfSA9XG4gIGlmIChqc29uXy5WYWx1ZUtpbmQgPD4gSnNvblZhbHVlS2luZC5PYmplY3QpIHRoZW4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKCRcIid7cGF0aF99JyBtdXN0IGJlIGFuIG9iamVjdC5cIikpXG4gICR7c3RydWN0LmZpZWxkc1xuICAgIC5tYXAoXG4gICAgICBmaWVsZCA9PlxuICAgICAgICBgXG4gIGxldCAke2ZpZWxkLm5hbWV9SnNvbl8gPSBkZWNvZGVKc29uRWxlbWVudFN0cmljdCAke0pTT04uc3RyaW5naWZ5KGZpZWxkLm5hbWUpfSBqc29uXyAkXCJ7cGF0aF99LiR7ZmllbGQubmFtZX1cIlxuICBsZXQgJHtpZGVudChmaWVsZC5uYW1lKX0gPVxuICAgICR7ZGVjb2RlVHlwZShmaWVsZC50eXBlLCBgJHtmaWVsZC5uYW1lfUpzb25fYCwgYCRcIntwYXRoX30uJHtmaWVsZC5uYW1lfVwiYCwgaWRlbnQoZmllbGQubmFtZSkpLnJlcGxhY2UoL1xcbi9ndSwgXCJcXG4gIFwiKX1cbiAgYCxcbiAgICApXG4gICAgLmpvaW4oXCJcIil9XG4gIHsgJHtzdHJ1Y3QuZmllbGRzLm1hcChmaWVsZCA9PiBgJHtjYXBpdGFsaXplKGZpZWxkLm5hbWUpfSA9ICR7aWRlbnQoZmllbGQubmFtZSl9YCkuam9pbihcIjsgXCIpfSB9XG5cbmxldCBFbmNvZGUke3N0cnVjdC5uYW1lfSAob2JqXzogJHtzdHJ1Y3QubmFtZX0pIChyZXN1bHRXcml0ZXJfOiBVdGY4SnNvbldyaXRlcikgKHBhdGhfOiBzdHJpbmcpID1cbiAgcmVzdWx0V3JpdGVyXy5Xcml0ZVN0YXJ0T2JqZWN0KClcbiAgJHtzdHJ1Y3QuZmllbGRzXG4gICAgLm1hcChcbiAgICAgIGZpZWxkID0+XG4gICAgICAgIGBcbiAgcmVzdWx0V3JpdGVyXy5Xcml0ZVByb3BlcnR5TmFtZSgke0pTT04uc3RyaW5naWZ5KGZpZWxkLm5hbWUpfSlcbiAgJHtlbmNvZGVUeXBlKGZpZWxkLnR5cGUsIGBvYmpfLiR7Y2FwaXRhbGl6ZShmaWVsZC5uYW1lKX1gLCBgJFwie3BhdGhffS4ke2ZpZWxkLm5hbWV9XCJgKS5yZXBsYWNlKC9cXG4vZ3UsIFwiXFxuICBcIil9YCxcbiAgICApXG4gICAgLmpvaW4oXCJcXG5cIil9XG4gIHJlc3VsdFdyaXRlcl8uV3JpdGVFbmRPYmplY3QoKWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUVudW0odHlwZTogRW51bVR5cGUpOiBzdHJpbmcge1xuICByZXR1cm4gYFxudHlwZSAke3R5cGUubmFtZX0gPVxuICAke3R5cGUudmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiBgfCAke2NhcGl0YWxpemUodmFsdWUpfWApLmpvaW4oXCJcXG4gIFwiKX1cblxubGV0IERlY29kZSR7dHlwZS5uYW1lfSAoanNvbl86IEpzb25FbGVtZW50KSAocGF0aF86IHN0cmluZyk6ICR7dHlwZS5uYW1lfSA9XG4gIGlmIChqc29uXy5WYWx1ZUtpbmQgPD4gSnNvblZhbHVlS2luZC5TdHJpbmcpIHRoZW4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKCRcIid7cGF0aF99JyBtdXN0IGJlIGEgc3RyaW5nLlwiKSlcbiAgbWF0Y2gganNvbl8uR2V0U3RyaW5nKCkgd2l0aFxuICAke3R5cGUudmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiBgfCBcIiR7dmFsdWV9XCIgLT4gJHt0eXBlLm5hbWV9LiR7Y2FwaXRhbGl6ZSh2YWx1ZSl9YCkuam9pbihcIlxcbiAgXCIpfVxuICB8IF8gLT4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKCRcIid7cGF0aF99JyBtdXN0IGJlIG9uZSBvZjogKCR7dHlwZS52YWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IGAnJHt2YWx1ZX0nYCkuam9pbihcIiwgXCIpfSkuXCIpKVxuXG5sZXQgRW5jb2RlJHt0eXBlLm5hbWV9IChvYmpfOiAke3R5cGUubmFtZX0pIChyZXN1bHRXcml0ZXJfOiBVdGY4SnNvbldyaXRlcikgKHBhdGhfOiBzdHJpbmcpID1cbiAgbWF0Y2ggb2JqXyB3aXRoXG4gICR7dHlwZS52YWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IGB8ICR7dHlwZS5uYW1lfS4ke2NhcGl0YWxpemUodmFsdWUpfSAtPiByZXN1bHRXcml0ZXJfLldyaXRlU3RyaW5nVmFsdWUoXCIke3ZhbHVlfVwiKWApLmpvaW4oXCJcXG4gIFwiKX1cblxuYDtcbn1cbiJdfQ==
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./fsharp-server.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ZzaGFycC1zZXJ2ZXIuanNcIjtcbiJdfQ==
|