@ragemp-mango/core 2.0.6-beta.0

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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +20 -0
  3. package/dist/app/constants/index.d.ts +26 -0
  4. package/dist/app/constants/index.js +49 -0
  5. package/dist/app/controller/index.d.ts +70 -0
  6. package/dist/app/controller/index.js +24 -0
  7. package/dist/app/enums/index.d.ts +27 -0
  8. package/dist/app/enums/index.js +16 -0
  9. package/dist/app/index.d.ts +138 -0
  10. package/dist/app/index.js +132 -0
  11. package/dist/app/interfaces/index.d.ts +157 -0
  12. package/dist/app/interfaces/index.js +2 -0
  13. package/dist/app/module/index.d.ts +27 -0
  14. package/dist/app/module/index.js +16 -0
  15. package/dist/app/module-tree/index.d.ts +56 -0
  16. package/dist/app/module-tree/index.js +25 -0
  17. package/dist/app/pipeline/index.d.ts +5 -0
  18. package/dist/app/pipeline/index.js +14 -0
  19. package/dist/app/services/index.d.ts +37 -0
  20. package/dist/app/services/index.js +14 -0
  21. package/dist/app/utils/index.d.ts +16 -0
  22. package/dist/app/utils/index.js +10 -0
  23. package/dist/call-handler.interface-DVdaknsB.d.ts +52 -0
  24. package/dist/chunk-2ADQZWQE.js +170 -0
  25. package/dist/chunk-6YEWPMZJ.js +69 -0
  26. package/dist/chunk-73LIJA6X.js +176 -0
  27. package/dist/chunk-7QVYU63E.js +7 -0
  28. package/dist/chunk-AO6BXG54.js +139 -0
  29. package/dist/chunk-CFHBJ5MV.js +1906 -0
  30. package/dist/chunk-CW7WAA3P.js +1906 -0
  31. package/dist/chunk-DEPJRTVT.js +1 -0
  32. package/dist/chunk-DJZCOYB3.js +17 -0
  33. package/dist/chunk-DXPVUDXD.js +81 -0
  34. package/dist/chunk-E6IQL4S6.js +40 -0
  35. package/dist/chunk-HK7QTFPA.js +81 -0
  36. package/dist/chunk-ITEHLEIP.js +29 -0
  37. package/dist/chunk-M55YEQ7J.js +1 -0
  38. package/dist/chunk-PGWRESZG.js +790 -0
  39. package/dist/chunk-PQK4E654.js +1 -0
  40. package/dist/chunk-RYOUF322.js +68 -0
  41. package/dist/chunk-SKPH3K2M.js +570 -0
  42. package/dist/chunk-TBWHLT75.js +61 -0
  43. package/dist/constants/index.d.ts +8 -0
  44. package/dist/constants/index.js +18 -0
  45. package/dist/controller-Ss0TVrxQ.d.ts +30 -0
  46. package/dist/custom-decorator.type-BHRvXIGz.d.ts +5 -0
  47. package/dist/decorators/index.d.ts +90 -0
  48. package/dist/decorators/index.js +91 -0
  49. package/dist/enums/index.d.ts +66 -0
  50. package/dist/enums/index.js +12 -0
  51. package/dist/errors/index.d.ts +23 -0
  52. package/dist/errors/index.js +17 -0
  53. package/dist/event-destination.enum-DT8jJFwR.d.ts +7 -0
  54. package/dist/event-emmiter.interface-7Ne9W8SM.d.ts +10 -0
  55. package/dist/event-metadata.interface-CREizDNq.d.ts +89 -0
  56. package/dist/execution-context-type.enum-fwYPtPvp.d.ts +6 -0
  57. package/dist/execution-context.interface-DpRN4oVj.d.ts +56 -0
  58. package/dist/index.d.ts +33 -0
  59. package/dist/index.js +190 -0
  60. package/dist/injectable-options.interface-8Gp9oRY6.d.ts +10 -0
  61. package/dist/injectable-scope.enum-CjyQMpW2.d.ts +7 -0
  62. package/dist/injection-token.type-dQTkkP6p.d.ts +5 -0
  63. package/dist/interfaces/index.d.ts +38 -0
  64. package/dist/interfaces/index.js +2 -0
  65. package/dist/logger-service.interface-BGV-o_Fx.d.ts +8 -0
  66. package/dist/method-param-type.enum-BfrJ8zqa.d.ts +11 -0
  67. package/dist/module-metadata.interface-B3bn1vqq.d.ts +59 -0
  68. package/dist/multiplayer-timers.interface-CFDTWwAT.d.ts +22 -0
  69. package/dist/newable.type-BdhG3MZC.d.ts +5 -0
  70. package/dist/nullable.type-C-lE7JU4.d.ts +3 -0
  71. package/dist/pipe-transform.interface-BlzOrUy3.d.ts +14 -0
  72. package/dist/pipes/index.d.ts +12 -0
  73. package/dist/pipes/index.js +9 -0
  74. package/dist/reflectable-decorator.interface-CLOGdtEQ.d.ts +14 -0
  75. package/dist/rpc-call-options.interface-BJ5mHrvT.d.ts +5 -0
  76. package/dist/rpc-error.interface-CeaZLqzE.d.ts +6 -0
  77. package/dist/rpc-metadata.interface-DS-GqgqA.d.ts +11 -0
  78. package/dist/rpc-result.interface-C758heM0.d.ts +10 -0
  79. package/dist/schemas/index.d.ts +189 -0
  80. package/dist/schemas/index.js +39 -0
  81. package/dist/script-event-handler.interface-B-Th4Ssg.d.ts +24 -0
  82. package/dist/script-event-handler.interface-vUr_v6tV.d.ts +5 -0
  83. package/dist/script-rpc-handler.interface-DBpD9-yk.d.ts +8 -0
  84. package/dist/services/index.d.ts +45 -0
  85. package/dist/services/index.js +23 -0
  86. package/dist/types/index.d.ts +9 -0
  87. package/dist/types/index.js +2 -0
  88. package/dist/utils/index.d.ts +16 -0
  89. package/dist/utils/index.js +32 -0
  90. package/package.json +133 -0
