@apipass/schemas 1.0.0 → 1.0.8

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 (68) hide show
  1. package/base-schema.component.d.ts +12 -12
  2. package/{esm2020 → esm2022}/apipass-schemas.mjs +4 -4
  3. package/esm2022/base-schema.component.mjs +38 -0
  4. package/esm2022/public-api.mjs +17 -0
  5. package/esm2022/schema-custom-attributes/schema-custom-attributes.mjs +169 -0
  6. package/esm2022/schema-fields.service.mjs +81 -0
  7. package/esm2022/schema-form/schema-array/array-session/array-session.mjs +141 -0
  8. package/{esm2020 → esm2022}/schema-form/schema-array/schema-array.mjs +219 -220
  9. package/esm2022/schema-form/schema-form.mjs +107 -0
  10. package/esm2022/schema-form/schema-input/field-render/field-render.mjs +76 -0
  11. package/esm2022/schema-form/schema-input/input-render/boolean-input/boolean-input.component.mjs +51 -0
  12. package/esm2022/schema-form/schema-input/input-render/input-render.mjs +193 -0
  13. package/esm2022/schema-form/schema-input/input-render/number-input/number-input.component.mjs +49 -0
  14. package/esm2022/schema-form/schema-input/schema-input.mjs +95 -0
  15. package/esm2022/schema-form/schema-object/schema-object.mjs +125 -0
  16. package/esm2022/schema-form-render.mjs +126 -0
  17. package/esm2022/schema-form-render.module.mjs +109 -0
  18. package/esm2022/schema-validation-field.mjs +18 -0
  19. package/esm2022/struct.utils.mjs +9 -0
  20. package/esm2022/type-script-compile/type-script-compile.base.mjs +115 -0
  21. package/{fesm2020 → fesm2022}/apipass-schemas.mjs +1572 -1566
  22. package/fesm2022/apipass-schemas.mjs.map +1 -0
  23. package/index.d.ts +5 -5
  24. package/package.json +15 -21
  25. package/public-api.d.ts +16 -16
  26. package/schema-custom-attributes/schema-custom-attributes.d.ts +21 -21
  27. package/schema-fields.service.d.ts +14 -15
  28. package/schema-form/schema-array/array-session/array-session.d.ts +19 -19
  29. package/schema-form/schema-array/schema-array.d.ts +31 -32
  30. package/schema-form/schema-form.d.ts +31 -31
  31. package/schema-form/schema-input/field-render/field-render.d.ts +16 -16
  32. package/schema-form/schema-input/input-render/boolean-input/boolean-input.component.d.ts +15 -15
  33. package/schema-form/schema-input/input-render/input-render.d.ts +29 -29
  34. package/schema-form/schema-input/input-render/number-input/number-input.component.d.ts +15 -15
  35. package/schema-form/schema-input/schema-input.d.ts +18 -19
  36. package/schema-form/schema-object/schema-object.d.ts +34 -34
  37. package/schema-form-render.d.ts +31 -31
  38. package/schema-form-render.module.d.ts +23 -23
  39. package/schema-validation-field.d.ts +23 -23
  40. package/struct.utils.d.ts +1 -1
  41. package/type-script-compile/type-script-compile.base.d.ts +17 -17
  42. package/assets/css/buttons.scss +0 -118
  43. package/assets/css/colors.scss +0 -34
  44. package/assets/css/fonts.scss +0 -24
  45. package/assets/css/inputs.scss +0 -197
  46. package/assets/css/pt_sans.scss +0 -144
  47. package/assets/css/spacing.scss +0 -28
  48. package/assets/css/texts.scss +0 -18
  49. package/esm2020/base-schema.component.mjs +0 -38
  50. package/esm2020/public-api.mjs +0 -17
  51. package/esm2020/schema-custom-attributes/schema-custom-attributes.mjs +0 -169
  52. package/esm2020/schema-fields.service.mjs +0 -82
  53. package/esm2020/schema-form/schema-array/array-session/array-session.mjs +0 -143
  54. package/esm2020/schema-form/schema-form.mjs +0 -107
  55. package/esm2020/schema-form/schema-input/field-render/field-render.mjs +0 -69
  56. package/esm2020/schema-form/schema-input/input-render/boolean-input/boolean-input.component.mjs +0 -46
  57. package/esm2020/schema-form/schema-input/input-render/input-render.mjs +0 -192
  58. package/esm2020/schema-form/schema-input/input-render/number-input/number-input.component.mjs +0 -44
  59. package/esm2020/schema-form/schema-input/schema-input.mjs +0 -96
  60. package/esm2020/schema-form/schema-object/schema-object.mjs +0 -123
  61. package/esm2020/schema-form-render.mjs +0 -126
  62. package/esm2020/schema-form-render.module.mjs +0 -108
  63. package/esm2020/schema-validation-field.mjs +0 -14
  64. package/esm2020/struct.utils.mjs +0 -9
  65. package/esm2020/type-script-compile/type-script-compile.base.mjs +0 -112
  66. package/fesm2015/apipass-schemas.mjs +0 -1803
  67. package/fesm2015/apipass-schemas.mjs.map +0 -1
  68. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zY3JpcHQtY29tcGlsZS5iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2NoZW1hcy9zcmMvdHlwZS1zY3JpcHQtY29tcGlsZS90eXBlLXNjcmlwdC1jb21waWxlLmJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7O0FBRXhELE1BQ2EscUJBQXFCO0lBQ3RCLFlBQVksQ0FBRSxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVTLHVCQUF1QixDQUFFLGNBQW1CLEVBQUUsSUFBUyxFQUFFLEdBQVc7UUFDNUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtZQUN4QyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3JFO2FBQU07WUFDTCxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1NBQzlDO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQixDQUFFLEtBQVU7UUFLbEMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUE7UUFDN0IsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLElBQUksU0FBUyxHQUFRLEVBQUUsQ0FBQTtRQUN2QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFD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QUMsdUJBQXVCLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUN4RDtJQUNILENBQUM7SUFFUyxhQUFhLENBQUUsSUFBUztRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7K0VBdEdVLHFCQUFxQjtnRUFBckIscUJBQXFCLFdBQXJCLHFCQUFxQixtQkFEUixNQUFNOztTQUNuQixxQkFBcUI7dUZBQXJCLHFCQUFxQjtjQURqQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQTBHbEMsTUFBTSxVQUFVLGdEQUFnRCxDQUFFLFVBQWlDO0lBQ2pHLE9BQU8sVUFBVSxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQTtBQUNsRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sd0NBQXdDLEdBQVE7SUFDM0QsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQy9ELFVBQVUsRUFBRSxnREFBZ0Q7Q0FDN0QsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVHlwZVNjcmlwdENvbXBpbGVCYXNlIHtcclxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNsYXRlICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRleHRcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhZGRJdGVtVG9Gb3JtUHJvcGVydGllcyAoZm9ybVByb3BlcnRpZXM6IGFueSwgaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50cmFuc2xhdGVQcm9wZXJ0aWVzKGl0ZW0pXHJcbiAgICBpZiAoaXRlbS5taW5MZW5ndGggJiYgaXRlbS5taW5MZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvcm1Qcm9wZXJ0aWVzW2tleV0gPSBuZXcgRm9ybUNvbnRyb2woW251bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3JtUHJvcGVydGllc1trZXldID0gbmV3IEZvcm1Db250cm9sKFtudWxsXSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21waWxlUHJvcGVydGllcyAoaW5wdXQ6IGFueSk6IHtcclxuICAgIGNvbXBpbGVkUHJvcGVydGllczogYW55XHJcbiAgICBmb3JtUHJvcGVydGllczogYW55XHJcbiAgICBpbnB1dERhdGE6IGFueVxyXG4gIH0ge1xyXG4gICAgY29uc3QgY29tcGlsZWRQcm9wZXJ0aWVzID0gW11cclxuICAgIGNvbnN0IGZvcm1Qcm9wZXJ0aWVzID0ge31cclxuICAgIGxldCBpbnB1dERhdGE6IGFueSA9IHt9XHJcbiAgICBjb25zdCBpbnB1dFRvQ29tcGlsZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKVxyXG4gICAgdGhpcy50cmFuc2xhdGVQcm9wZXJ0aWVzKGlucHV0VG9Db21waWxlKVxyXG5cclxuICAgIGlmIChpbnB1dFRvQ29tcGlsZS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGlmIChpbnB1dFRvQ29tcGlsZS50eXBlID09PSAnYXJyYXknKSB7XHJcbiAgICAgICAgaW5wdXREYXRhID0gW11cclxuICAgICAgfVxyXG4gICAgICBpZiAoaW5wdXRUb0NvbXBpbGUudHlwZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBpbnB1dERhdGEgPSB7fVxyXG4gICAgICB9XHJcbiAgICAgIGlucHV0VG9Db21waWxlLmlkID0gJ2lucHV0RGF0YSdcclxuICAgICAgdGhpcy5wcm9jY2Vzc1Byb3BlcnRpZXMoaW5wdXRUb0NvbXBpbGUsIGZvcm1Qcm9wZXJ0aWVzLCAnaW5wdXREYXRhJylcclxuICAgICAgdGhpcy50cmFuc2xhdGVQcm9wZXJ0aWVzKGlucHV0VG9Db21waWxlKVxyXG4gICAgICBjb21waWxlZFByb3BlcnRpZXMucHVzaChpbnB1dFRvQ29tcGlsZSlcclxuICAgIH0gZWxzZSBpZiAoaW5wdXRUb0NvbXBpbGUudHlwZSA9PT0gJ2FycmF5Jykge1xyXG4gICAgICBpbnB1dFRvQ29tcGlsZS5pZCA9ICdpbnB1dERhdGEnXHJcbiAgICAgIGlucHV0RGF0YSA9IFtdXHJcbiAgICAgIHRoaXMuYWRkSXRlbVRvRm9ybVByb3BlcnRpZXMoZm9ybVByb3BlcnRpZXMsIGlucHV0VG9Db21waWxlLCAnaW5wdXREYXRhJylcclxuICAgICAgY29tcGlsZWRQcm9wZXJ0aWVzLnB1c2goaW5wdXRUb0NvbXBpbGUpXHJcbiAgICB9IGVsc2UgaWYgKCFpbnB1dFRvQ29tcGlsZS50eXBlKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBPYmplY3Qua2V5cyhpbnB1dFRvQ29tcGlsZSkubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoaW5wdXRUb0NvbXBpbGUpW2luZGV4XVxyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpbnB1dFRvQ29tcGlsZVtrZXldXHJcbiAgICAgICAgaXRlbS5pZCA9IGtleVxyXG5cclxuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnYXJyYXknKSB7XHJcbiAgICAgICAgICBpbnB1dERhdGFbaXRlbS5pZF0gPSBbXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGlucHV0RGF0YVtpdGVtLmlkXSA9IHt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvY2Nlc3NQcm9wZXJ0aWVzKGl0ZW0sIGZvcm1Qcm9wZXJ0aWVzLCBrZXkpXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVQcm9wZXJ0aWVzKGl0ZW0pXHJcbiAgICAgICAgY29tcGlsZWRQcm9wZXJ0aWVzLnB1c2goaXRlbSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBpbGVkUHJvcGVydGllcy5zb3J0KChhLCBiKSA9PiBhLnByb3BlcnR5T3JkZXIgLSBiLnByb3BlcnR5T3JkZXIpXHJcbiAgICByZXR1cm4geyBjb21waWxlZFByb3BlcnRpZXMsIGZvcm1Qcm9wZXJ0aWVzLCBpbnB1dERhdGEgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVByb3BlcnRpZXMgKGlucHV0OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChpbnB1dD8udGl0bGUpIHtcclxuICAgICAgaW5wdXQudGl0bGUgPSB0aGlzLmdldFRyYW5zbGF0ZShpbnB1dC50aXRsZSlcclxuICAgIH1cclxuICAgIGlmIChpbnB1dD8uZGVzY3JpcHRpb24pIHtcclxuICAgICAgaW5wdXQuZGVzY3JpcHRpb24gPSB0aGlzLmdldFRyYW5zbGF0ZShpbnB1dC5kZXNjcmlwdGlvbilcclxuICAgIH1cclxuICAgIGlmIChpbnB1dD8ub3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgIGlucHV0Py5vcHRpb25zLmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgb3B0aW9uLnZhbHVlID0gdGhpcy5nZXRUcmFuc2xhdGUob3B0aW9uLnZhbHVlKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByb2NjZXNzUHJvcGVydGllcyAoaXRlbTogYW55LCBmb3JtUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGtleTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVByb3BlcnRpZXMoaXRlbSlcclxuICAgIGlmICh0aGlzLmhhc1Byb3BlcnRpZXMoaXRlbSkpIHtcclxuICAgICAgY29uc3QgYXJGaWVsZHNDaGlsZCA9IFtdXHJcbiAgICAgIGZvciAobGV0IGluZGV4Q2hpbGQgPSAwOyBpbmRleENoaWxkIDwgT2JqZWN0LmtleXMoaXRlbS5wcm9wZXJ0aWVzKS5sZW5ndGg7IGluZGV4Q2hpbGQrKykge1xyXG4gICAgICAgIGNvbnN0IGtleUNoaWxkID0gT2JqZWN0LmtleXMoaXRlbS5wcm9wZXJ0aWVzKVtpbmRleENoaWxkXVxyXG4gICAgICAgIGNvbnN0IGl0ZW1DaGlsZCA9IGl0ZW0ucHJvcGVydGllc1trZXlDaGlsZF1cclxuICAgICAgICBpdGVtQ2hpbGQuaWQgPSBrZXlDaGlsZFxyXG4gICAgICAgIGlmICh0aGlzLmhhc1Byb3BlcnRpZXMoaXRlbUNoaWxkKSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9jY2Vzc1Byb3BlcnRpZXMoaXRlbUNoaWxkLCBmb3JtUHJvcGVydGllcywga2V5Q2hpbGQpXHJcbiAgICAgICAgICBhckZpZWxkc0NoaWxkLnB1c2goaXRlbUNoaWxkKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFkZEl0ZW1Ub0Zvcm1Qcm9wZXJ0aWVzKGZvcm1Qcm9wZXJ0aWVzLCBpdGVtQ2hpbGQsIGtleUNoaWxkKVxyXG4gICAgICAgICAgYXJGaWVsZHNDaGlsZC5wdXNoKGl0ZW1DaGlsZClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaXRlbS5wcm9wZXJ0aWVzID0gYXJGaWVsZHNDaGlsZFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRJdGVtVG9Gb3JtUHJvcGVydGllcyhmb3JtUHJvcGVydGllcywgaXRlbSwga2V5KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhc1Byb3BlcnRpZXMgKGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gaXRlbS50eXBlID09PSAnb2JqZWN0JyB8fCAoaXRlbS50eXBlID09PSAnYXJyYXknICYmIGl0ZW0ucHJvcGVydGllcylcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBUElQQVNTX1RZUEVTQ1JJUFRfQ09NUElMRV9CQVNFX1BST1ZJREVSX0ZBQ1RPUlkgKHBhcmVudEludGw6IFR5cGVTY3JpcHRDb21waWxlQmFzZSk6IGFueSB7XHJcbiAgcmV0dXJuIHBhcmVudEludGwgfHwgbmV3IFR5cGVTY3JpcHRDb21waWxlQmFzZSgpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBUElQQVNTX1RZUEVTQ1JJUFRfQ09NUElMRV9JTlRMX1BST1ZJREVSOiBhbnkgPSB7XHJcbiAgcHJvdmlkZTogVHlwZVNjcmlwdENvbXBpbGVCYXNlLFxyXG4gIGRlcHM6IFtbbmV3IE9wdGlvbmFsKCksIG5ldyBTa2lwU2VsZigpLCBUeXBlU2NyaXB0Q29tcGlsZUJhc2VdXSxcclxuICB1c2VGYWN0b3J5OiBBUElQQVNTX1RZUEVTQ1JJUFRfQ09NUElMRV9CQVNFX1BST1ZJREVSX0ZBQ1RPUllcclxufVxyXG4iXX0=