@sdkgen/fsharp-generator 0.0.0-dev.20230109134521 → 0.0.0-dev.20230109212108

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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsTUFBTSxhQUFhLEdBQUc7SUFDcEIsVUFBVTtJQUNWLElBQUk7SUFDSixNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sU0FBUztJQUNULE9BQU87SUFDUCxPQUFPO0lBQ1AsVUFBVTtJQUNWLFNBQVM7SUFDVCxTQUFTO0lBQ1QsVUFBVTtJQUNWLElBQUk7SUFDSixRQUFRO0lBQ1IsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsVUFBVTtJQUNWLFFBQVE7SUFDUixPQUFPO0lBQ1AsU0FBUztJQUNULE9BQU87SUFDUCxPQUFPO0lBQ1AsS0FBSztJQUNMLFNBQVM7SUFDVCxNQUFNO0lBQ04sSUFBSTtJQUNKLFVBQVU7SUFDVixJQUFJO0lBQ0osS0FBSztJQUNMLFdBQVc7SUFDWCxVQUFVO0lBQ1YsSUFBSTtJQUNKLE1BQU07SUFDTixNQUFNO0lBQ04sV0FBVztJQUNYLEtBQUs7SUFDTCxN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T0FBTztPQUNGLElBQUksQ0FBQyxJQUFJO0lBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7WUFFN0QsSUFBSSxDQUFDLElBQUksMENBQTBDLElBQUksQ0FBQyxJQUFJOzs7SUFHcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs4REFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs7WUFFekcsSUFBSSxDQUFDLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSTs7SUFFckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDOztDQUVuSSxDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gXCJAc2RrZ2VuL3BhcnNlclwiO1xuaW1wb3J0IHtcbiAgQXJyYXlUeXBlLFxuICBCYXNlNjRQcmltaXRpdmVUeXBlLFxuICBCaWdJbnRQcmltaXRpdmVUeXBlLFxuICBCb29sUHJpbWl0aXZlVHlwZSxcbiAgQnl0ZXNQcmltaXRpdmVUeXBlLFxuICBDbnBqUHJpbWl0aXZlVHlwZSxcbiAgQ3BmUHJpbWl0aXZlVHlwZSxcbiAgRGF0ZVByaW1pdGl2ZVR5cGUsXG4gIERhdGVUaW1lUHJpbWl0aXZlVHlwZSxcbiAgRW1haWxQcmltaXRpdmVUeXBlLFxuICBFbnVtVHlwZSxcbiAgRmxvYXRQcmltaXRpdmVUeXBlLFxuICBIZXhQcmltaXRpdmVUeXBlLFxuICBIdG1sUHJpbWl0aXZlVHlwZSxcbiAgSW50UHJpbWl0aXZlVHlwZSxcbiAgSnNvblByaW1pdGl2ZVR5cGUsXG4gIE1vbmV5UHJpbWl0aXZlVHlwZSxcbiAgT3B0aW9uYWxUeXBlLFxuICBTdHJpbmdQcmltaXRpdmVUeXBlLFxuICBTdHJ1Y3RUeXBlLFxuICBUeXBlUmVmZXJlbmNlLFxuICBVSW50UHJpbWl0aXZlVHlwZSxcbiAgVXJsUHJpbWl0aXZlVHlwZSxcbiAgVXVpZFByaW1pdGl2ZVR5cGUsXG4gIFZvaWRQcmltaXRpdmVUeXBlLFxuICBYbWxQcmltaXRpdmVUeXBlLFxufSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcblxuY29uc3QgcmVzZXJ2ZWRXb3JkcyA9IFtcbiAgXCJhYnN0cmFjdFwiLFxuICBcImFzXCIsXG4gIFwiYmFzZVwiLFxuICBcImJvb2xcIixcbiAgXCJicmVha1wiLFxuICBcImJ5dGVcIixcbiAgXCJjYXNlXCIsXG4gIFwiY2F0Y2hcIixcbiAgXCJjaGFyXCIsXG4gIFwiY2hlY2tlZFwiLFxuICBcImNsYXNzXCIsXG4gIFwiY29uc3RcIixcbiAgXCJjb250aW51ZVwiLFxuICBcImRlY2ltYWxcIixcbiAgXCJkZWZhdWx0XCIsXG4gIFwiZGVsZWdhdGVcIixcbiAgXCJkb1wiLFxuICBcImRvdWJsZVwiLFxuICBcImVsc2VcIixcbiAgXCJlbnVtXCIsXG4gIFwiZXZlbnRcIixcbiAgXCJleHBsaWNpdFwiLFxuICBcImV4dGVyblwiLFxuICBcImZhbHNlXCIsXG4gIFwiZmluYWxseVwiLFxuICBcImZpeGVkXCIsXG4gIFwiZmxvYXRcIixcbiAgXCJmb3JcIixcbiAgXCJmb3JlYWNoXCIsXG4gIFwiZ290b1wiLFxuICBcImlmXCIsXG4gIFwiaW1wbGljaXRcIixcbiAgXCJpblwiLFxuICBcImludFwiLFxuICBcImludGVyZmFjZVwiLFxuICBcImludGVybmFsXCIsXG4gIFwiaXNcIixcbiAgXCJsb2NrXCIsXG4gIFwibG9uZ1wiLFxuICBcIm5hbWVzcGFjZVwiLFxuICBcIm5ld1wiLFxuICBcIm51bGxcIixcbiAgXCJvYmplY3RcIixcbiAgXCJvcGVyYXRvclwiLFxuICBcIm91dFwiLFxuICBcIm92ZXJyaWRlXCIsXG4gIFwicGFyYW1zXCIsXG4gIFwicHJpdmF0ZVwiLFxuICBcInByb3RlY3RlZFwiLFxuICBcInB1YmxpY1wiLFxuICBcInJlYWRvbmx5XCIsXG4gIFwicmVmXCIsXG4gIFwicmV0dXJuXCIsXG4gIFwic2J5dGVcIixcbiAgXCJzZWFsZWRcIixcbiAgXCJzaG9ydFwiLFxuICBcInNpemVvZlwiLFxuICBcInN0YWNrYWxsb2NcIixcbiAgXCJzdGF0aWNcIixcbiAgXCJzdHJpbmdcIixcbiAgXCJzdHJ1Y3RcIixcbiAgXCJzd2l0Y2hcIixcbiAgXCJ0aGlzXCIsXG4gIFwidGhyb3dcIixcbiAgXCJ0cnVlXCIsXG4gIFwidHJ5XCIsXG4gIFwidHlwZW9mXCIsXG4gIFwidWludFwiLFxuICBcInVsb25nXCIsXG4gIFwidW5jaGVja2VkXCIsXG4gIFwidW5zYWZlXCIsXG4gIFwidXNob3J0XCIsXG4gIFwidXNpbmdcIixcbiAgXCJ1c2luZ1wiLFxuICBcInN0YXRpY1wiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2b2lkXCIsXG4gIFwidm9sYXRpbGVcIixcbiAgXCJ3aGlsZVwiLFxuICBcInR5cGVcIixcbiAgXCJlbmRcIixcbiAgXCJpZFwiLFxuXTtcblxuY29uc3QgdHlwZXNXaXRoTmF0aXZlTnVsbGFibGU6IEZ1bmN0aW9uW10gPSBbXG4gIFN0cmluZ1ByaW1pdGl2ZVR5cGUsXG4gIEh0bWxQcmltaXRpdmVUeXBlLFxuICBDcGZQcmltaXRpdmVUeXBlLFxuICBDbnBqUHJpbWl0aXZlVHlwZSxcbiAgQnl0ZXNQcmltaXRpdmVUeXBlLFxuICBFbWFpbFByaW1pdGl2ZVR5cGUsXG4gIFVybFByaW1pdGl2ZVR5cGUsXG4gIFV1aWRQcmltaXRpdmVUeXBlLFxuICBIZXhQcmltaXRpdmVUeXBlLFxuICBCYXNlNjRQcmltaXRpdmVUeXBlLFxuICBYbWxQcmltaXRpdmVUeXBlLFxuICBTdHJ1Y3RUeXBlLFxuICBBcnJheVR5cGUsXG5dO1xuXG5jb25zdCBuZWVkc1RlbXBWYXJGb3JOdWxsYWJsZTogRnVuY3Rpb25bXSA9IFtcbiAgQmlnSW50UHJpbWl0aXZlVHlwZSxcbiAgRGF0ZVByaW1pdGl2ZVR5cGUsXG4gIERhdGVUaW1lUHJpbWl0aXZlVHlwZSxcbiAgRmxvYXRQcmltaXRpdmVUeXBlLFxuICBJbnRQcmltaXRpdmVUeXBlLFxuICBNb25leVByaW1pdGl2ZVR5cGUsXG4gIFVJbnRQcmltaXRpdmVUeXBlLFxuICBBcnJheVR5cGUsXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc2VydmVkV29yZHMuaW5jbHVkZXMobmFtZSkgPyBgJHtuYW1lfSdgIDogbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVbMF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVR5cGVOYW1lKHR5cGU6IFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUuY29uc3RydWN0b3IpIHtcbiAgICBjYXNlIFN0cmluZ1ByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIEludFByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJpbnRcIjtcbiAgICBjYXNlIFVJbnRQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwidWludFwiO1xuICAgIGNhc2UgRmxvYXRQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwiZG91YmxlXCI7XG4gICAgY2FzZSBCaWdJbnRQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwiYmlnaW50XCI7XG4gICAgY2FzZSBEYXRlUHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIERhdGVUaW1lUHJpbWl0aXZlVHlwZTpcbiAgICAgIHJldHVybiBcIkRhdGVUaW1lXCI7XG4gICAgY2FzZSBCb29sUHJpbWl0aXZlVHlwZTpcbiAgICAgIHJldHVybiBcImJvb2xcIjtcbiAgICBjYXNlIEJ5dGVzUHJpbWl0aXZlVHlwZTpcbiAgICAgIHJldHVybiBcImJ5dGVbXVwiO1xuICAgIGNhc2UgTW9uZXlQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwiZGVjaW1hbFwiO1xuICAgIGNhc2UgVXVpZFByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJHdWlkXCI7XG4gICAgY2FzZSBDcGZQcmltaXRpdmVUeXBlOlxuICAgIGNhc2UgQ25walByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBFbWFpbFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBIdG1sUHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIFVybFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBIZXhQcmltaXRpdmVUeXBlOlxuICAgIGNhc2UgQmFzZTY0UHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIFhtbFByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIFZvaWRQcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgSnNvblByaW1pdGl2ZVR5cGU6XG4gICAgICByZXR1cm4gXCJKc29uRWxlbWVudFwiO1xuICAgIGNhc2UgT3B0aW9uYWxUeXBlOlxuICAgICAgcmV0dXJuIGAke2dlbmVyYXRlVHlwZU5hbWUoKHR5cGUgYXMgT3B0aW9uYWxUeXBlKS5iYXNlKX0gb3B0aW9uYDtcbiAgICBjYXNlIEFycmF5VHlwZTpcbiAgICAgIHJldHVybiBgJHtnZW5lcmF0ZVR5cGVOYW1lKCh0eXBlIGFzIEFycmF5VHlwZSkuYmFzZSl9IGxpc3RgO1xuICAgIGNhc2UgU3RydWN0VHlwZTpcbiAgICAgIHJldHVybiB0eXBlLm5hbWU7XG4gICAgY2FzZSBFbnVtVHlwZTpcbiAgICAgIHJldHVybiB0eXBlLm5hbWU7XG4gICAgY2FzZSBUeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIGdlbmVyYXRlVHlwZU5hbWUoKHR5cGUgYXMgVHlwZVJlZmVyZW5jZSkudHlwZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBnZW5lcmF0ZVR5cGVOYW1lIHdpdGggJHt0eXBlLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVR5cGUodHlwZTogVHlwZSwganNvbkVsZW1lbnRWYXI6IHN0cmluZywgcGF0aDogc3RyaW5nLCB0YXJnZXRWYXI6IHN0cmluZywgc3VmZml4ID0gMSwgbWF5YmVOdWxsID0gdHJ1ZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAodHlwZS5jb25zdHJ1Y3Rvcikge1xuICAgIGNhc2UgSW50UHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgZGVjb2RlSW50MzIgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBVSW50UHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgZGVjb2RlVUludDMyICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgTW9uZXlQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIChkZWNvZGVNb25leSAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9KSAvIDEwMG1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgRmxvYXRQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZUZsb2F0ICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgQmlnSW50UHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICBkZWNvZGVCaWdJbnQgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBTdHJpbmdQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZVN0cmluZyAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIEh0bWxQcmltaXRpdmVUeXBlOiB7XG4gICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBIVE1MXG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZUh0bWwgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBDcGZQcmltaXRpdmVUeXBlOiB7XG4gICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBDUEZcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlQ3BmICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgQ25walByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIC8vIFRPRE86IHZhbGlkYXRlIENOUEpcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlQ25waiAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIEVtYWlsUHJpbWl0aXZlVHlwZToge1xuICAgICAgLy8gVE9ETzogdmFsaWRhdGUgRW1haWxcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlRW1haWwgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBVcmxQcmltaXRpdmVUeXBlOiB7XG4gICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBVUkxcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlVXJsICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgVXVpZFByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIC8vIFRPRE86IHZhbGlkYXRlIFVVSURcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlVXVpZCAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIEhleFByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIC8vIFRPRE86IHZhbGlkYXRlIEhleFxuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICBkZWNvZGVIZXggJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBCYXNlNjRQcmltaXRpdmVUeXBlOiB7XG4gICAgICAvLyBUT0RPOiB2YWxpZGF0ZSBCYXNlNjRcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlQmFzZTY0ICR7anNvbkVsZW1lbnRWYXJ9ICR7cGF0aH1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGNhc2UgWG1sUHJpbWl0aXZlVHlwZToge1xuICAgICAgLy8gVE9ETzogdmFsaWRhdGUgWE1MXG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZVhtbCAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIEJvb2xQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZUJvb2wgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBCeXRlc1ByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgZGVjb2RlQnl0ZXMgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBUeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIGRlY29kZVR5cGUoKHR5cGUgYXMgVHlwZVJlZmVyZW5jZSkudHlwZSwganNvbkVsZW1lbnRWYXIsIHBhdGgsIHRhcmdldFZhciwgc3VmZml4KTtcbiAgICBjYXNlIE9wdGlvbmFsVHlwZTpcbiAgICAgIGlmIChuZWVkc1RlbXBWYXJGb3JOdWxsYWJsZS5pbmNsdWRlcygodHlwZSBhcyBPcHRpb25hbFR5cGUpLmJhc2UuY29uc3RydWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBgbWF0Y2ggJHtqc29uRWxlbWVudFZhcn0uVmFsdWVLaW5kIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgSnNvblZhbHVlS2luZC5OdWxsIHwgSnNvblZhbHVlS2luZC5VbmRlZmluZWQgLT4gTm9uZVxuICAgICAgICAgICAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICAgICAgICAgICgke2RlY29kZVR5cGUoKHR5cGUgYXMgT3B0aW9uYWxUeXBlKS5iYXNlLCBqc29uRWxlbWVudFZhciwgcGF0aCwgdGFyZ2V0VmFyLCBzdWZmaXgsIGZhbHNlKS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgIC9cXG4vZ3UsXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgICAgIFwiLFxuICAgICAgICAgICAgICAgICAgICApfSkgfD4gU29tZVxuICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgICAgLnRyaW0oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0eXBlIGFzIEFycmF5VHlwZSkuYmFzZSBpbnN0YW5jZW9mIE9wdGlvbmFsVHlwZSB8fCAodHlwZSBhcyBBcnJheVR5cGUpLmJhc2UgaW5zdGFuY2VvZiBBcnJheVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAoPi4+KSBkZWNvZGVPcHRpb25hbCAke2RlY29kZVR5cGUoKHR5cGUgYXMgT3B0aW9uYWxUeXBlKS5iYXNlLCBqc29uRWxlbWVudFZhciwgcGF0aCwgdGFyZ2V0VmFyLCBzdWZmaXgsIGZhbHNlKX1cbiAgICAgICAgICAgIGBcbiAgICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgICAgLnRyaW0oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICBkZWNvZGVPcHRpb25hbCAke2RlY29kZVR5cGUoKHR5cGUgYXMgT3B0aW9uYWxUeXBlKS5iYXNlLCBqc29uRWxlbWVudFZhciwgcGF0aCwgdGFyZ2V0VmFyLCBzdWZmaXgsIGZhbHNlKX1cbiAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTZ9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIGNhc2UgRW51bVR5cGU6XG4gICAgY2FzZSBTdHJ1Y3RUeXBlOlxuICAgICAgcmV0dXJuIGBEZWNvZGUke3R5cGUubmFtZX0gJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofWA7XG4gICAgY2FzZSBKc29uUHJpbWl0aXZlVHlwZTpcbiAgICAgIGlmIChtYXliZU51bGwpIHtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAke2pzb25FbGVtZW50VmFyfVxuICAgICAgICAgICAgYFxuICAgICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgICAudHJpbSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7dGFyZ2V0VmFyfSA8LSAke2pzb25FbGVtZW50VmFyfWA7XG5cbiAgICBjYXNlIERhdGVUaW1lUHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICBkZWNvZGVEYXRlVGltZSAke2pzb25FbGVtZW50VmFyfSAke3BhdGh9XG4gICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE2fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIERhdGVQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgIGRlY29kZURhdGUgJHtqc29uRWxlbWVudFZhcn0gJHtwYXRofVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgY2FzZSBBcnJheVR5cGU6IHtcbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgbWF0Y2ggJHtqc29uRWxlbWVudFZhcn0uVmFsdWVLaW5kIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgSnNvblZhbHVlS2luZC5BcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICBsZXQgbXV0YWJsZSBsaXN0XyA9IExpc3QuZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgZm9yIGkxIGluIDAgLi4gKCR7anNvbkVsZW1lbnRWYXJ9LkdldEFycmF5TGVuZ3RoKCkgLSAxKSBkb1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gJHtqc29uRWxlbWVudFZhcn0uW2kxXVxuICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0aWFsUmVzdWx0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICR7ZGVjb2RlVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgYXMgQXJyYXlUeXBlKS5iYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtqc29uRWxlbWVudFZhcn0uW2kxXWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3BhdGguc2xpY2UoMCwgLTEpfS57aTF9XCJgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICApLnJlcGxhY2UoL1xcbi9ndSwgXCJcXG4gICAgICAgICAgICAgICAgICAgICAgXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIGxpc3RfIDwtIGxpc3RfIHw+IExpc3QuYXBwZW5kIFsgcGFydGlhbFJlc3VsdCBdXG4gICAgICAgICAgICAgICAgICAgIGxpc3RfXG4gICAgICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKCR7cGF0aC5zbGljZSgwLCAtMSl9IG11c3QgYmUgYW4gYXJyYXkuXCIpKVxuICAgICAgICAgICAgYFxuICAgICAgICAucmVwbGFjZSgvXFxuIHsxNn0vZ3UsIFwiXFxuXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQlVHOiBkZWNvZGVUeXBlIHdpdGggJHt0eXBlLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVR5cGUodHlwZTogVHlwZSwgdmFsdWVWYXI6IHN0cmluZywgcGF0aDogc3RyaW5nLCBzdWZmaXggPSAxLCBpc1JlZiA9IHRydWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUuY29uc3RydWN0b3IpIHtcbiAgICBjYXNlIFN0cmluZ1ByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgcmVzdWx0V3JpdGVyXy5Xcml0ZVN0cmluZ1ZhbHVlKCR7dmFsdWVWYXJ9KWA7XG4gICAgfVxuXG4gICAgY2FzZSBGbG9hdFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBVSW50UHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIEludFByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgcmVzdWx0V3JpdGVyXy5Xcml0ZU51bWJlclZhbHVlKCR7dmFsdWVWYXJ9KWA7XG4gICAgfVxuXG4gICAgY2FzZSBNb25leVByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgcmVzdWx0V3JpdGVyXy5Xcml0ZU51bWJlclZhbHVlKGludCAoTWF0aC5Sb3VuZCgke3ZhbHVlVmFyfSAqIDEwMG0pKSlgO1xuICAgIH1cblxuICAgIGNhc2UgQmlnSW50UHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGByZXN1bHRXcml0ZXJfLldyaXRlU3RyaW5nVmFsdWUoJHt2YWx1ZVZhcn0uVG9TdHJpbmcoKSlgO1xuICAgIH1cblxuICAgIGNhc2UgQm9vbFByaW1pdGl2ZVR5cGU6IHtcbiAgICAgIHJldHVybiBgcmVzdWx0V3JpdGVyXy5Xcml0ZUJvb2xlYW5WYWx1ZSgke3ZhbHVlVmFyfSlgO1xuICAgIH1cblxuICAgIGNhc2UgQnl0ZXNQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYHJlc3VsdFdyaXRlcl8uV3JpdGVTdHJpbmdWYWx1ZShDb252ZXJ0LlRvQmFzZTY0U3RyaW5nKCR7dmFsdWVWYXJ9KSlgO1xuICAgIH1cblxuICAgIGNhc2UgRGF0ZVRpbWVQcmltaXRpdmVUeXBlOiB7XG4gICAgICByZXR1cm4gYHJlc3VsdFdyaXRlcl8uV3JpdGVTdHJpbmdWYWx1ZSgke3ZhbHVlVmFyfS5Ub1N0cmluZyhcInl5eXktTU0tZGRUSEg6bW06c3MuRkZGRkZGJ1onXCIpKWA7XG4gICAgfVxuXG4gICAgY2FzZSBEYXRlUHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGByZXN1bHRXcml0ZXJfLldyaXRlU3RyaW5nVmFsdWUoJHt2YWx1ZVZhcn0uVG9TdHJpbmcoXCJ5eXl5LU1NLWRkXCIpKWA7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZm9ybWF0IHRob3NlXG4gICAgY2FzZSBDcGZQcmltaXRpdmVUeXBlOlxuICAgIGNhc2UgQ25walByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBFbWFpbFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBIdG1sUHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIFVybFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBVdWlkUHJpbWl0aXZlVHlwZTpcbiAgICBjYXNlIEJhc2U2NFByaW1pdGl2ZVR5cGU6XG4gICAgY2FzZSBIZXhQcmltaXRpdmVUeXBlOlxuICAgIGNhc2UgWG1sUHJpbWl0aXZlVHlwZToge1xuICAgICAgcmV0dXJuIGByZXN1bHRXcml0ZXJfLldyaXRlU3RyaW5nVmFsdWUoJHt2YWx1ZVZhcn0pYDtcbiAgICB9XG5cbiAgICBjYXNlIE9wdGlvbmFsVHlwZToge1xuICAgICAgbGV0IHJlYWxCYXNlVHlwZSA9ICh0eXBlIGFzIE9wdGlvbmFsVHlwZSkuYmFzZTtcblxuICAgICAgd2hpbGUgKHJlYWxCYXNlVHlwZSBpbnN0YW5jZW9mIFR5cGVSZWZlcmVuY2UpIHtcbiAgICAgICAgcmVhbEJhc2VUeXBlID0gcmVhbEJhc2VUeXBlLnR5cGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgIGlmICgke3ZhbHVlVmFyfS5Jc05vbmUpIHRoZW5cbiAgICAgICAgICAgICAgICByZXN1bHRXcml0ZXJfLldyaXRlTnVsbFZhbHVlKClcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICR7ZW5jb2RlVHlwZShyZWFsQmFzZVR5cGUsIGAke3ZhbHVlVmFyfS5WYWx1ZWAsIHBhdGgsIHN1ZmZpeCwgaXNSZWYpfVxuICAgICAgICAgICAgICBgXG4gICAgICAgIC5yZXBsYWNlKC9cXG4gezE0fS9ndSwgXCJcXG5cIilcbiAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBjYXNlIFR5cGVSZWZlcmVuY2U6XG4gICAgICByZXR1cm4gZW5jb2RlVHlwZSgodHlwZSBhcyBUeXBlUmVmZXJlbmNlKS50eXBlLCB2YWx1ZVZhciwgcGF0aCwgc3VmZml4LCBpc1JlZik7XG4gICAgY2FzZSBFbnVtVHlwZTpcbiAgICAgIHJldHVybiBgRW5jb2RlJHt0eXBlLm5hbWV9ICR7dmFsdWVWYXJ9IHJlc3VsdFdyaXRlcl8gJHtwYXRofWA7XG4gICAgY2FzZSBTdHJ1Y3RUeXBlOlxuICAgICAgcmV0dXJuIGBFbmNvZGUke3R5cGUubmFtZX0gJHt2YWx1ZVZhcn0gcmVzdWx0V3JpdGVyXyAke3BhdGh9YDtcbiAgICBjYXNlIEpzb25QcmltaXRpdmVUeXBlOlxuICAgICAgcmV0dXJuIGAke3ZhbHVlVmFyfS5Xcml0ZVRvKHJlc3VsdFdyaXRlcl8pYDtcbiAgICBjYXNlIEFycmF5VHlwZToge1xuICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgcmVzdWx0V3JpdGVyXy5Xcml0ZVN0YXJ0QXJyYXkoKVxuICAgICAgICAgICAgICBmb3IgaSR7c3VmZml4fSBpbiAwLi4ke3ZhbHVlVmFyfS5MZW5ndGggLSAxIGRvXG4gICAgICAgICAgICAgICAgJHtlbmNvZGVUeXBlKCh0eXBlIGFzIEFycmF5VHlwZSkuYmFzZSwgYCR7dmFsdWVWYXJ9LltpJHtzdWZmaXh9XWAsIGAke3BhdGh9YCwgc3VmZml4ICsgMSkucmVwbGFjZSgvXFxuL2d1LCBcIlxcbiAgICAgICAgICAgICAgICBcIil9XG4gICAgICAgICAgICAgIHJlc3VsdFdyaXRlcl8uV3JpdGVFbmRBcnJheSgpXG4gICAgICAgICAgICAgIGBcbiAgICAgICAgLnJlcGxhY2UoL1xcbiB7MTR9L2d1LCBcIlxcblwiKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJVRzogZW5jb2RlVHlwZSB3aXRoICR7dHlwZS5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0cnVjdChzdHJ1Y3Q6IFN0cnVjdFR5cGUpOiBzdHJpbmcge1xuICByZXR1cm4gYFxudHlwZSAke3N0cnVjdC5uYW1lfSA9IHtcbiAgJHtzdHJ1Y3QuZmllbGRzLm1hcChmaWVsZCA9PiBgJHtjYXBpdGFsaXplKGZpZWxkLm5hbWUpfTogJHtnZW5lcmF0ZVR5cGVOYW1lKGZpZWxkLnR5cGUpfWApLmpvaW4oXCI7XFxuICBcIil9XG59IHdpdGhcbiAgc3RhdGljIG1lbWJlciBDcmVhdGUgKCR7c3RydWN0LmZpZWxkcy5tYXAoZmllbGQgPT4gYCR7aWRlbnQoZmllbGQubmFtZSl9OiAke2dlbmVyYXRlVHlwZU5hbWUoZmllbGQudHlwZSl9YCkuam9pbihcIiwgXCIpfSk6ICR7c3RydWN0Lm5hbWV9ID1cbiAgICB7ICR7c3RydWN0LmZpZWxkcy5tYXAoZmllbGQgPT4gYCR7Y2FwaXRhbGl6ZShmaWVsZC5uYW1lKX0gPSAke2lkZW50KGZpZWxkLm5hbWUpfWApLmpvaW4oXCI7IFwiKX0gfVxuXG5sZXQgRGVjb2RlJHtzdHJ1Y3QubmFtZX0gKGpzb25fOiBKc29uRWxlbWVudCkgKHBhdGhfOiBzdHJpbmcpOiAke3N0cnVjdC5uYW1lfSA9XG4gIGlmIChqc29uXy5WYWx1ZUtpbmQgPD4gSnNvblZhbHVlS2luZC5PYmplY3QpIHRoZW4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKCRcIid7cGF0aF99JyBtdXN0IGJlIGFuIG9iamVjdC5cIikpXG4gICR7c3RydWN0LmZpZWxkc1xuICAgIC5tYXAoXG4gICAgICBmaWVsZCA9PlxuICAgICAgICBgXG4gIGxldCAke2ZpZWxkLm5hbWV9SnNvbl8gPSBkZWNvZGVKc29uRWxlbWVudFN0cmljdCAke0pTT04uc3RyaW5naWZ5KGZpZWxkLm5hbWUpfSBqc29uXyAkXCJ7cGF0aF99LiR7ZmllbGQubmFtZX1cIlxuICBsZXQgJHtpZGVudChmaWVsZC5uYW1lKX0gPVxuICAgICR7ZGVjb2RlVHlwZShmaWVsZC50eXBlLCBgJHtmaWVsZC5uYW1lfUpzb25fYCwgYCRcIntwYXRoX30uJHtmaWVsZC5uYW1lfVwiYCwgaWRlbnQoZmllbGQubmFtZSkpLnJlcGxhY2UoL1xcbi9ndSwgXCJcXG4gIFwiKX1cbiAgYCxcbiAgICApXG4gICAgLmpvaW4oXCJcIil9XG4gIHsgJHtzdHJ1Y3QuZmllbGRzLm1hcChmaWVsZCA9PiBgJHtjYXBpdGFsaXplKGZpZWxkLm5hbWUpfSA9ICR7aWRlbnQoZmllbGQubmFtZSl9YCkuam9pbihcIjsgXCIpfSB9XG5cbmxldCBFbmNvZGUke3N0cnVjdC5uYW1lfSAob2JqXzogJHtzdHJ1Y3QubmFtZX0pIChyZXN1bHRXcml0ZXJfOiBVdGY4SnNvbldyaXRlcikgKHBhdGhfOiBzdHJpbmcpID1cbiAgcmVzdWx0V3JpdGVyXy5Xcml0ZVN0YXJ0T2JqZWN0KClcbiAgJHtzdHJ1Y3QuZmllbGRzXG4gICAgLm1hcChcbiAgICAgIGZpZWxkID0+XG4gICAgICAgIGBcbiAgcmVzdWx0V3JpdGVyXy5Xcml0ZVByb3BlcnR5TmFtZSgke0pTT04uc3RyaW5naWZ5KGZpZWxkLm5hbWUpfSlcbiAgJHtlbmNvZGVUeXBlKGZpZWxkLnR5cGUsIGBvYmpfLiR7Y2FwaXRhbGl6ZShmaWVsZC5uYW1lKX1gLCBgJFwie3BhdGhffS4ke2ZpZWxkLm5hbWV9XCJgKS5yZXBsYWNlKC9cXG4vZ3UsIFwiXFxuICBcIil9YCxcbiAgICApXG4gICAgLmpvaW4oXCJcXG5cIil9XG4gIHJlc3VsdFdyaXRlcl8uV3JpdGVFbmRPYmplY3QoKWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUVudW0odHlwZTogRW51bVR5cGUpOiBzdHJpbmcge1xuICByZXR1cm4gYFxudHlwZSAke3R5cGUubmFtZX0gPVxuICAke3R5cGUudmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiBgfCAke2NhcGl0YWxpemUodmFsdWUpfWApLmpvaW4oXCJcXG4gIFwiKX1cblxubGV0IERlY29kZSR7dHlwZS5uYW1lfSAoanNvbl86IEpzb25FbGVtZW50KSAocGF0aF86IHN0cmluZyk6ICR7dHlwZS5uYW1lfSA9XG4gIGlmIChqc29uXy5WYWx1ZUtpbmQgPD4gSnNvblZhbHVlS2luZC5TdHJpbmcpIHRoZW4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKCRcIid7cGF0aF99JyBtdXN0IGJlIGEgc3RyaW5nLlwiKSlcbiAgbWF0Y2gganNvbl8uR2V0U3RyaW5nKCkgd2l0aFxuICAke3R5cGUudmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiBgfCBcIiR7dmFsdWV9XCIgLT4gJHt0eXBlLm5hbWV9LiR7Y2FwaXRhbGl6ZSh2YWx1ZSl9YCkuam9pbihcIlxcbiAgXCIpfVxuICB8IF8gLT4gcmFpc2UgKEZhdGFsRXhjZXB0aW9uKCRcIid7cGF0aF99JyBtdXN0IGJlIG9uZSBvZjogKCR7dHlwZS52YWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IGAnJHt2YWx1ZX0nYCkuam9pbihcIiwgXCIpfSkuXCIpKVxuXG5sZXQgRW5jb2RlJHt0eXBlLm5hbWV9IChvYmpfOiAke3R5cGUubmFtZX0pIChyZXN1bHRXcml0ZXJfOiBVdGY4SnNvbldyaXRlcikgKHBhdGhfOiBzdHJpbmcpID1cbiAgbWF0Y2ggb2JqXyB3aXRoXG4gICR7dHlwZS52YWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IGB8ICR7dHlwZS5uYW1lfS4ke2NhcGl0YWxpemUodmFsdWUpfSAtPiByZXN1bHRXcml0ZXJfLldyaXRlU3RyaW5nVmFsdWUoXCIke3ZhbHVlfVwiKWApLmpvaW4oXCJcXG4gIFwiKX1cblxuYDtcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export * from "./fsharp-server.js";
@@ -0,0 +1,2 @@
1
+ export * from "./fsharp-server.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ZzaGFycC1zZXJ2ZXIuanNcIjtcbiJdfQ==