@@ -0,0 +1,790 @@
1
+ import {
2
+ MethodParamType
3
+ } from "./chunk-TBWHLT75.js";
4
+ import {
5
+ InjectableScope
6
+ } from "./chunk-DXPVUDXD.js";
7
+ import {
8
+ isBoolean,
9
+ isFunction,
10
+ isNil,
11
+ isNumber,
12
+ isObject,
13
+ isPromise,
14
+ isString,
15
+ isSymbol
16
+ } from "./chunk-E6IQL4S6.js";
17
+ import {
18
+ __name
19
+ } from "./chunk-7QVYU63E.js";
20
+
21
+ // src/schemas/controller/controller-options.validate.ts
22
+ var defaultControllerOptions = {
23
+ prefix: ""
24
+ };
25
+ function validateControllerOptions(options) {
26
+ if (isNil(options)) {
27
+ return {
28
+ valid: true,
29
+ value: defaultControllerOptions
30
+ };
31
+ }
32
+ if (!isObject(options)) {
33
+ return {
34
+ valid: false,
35
+ value: defaultControllerOptions,
36
+ error: "Controller options must be an object"
37
+ };
38
+ }
39
+ if (!("prefix" in options)) {
40
+ return {
41
+ valid: true,
42
+ value: {
43
+ ...defaultControllerOptions,
44
+ ...options
45
+ }
46
+ };
47
+ }
48
+ if ("prefix" in options && !isString(options.prefix)) {
49
+ return {
50
+ valid: true,
51
+ value: defaultControllerOptions,
52
+ error: "Controller prefix must be a string"
53
+ };
54
+ }
55
+ return {
56
+ valid: true,
57
+ value: {
58
+ ...defaultControllerOptions,
59
+ ...options
60
+ }
61
+ };
62
+ }
63
+ __name(validateControllerOptions, "validateControllerOptions");
64
+
65
+ // src/schemas/events/error-filter.validate.ts
66
+ function validateErrorFilter(value) {
67
+ if (isNil(value)) {
68
+ return {
69
+ valid: false,
70
+ value,
71
+ error: "Error filter must be a class or a function"
72
+ };
73
+ }
74
+ if (!isFunction(value) && !isObject(value)) {
75
+ return {
76
+ valid: false,
77
+ value,
78
+ error: "Error filter must be a class or a function"
79
+ };
80
+ }
81
+ if (isFunction(value) && !isFunction(value.prototype.catch)) {
82
+ return {
83
+ valid: true,
84
+ value,
85
+ error: "Error filter must have a catch method"
86
+ };
87
+ }
88
+ if (isObject(value) && !isFunction(value.catch)) {
89
+ return {
90
+ valid: true,
91
+ value,
92
+ error: "Error filter must have a catch method"
93
+ };
94
+ }
95
+ return {
96
+ valid: true,
97
+ value
98
+ };
99
+ }
100
+ __name(validateErrorFilter, "validateErrorFilter");
101
+
102
+ // src/schemas/events/pipe.validate.ts
103
+ function validatePipe(value) {
104
+ if (isNil(value)) {
105
+ return {
106
+ valid: false,
107
+ value,
108
+ error: "Pipe must be a class or a function"
109
+ };
110
+ }
111
+ if (!isFunction(value) && !isObject(value)) {
112
+ return {
113
+ valid: false,
114
+ value,
115
+ error: "Pipe must be a class or a function"
116
+ };
117
+ }
118
+ if (isFunction(value) && !isFunction(value.prototype.transform)) {
119
+ return {
120
+ valid: false,
121
+ value,
122
+ error: "Pipe must have a transform method"
123
+ };
124
+ }
125
+ if (isObject(value) && !isFunction(value.transform)) {
126
+ return {
127
+ valid: false,
128
+ value,
129
+ error: "Pipe must have a transform method"
130
+ };
131
+ }
132
+ return {
133
+ valid: true,
134
+ value
135
+ };
136
+ }
137
+ __name(validatePipe, "validatePipe");
138
+
139
+ // src/schemas/events/event-parameter.validate.ts
140
+ function validateEventParameter(value) {
141
+ if (isNil(value) || !isObject(value)) {
142
+ return {
143
+ valid: false,
144
+ value,
145
+ error: "Event parameter must be an object"
146
+ };
147
+ }
148
+ if ("key" in value && !isNil(value.key) && !isString(value.key)) {
149
+ return {
150
+ valid: false,
151
+ value,
152
+ error: "Event parameter key must be a string"
153
+ };
154
+ }
155
+ if (!("index" in value) || !isNumber(value.index)) {
156
+ return {
157
+ valid: false,
158
+ value,
159
+ error: "Event parameter index is required"
160
+ };
161
+ }
162
+ if ((value.type === MethodParamType.Body || value.type === MethodParamType.Player) && "data" in value && !isNil(value.data) && !isString(value.data)) {
163
+ return {
164
+ valid: false,
165
+ value,
166
+ error: "Event parameter data must be a string"
167
+ };
168
+ }
169
+ if (value.type === MethodParamType.Custom && !("factory" in value)) {
170
+ return {
171
+ valid: false,
172
+ value,
173
+ error: "Event parameter factory is required"
174
+ };
175
+ }
176
+ if (value.type === MethodParamType.Custom && "factory" in value && !isFunction(value.factory)) {
177
+ return {
178
+ valid: false,
179
+ value,
180
+ error: "Event parameter factory must be a function"
181
+ };
182
+ }
183
+ if ((value.type === MethodParamType.Param || value.type === MethodParamType.Index) && !("data" in value)) {
184
+ return {
185
+ valid: false,
186
+ value,
187
+ error: "Event parameter data is required"
188
+ };
189
+ }
190
+ if (value.type === MethodParamType.Param && "data" in value && !isString(value.data)) {
191
+ return {
192
+ valid: false,
193
+ value,
194
+ error: "Event parameter data must be a string"
195
+ };
196
+ }
197
+ if (value.type === MethodParamType.Index && "data" in value && !isNumber(value.data)) {
198
+ return {
199
+ valid: false,
200
+ value,
201
+ error: "Event parameter data must be a number"
202
+ };
203
+ }
204
+ if (value.type !== MethodParamType.Request && value.type !== MethodParamType.Response && "pipes" in value && !Array.isArray(value.pipes)) {
205
+ return {
206
+ valid: false,
207
+ value,
208
+ error: "Event parameter pipes must be an array"
209
+ };
210
+ }
211
+ if (value.type !== MethodParamType.Request && value.type !== MethodParamType.Response && !("pipes" in value)) {
212
+ value.pipes = [];
213
+ }
214
+ if (value.type !== MethodParamType.Request && value.type !== MethodParamType.Response) {
215
+ for (const pipe of value.pipes) {
216
+ const { valid, error } = validatePipe(pipe);
217
+ if (!valid) {
218
+ return {
219
+ valid: false,
220
+ value,
221
+ error
222
+ };
223
+ }
224
+ }
225
+ }
226
+ return {
227
+ valid: true,
228
+ value
229
+ };
230
+ }
231
+ __name(validateEventParameter, "validateEventParameter");
232
+
233
+ // src/schemas/events/event-metadata.validate.ts
234
+ function validateEventMetadata(value) {
235
+ if (isNil(value) || !isObject(value)) {
236
+ return {
237
+ valid: false,
238
+ value,
239
+ error: "Event metadata must be an object"
240
+ };
241
+ }
242
+ if (!("type" in value)) {
243
+ return {
244
+ valid: false,
245
+ value,
246
+ error: "Event metadata type is required"
247
+ };
248
+ }
249
+ if (!isString(value.type)) {
250
+ return {
251
+ valid: false,
252
+ value,
253
+ error: "Event metadata type must be a string"
254
+ };
255
+ }
256
+ if (!("name" in value)) {
257
+ return {
258
+ valid: false,
259
+ value,
260
+ error: "Event metadata name is required"
261
+ };
262
+ }
263
+ if (!isString(value.name)) {
264
+ return {
265
+ valid: false,
266
+ value,
267
+ error: "Event metadata name must be a string"
268
+ };
269
+ }
270
+ if (!("method" in value)) {
271
+ return {
272
+ valid: false,
273
+ value,
274
+ error: "Event metadata method is required"
275
+ };
276
+ }
277
+ if (!isString(value.method)) {
278
+ return {
279
+ valid: false,
280
+ value,
281
+ error: "Event metadata method must be a string"
282
+ };
283
+ }
284
+ if (!("params" in value)) {
285
+ value.params = [];
286
+ }
287
+ if ("params" in value && !Array.isArray(value.params)) {
288
+ return {
289
+ valid: false,
290
+ value,
291
+ error: "Event metadata params must be an array"
292
+ };
293
+ }
294
+ for (const param of value.params) {
295
+ const { valid, error } = validateEventParameter(param);
296
+ if (!valid) {
297
+ return {
298
+ valid,
299
+ value,
300
+ error
301
+ };
302
+ }
303
+ }
304
+ return {
305
+ valid: true,
306
+ value
307
+ };
308
+ }
309
+ __name(validateEventMetadata, "validateEventMetadata");
310
+
311
+ // src/schemas/events/guard.validate.ts
312
+ function validateGuard(value) {
313
+ if (isNil(value)) {
314
+ return {
315
+ valid: false,
316
+ value,
317
+ error: "Guard must be a class or a function"
318
+ };
319
+ }
320
+ if (!isFunction(value) && !isObject(value)) {
321
+ return {
322
+ valid: false,
323
+ value,
324
+ error: "Guard must be a class or a function"
325
+ };
326
+ }
327
+ if (isFunction(value) && !isFunction(value.prototype.canActivate)) {
328
+ return {
329
+ valid: false,
330
+ value,
331
+ error: "Guard must have a canActivate method"
332
+ };
333
+ }
334
+ if (isObject(value) && !isFunction(value.canActivate)) {
335
+ return {
336
+ valid: false,
337
+ value,
338
+ error: "Guard must have a canActivate method"
339
+ };
340
+ }
341
+ return {
342
+ valid: true,
343
+ value
344
+ };
345
+ }
346
+ __name(validateGuard, "validateGuard");
347
+
348
+ // src/schemas/events/interceptor.validate.ts
349
+ function validateInterceptor(value) {
350
+ if (isNil(value)) {
351
+ return {
352
+ valid: false,
353
+ value,
354
+ error: "Interceptor must be a class or a function"
355
+ };
356
+ }
357
+ if (!isFunction(value) && !isObject(value)) {
358
+ return {
359
+ valid: false,
360
+ value,
361
+ error: "Interceptor must be a class or a function"
362
+ };
363
+ }
364
+ if (isFunction(value) && !isFunction(value.prototype.intercept)) {
365
+ return {
366
+ valid: false,
367
+ value,
368
+ error: "Interceptor must have an intercept method"
369
+ };
370
+ }
371
+ if (isObject(value) && !isFunction(value.intercept)) {
372
+ return {
373
+ valid: false,
374
+ value,
375
+ error: "Interceptor must have an intercept method"
376
+ };
377
+ }
378
+ return {
379
+ valid: true,
380
+ value
381
+ };
382
+ }
383
+ __name(validateInterceptor, "validateInterceptor");
384
+
385
+ // src/schemas/injection-token.validate.ts
386
+ function validateInjectionToken(value) {
387
+ const valid = isString(value) || isSymbol(value) || isFunction(value) || isObject(value);
388
+ return valid ? {
389
+ valid,
390
+ value
391
+ } : {
392
+ valid,
393
+ value,
394
+ error: "Injection token must be a string, symbol, class, or object"
395
+ };
396
+ }
397
+ __name(validateInjectionToken, "validateInjectionToken");
398
+
399
+ // src/schemas/module/provider.validate.ts
400
+ function validateProvider(value) {
401
+ if (!isObject(value) && !isFunction(value)) {
402
+ return {
403
+ valid: false,
404
+ value,
405
+ error: "Provider must be an object or function"
406
+ };
407
+ }
408
+ if (isObject(value)) {
409
+ if (!("provide" in value)) {
410
+ return {
411
+ valid: false,
412
+ value,
413
+ error: "Provider must have a provide property"
414
+ };
415
+ }
416
+ const { valid, error } = validateInjectionToken(value.provide);
417
+ if (!valid) {
418
+ return {
419
+ valid: false,
420
+ value,
421
+ error
422
+ };
423
+ }
424
+ if ("useClass" in value) {
425
+ return validateClassProvider(value);
426
+ } else if ("useValue" in value) {
427
+ return validateValueProvider(value);
428
+ } else if ("useFactory" in value) {
429
+ return validateFactoryProvider(value);
430
+ } else if ("useExisting" in value) {
431
+ return validateExistingProvider(value);
432
+ }
433
+ } else if (isFunction(value)) {
434
+ return {
435
+ valid: true,
436
+ value
437
+ };
438
+ }
439
+ return {
440
+ valid: false,
441
+ value,
442
+ error: "Provider must have a useClass, useValue, useFactory, or useExisting property"
443
+ };
444
+ }
445
+ __name(validateProvider, "validateProvider");
446
+ function validateClassProvider(value) {
447
+ if (!("useClass" in value)) {
448
+ return {
449
+ valid: false,
450
+ value,
451
+ error: "Provider must have a useClass property"
452
+ };
453
+ }
454
+ if (!("scope" in value)) {
455
+ value.scope = InjectableScope.Singleton;
456
+ }
457
+ if ("scope" in value && !Object.values(InjectableScope).includes(value.scope)) {
458
+ return {
459
+ valid: false,
460
+ value,
461
+ error: "Provider scope must be a valid injectable scope"
462
+ };
463
+ }
464
+ return {
465
+ valid: true,
466
+ value
467
+ };
468
+ }
469
+ __name(validateClassProvider, "validateClassProvider");
470
+ function validateValueProvider(value) {
471
+ if (!("useValue" in value)) {
472
+ return {
473
+ valid: false,
474
+ value,
475
+ error: "Provider must have a useValue property"
476
+ };
477
+ }
478
+ return {
479
+ valid: true,
480
+ value
481
+ };
482
+ }
483
+ __name(validateValueProvider, "validateValueProvider");
484
+ function validateOptionalFactoryDependency(value) {
485
+ if (!("optional" in value)) {
486
+ return {
487
+ valid: false,
488
+ value,
489
+ error: "Provider must have an optional property"
490
+ };
491
+ }
492
+ if (!("token" in value)) {
493
+ return {
494
+ valid: false,
495
+ value,
496
+ error: "Provider must have a token property"
497
+ };
498
+ }
499
+ const { valid, error } = validateInjectionToken(value.token);
500
+ if (!valid) {
501
+ return {
502
+ valid: false,
503
+ value,
504
+ error
505
+ };
506
+ }
507
+ return {
508
+ valid: true,
509
+ value
510
+ };
511
+ }
512
+ __name(validateOptionalFactoryDependency, "validateOptionalFactoryDependency");
513
+ function validateFactoryProvider(value) {
514
+ if (!("useFactory" in value)) {
515
+ return {
516
+ valid: false,
517
+ value,
518
+ error: "Provider must have a useFactory property"
519
+ };
520
+ }
521
+ if (!isFunction(value.useFactory)) {
522
+ return {
523
+ valid: false,
524
+ value,
525
+ error: "Provider useFactory must be a function"
526
+ };
527
+ }
528
+ if (!("inject" in value)) {
529
+ value.inject = [];
530
+ }
531
+ if ("inject" in value && !Array.isArray(value.inject)) {
532
+ return {
533
+ valid: false,
534
+ value,
535
+ error: "Provider inject must be an array"
536
+ };
537
+ }
538
+ if ("inject" in value) {
539
+ for (const token of value.inject) {
540
+ if (isObject(token) && "optional" in token && "token" in token) {
541
+ const { valid, error } = validateOptionalFactoryDependency(token);
542
+ if (!valid) {
543
+ return {
544
+ valid,
545
+ value,
546
+ error
547
+ };
548
+ }
549
+ } else {
550
+ const { valid, error } = validateInjectionToken(token);
551
+ if (!valid) {
552
+ return {
553
+ valid,
554
+ value,
555
+ error
556
+ };
557
+ }
558
+ }
559
+ }
560
+ }
561
+ if ("scope" in value && !Object.values(InjectableScope).includes(value.scope)) {
562
+ return {
563
+ valid: false,
564
+ value,
565
+ error: "Provider scope must be a valid injectable scope"
566
+ };
567
+ }
568
+ return {
569
+ valid: true,
570
+ value
571
+ };
572
+ }
573
+ __name(validateFactoryProvider, "validateFactoryProvider");
574
+ function validateExistingProvider(value) {
575
+ if (!("useExisting" in value)) {
576
+ return {
577
+ valid: false,
578
+ value,
579
+ error: "Provider must have a useExisting property"
580
+ };
581
+ }
582
+ return {
583
+ valid: true,
584
+ value
585
+ };
586
+ }
587
+ __name(validateExistingProvider, "validateExistingProvider");
588
+
589
+ // src/schemas/module/module-options.validate.ts
590
+ function validateModuleOptions(value, isDynamic = false) {
591
+ if (isNil(value)) {
592
+ value = {
593
+ controllers: [],
594
+ imports: [],
595
+ providers: [],
596
+ exports: []
597
+ };
598
+ }
599
+ if (!isNil(value) && !isObject(value)) {
600
+ return {
601
+ valid: false,
602
+ value,
603
+ error: "Module options must be an object"
604
+ };
605
+ }
606
+ if (isDynamic) {
607
+ if (!("module" in value) || !isFunction(value.module)) {
608
+ return {
609
+ valid: false,
610
+ value,
611
+ error: "Dynamic module must have a module function"
612
+ };
613
+ }
614
+ if (!("global" in value)) {
615
+ value.global = false;
616
+ } else if (!("global" in value) && !isBoolean(value.global)) {
617
+ return {
618
+ valid: false,
619
+ value,
620
+ error: "Dynamic module must have a global property"
621
+ };
622
+ }
623
+ }
624
+ if ("imports" in value && !Array.isArray(value.imports)) {
625
+ return {
626
+ valid: false,
627
+ value,
628
+ error: "Imports property must be an array"
629
+ };
630
+ } else if (!("imports" in value)) {
631
+ value.imports = [];
632
+ }
633
+ if ("controllers" in value && !Array.isArray(value.controllers)) {
634
+ return {
635
+ valid: false,
636
+ value,
637
+ error: "Controllers property must be an array"
638
+ };
639
+ } else if (!("controllers" in value)) {
640
+ value.controllers = [];
641
+ }
642
+ if ("providers" in value && !Array.isArray(value.providers)) {
643
+ return {
644
+ valid: false,
645
+ value,
646
+ error: "Providers property must be an array"
647
+ };
648
+ } else if (!("providers" in value)) {
649
+ value.providers = [];
650
+ }
651
+ if ("exports" in value && !Array.isArray(value.exports)) {
652
+ return {
653
+ valid: false,
654
+ value,
655
+ error: "Exports property must be an array"
656
+ };
657
+ } else if (!("exports" in value)) {
658
+ value.exports = [];
659
+ }
660
+ for (const imported of value.imports) {
661
+ if (!isFunction(imported) && !isObject(imported) && !isPromise(imported)) {
662
+ return {
663
+ valid: false,
664
+ value,
665
+ error: "Import must be a function, object, or promise"
666
+ };
667
+ }
668
+ if (isObject(imported) && !isPromise(imported)) {
669
+ const { valid, error } = validateModuleOptions(imported, true);
670
+ if (!valid) {
671
+ return {
672
+ valid,
673
+ value,
674
+ error
675
+ };
676
+ }
677
+ }
678
+ }
679
+ for (const controller of value.controllers) {
680
+ if (!isFunction(controller)) {
681
+ return {
682
+ valid: false,
683
+ value,
684
+ error: "Controller must be a function"
685
+ };
686
+ }
687
+ }
688
+ for (const provider of value.providers) {
689
+ const { valid, error } = validateProvider(provider);
690
+ if (!valid) {
691
+ return {
692
+ valid: false,
693
+ value,
694
+ error
695
+ };
696
+ }
697
+ }
698
+ for (const exportItem of value.exports) {
699
+ const { valid, error } = validateInjectionToken(exportItem);
700
+ if (!valid) {
701
+ return {
702
+ valid,
703
+ value,
704
+ error
705
+ };
706
+ }
707
+ if (isObject(exportItem) && ("useClass" in exportItem || "useFactory" in exportItem || "useValue" in exportItem || "useExisting" in exportItem)) {
708
+ const { valid: valid2 } = validateProvider(exportItem);
709
+ if (!valid2) {
710
+ return {
711
+ valid: false,
712
+ value,
713
+ error: "Export must be a provider object"
714
+ };
715
+ }
716
+ }
717
+ }
718
+ return {
719
+ valid: true,
720
+ value
721
+ };
722
+ }
723
+ __name(validateModuleOptions, "validateModuleOptions");
724
+
725
+ // src/schemas/injectable-metadata.validate.ts
726
+ var defaultInjectableOptions = {
727
+ scope: InjectableScope.Singleton
728
+ };
729
+ function validateInjectableMetadata(value) {
730
+ if (isNil(value)) {
731
+ return {
732
+ valid: true,
733
+ value: defaultInjectableOptions
734
+ };
735
+ }
736
+ if (!isObject(value)) {
737
+ return {
738
+ valid: false,
739
+ value: defaultInjectableOptions,
740
+ error: "Injectable options must be an object"
741
+ };
742
+ }
743
+ if (!("scope" in value)) {
744
+ return {
745
+ valid: true,
746
+ value: {
747
+ ...defaultInjectableOptions,
748
+ ...value
749
+ }
750
+ };
751
+ }
752
+ if ("scope" in value && !isString(value.scope)) {
753
+ return {
754
+ valid: false,
755
+ value: defaultInjectableOptions,
756
+ error: "Injectable scope must be a string"
757
+ };
758
+ }
759
+ if ("scope" in value && !Object.values(InjectableScope).includes(value.scope)) {
760
+ return {
761
+ valid: false,
762
+ value: defaultInjectableOptions,
763
+ error: "Invalid injectable scope"
764
+ };
765
+ }
766
+ return {
767
+ valid: true,
768
+ value
769
+ };
770
+ }
771
+ __name(validateInjectableMetadata, "validateInjectableMetadata");
772
+
773
+ export {
774
+ validateControllerOptions,
775
+ validateErrorFilter,
776
+ validatePipe,
777
+ validateEventParameter,
778
+ validateEventMetadata,
779
+ validateGuard,
780
+ validateInterceptor,
781
+ validateInjectionToken,
782
+ validateProvider,
783
+ validateClassProvider,
784
+ validateValueProvider,
785
+ validateFactoryProvider,
786
+ validateExistingProvider,
787
+ validateModuleOptions,
788
+ validateInjectableMetadata
789
+ };
790
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NjaGVtYXMvY29udHJvbGxlci9jb250cm9sbGVyLW9wdGlvbnMudmFsaWRhdGUudHMiLCAiLi4vc3JjL3NjaGVtYXMvZXZlbnRzL2Vycm9yLWZpbHRlci52YWxpZGF0ZS50cyIsICIuLi9zcmMvc2NoZW1hcy9ldmVudHMvcGlwZS52YWxpZGF0ZS50cyIsICIuLi9zcmMvc2NoZW1hcy9ldmVudHMvZXZlbnQtcGFyYW1ldGVyLnZhbGlkYXRlLnRzIiwgIi4uL3NyYy9zY2hlbWFzL2V2ZW50cy9ldmVudC1tZXRhZGF0YS52YWxpZGF0ZS50cyIsICIuLi9zcmMvc2NoZW1hcy9ldmVudHMvZ3VhcmQudmFsaWRhdGUudHMiLCAiLi4vc3JjL3NjaGVtYXMvZXZlbnRzL2ludGVyY2VwdG9yLnZhbGlkYXRlLnRzIiwgIi4uL3NyYy9zY2hlbWFzL2luamVjdGlvbi10b2tlbi52YWxpZGF0ZS50cyIsICIuLi9zcmMvc2NoZW1hcy9tb2R1bGUvcHJvdmlkZXIudmFsaWRhdGUudHMiLCAiLi4vc3JjL3NjaGVtYXMvbW9kdWxlL21vZHVsZS1vcHRpb25zLnZhbGlkYXRlLnRzIiwgIi4uL3NyYy9zY2hlbWFzL2luamVjdGFibGUtbWV0YWRhdGEudmFsaWRhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IGRlZmF1bHRDb250cm9sbGVyT3B0aW9uczogQ29udHJvbGxlck9wdGlvbnMgPSB7IHByZWZpeDogJycgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMob3B0aW9ucz86IENvbnRyb2xsZXJPcHRpb25zKSB7XG4gICAgaWYgKGlzTmlsKG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlOiBkZWZhdWx0Q29udHJvbGxlck9wdGlvbnMsIGVycm9yOiAnQ29udHJvbGxlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cblxuICAgIGlmICghKCdwcmVmaXgnIGluIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogeyAuLi5kZWZhdWx0Q29udHJvbGxlck9wdGlvbnMsIC4uLm9wdGlvbnMgfSB9O1xuICAgIH1cbiAgICBpZiAoJ3ByZWZpeCcgaW4gb3B0aW9ucyAmJiAhaXNTdHJpbmcob3B0aW9ucy5wcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zLCBlcnJvcjogJ0NvbnRyb2xsZXIgcHJlZml4IG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiB7IC4uLmRlZmF1bHRDb250cm9sbGVyT3B0aW9ucywgLi4ub3B0aW9ucyB9IH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXJyb3JGaWx0ZXI8RUYgZXh0ZW5kcyBFcnJvckZpbHRlciA9IEVycm9yRmlsdGVyPih2YWx1ZTogRUYgfCBOZXdhYmxlPEVGPikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuY2F0Y2gpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBoYXZlIGEgY2F0Y2ggbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxFcnJvckZpbHRlcj52YWx1ZSkuY2F0Y2gpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBoYXZlIGEgY2F0Y2ggbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQaXBlKHZhbHVlOiBQaXBlIHwgTmV3YWJsZTxQaXBlPikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQaXBlIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS50cmFuc2Zvcm0pKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGhhdmUgYSB0cmFuc2Zvcm0gbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxQaXBlPnZhbHVlKS50cmFuc2Zvcm0pKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGhhdmUgYSB0cmFuc2Zvcm0gbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi9waXBlLnZhbGlkYXRlJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIodmFsdWU6IE1ldGhvZFBhcmFtZXRlcikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkgfHwgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG4gICAgaWYgKCdrZXknIGluIHZhbHVlICYmICFpc05pbCh2YWx1ZS5rZXkpICYmICFpc1N0cmluZyh2YWx1ZS5rZXkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGtleSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICBpZiAoISgnaW5kZXgnIGluIHZhbHVlKSB8fCAhaXNOdW1iZXIodmFsdWUuaW5kZXgpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGluZGV4IGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICAvLyBCb2R5UGFyYW1ldGVyIHwgUGxheWVyUGFyYW1ldGVyXG4gICAgaWYgKFxuICAgICAgICAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkJvZHkgfHwgdmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLlBsYXllcikgJiZcbiAgICAgICAgJ2RhdGEnIGluIHZhbHVlICYmXG4gICAgICAgICFpc05pbCh2YWx1ZS5kYXRhKSAmJlxuICAgICAgICAhaXNTdHJpbmcodmFsdWUuZGF0YSlcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZGF0YSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBDdXN0b21QYXJhbWV0ZXJcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkN1c3RvbSAmJiAhKCdmYWN0b3J5JyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZmFjdG9yeSBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5DdXN0b20gJiYgJ2ZhY3RvcnknIGluIHZhbHVlICYmICFpc0Z1bmN0aW9uKHZhbHVlLmZhY3RvcnkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cbiAgICAvLyAgUGFyYW1QYXJhbWV0ZXJcbiAgICBpZiAoKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5QYXJhbSB8fCB2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuSW5kZXgpICYmICEoJ2RhdGEnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBkYXRhIGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLlBhcmFtICYmICdkYXRhJyBpbiB2YWx1ZSAmJiAhaXNTdHJpbmcodmFsdWUuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZGF0YSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBJbmRleFBhcmFtZXRlclxuICAgIGlmICh2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuSW5kZXggJiYgJ2RhdGEnIGluIHZhbHVlICYmICFpc051bWJlcih2YWx1ZS5kYXRhKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBkYXRhIG11c3QgYmUgYSBudW1iZXInIH07XG4gICAgfVxuICAgIC8vIEJvZHlQYXJhbWV0ZXIgfCBDdXN0b21QYXJhbWV0ZXIgfCBQYXJhbVBhcmFtZXRlciB8IFBsYXllclBhcmFtZXRlciB8IEluZGV4UGFyYW1ldGVyO1xuICAgIGlmIChcbiAgICAgICAgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QgJiZcbiAgICAgICAgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlICYmXG4gICAgICAgICdwaXBlcycgaW4gdmFsdWUgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUucGlwZXMpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIHBpcGVzIG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVxdWVzdCAmJiB2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVzcG9uc2UgJiYgISgncGlwZXMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5waXBlcyA9IFtdO1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QgJiYgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiB2YWx1ZS5waXBlcyEpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXZlbnRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2FwcCc7XG5pbXBvcnQgeyBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVFdmVudFBhcmFtZXRlciB9IGZyb20gJy4vZXZlbnQtcGFyYW1ldGVyLnZhbGlkYXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZlbnRNZXRhZGF0YSh2YWx1ZTogRXZlbnRNZXRhZGF0YSkge1xuICAgIGlmIChpc05pbCh2YWx1ZSkgfHwgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cblxuICAgIC8vIFR5cGVcbiAgICBpZiAoISgndHlwZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgdHlwZSBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKCFpc1N0cmluZyh2YWx1ZS50eXBlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIHR5cGUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG4gICAgLy8gTmFtZVxuICAgIGlmICghKCduYW1lJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBuYW1lIGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAoIWlzU3RyaW5nKHZhbHVlLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBNZXRob2RcbiAgICBpZiAoISgnbWV0aG9kJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBtZXRob2QgaXMgcmVxdWlyZWQnIH07XG4gICAgfVxuICAgIGlmICghaXNTdHJpbmcodmFsdWUubWV0aG9kKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG1ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBQYXJhbXNcbiAgICBpZiAoISgncGFyYW1zJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgKDxFdmVudE1ldGFkYXRhPnZhbHVlKS5wYXJhbXMgPSBbXTtcbiAgICB9XG4gICAgaWYgKCdwYXJhbXMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLnBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiB2YWx1ZS5wYXJhbXMpIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIocGFyYW0pO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHdWFyZDxHIGV4dGVuZHMgR3VhcmQgPSBHdWFyZD4odmFsdWU6IEcgfCBOZXdhYmxlPEc+KSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxHdWFyZD52YWx1ZSkuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUludGVyY2VwdG9yPEkgZXh0ZW5kcyBJbnRlcmNlcHRvciA9IEludGVyY2VwdG9yPih2YWx1ZTogSSB8IE5ld2FibGU8ST4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbigoPEludGVyY2VwdG9yPnZhbHVlKS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZywgaXNTeW1ib2wgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUluamVjdGlvblRva2VuKHZhbHVlOiBJbmplY3Rpb25Ub2tlbikge1xuICAgIGNvbnN0IHZhbGlkID0gaXNTdHJpbmcodmFsdWUpIHx8IGlzU3ltYm9sKHZhbHVlKSB8fCBpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSk7XG4gICAgcmV0dXJuIHZhbGlkID8geyB2YWxpZCwgdmFsdWUgfSA6IHsgdmFsaWQsIHZhbHVlLCBlcnJvcjogJ0luamVjdGlvbiB0b2tlbiBtdXN0IGJlIGEgc3RyaW5nLCBzeW1ib2wsIGNsYXNzLCBvciBvYmplY3QnIH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ2xhc3NQcm92aWRlcixcbiAgICBFeGlzdGluZ1Byb3ZpZGVyLFxuICAgIEZhY3RvcnlQcm92aWRlcixcbiAgICBPcHRpb25hbEZhY3RvcnlEZXBlbmRlbmN5LFxuICAgIFByb3ZpZGVyLFxuICAgIFZhbHVlUHJvdmlkZXIsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbi52YWxpZGF0ZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlU2NvcGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVByb3ZpZGVyKHZhbHVlOiBQcm92aWRlcikge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgYmUgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCEoJ3Byb3ZpZGUnIGluIHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSBwcm92aWRlIHByb3BlcnR5JyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4odmFsdWUucHJvdmlkZSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3VzZUNsYXNzJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ2xhc3NQcm92aWRlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZVZhbHVlJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVmFsdWVQcm92aWRlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZUZhY3RvcnknIGluIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVGYWN0b3J5UHJvdmlkZXIodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VFeGlzdGluZycgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUV4aXN0aW5nUHJvdmlkZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUNsYXNzLCB1c2VWYWx1ZSwgdXNlRmFjdG9yeSwgb3IgdXNlRXhpc3RpbmcgcHJvcGVydHknIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNsYXNzUHJvdmlkZXIodmFsdWU6IENsYXNzUHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlQ2xhc3MnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUNsYXNzIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIGlmICghKCdzY29wZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLnNjb3BlID0gSW5qZWN0YWJsZVNjb3BlLlNpbmdsZXRvbjtcbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBzY29wZSBtdXN0IGJlIGEgdmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVmFsdWVQcm92aWRlcih2YWx1ZTogVmFsdWVQcm92aWRlcikge1xuICAgIGlmICghKCd1c2VWYWx1ZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlVmFsdWUgcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSh2YWx1ZTogT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSkge1xuICAgIGlmICghKCdvcHRpb25hbCcgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGFuIG9wdGlvbmFsIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIGlmICghKCd0b2tlbicgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdG9rZW4gcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4odmFsdWUudG9rZW4pO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmFjdG9yeVByb3ZpZGVyKHZhbHVlOiBGYWN0b3J5UHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlRmFjdG9yeScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlRmFjdG9yeSBwcm9wZXJ0eScgfTtcbiAgICB9XG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlLnVzZUZhY3RvcnkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgdXNlRmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCEoJ2luamVjdCcgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmluamVjdCA9IFtdO1xuICAgIH1cbiAgICBpZiAoJ2luamVjdCcgaW4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUuaW5qZWN0KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIGluamVjdCBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH1cbiAgICBpZiAoJ2luamVjdCcgaW4gdmFsdWUpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZS5pbmplY3QpIHtcbiAgICAgICAgICAgIGlmIChpc09iamVjdCh0b2tlbikgJiYgJ29wdGlvbmFsJyBpbiB0b2tlbiAmJiAndG9rZW4nIGluIHRva2VuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSh0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbih0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCdzY29wZScgaW4gdmFsdWUgJiYgIU9iamVjdC52YWx1ZXM8YCR7SW5qZWN0YWJsZVNjb3BlfWA+KEluamVjdGFibGVTY29wZSkuaW5jbHVkZXModmFsdWUuc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgc2NvcGUgbXVzdCBiZSBhIHZhbGlkIGluamVjdGFibGUgc2NvcGUnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nUHJvdmlkZXIodmFsdWU6IEV4aXN0aW5nUHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlRXhpc3RpbmcnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUV4aXN0aW5nIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRHluYW1pY01vZHVsZSwgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXIudmFsaWRhdGUnO1xuaW1wb3J0IHsgaXNCb29sZWFuLCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QsIGlzUHJvbWlzZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4sIE51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbi52YWxpZGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMoXG4gICAgdmFsdWU/OiBNb2R1bGVPcHRpb25zIHwgRHluYW1pY01vZHVsZSxcbiAgICBpc0R5bmFtaWMgPSBmYWxzZSxcbik6IHsgdmFsaWQ6IGJvb2xlYW47IHZhbHVlOiBNb2R1bGVPcHRpb25zIHwgRHluYW1pY01vZHVsZTsgZXJyb3I/OiBOdWxsYWJsZTxzdHJpbmc+IH0ge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgICBjb250cm9sbGVyczogW10sXG4gICAgICAgICAgICBpbXBvcnRzOiBbXSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW10sXG4gICAgICAgICAgICBleHBvcnRzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnTW9kdWxlIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICBpZiAoISgnbW9kdWxlJyBpbiB2YWx1ZSkgfHwgIWlzRnVuY3Rpb24odmFsdWUubW9kdWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdEeW5hbWljIG1vZHVsZSBtdXN0IGhhdmUgYSBtb2R1bGUgZnVuY3Rpb24nIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISgnZ2xvYmFsJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLmdsb2JhbCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKCEoJ2dsb2JhbCcgaW4gdmFsdWUpICYmICFpc0Jvb2xlYW4odmFsdWUuZ2xvYmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdEeW5hbWljIG1vZHVsZSBtdXN0IGhhdmUgYSBnbG9iYWwgcHJvcGVydHknIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ2ltcG9ydHMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLmltcG9ydHMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW1wb3J0cyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnaW1wb3J0cycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmltcG9ydHMgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoJ2NvbnRyb2xsZXJzJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5jb250cm9sbGVycykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdDb250cm9sbGVycyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnY29udHJvbGxlcnMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5jb250cm9sbGVycyA9IFtdO1xuICAgIH1cblxuICAgIGlmICgncHJvdmlkZXJzJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5wcm92aWRlcnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXJzIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfSBlbHNlIGlmICghKCdwcm92aWRlcnMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5wcm92aWRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoJ2V4cG9ydHMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLmV4cG9ydHMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXhwb3J0cyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnZXhwb3J0cycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmV4cG9ydHMgPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGltcG9ydGVkIG9mIHZhbHVlLmltcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGltcG9ydGVkKSAmJiAhaXNPYmplY3QoaW1wb3J0ZWQpICYmICFpc1Byb21pc2UoaW1wb3J0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0ltcG9ydCBtdXN0IGJlIGEgZnVuY3Rpb24sIG9iamVjdCwgb3IgcHJvbWlzZScgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09iamVjdChpbXBvcnRlZCkgJiYgIWlzUHJvbWlzZShpbXBvcnRlZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMoPER5bmFtaWNNb2R1bGU+aW1wb3J0ZWQsIHRydWUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiB2YWx1ZS5jb250cm9sbGVycykge1xuICAgICAgICBpZiAoIWlzRnVuY3Rpb24oY29udHJvbGxlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnQ29udHJvbGxlciBtdXN0IGJlIGEgZnVuY3Rpb24nIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHZhbHVlLnByb3ZpZGVycykge1xuICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVQcm92aWRlcihwcm92aWRlcik7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGV4cG9ydEl0ZW0gb2YgdmFsdWUuZXhwb3J0cykge1xuICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbig8SW5qZWN0aW9uVG9rZW4+ZXhwb3J0SXRlbSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzT2JqZWN0KGV4cG9ydEl0ZW0pICYmXG4gICAgICAgICAgICAoJ3VzZUNsYXNzJyBpbiBleHBvcnRJdGVtIHx8ICd1c2VGYWN0b3J5JyBpbiBleHBvcnRJdGVtIHx8ICd1c2VWYWx1ZScgaW4gZXhwb3J0SXRlbSB8fCAndXNlRXhpc3RpbmcnIGluIGV4cG9ydEl0ZW0pXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gdmFsaWRhdGVQcm92aWRlcihleHBvcnRJdGVtKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V4cG9ydCBtdXN0IGJlIGEgcHJvdmlkZXIgb2JqZWN0JyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEluamVjdGFibGVTY29wZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3QgZGVmYXVsdEluamVjdGFibGVPcHRpb25zOiBJbmplY3RhYmxlT3B0aW9ucyA9IHsgc2NvcGU6IEluamVjdGFibGVTY29wZS5TaW5nbGV0b24gfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhKHZhbHVlPzogSW5qZWN0YWJsZU9wdGlvbnMpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2NvcGUnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IHsgLi4uZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCAuLi52YWx1ZSB9IH07XG4gICAgfVxuICAgIGlmICgnc2NvcGUnIGluIHZhbHVlICYmICFpc1N0cmluZyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgc2NvcGUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0ludmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQU1BLDJCQUE4QztFQUFFQyxRQUFRO0FBQUc7QUFFMUQsU0FBU0MsMEJBQTBCQyxTQUEyQjtBQUNqRSxNQUFJQyxNQUFNRCxPQUFBQSxHQUFVO0FBQ2hCLFdBQU87TUFBRUUsT0FBTztNQUFNQyxPQUFPTjtJQUF5QjtFQUMx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QUFPQyxnQkFBZ0JDO0FBQVU7QUFFaEYsU0FBU0MsMkJBQTJCQyxPQUF5QjtBQUNoRSxNQUFJQyxNQUFNRCxLQUFBQSxHQUFRO0FBQ2QsV0FBTztNQUFFRSxPQUFPO01BQU1GLE9BQU9MO0lBQXlCO0VBQzFEO0FBRUEsTUFBSSxDQUFDUSxTQUFTSCxLQUFBQSxHQUFRO0FBQ2xCLFdBQU87TUFBRUUsT0FBTztNQUFPRixPQUFPTDtNQUEwQlMsT0FBTztJQUF1QztFQUMxRztBQUVBLE1BQUksRUFBRSxXQUFXSixRQUFRO0FBQ3JCLFdBQU87TUFBRUUsT0FBTztNQUFNRixPQUFPO1FBQUUsR0FBR0w7UUFBMEIsR0FBR0s7TUFBTTtJQUFFO0VBQzNFO0FBQ0EsTUFBSSxXQUFXQSxTQUFTLENBQUNLLFNBQVNMLE1BQU1KLEtBQUssR0FBRztBQUM1QyxXQUFPO01BQUVNLE9BQU87TUFBT0YsT0FBT0w7TUFBMEJTLE9BQU87SUFBb0M7RUFDdkc7QUFFQSxNQUFJLFdBQVdKLFNBQVMsQ0FBQ00sT0FBT0MsT0FBNkJWLGVBQUFBLEVBQWlCVyxTQUFTUixNQUFNSixLQUFLLEdBQUc7QUFDakcsV0FBTztNQUFFTSxPQUFPO01BQU9GLE9BQU9MO01BQTBCUyxPQUFPO0lBQTJCO0VBQzlGO0FBRUEsU0FBTztJQUFFRixPQUFPO0lBQU1GO0VBQU07QUFDaEM7QUFyQmdCRDsiLAogICJuYW1lcyI6IFsiZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zIiwgInByZWZpeCIsICJ2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIiwgIm9wdGlvbnMiLCAiaXNOaWwiLCAidmFsaWQiLCAidmFsdWUiLCAiaXNPYmplY3QiLCAiZXJyb3IiLCAiaXNTdHJpbmciLCAidmFsaWRhdGVFcnJvckZpbHRlciIsICJ2YWx1ZSIsICJpc05pbCIsICJ2YWxpZCIsICJlcnJvciIsICJpc0Z1bmN0aW9uIiwgImlzT2JqZWN0IiwgInByb3RvdHlwZSIsICJjYXRjaCIsICJ2YWxpZGF0ZVBpcGUiLCAidmFsdWUiLCAiaXNOaWwiLCAidmFsaWQiLCAiZXJyb3IiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJwcm90b3R5cGUiLCAidHJhbnNmb3JtIiwgInZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIiLCAidmFsdWUiLCAiaXNOaWwiLCAiaXNPYmplY3QiLCAidmFsaWQiLCAiZXJyb3IiLCAia2V5IiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImluZGV4IiwgInR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgIkJvZHkiLCAiUGxheWVyIiwgImRhdGEiLCAiQ3VzdG9tIiwgImlzRnVuY3Rpb24iLCAiZmFjdG9yeSIsICJQYXJhbSIsICJJbmRleCIsICJSZXF1ZXN0IiwgIlJlc3BvbnNlIiwgIkFycmF5IiwgImlzQXJyYXkiLCAicGlwZXMiLCAicGlwZSIsICJ2YWxpZGF0ZVBpcGUiLCAidmFsaWRhdGVFdmVudE1ldGFkYXRhIiwgInZhbHVlIiwgImlzTmlsIiwgImlzT2JqZWN0IiwgInZhbGlkIiwgImVycm9yIiwgImlzU3RyaW5nIiwgInR5cGUiLCAibmFtZSIsICJtZXRob2QiLCAicGFyYW1zIiwgIkFycmF5IiwgImlzQXJyYXkiLCAicGFyYW0iLCAidmFsaWRhdGVFdmVudFBhcmFtZXRlciIsICJ2YWxpZGF0ZUd1YXJkIiwgInZhbHVlIiwgImlzTmlsIiwgInZhbGlkIiwgImVycm9yIiwgImlzRnVuY3Rpb24iLCAiaXNPYmplY3QiLCAicHJvdG90eXBlIiwgImNhbkFjdGl2YXRlIiwgInZhbGlkYXRlSW50ZXJjZXB0b3IiLCAidmFsdWUiLCAiaXNOaWwiLCAidmFsaWQiLCAiZXJyb3IiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJwcm90b3R5cGUiLCAiaW50ZXJjZXB0IiwgInZhbGlkYXRlSW5qZWN0aW9uVG9rZW4iLCAidmFsdWUiLCAidmFsaWQiLCAiaXNTdHJpbmciLCAiaXNTeW1ib2wiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJlcnJvciIsICJ2YWxpZGF0ZVByb3ZpZGVyIiwgInZhbHVlIiwgImlzT2JqZWN0IiwgImlzRnVuY3Rpb24iLCAidmFsaWQiLCAiZXJyb3IiLCAidmFsaWRhdGVJbmplY3Rpb25Ub2tlbiIsICJwcm92aWRlIiwgInZhbGlkYXRlQ2xhc3NQcm92aWRlciIsICJ2YWxpZGF0ZVZhbHVlUHJvdmlkZXIiLCAidmFsaWRhdGVGYWN0b3J5UHJvdmlkZXIiLCAidmFsaWRhdGVFeGlzdGluZ1Byb3ZpZGVyIiwgInNjb3BlIiwgIkluamVjdGFibGVTY29wZSIsICJTaW5nbGV0b24iLCAiT2JqZWN0IiwgInZhbHVlcyIsICJpbmNsdWRlcyIsICJ2YWxpZGF0ZU9wdGlvbmFsRmFjdG9yeURlcGVuZGVuY3kiLCAidG9rZW4iLCAidXNlRmFjdG9yeSIsICJpbmplY3QiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ2YWxpZGF0ZU1vZHVsZU9wdGlvbnMiLCAidmFsdWUiLCAiaXNEeW5hbWljIiwgImlzTmlsIiwgImNvbnRyb2xsZXJzIiwgImltcG9ydHMiLCAicHJvdmlkZXJzIiwgImV4cG9ydHMiLCAiaXNPYmplY3QiLCAidmFsaWQiLCAiZXJyb3IiLCAiaXNGdW5jdGlvbiIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImlzQm9vbGVhbiIsICJBcnJheSIsICJpc0FycmF5IiwgImltcG9ydGVkIiwgImlzUHJvbWlzZSIsICJjb250cm9sbGVyIiwgInByb3ZpZGVyIiwgInZhbGlkYXRlUHJvdmlkZXIiLCAiZXhwb3J0SXRlbSIsICJ2YWxpZGF0ZUluamVjdGlvblRva2VuIiwgImRlZmF1bHRJbmplY3RhYmxlT3B0aW9ucyIsICJzY29wZSIsICJJbmplY3RhYmxlU2NvcGUiLCAiU2luZ2xldG9uIiwgInZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhIiwgInZhbHVlIiwgImlzTmlsIiwgInZhbGlkIiwgImlzT2JqZWN0IiwgImVycm9yIiwgImlzU3RyaW5nIiwgIk9iamVjdCIsICJ2YWx1ZXMiLCAiaW5jbHVkZXMiXQp9Cg==