@po-ui/ng-code-editor 5.22.2 → 5.22.3
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/README.md +20 -20
- package/bundles/po-ui-ng-code-editor.umd.js +929 -929
- package/bundles/po-ui-ng-code-editor.umd.js.map +1 -1
- package/esm2015/lib/components/po-code-editor/interfaces/po-code-editor-registerable-options.interface.js +2 -2
- package/esm2015/lib/components/po-code-editor/interfaces/po-code-editor-registerable-suggestion.interface.js +2 -2
- package/esm2015/lib/components/po-code-editor/interfaces/po-code-editor-registerable-tokens.interface.js +2 -2
- package/esm2015/lib/components/po-code-editor/interfaces/po-code-editor-registerable.interface.js +2 -2
- package/esm2015/lib/components/po-code-editor/po-code-editor-base.component.js +248 -248
- package/esm2015/lib/components/po-code-editor/po-code-editor-register.service.js +63 -63
- package/esm2015/lib/components/po-code-editor/po-code-editor-suggestion.service.js +28 -28
- package/esm2015/lib/components/po-code-editor/po-code-editor.component.js +225 -225
- package/esm2015/lib/components/po-code-editor/po-code-editor.module.js +31 -31
- package/esm2015/lib/index.js +4 -4
- package/esm2015/po-ui-ng-code-editor.js +6 -6
- package/esm2015/public-api.js +2 -2
- package/fesm2015/po-ui-ng-code-editor.js +574 -574
- package/fesm2015/po-ui-ng-code-editor.js.map +1 -1
- package/lib/components/po-code-editor/interfaces/po-code-editor-registerable-options.interface.d.ts +22 -22
- package/lib/components/po-code-editor/interfaces/po-code-editor-registerable-suggestion.interface.d.ts +37 -37
- package/lib/components/po-code-editor/interfaces/po-code-editor-registerable-tokens.interface.d.ts +21 -21
- package/lib/components/po-code-editor/interfaces/po-code-editor-registerable.interface.d.ts +17 -17
- package/lib/components/po-code-editor/po-code-editor-base.component.d.ts +191 -191
- package/lib/components/po-code-editor/po-code-editor-register.service.d.ts +67 -67
- package/lib/components/po-code-editor/po-code-editor-suggestion.service.d.ts +7 -7
- package/lib/components/po-code-editor/po-code-editor.component.d.ts +58 -58
- package/lib/components/po-code-editor/po-code-editor.module.d.ts +10 -10
- package/lib/index.d.ts +7 -7
- package/package.json +4 -4
- package/po-ui-ng-code-editor-5.22.3.tgz +0 -0
- package/po-ui-ng-code-editor.d.ts +6 -6
- package/po-ui-ng-code-editor.metadata.json +1 -1
- package/public-api.d.ts +1 -1
- package/schematics/README.md +98 -98
- package/schematics/collection.json +10 -10
- package/schematics/ng-add/index.d.ts +10 -10
- package/schematics/ng-add/index.js +38 -38
- package/schematics/ng-add/index.spec.d.ts +1 -1
- package/schematics/ng-add/index.spec.js +113 -113
- package/schematics/ng-add/schema.json +7 -7
- package/po-ui-ng-code-editor-5.22.2.tgz +0 -0
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* @description
|
|
4
|
-
*
|
|
5
|
-
* Wrapper para registro de sintaxes customizadas para o po-code-editor.
|
|
6
|
-
*
|
|
7
|
-
* Para utilização do serviço de idiomas **PoCodeEditorRegister**,
|
|
8
|
-
* deve-se importar o módulo PoCodeEditorModule mesmo já tendo importado
|
|
9
|
-
* o módulo PoModule.
|
|
10
|
-
* Na importação opcionalmente pode ser invocado o método **forRegister** informando um objeto para configuração.
|
|
11
|
-
*
|
|
12
|
-
* Exemplo de configuração:
|
|
13
|
-
* ```
|
|
14
|
-
* import { PoCodeEditorModule, PoCodeEditorRegisterable } from '@po-ui/ng-code-editor';
|
|
15
|
-
*
|
|
16
|
-
* declare const monaco: any; // Importante para usar configurações com tipos definidos pelo Monaco
|
|
17
|
-
*
|
|
18
|
-
* // A função `provideCompletionItems` precisa ser exportada para ser compatível com AOT.
|
|
19
|
-
* export function provideCompletionItems() {
|
|
20
|
-
* const suggestions = [{
|
|
21
|
-
* label: 'terraform',
|
|
22
|
-
* insertText: '#terraform language'
|
|
23
|
-
* }, {
|
|
24
|
-
* label: 'server',
|
|
25
|
-
* insertText: 'server ${1:ip}'
|
|
26
|
-
* }];
|
|
27
|
-
*
|
|
28
|
-
* return { suggestions: suggestions };
|
|
29
|
-
* }
|
|
30
|
-
*
|
|
31
|
-
* const customEditor: PoCodeEditorRegisterable = {
|
|
32
|
-
* language: 'terraform',
|
|
33
|
-
* options: {
|
|
34
|
-
* keywords: ['resource', 'provider', 'variable', 'output', 'module', 'true', 'false'],
|
|
35
|
-
* operators: ['{', '}', '(', ')', '[', ']', '?', ':'],
|
|
36
|
-
* symbols: /[=><!~?:&|+\-*\/\^%]+/,
|
|
37
|
-
* escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
|
|
38
|
-
* tokenizer: {
|
|
39
|
-
* ...
|
|
40
|
-
* }
|
|
41
|
-
* },
|
|
42
|
-
* suggestions: { provideCompletionItems: provideCompletionItems }
|
|
43
|
-
* };
|
|
44
|
-
*
|
|
45
|
-
* @NgModule({
|
|
46
|
-
* declarations: [],
|
|
47
|
-
* imports: [
|
|
48
|
-
* PoModule,
|
|
49
|
-
* PoCodeEditorModule.forRegister(customEditor)
|
|
50
|
-
* ],
|
|
51
|
-
* bootstrap: [AppComponent]
|
|
52
|
-
* })
|
|
53
|
-
* ```
|
|
54
|
-
*
|
|
55
|
-
* > As configurações para o registro de uma nova sintaxe no Monaco code editor podem ser encontradas em
|
|
56
|
-
* > [**Monaco Editor**](https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-custom-languages).
|
|
57
|
-
*/
|
|
58
|
-
export class PoCodeEditorRegister {
|
|
59
|
-
}
|
|
60
|
-
PoCodeEditorRegister.decorators = [
|
|
61
|
-
{ type: Injectable }
|
|
62
|
-
];
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* @description
|
|
4
|
+
*
|
|
5
|
+
* Wrapper para registro de sintaxes customizadas para o po-code-editor.
|
|
6
|
+
*
|
|
7
|
+
* Para utilização do serviço de idiomas **PoCodeEditorRegister**,
|
|
8
|
+
* deve-se importar o módulo PoCodeEditorModule mesmo já tendo importado
|
|
9
|
+
* o módulo PoModule.
|
|
10
|
+
* Na importação opcionalmente pode ser invocado o método **forRegister** informando um objeto para configuração.
|
|
11
|
+
*
|
|
12
|
+
* Exemplo de configuração:
|
|
13
|
+
* ```
|
|
14
|
+
* import { PoCodeEditorModule, PoCodeEditorRegisterable } from '@po-ui/ng-code-editor';
|
|
15
|
+
*
|
|
16
|
+
* declare const monaco: any; // Importante para usar configurações com tipos definidos pelo Monaco
|
|
17
|
+
*
|
|
18
|
+
* // A função `provideCompletionItems` precisa ser exportada para ser compatível com AOT.
|
|
19
|
+
* export function provideCompletionItems() {
|
|
20
|
+
* const suggestions = [{
|
|
21
|
+
* label: 'terraform',
|
|
22
|
+
* insertText: '#terraform language'
|
|
23
|
+
* }, {
|
|
24
|
+
* label: 'server',
|
|
25
|
+
* insertText: 'server ${1:ip}'
|
|
26
|
+
* }];
|
|
27
|
+
*
|
|
28
|
+
* return { suggestions: suggestions };
|
|
29
|
+
* }
|
|
30
|
+
*
|
|
31
|
+
* const customEditor: PoCodeEditorRegisterable = {
|
|
32
|
+
* language: 'terraform',
|
|
33
|
+
* options: {
|
|
34
|
+
* keywords: ['resource', 'provider', 'variable', 'output', 'module', 'true', 'false'],
|
|
35
|
+
* operators: ['{', '}', '(', ')', '[', ']', '?', ':'],
|
|
36
|
+
* symbols: /[=><!~?:&|+\-*\/\^%]+/,
|
|
37
|
+
* escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
|
|
38
|
+
* tokenizer: {
|
|
39
|
+
* ...
|
|
40
|
+
* }
|
|
41
|
+
* },
|
|
42
|
+
* suggestions: { provideCompletionItems: provideCompletionItems }
|
|
43
|
+
* };
|
|
44
|
+
*
|
|
45
|
+
* @NgModule({
|
|
46
|
+
* declarations: [],
|
|
47
|
+
* imports: [
|
|
48
|
+
* PoModule,
|
|
49
|
+
* PoCodeEditorModule.forRegister(customEditor)
|
|
50
|
+
* ],
|
|
51
|
+
* bootstrap: [AppComponent]
|
|
52
|
+
* })
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* > As configurações para o registro de uma nova sintaxe no Monaco code editor podem ser encontradas em
|
|
56
|
+
* > [**Monaco Editor**](https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-custom-languages).
|
|
57
|
+
*/
|
|
58
|
+
export class PoCodeEditorRegister {
|
|
59
|
+
}
|
|
60
|
+
PoCodeEditorRegister.decorators = [
|
|
61
|
+
{ type: Injectable }
|
|
62
|
+
];
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29kZS1lZGl0b3ItcmVnaXN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZGUtZWRpdG9yL3NyYy9saWIvY29tcG9uZW50cy9wby1jb2RlLWVkaXRvci9wby1jb2RlLWVkaXRvci1yZWdpc3Rlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1REc7QUFFSCxNQUFNLE9BQU8sb0JBQW9COzs7WUFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFBvQ29kZUVkaXRvclJlZ2lzdGVyYWJsZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb2RlLWVkaXRvci1yZWdpc3RlcmFibGUuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9Db2RlRWRpdG9yUmVnaXN0ZXJhYmxlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb2RlLWVkaXRvci1yZWdpc3RlcmFibGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb0NvZGVFZGl0b3JSZWdpc3RlcmFibGVTdWdnZXN0aW9uVHlwZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb2RlLWVkaXRvci1yZWdpc3RlcmFibGUtc3VnZ2VzdGlvbi5pbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBXcmFwcGVyIHBhcmEgcmVnaXN0cm8gZGUgc2ludGF4ZXMgY3VzdG9taXphZGFzIHBhcmEgbyBwby1jb2RlLWVkaXRvci5cclxuICpcclxuICogUGFyYSB1dGlsaXphw6fDo28gZG8gc2VydmnDp28gZGUgaWRpb21hcyAqKlBvQ29kZUVkaXRvclJlZ2lzdGVyKiosXHJcbiAqIGRldmUtc2UgaW1wb3J0YXIgbyBtw7NkdWxvIFBvQ29kZUVkaXRvck1vZHVsZSBtZXNtbyBqw6EgdGVuZG8gaW1wb3J0YWRvXHJcbiAqIG8gbcOzZHVsbyBQb01vZHVsZS5cclxuICogTmEgaW1wb3J0YcOnw6NvIG9wY2lvbmFsbWVudGUgcG9kZSBzZXIgaW52b2NhZG8gbyBtw6l0b2RvICoqZm9yUmVnaXN0ZXIqKiBpbmZvcm1hbmRvIHVtIG9iamV0byBwYXJhIGNvbmZpZ3VyYcOnw6NvLlxyXG4gKlxyXG4gKiBFeGVtcGxvIGRlIGNvbmZpZ3VyYcOnw6NvOlxyXG4gKiBgYGBcclxuICogaW1wb3J0IHsgUG9Db2RlRWRpdG9yTW9kdWxlLCBQb0NvZGVFZGl0b3JSZWdpc3RlcmFibGUgfSBmcm9tICdAcG8tdWkvbmctY29kZS1lZGl0b3InO1xyXG4gKlxyXG4gKiBkZWNsYXJlIGNvbnN0IG1vbmFjbzogYW55OyAvLyBJbXBvcnRhbnRlIHBhcmEgdXNhciBjb25maWd1cmHDp8O1ZXMgY29tIHRpcG9zIGRlZmluaWRvcyBwZWxvIE1vbmFjb1xyXG4gKlxyXG4gKiAvLyBBIGZ1bsOnw6NvIGBwcm92aWRlQ29tcGxldGlvbkl0ZW1zYCBwcmVjaXNhIHNlciBleHBvcnRhZGEgcGFyYSBzZXIgY29tcGF0w612ZWwgY29tIEFPVC5cclxuICogZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVDb21wbGV0aW9uSXRlbXMoKSB7XHJcbiAqICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbe1xyXG4gKiAgICAgbGFiZWw6ICd0ZXJyYWZvcm0nLFxyXG4gKiAgICAgaW5zZXJ0VGV4dDogJyN0ZXJyYWZvcm0gbGFuZ3VhZ2UnXHJcbiAqICAgfSwge1xyXG4gKiAgICAgbGFiZWw6ICdzZXJ2ZXInLFxyXG4gKiAgICAgaW5zZXJ0VGV4dDogJ3NlcnZlciAkezE6aXB9J1xyXG4gKiAgIH1dO1xyXG4gKlxyXG4gKiAgIHJldHVybiB7IHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB9O1xyXG4gKiB9XHJcbiAqXHJcbiAqIGNvbnN0IGN1c3RvbUVkaXRvcjogUG9Db2RlRWRpdG9yUmVnaXN0ZXJhYmxlID0ge1xyXG4gKiAgIGxhbmd1YWdlOiAndGVycmFmb3JtJyxcclxuICogICBvcHRpb25zOiB7XHJcbiAqICAgICBrZXl3b3JkczogWydyZXNvdXJjZScsICdwcm92aWRlcicsICd2YXJpYWJsZScsICdvdXRwdXQnLCAnbW9kdWxlJywgJ3RydWUnLCAnZmFsc2UnXSxcclxuICogICAgIG9wZXJhdG9yczogWyd7JywgJ30nLCAnKCcsICcpJywgJ1snLCAnXScsICc/JywgJzonXSxcclxuICogICAgIHN5bWJvbHM6ICAvWz0+PCF+PzomfCtcXC0qXFwvXFxeJV0rLyxcclxuICogICAgIGVzY2FwZXM6IC9cXFxcKD86W2FiZm5ydHZcXFxcXCInXXx4WzAtOUEtRmEtZl17MSw0fXx1WzAtOUEtRmEtZl17NH18VVswLTlBLUZhLWZdezh9KS8sXHJcbiAqICAgICB0b2tlbml6ZXI6IHtcclxuICogICAgICAuLi5cclxuICogICAgIH1cclxuICogICB9LFxyXG4gKiAgIHN1Z2dlc3Rpb25zOiB7IHByb3ZpZGVDb21wbGV0aW9uSXRlbXM6IHByb3ZpZGVDb21wbGV0aW9uSXRlbXMgfVxyXG4gKiB9O1xyXG4gKlxyXG4gKiBATmdNb2R1bGUoe1xyXG4gKiAgIGRlY2xhcmF0aW9uczogW10sXHJcbiAqICAgaW1wb3J0czogW1xyXG4gKiAgICAgUG9Nb2R1bGUsXHJcbiAqICAgICBQb0NvZGVFZGl0b3JNb2R1bGUuZm9yUmVnaXN0ZXIoY3VzdG9tRWRpdG9yKVxyXG4gKiAgIF0sXHJcbiAqICAgYm9vdHN0cmFwOiBbQXBwQ29tcG9uZW50XVxyXG4gKiB9KVxyXG4gKiBgYGBcclxuICpcclxuICogPiBBcyBjb25maWd1cmHDp8O1ZXMgcGFyYSBvIHJlZ2lzdHJvIGRlIHVtYSBub3ZhIHNpbnRheGUgbm8gTW9uYWNvIGNvZGUgZWRpdG9yIHBvZGVtIHNlciBlbmNvbnRyYWRhcyBlbVxyXG4gKiA+IFsqKk1vbmFjbyBFZGl0b3IqKl0oaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL21vbmFjby1lZGl0b3IvcGxheWdyb3VuZC5odG1sI2V4dGVuZGluZy1sYW5ndWFnZS1zZXJ2aWNlcy1jdXN0b20tbGFuZ3VhZ2VzKS5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFBvQ29kZUVkaXRvclJlZ2lzdGVyIGltcGxlbWVudHMgUG9Db2RlRWRpdG9yUmVnaXN0ZXJhYmxlIHtcclxuICAvKiogU2ludGF4ZSBhIHNlciByZWdpc3RyYWRhLiAqL1xyXG4gIGxhbmd1YWdlOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBPcMOnw7VlcyBkYSBzaW50YXhlIHBhcmEgcmVnaXN0cm8gbm8gcG8tY29kZS1lZGl0b3IuICovXHJcbiAgb3B0aW9uczogUG9Db2RlRWRpdG9yUmVnaXN0ZXJhYmxlT3B0aW9ucztcclxuXHJcbiAgLyoqIExpc3RhIGRlIHN1Z2VzdMO1ZXMgcGFyYSBhIGZ1bsOnw6NvIGRlIGF1dG9jb21wbGV0ZSAoQ1RSTCArIFNQQUNFKS4gKi9cclxuICBzdWdnZXN0aW9ucz86IFBvQ29kZUVkaXRvclJlZ2lzdGVyYWJsZVN1Z2dlc3Rpb25UeXBlO1xyXG59XHJcbiJdfQ==
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class PoCodeEditorSuggestionService {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.suggestions = {};
|
|
6
|
-
}
|
|
7
|
-
getSuggestion(language, newSuggestion) {
|
|
8
|
-
if (this.suggestions[language]) {
|
|
9
|
-
const deduplicateSuggestions = this.deduplicateSuggestions(this.suggestions[language], newSuggestion);
|
|
10
|
-
this.suggestions[language] = [...this.suggestions[language], ...deduplicateSuggestions];
|
|
11
|
-
return deduplicateSuggestions;
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
return (this.suggestions[language] = [...newSuggestion]);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
deduplicateSuggestions(originalSuggestions, newSuggestions) {
|
|
18
|
-
return newSuggestions.filter(newItem => !originalSuggestions.find(originalItem => originalItem['label'] === newItem['label']));
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
PoCodeEditorSuggestionService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PoCodeEditorSuggestionService_Factory() { return new PoCodeEditorSuggestionService(); }, token: PoCodeEditorSuggestionService, providedIn: "root" });
|
|
22
|
-
PoCodeEditorSuggestionService.decorators = [
|
|
23
|
-
{ type: Injectable, args: [{
|
|
24
|
-
providedIn: 'root'
|
|
25
|
-
},] }
|
|
26
|
-
];
|
|
27
|
-
PoCodeEditorSuggestionService.ctorParameters = () => [];
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class PoCodeEditorSuggestionService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.suggestions = {};
|
|
6
|
+
}
|
|
7
|
+
getSuggestion(language, newSuggestion) {
|
|
8
|
+
if (this.suggestions[language]) {
|
|
9
|
+
const deduplicateSuggestions = this.deduplicateSuggestions(this.suggestions[language], newSuggestion);
|
|
10
|
+
this.suggestions[language] = [...this.suggestions[language], ...deduplicateSuggestions];
|
|
11
|
+
return deduplicateSuggestions;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return (this.suggestions[language] = [...newSuggestion]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
deduplicateSuggestions(originalSuggestions, newSuggestions) {
|
|
18
|
+
return newSuggestions.filter(newItem => !originalSuggestions.find(originalItem => originalItem['label'] === newItem['label']));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
PoCodeEditorSuggestionService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PoCodeEditorSuggestionService_Factory() { return new PoCodeEditorSuggestionService(); }, token: PoCodeEditorSuggestionService, providedIn: "root" });
|
|
22
|
+
PoCodeEditorSuggestionService.decorators = [
|
|
23
|
+
{ type: Injectable, args: [{
|
|
24
|
+
providedIn: 'root'
|
|
25
|
+
},] }
|
|
26
|
+
];
|
|
27
|
+
PoCodeEditorSuggestionService.ctorParameters = () => [];
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29kZS1lZGl0b3Itc3VnZ2VzdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29kZS1lZGl0b3Ivc3JjL2xpYi9jb21wb25lbnRzL3BvLWNvZGUtZWRpdG9yL3BvLWNvZGUtZWRpdG9yLXN1Z2dlc3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVMzQyxNQUFNLE9BQU8sNkJBQTZCO0lBRXhDO1FBRFEsZ0JBQVcsR0FBK0IsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFVCxhQUFhLENBQUMsUUFBZ0IsRUFBRSxhQUF3RDtRQUM3RixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN0RyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztZQUN4RixPQUFPLHNCQUFzQixDQUFDO1NBQy9CO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsbUJBQThELEVBQzlELGNBQXlEO1FBRXpELE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FDMUIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDakcsQ0FBQztJQUNKLENBQUM7Ozs7WUF4QkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFBvQ29kZUVkaXRvclN1Z2dlc3Rpb25MaXN0LFxyXG4gIFBvQ29kZUVkaXRvclJlZ2lzdGVyYWJsZVN1Z2dlc3Rpb25cclxufSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29kZS1lZGl0b3ItcmVnaXN0ZXJhYmxlLXN1Z2dlc3Rpb24uaW50ZXJmYWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBvQ29kZUVkaXRvclN1Z2dlc3Rpb25TZXJ2aWNlIHtcclxuICBwcml2YXRlIHN1Z2dlc3Rpb25zOiBQb0NvZGVFZGl0b3JTdWdnZXN0aW9uTGlzdCA9IHt9O1xyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgcHVibGljIGdldFN1Z2dlc3Rpb24obGFuZ3VhZ2U6IHN0cmluZywgbmV3U3VnZ2VzdGlvbjogQXJyYXk8UG9Db2RlRWRpdG9yUmVnaXN0ZXJhYmxlU3VnZ2VzdGlvbj4pIHtcclxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zW2xhbmd1YWdlXSkge1xyXG4gICAgICBjb25zdCBkZWR1cGxpY2F0ZVN1Z2dlc3Rpb25zID0gdGhpcy5kZWR1cGxpY2F0ZVN1Z2dlc3Rpb25zKHRoaXMuc3VnZ2VzdGlvbnNbbGFuZ3VhZ2VdLCBuZXdTdWdnZXN0aW9uKTtcclxuICAgICAgdGhpcy5zdWdnZXN0aW9uc1tsYW5ndWFnZV0gPSBbLi4udGhpcy5zdWdnZXN0aW9uc1tsYW5ndWFnZV0sIC4uLmRlZHVwbGljYXRlU3VnZ2VzdGlvbnNdO1xyXG4gICAgICByZXR1cm4gZGVkdXBsaWNhdGVTdWdnZXN0aW9ucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAodGhpcy5zdWdnZXN0aW9uc1tsYW5ndWFnZV0gPSBbLi4ubmV3U3VnZ2VzdGlvbl0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWR1cGxpY2F0ZVN1Z2dlc3Rpb25zKFxyXG4gICAgb3JpZ2luYWxTdWdnZXN0aW9uczogQXJyYXk8UG9Db2RlRWRpdG9yUmVnaXN0ZXJhYmxlU3VnZ2VzdGlvbj4sXHJcbiAgICBuZXdTdWdnZXN0aW9uczogQXJyYXk8UG9Db2RlRWRpdG9yUmVnaXN0ZXJhYmxlU3VnZ2VzdGlvbj5cclxuICApIHtcclxuICAgIHJldHVybiBuZXdTdWdnZXN0aW9ucy5maWx0ZXIoXHJcbiAgICAgIG5ld0l0ZW0gPT4gIW9yaWdpbmFsU3VnZ2VzdGlvbnMuZmluZChvcmlnaW5hbEl0ZW0gPT4gb3JpZ2luYWxJdGVtWydsYWJlbCddID09PSBuZXdJdGVtWydsYWJlbCddKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|