@apipass/schemas 1.0.7 → 1.0.9

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 (60) hide show
  1. package/README.md +33 -33
  2. package/base-schema.component.d.ts +12 -12
  3. package/{esm2020 → esm2022}/apipass-schemas.mjs +4 -4
  4. package/esm2022/base-schema.component.mjs +38 -0
  5. package/{esm2020 → esm2022}/public-api.mjs +17 -17
  6. package/esm2022/schema-custom-attributes/schema-custom-attributes.mjs +169 -0
  7. package/esm2022/schema-fields.service.mjs +81 -0
  8. package/esm2022/schema-form/schema-array/array-session/array-session.mjs +141 -0
  9. package/esm2022/schema-form/schema-array/schema-array.mjs +219 -0
  10. package/esm2022/schema-form/schema-form.mjs +107 -0
  11. package/esm2022/schema-form/schema-input/field-render/field-render.mjs +76 -0
  12. package/esm2022/schema-form/schema-input/input-render/boolean-input/boolean-input.component.mjs +51 -0
  13. package/esm2022/schema-form/schema-input/input-render/input-render.mjs +193 -0
  14. package/esm2022/schema-form/schema-input/input-render/number-input/number-input.component.mjs +49 -0
  15. package/esm2022/schema-form/schema-input/schema-input.mjs +95 -0
  16. package/esm2022/schema-form/schema-object/schema-object.mjs +125 -0
  17. package/esm2022/schema-form-render.mjs +126 -0
  18. package/{esm2020 → esm2022}/schema-form-render.module.mjs +109 -108
  19. package/esm2022/schema-validation-field.mjs +18 -0
  20. package/{esm2020 → esm2022}/struct.utils.mjs +9 -9
  21. package/esm2022/type-script-compile/type-script-compile.base.mjs +115 -0
  22. package/{fesm2020 → fesm2022}/apipass-schemas.mjs +1571 -1563
  23. package/fesm2022/apipass-schemas.mjs.map +1 -0
  24. package/index.d.ts +5 -5
  25. package/package.json +15 -21
  26. package/public-api.d.ts +16 -16
  27. package/schema-custom-attributes/schema-custom-attributes.d.ts +21 -21
  28. package/schema-fields.service.d.ts +14 -14
  29. package/schema-form/schema-array/array-session/array-session.d.ts +19 -19
  30. package/schema-form/schema-array/schema-array.d.ts +31 -32
  31. package/schema-form/schema-form.d.ts +31 -31
  32. package/schema-form/schema-input/field-render/field-render.d.ts +16 -16
  33. package/schema-form/schema-input/input-render/boolean-input/boolean-input.component.d.ts +15 -15
  34. package/schema-form/schema-input/input-render/input-render.d.ts +29 -29
  35. package/schema-form/schema-input/input-render/number-input/number-input.component.d.ts +15 -15
  36. package/schema-form/schema-input/schema-input.d.ts +18 -19
  37. package/schema-form/schema-object/schema-object.d.ts +34 -34
  38. package/schema-form-render.d.ts +31 -31
  39. package/schema-form-render.module.d.ts +23 -23
  40. package/schema-validation-field.d.ts +23 -23
  41. package/struct.utils.d.ts +1 -1
  42. package/type-script-compile/type-script-compile.base.d.ts +17 -17
  43. package/esm2020/base-schema.component.mjs +0 -37
  44. package/esm2020/schema-custom-attributes/schema-custom-attributes.mjs +0 -169
  45. package/esm2020/schema-fields.service.mjs +0 -80
  46. package/esm2020/schema-form/schema-array/array-session/array-session.mjs +0 -143
  47. package/esm2020/schema-form/schema-array/schema-array.mjs +0 -220
  48. package/esm2020/schema-form/schema-form.mjs +0 -107
  49. package/esm2020/schema-form/schema-input/field-render/field-render.mjs +0 -69
  50. package/esm2020/schema-form/schema-input/input-render/boolean-input/boolean-input.component.mjs +0 -46
  51. package/esm2020/schema-form/schema-input/input-render/input-render.mjs +0 -192
  52. package/esm2020/schema-form/schema-input/input-render/number-input/number-input.component.mjs +0 -44
  53. package/esm2020/schema-form/schema-input/schema-input.mjs +0 -96
  54. package/esm2020/schema-form/schema-object/schema-object.mjs +0 -123
  55. package/esm2020/schema-form-render.mjs +0 -126
  56. package/esm2020/schema-validation-field.mjs +0 -14
  57. package/esm2020/type-script-compile/type-script-compile.base.mjs +0 -114
  58. package/fesm2015/apipass-schemas.mjs +0 -1801
  59. package/fesm2015/apipass-schemas.mjs.map +0 -1
  60. package/fesm2020/apipass-schemas.mjs.map +0 -1
