@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.
package/dist/helpers.js DELETED
@@ -1,488 +0,0 @@
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 DELETED
@@ -1,2 +0,0 @@
1
- export * from "./fsharp-server.js";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ZzaGFycC1zZXJ2ZXIuanNcIjtcbiJdfQ==