@@ -0,0 +1,115 @@
1
+ import { Injectable, Optional, SkipSelf } from '@angular/core';
2
+ import { FormControl, Validators } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ class TypeScriptCompileBase {
5
+ getTranslate(text) {
6
+ return text;
7
+ }
8
+ addItemToFormProperties(formProperties, item, key) {
9
+ this.translateProperties(item);
10
+ if (item.minLength && item.minLength > 0) {
11
+ formProperties[key] = new FormControl([null, [Validators.required]]);
12
+ }
13
+ else {
14
+ formProperties[key] = new FormControl([null]);
15
+ }
16
+ }
17
+ compileProperties(input) {
18
+ const compiledProperties = [];
19
+ const formProperties = {};
20
+ let inputData = {};
21
+ const inputToCompile = JSON.parse(JSON.stringify(input));
22
+ this.translateProperties(inputToCompile);
23
+ if (inputToCompile.properties) {
24
+ if (inputToCompile.type === 'array') {
25
+ inputData = [];
26
+ }
27
+ if (inputToCompile.type === 'object') {
28
+ inputData = {};
29
+ }
30
+ inputToCompile.id = 'inputData';
31
+ this.proccessProperties(inputToCompile, formProperties, 'inputData');
32
+ this.translateProperties(inputToCompile);
33
+ compiledProperties.push(inputToCompile);
34
+ }
35
+ else if (inputToCompile.type === 'array') {
36
+ inputToCompile.id = 'inputData';
37
+ inputData = [];
38
+ this.addItemToFormProperties(formProperties, inputToCompile, 'inputData');
39
+ compiledProperties.push(inputToCompile);
40
+ }
41
+ else if (!inputToCompile.type) {
42
+ for (let index = 0; index < Object.keys(inputToCompile).length; index++) {
43
+ const key = Object.keys(inputToCompile)[index];
44
+ const item = inputToCompile[key];
45
+ item.id = key;
46
+ if (item.type === 'array') {
47
+ inputData[item.id] = [];
48
+ }
49
+ if (item.type === 'object') {
50
+ inputData[item.id] = {};
51
+ }
52
+ this.proccessProperties(item, formProperties, key);
53
+ this.translateProperties(item);
54
+ compiledProperties.push(item);
55
+ }
56
+ }
57
+ compiledProperties.sort((a, b) => a.propertyOrder - b.propertyOrder);
58
+ return { compiledProperties, formProperties, inputData };
59
+ }
60
+ translateProperties(input) {
61
+ if (input?.title) {
62
+ input.title = this.getTranslate(input.title);
63
+ }
64
+ if (input?.description) {
65
+ input.description = this.getTranslate(input.description);
66
+ }
67
+ if (input?.options instanceof Array) {
68
+ input?.options.forEach((option) => {
69
+ option.value = this.getTranslate(option.value);
70
+ });
71
+ }
72
+ }
73
+ proccessProperties(item, formProperties, key) {
74
+ this.translateProperties(item);
75
+ if (this.hasProperties(item)) {
76
+ const arFieldsChild = [];
77
+ for (let indexChild = 0; indexChild < Object.keys(item.properties).length; indexChild++) {
78
+ const keyChild = Object.keys(item.properties)[indexChild];
79
+ const itemChild = item.properties[keyChild];
80
+ itemChild.id = keyChild;
81
+ if (this.hasProperties(itemChild)) {
82
+ this.proccessProperties(itemChild, formProperties, keyChild);
83
+ arFieldsChild.push(itemChild);
84
+ }
85
+ else {
86
+ this.addItemToFormProperties(formProperties, itemChild, keyChild);
87
+ arFieldsChild.push(itemChild);
88
+ }
89
+ }
90
+ item.properties = arFieldsChild;
91
+ }
92
+ else {
93
+ this.addItemToFormProperties(formProperties, item, key);
94
+ }
95
+ }
96
+ hasProperties(item) {
97
+ return item.type === 'object' || (item.type === 'array' && item.properties);
98
+ }
99
+ static ɵfac = function TypeScriptCompileBase_Factory(t) { return new (t || TypeScriptCompileBase)(); };
100
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TypeScriptCompileBase, factory: TypeScriptCompileBase.ɵfac, providedIn: 'root' });
101
+ }
102
+ export { TypeScriptCompileBase };
103
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TypeScriptCompileBase, [{
104
+ type: Injectable,
105
+ args: [{ providedIn: 'root' }]
106
+ }], null, null); })();
107
+ export function APIPASS_TYPESCRIPT_COMPILE_BASE_PROVIDER_FACTORY(parentIntl) {
108
+ return parentIntl || new TypeScriptCompileBase();
109
+ }
110
+ export const APIPASS_TYPESCRIPT_COMPILE_INTL_PROVIDER = {
111
+ provide: TypeScriptCompileBase,
112
+ deps: [[new Optional(), new SkipSelf(), TypeScriptCompileBase]],
113
+ useFactory: APIPASS_TYPESCRIPT_COMPILE_BASE_PROVIDER_FACTORY
114
+ };
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zY3JpcHQtY29tcGlsZS5iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2NoZW1hcy9zcmMvdHlwZS1zY3JpcHQtY29tcGlsZS90eXBlLXNjcmlwdC1jb21waWxlLmJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7O0FBRXhELE1BQ2EscUJBQXFCO0lBRXRCLFlBQVksQ0FBRSxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVTLHVCQUF1QixDQUFFLGNBQW1CLEVBQUUsSUFBUyxFQUFFLEdBQVc7UUFDNUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtZQUN4QyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3JFO2FBQU07WUFDTCxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1NBQzlDO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQixDQUFFLEtBQVU7UUFLbEMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFDN0IsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLElBQUksU0FBUyxHQUFRLEVBQUUsQ0FBQTtRQUN2QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFD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QUMsdUJBQXVCLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUN4RDtJQUNILENBQUM7SUFFUyxhQUFhLENBQUUsSUFBUztRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7K0VBdkdVLHFCQUFxQjtnRUFBckIscUJBQXFCLFdBQXJCLHFCQUFxQixtQkFEUixNQUFNOztTQUNuQixxQkFBcUI7dUZBQXJCLHFCQUFxQjtjQURqQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQTRHbEMsTUFBTSxVQUFVLGdEQUFnRCxDQUFFLFVBQWlDO0lBQ2pHLE9BQU8sVUFBVSxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQTtBQUNsRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sd0NBQXdDLEdBQVE7SUFDM0QsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQy9ELFVBQVUsRUFBRSxnREFBZ0Q7Q0FDN0QsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFR5cGVTY3JpcHRDb21waWxlQmFzZSB7XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zbGF0ZSAodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dFxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEl0ZW1Ub0Zvcm1Qcm9wZXJ0aWVzIChmb3JtUHJvcGVydGllczogYW55LCBpdGVtOiBhbnksIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2xhdGVQcm9wZXJ0aWVzKGl0ZW0pXG4gICAgaWYgKGl0ZW0ubWluTGVuZ3RoICYmIGl0ZW0ubWluTGVuZ3RoID4gMCkge1xuICAgICAgZm9ybVByb3BlcnRpZXNba2V5XSA9IG5ldyBGb3JtQ29udHJvbChbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSlcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybVByb3BlcnRpZXNba2V5XSA9IG5ldyBGb3JtQ29udHJvbChbbnVsbF0pXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNvbXBpbGVQcm9wZXJ0aWVzIChpbnB1dDogYW55KToge1xuICAgIGNvbXBpbGVkUHJvcGVydGllczogYW55XG4gICAgZm9ybVByb3BlcnRpZXM6IGFueVxuICAgIGlucHV0RGF0YTogYW55XG4gIH0ge1xuICAgIGNvbnN0IGNvbXBpbGVkUHJvcGVydGllcyA9IFtdXG4gICAgY29uc3QgZm9ybVByb3BlcnRpZXMgPSB7fVxuICAgIGxldCBpbnB1dERhdGE6IGFueSA9IHt9XG4gICAgY29uc3QgaW5wdXRUb0NvbXBpbGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlucHV0KSlcbiAgICB0aGlzLnRyYW5zbGF0ZVByb3BlcnRpZXMoaW5wdXRUb0NvbXBpbGUpXG5cbiAgICBpZiAoaW5wdXRUb0NvbXBpbGUucHJvcGVydGllcykge1xuICAgICAgaWYgKGlucHV0VG9Db21waWxlLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgaW5wdXREYXRhID0gW11cbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFRvQ29tcGlsZS50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpbnB1dERhdGEgPSB7fVxuICAgICAgfVxuICAgICAgaW5wdXRUb0NvbXBpbGUuaWQgPSAnaW5wdXREYXRhJ1xuICAgICAgdGhpcy5wcm9jY2Vzc1Byb3BlcnRpZXMoaW5wdXRUb0NvbXBpbGUsIGZvcm1Qcm9wZXJ0aWVzLCAnaW5wdXREYXRhJylcbiAgICAgIHRoaXMudHJhbnNsYXRlUHJvcGVydGllcyhpbnB1dFRvQ29tcGlsZSlcbiAgICAgIGNvbXBpbGVkUHJvcGVydGllcy5wdXNoKGlucHV0VG9Db21waWxlKVxuICAgIH0gZWxzZSBpZiAoaW5wdXRUb0NvbXBpbGUudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgaW5wdXRUb0NvbXBpbGUuaWQgPSAnaW5wdXREYXRhJ1xuICAgICAgaW5wdXREYXRhID0gW11cbiAgICAgIHRoaXMuYWRkSXRlbVRvRm9ybVByb3BlcnRpZXMoZm9ybVByb3BlcnRpZXMsIGlucHV0VG9Db21waWxlLCAnaW5wdXREYXRhJylcbiAgICAgIGNvbXBpbGVkUHJvcGVydGllcy5wdXNoKGlucHV0VG9Db21waWxlKVxuICAgIH0gZWxzZSBpZiAoIWlucHV0VG9Db21waWxlLnR5cGUpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBPYmplY3Qua2V5cyhpbnB1dFRvQ29tcGlsZSkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGlucHV0VG9Db21waWxlKVtpbmRleF1cbiAgICAgICAgY29uc3QgaXRlbSA9IGlucHV0VG9Db21waWxlW2tleV1cbiAgICAgICAgaXRlbS5pZCA9IGtleVxuXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICBpbnB1dERhdGFbaXRlbS5pZF0gPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpbnB1dERhdGFbaXRlbS5pZF0gPSB7fVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Nlc3NQcm9wZXJ0aWVzKGl0ZW0sIGZvcm1Qcm9wZXJ0aWVzLCBrZXkpXG4gICAgICAgIHRoaXMudHJhbnNsYXRlUHJvcGVydGllcyhpdGVtKVxuICAgICAgICBjb21waWxlZFByb3BlcnRpZXMucHVzaChpdGVtKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBpbGVkUHJvcGVydGllcy5zb3J0KChhLCBiKSA9PiBhLnByb3BlcnR5T3JkZXIgLSBiLnByb3BlcnR5T3JkZXIpXG4gICAgcmV0dXJuIHsgY29tcGlsZWRQcm9wZXJ0aWVzLCBmb3JtUHJvcGVydGllcywgaW5wdXREYXRhIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFuc2xhdGVQcm9wZXJ0aWVzIChpbnB1dDogYW55KTogdm9pZCB7XG4gICAgaWYgKGlucHV0Py50aXRsZSkge1xuICAgICAgaW5wdXQudGl0bGUgPSB0aGlzLmdldFRyYW5zbGF0ZShpbnB1dC50aXRsZSlcbiAgICB9XG4gICAgaWYgKGlucHV0Py5kZXNjcmlwdGlvbikge1xuICAgICAgaW5wdXQuZGVzY3JpcHRpb24gPSB0aGlzLmdldFRyYW5zbGF0ZShpbnB1dC5kZXNjcmlwdGlvbilcbiAgICB9XG4gICAgaWYgKGlucHV0Py5vcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGlucHV0Py5vcHRpb25zLmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XG4gICAgICAgIG9wdGlvbi52YWx1ZSA9IHRoaXMuZ2V0VHJhbnNsYXRlKG9wdGlvbi52YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHByb2NjZXNzUHJvcGVydGllcyAoaXRlbTogYW55LCBmb3JtUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGtleTogYW55KTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2xhdGVQcm9wZXJ0aWVzKGl0ZW0pXG4gICAgaWYgKHRoaXMuaGFzUHJvcGVydGllcyhpdGVtKSkge1xuICAgICAgY29uc3QgYXJGaWVsZHNDaGlsZCA9IFtdXG4gICAgICBmb3IgKGxldCBpbmRleENoaWxkID0gMDsgaW5kZXhDaGlsZCA8IE9iamVjdC5rZXlzKGl0ZW0ucHJvcGVydGllcykubGVuZ3RoOyBpbmRleENoaWxkKyspIHtcbiAgICAgICAgY29uc3Qga2V5Q2hpbGQgPSBPYmplY3Qua2V5cyhpdGVtLnByb3BlcnRpZXMpW2luZGV4Q2hpbGRdXG4gICAgICAgIGNvbnN0IGl0ZW1DaGlsZCA9IGl0ZW0ucHJvcGVydGllc1trZXlDaGlsZF1cbiAgICAgICAgaXRlbUNoaWxkLmlkID0ga2V5Q2hpbGRcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvcGVydGllcyhpdGVtQ2hpbGQpKSB7XG4gICAgICAgICAgdGhpcy5wcm9jY2Vzc1Byb3BlcnRpZXMoaXRlbUNoaWxkLCBmb3JtUHJvcGVydGllcywga2V5Q2hpbGQpXG4gICAgICAgICAgYXJGaWVsZHNDaGlsZC5wdXNoKGl0ZW1DaGlsZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFkZEl0ZW1Ub0Zvcm1Qcm9wZXJ0aWVzKGZvcm1Qcm9wZXJ0aWVzLCBpdGVtQ2hpbGQsIGtleUNoaWxkKVxuICAgICAgICAgIGFyRmllbGRzQ2hpbGQucHVzaChpdGVtQ2hpbGQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGl0ZW0ucHJvcGVydGllcyA9IGFyRmllbGRzQ2hpbGRcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRJdGVtVG9Gb3JtUHJvcGVydGllcyhmb3JtUHJvcGVydGllcywgaXRlbSwga2V5KVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYXNQcm9wZXJ0aWVzIChpdGVtOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdvYmplY3QnIHx8IChpdGVtLnR5cGUgPT09ICdhcnJheScgJiYgaXRlbS5wcm9wZXJ0aWVzKVxuICB9XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFQSVBBU1NfVFlQRVNDUklQVF9DT01QSUxFX0JBU0VfUFJPVklERVJfRkFDVE9SWSAocGFyZW50SW50bDogVHlwZVNjcmlwdENvbXBpbGVCYXNlKTogYW55IHtcbiAgcmV0dXJuIHBhcmVudEludGwgfHwgbmV3IFR5cGVTY3JpcHRDb21waWxlQmFzZSgpXG59XG5cbmV4cG9ydCBjb25zdCBBUElQQVNTX1RZUEVTQ1JJUFRfQ09NUElMRV9JTlRMX1BST1ZJREVSOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFR5cGVTY3JpcHRDb21waWxlQmFzZSxcbiAgZGVwczogW1tuZXcgT3B0aW9uYWwoKSwgbmV3IFNraXBTZWxmKCksIFR5cGVTY3JpcHRDb21waWxlQmFzZV1dLFxuICB1c2VGYWN0b3J5OiBBUElQQVNTX1RZUEVTQ1JJUFRfQ09NUElMRV9CQVNFX1BST1ZJREVSX0ZBQ1RPUllcbn1cbiJdfQ==