@sitecore-jss/sitecore-jss-angular 22.10.0-canary.9 → 22.10.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.
- package/LICENSE.txt +202 -202
- package/README.md +10 -10
- package/angular.json +47 -48
- package/dist/README.md +10 -10
- package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs +228 -393
- package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs.map +1 -1
- package/dist/index.d.ts +640 -3
- package/ng-package.json +13 -13
- package/package.json +22 -22
- package/tsconfig.json +10 -10
- package/tsconfig.spec.json +18 -18
- package/typings/README.md +2 -2
- package/dist/components/base-field.directive.d.ts +0 -39
- package/dist/components/date.directive.d.ts +0 -27
- package/dist/components/default-empty-image-field-editing-placeholder.component.d.ts +0 -8
- package/dist/components/default-empty-text-field-editing-placeholder.component.d.ts +0 -8
- package/dist/components/editframe.component.d.ts +0 -22
- package/dist/components/editing-scripts.component.d.ts +0 -16
- package/dist/components/field-metadata-marker.component.d.ts +0 -12
- package/dist/components/file.directive.d.ts +0 -17
- package/dist/components/form.component.d.ts +0 -48
- package/dist/components/generic-link.directive.d.ts +0 -24
- package/dist/components/hidden-rendering.component.d.ts +0 -6
- package/dist/components/image.directive.d.ts +0 -43
- package/dist/components/link.directive.d.ts +0 -41
- package/dist/components/missing-component.component.d.ts +0 -7
- package/dist/components/placeholder-loading.directive.d.ts +0 -8
- package/dist/components/placeholder.component.d.ts +0 -82
- package/dist/components/raw.component.d.ts +0 -12
- package/dist/components/render-component.component.d.ts +0 -33
- package/dist/components/render-each.directive.d.ts +0 -8
- package/dist/components/render-empty.directive.d.ts +0 -8
- package/dist/components/rendering-field-sxa.d.ts +0 -40
- package/dist/components/rendering-field.d.ts +0 -39
- package/dist/components/rendering.d.ts +0 -5
- package/dist/components/rich-text.directive.d.ts +0 -25
- package/dist/components/router-link.directive.d.ts +0 -23
- package/dist/components/text.directive.d.ts +0 -23
- package/dist/esm2022/components/base-field.directive.mjs +0 -56
- package/dist/esm2022/components/date.directive.mjs +0 -82
- package/dist/esm2022/components/default-empty-image-field-editing-placeholder.component.mjs +0 -26
- package/dist/esm2022/components/default-empty-text-field-editing-placeholder.component.mjs +0 -17
- package/dist/esm2022/components/editframe.component.mjs +0 -101
- package/dist/esm2022/components/editing-scripts.component.mjs +0 -59
- package/dist/esm2022/components/field-metadata-marker.component.mjs +0 -36
- package/dist/esm2022/components/file.directive.mjs +0 -49
- package/dist/esm2022/components/form.component.mjs +0 -125
- package/dist/esm2022/components/generic-link.directive.mjs +0 -75
- package/dist/esm2022/components/hidden-rendering.component.mjs +0 -20
- package/dist/esm2022/components/image.directive.mjs +0 -173
- package/dist/esm2022/components/link.directive.mjs +0 -153
- package/dist/esm2022/components/missing-component.component.mjs +0 -31
- package/dist/esm2022/components/placeholder-loading.directive.mjs +0 -17
- package/dist/esm2022/components/placeholder.component.mjs +0 -459
- package/dist/esm2022/components/raw.component.mjs +0 -39
- package/dist/esm2022/components/render-component.component.mjs +0 -106
- package/dist/esm2022/components/render-each.directive.mjs +0 -17
- package/dist/esm2022/components/render-empty.directive.mjs +0 -17
- package/dist/esm2022/components/rendering-field-sxa.mjs +0 -2
- package/dist/esm2022/components/rendering-field.mjs +0 -2
- package/dist/esm2022/components/rendering.mjs +0 -8
- package/dist/esm2022/components/rich-text.directive.mjs +0 -83
- package/dist/esm2022/components/router-link.directive.mjs +0 -57
- package/dist/esm2022/components/text.directive.mjs +0 -76
- package/dist/esm2022/lib.module.mjs +0 -173
- package/dist/esm2022/public_api.mjs +0 -32
- package/dist/esm2022/services/data-resolver-factory.mjs +0 -60
- package/dist/esm2022/services/guard-resolver-factory.mjs +0 -98
- package/dist/esm2022/services/jss-can-activate-error.mjs +0 -15
- package/dist/esm2022/services/jss-component-factory.service.mjs +0 -103
- package/dist/esm2022/services/jss-state.service.mjs +0 -44
- package/dist/esm2022/services/placeholder.token.mjs +0 -28
- package/dist/esm2022/services/shared.token.mjs +0 -6
- package/dist/esm2022/sitecore-jss-sitecore-jss-angular.mjs +0 -5
- package/dist/esm2022/utils.mjs +0 -17
- package/dist/lib.module.d.ts +0 -50
- package/dist/public_api.d.ts +0 -33
- package/dist/services/data-resolver-factory.d.ts +0 -13
- package/dist/services/guard-resolver-factory.d.ts +0 -11
- package/dist/services/jss-can-activate-error.d.ts +0 -10
- package/dist/services/jss-component-factory.service.d.ts +0 -27
- package/dist/services/jss-state.service.d.ts +0 -36
- package/dist/services/placeholder.token.d.ts +0 -65
- package/dist/services/shared.token.d.ts +0 -12
- package/dist/utils.d.ts +0 -6
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @angular-eslint/no-conflicting-lifecycle */
|
|
2
|
-
import { isPlatformServer } from '@angular/common';
|
|
3
|
-
import { Component, ContentChild, EventEmitter, Inject, Input, Output, PLATFORM_ID, TemplateRef, ViewChild, ViewContainerRef, } from '@angular/core';
|
|
4
|
-
import { RedirectCommand, UrlTree } from '@angular/router';
|
|
5
|
-
import { EditMode, } from '@sitecore-jss/sitecore-jss/layout';
|
|
6
|
-
import { Observable } from 'rxjs';
|
|
7
|
-
import { takeWhile } from 'rxjs/operators';
|
|
8
|
-
import { JssCanActivateRedirectError } from '../services/jss-can-activate-error';
|
|
9
|
-
import { DATA_RESOLVER, GUARD_RESOLVER, PLACEHOLDER_HIDDEN_RENDERING_COMPONENT, PLACEHOLDER_MISSING_COMPONENT_COMPONENT, } from '../services/placeholder.token';
|
|
10
|
-
import { constants } from '@sitecore-jss/sitecore-jss';
|
|
11
|
-
import { isDynamicPlaceholder, getDynamicPlaceholderPattern, } from '@sitecore-jss/sitecore-jss/layout';
|
|
12
|
-
import { PlaceholderLoadingDirective } from './placeholder-loading.directive';
|
|
13
|
-
import { RenderEachDirective } from './render-each.directive';
|
|
14
|
-
import { RenderEmptyDirective } from './render-empty.directive';
|
|
15
|
-
import { isRawRendering } from './rendering';
|
|
16
|
-
import { MetadataKind, DEFAULT_PLACEHOLDER_UID } from '@sitecore-jss/sitecore-jss/editing';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
import * as i1 from "../services/jss-component-factory.service";
|
|
19
|
-
import * as i2 from "@angular/router";
|
|
20
|
-
import * as i3 from "../services/jss-state.service";
|
|
21
|
-
import * as i4 from "@angular/common";
|
|
22
|
-
export class PlaceholderComponent {
|
|
23
|
-
differs;
|
|
24
|
-
componentFactory;
|
|
25
|
-
changeDetectorRef;
|
|
26
|
-
elementRef;
|
|
27
|
-
renderer;
|
|
28
|
-
router;
|
|
29
|
-
missingComponentComponent;
|
|
30
|
-
hiddenRenderingComponent;
|
|
31
|
-
guardResolver;
|
|
32
|
-
dataResolver;
|
|
33
|
-
platformId;
|
|
34
|
-
jssState;
|
|
35
|
-
name;
|
|
36
|
-
rendering;
|
|
37
|
-
renderings;
|
|
38
|
-
outputs;
|
|
39
|
-
clientOnly = false;
|
|
40
|
-
loaded = new EventEmitter();
|
|
41
|
-
failed = new EventEmitter();
|
|
42
|
-
renderEachTemplate;
|
|
43
|
-
renderEmptyTemplate;
|
|
44
|
-
placeholderLoading;
|
|
45
|
-
view;
|
|
46
|
-
metadataNode;
|
|
47
|
-
isLoading = true;
|
|
48
|
-
metadataMode;
|
|
49
|
-
chromeType;
|
|
50
|
-
_inputs;
|
|
51
|
-
_differ;
|
|
52
|
-
_componentInstances = [];
|
|
53
|
-
placeholderData;
|
|
54
|
-
destroyed = false;
|
|
55
|
-
parentStyleAttribute = '';
|
|
56
|
-
contextSubscription;
|
|
57
|
-
constructor(differs, componentFactory, changeDetectorRef, elementRef, renderer, router, missingComponentComponent, hiddenRenderingComponent, guardResolver, dataResolver, platformId, jssState) {
|
|
58
|
-
this.differs = differs;
|
|
59
|
-
this.componentFactory = componentFactory;
|
|
60
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
61
|
-
this.elementRef = elementRef;
|
|
62
|
-
this.renderer = renderer;
|
|
63
|
-
this.router = router;
|
|
64
|
-
this.missingComponentComponent = missingComponentComponent;
|
|
65
|
-
this.hiddenRenderingComponent = hiddenRenderingComponent;
|
|
66
|
-
this.guardResolver = guardResolver;
|
|
67
|
-
this.dataResolver = dataResolver;
|
|
68
|
-
this.platformId = platformId;
|
|
69
|
-
this.jssState = jssState;
|
|
70
|
-
this.contextSubscription = this.jssState.state.subscribe(({ sitecore }) => {
|
|
71
|
-
this.metadataMode = sitecore?.context.editMode === EditMode.Metadata;
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
set inputs(value) {
|
|
75
|
-
this._inputs = value;
|
|
76
|
-
if (!this._differ && value) {
|
|
77
|
-
this._differ = this.differs.find(value).create();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
ngOnInit() {
|
|
81
|
-
this.chromeType = this.name ? 'placeholder' : 'rendering';
|
|
82
|
-
// just to ensure the element exists
|
|
83
|
-
const elem = this.elementRef.nativeElement;
|
|
84
|
-
if (elem) {
|
|
85
|
-
const attributes = elem.attributes;
|
|
86
|
-
for (let i = 0; i < attributes.length; i++) {
|
|
87
|
-
const attr = attributes.item(i);
|
|
88
|
-
if (attr && attr.name.indexOf('_ngcontent') !== -1) {
|
|
89
|
-
this.parentStyleAttribute = attr.name;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
this.placeholderData = this.renderings || this.getPlaceholder() || [];
|
|
94
|
-
}
|
|
95
|
-
ngOnDestroy() {
|
|
96
|
-
this.destroyed = true;
|
|
97
|
-
this._componentInstances = [];
|
|
98
|
-
if (this.contextSubscription) {
|
|
99
|
-
this.contextSubscription.unsubscribe();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
ngOnChanges(changes) {
|
|
103
|
-
this.chromeType = changes.name ? 'placeholder' : 'rendering';
|
|
104
|
-
if (changes.rendering || changes.renderings) {
|
|
105
|
-
this.placeholderData = this.renderings || this.getPlaceholder() || [];
|
|
106
|
-
this._render();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
ngDoCheck() {
|
|
110
|
-
if (!this._differ || !this._inputs || this._componentInstances.length === 0) {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const changes = this._differ.diff(this._inputs);
|
|
114
|
-
if (!changes) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
const updates = {};
|
|
118
|
-
changes.forEachRemovedItem((change) => (updates[change.key] = null));
|
|
119
|
-
changes.forEachAddedItem((change) => (updates[change.key] = change.currentValue));
|
|
120
|
-
changes.forEachChangedItem((change) => (updates[change.key] = change.currentValue));
|
|
121
|
-
this._componentInstances.forEach((componentInstance) => this._setComponentInputs(componentInstance, updates));
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Gets id for Metadata code blocks, in specific format
|
|
125
|
-
* Metadata code blocks will wrap be added around placeholder content and each rendering component
|
|
126
|
-
* to allow for editing integration in Pages.
|
|
127
|
-
* @param {string} kind code block type ("open" or "close"). "open" is added before an element, and "close" added after one.
|
|
128
|
-
* @param {string?} renderingId rendering uid to apply as id to code block
|
|
129
|
-
* @returns {string} formatted id value for code HTML node
|
|
130
|
-
*/
|
|
131
|
-
getCodeBlockId = (kind, renderingId) => {
|
|
132
|
-
if (this.rendering && kind === MetadataKind.Open) {
|
|
133
|
-
const placeholderName = this.name;
|
|
134
|
-
const id = renderingId || this.rendering?.uid;
|
|
135
|
-
if (!renderingId && placeholderName) {
|
|
136
|
-
let phId = '';
|
|
137
|
-
for (const placeholder of Object.keys(this.rendering.placeholders || [])) {
|
|
138
|
-
if (placeholderName === placeholder) {
|
|
139
|
-
phId = id
|
|
140
|
-
? `${placeholderName}_${id}`
|
|
141
|
-
: `${placeholderName}_${DEFAULT_PLACEHOLDER_UID}`;
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
// Check if the placeholder is a dynamic placeholder
|
|
145
|
-
if (isDynamicPlaceholder(placeholder)) {
|
|
146
|
-
const pattern = getDynamicPlaceholderPattern(placeholder);
|
|
147
|
-
// Check if the placeholder matches the dynamic placeholder pattern
|
|
148
|
-
if (pattern.test(placeholderName)) {
|
|
149
|
-
phId = id ? `${placeholder}_${id}` : `${placeholder}_${DEFAULT_PLACEHOLDER_UID}`;
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return phId;
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
return id;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return undefined;
|
|
161
|
-
};
|
|
162
|
-
/**
|
|
163
|
-
* Get renderings/components to be rendered for current placeholder name
|
|
164
|
-
* Can modify the inner placeholders collection to adjust to using SXA dynamic placeholders
|
|
165
|
-
* @returns {ComponentRendering<ComponentFields> | HtmlElementRendering[] | null} List of renderings to be rendered
|
|
166
|
-
*/
|
|
167
|
-
getPlaceholder() {
|
|
168
|
-
let phName = this.name?.slice() || '';
|
|
169
|
-
/**
|
|
170
|
-
* Process (SXA) dynamic placeholders
|
|
171
|
-
* Find and replace the matching dynamic placeholder e.g 'nameOfContainer-{*}' with the requested e.g. 'nameOfContainer-1'.
|
|
172
|
-
* For Metadata EditMode, we need to keep the raw placeholder name in place.
|
|
173
|
-
*/
|
|
174
|
-
this.rendering?.placeholders &&
|
|
175
|
-
Object.keys(this.rendering.placeholders).forEach((placeholder) => {
|
|
176
|
-
const patternPlaceholder = isDynamicPlaceholder(placeholder)
|
|
177
|
-
? getDynamicPlaceholderPattern(placeholder)
|
|
178
|
-
: null;
|
|
179
|
-
if (patternPlaceholder && patternPlaceholder.test(phName)) {
|
|
180
|
-
if (this.metadataMode) {
|
|
181
|
-
phName = placeholder;
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
this.rendering.placeholders[phName] = this.rendering.placeholders[placeholder];
|
|
185
|
-
delete this.rendering.placeholders[placeholder];
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
if (this.rendering &&
|
|
190
|
-
this.rendering.placeholders &&
|
|
191
|
-
Object.keys(this.rendering.placeholders).length > 0) {
|
|
192
|
-
return this.rendering.placeholders[phName];
|
|
193
|
-
}
|
|
194
|
-
return null;
|
|
195
|
-
}
|
|
196
|
-
_setComponentInputs(componentInstance, inputs) {
|
|
197
|
-
Object.entries(inputs).forEach(([input, inputValue]) => (componentInstance[input] = inputValue));
|
|
198
|
-
}
|
|
199
|
-
_subscribeComponentOutputs(componentInstance, outputs) {
|
|
200
|
-
Object.keys(outputs)
|
|
201
|
-
.filter((output) => componentInstance[output] && componentInstance[output] instanceof Observable)
|
|
202
|
-
.forEach((output) => componentInstance[output]
|
|
203
|
-
.pipe(takeWhile(() => !this.destroyed))
|
|
204
|
-
.subscribe(outputs[output]));
|
|
205
|
-
}
|
|
206
|
-
async _render() {
|
|
207
|
-
if (this.clientOnly && isPlatformServer(this.platformId)) {
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
this._componentInstances = [];
|
|
211
|
-
this.view.clear();
|
|
212
|
-
if (!this.rendering && !this.renderings) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
if (!this.name && !this.renderings) {
|
|
216
|
-
console.warn('Placeholder name was not specified, and explicit renderings array was not passed. Placeholder requires either name and rendering, or renderings.');
|
|
217
|
-
this.isLoading = false;
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
const placeholder = this.placeholderData;
|
|
221
|
-
if (!placeholder) {
|
|
222
|
-
console.warn(`Placeholder '${this.name}' was not found in the current rendering data`, JSON.stringify(this.rendering, null, 2));
|
|
223
|
-
this.isLoading = false;
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
// if the placeholder is empty (contains only raw renderings), then we may need to use the empty template if it's defined
|
|
227
|
-
const placeholderIsEmpty = placeholder.every((rendering) => isRawRendering(rendering));
|
|
228
|
-
if (this.renderEmptyTemplate && placeholderIsEmpty) {
|
|
229
|
-
this.view.createEmbeddedView(this.renderEmptyTemplate.templateRef, {
|
|
230
|
-
renderings: placeholder,
|
|
231
|
-
});
|
|
232
|
-
this.isLoading = false;
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
const factories = await this.componentFactory.getComponents(placeholder);
|
|
236
|
-
try {
|
|
237
|
-
const nonGuarded = await this.guardResolver(factories);
|
|
238
|
-
const withData = await this.dataResolver(nonGuarded);
|
|
239
|
-
// not using index to ensure code blocks are rendered at correct positions
|
|
240
|
-
withData.forEach((rendering) => {
|
|
241
|
-
this.metadataMode &&
|
|
242
|
-
this.view.createEmbeddedView(this.metadataNode, {
|
|
243
|
-
kind: MetadataKind.Open,
|
|
244
|
-
chromeType: 'rendering',
|
|
245
|
-
renderingId: rendering.factory.componentDefinition?.uid,
|
|
246
|
-
});
|
|
247
|
-
if (this.renderEachTemplate && !isRawRendering(rendering.factory.componentDefinition)) {
|
|
248
|
-
this._renderTemplatedComponent(rendering.factory.componentDefinition);
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
this._renderEmbeddedComponent(rendering.factory, rendering.data);
|
|
252
|
-
}
|
|
253
|
-
this.metadataMode &&
|
|
254
|
-
this.view.createEmbeddedView(this.metadataNode, {
|
|
255
|
-
kind: MetadataKind.Close,
|
|
256
|
-
chromeType: 'rendering',
|
|
257
|
-
renderingId: rendering.factory.componentDefinition?.uid,
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
this.isLoading = false;
|
|
261
|
-
this.changeDetectorRef.markForCheck();
|
|
262
|
-
this.loaded.emit(this.name);
|
|
263
|
-
}
|
|
264
|
-
catch (e) {
|
|
265
|
-
this.isLoading = false;
|
|
266
|
-
if (e instanceof JssCanActivateRedirectError) {
|
|
267
|
-
const redirectValue = e.redirectValue;
|
|
268
|
-
if (redirectValue instanceof RedirectCommand) {
|
|
269
|
-
this.router.navigateByUrl(redirectValue.redirectTo);
|
|
270
|
-
}
|
|
271
|
-
else if (redirectValue instanceof UrlTree) {
|
|
272
|
-
this.router.navigateByUrl(redirectValue);
|
|
273
|
-
}
|
|
274
|
-
else if (typeof redirectValue === 'string') {
|
|
275
|
-
this.router.navigate([redirectValue]);
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
this.router.navigate(redirectValue);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
this.failed.emit(e);
|
|
283
|
-
console.warn(`Placeholder '${this.name}' was not able to render with the current rendering data and error`, JSON.stringify(this.rendering, null, 2), e);
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
_renderTemplatedComponent(rendering) {
|
|
290
|
-
// the render-each template takes care of all component mapping etc
|
|
291
|
-
// generally using <sc-render-component> which is about like _renderEmbeddedComponent()
|
|
292
|
-
// as a separate component
|
|
293
|
-
this.view.createEmbeddedView(this.renderEachTemplate.templateRef, {
|
|
294
|
-
rendering,
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
_renderEmbeddedComponent(rendering, data) {
|
|
298
|
-
if (rendering.componentDefinition.componentName ===
|
|
299
|
-
constants.HIDDEN_RENDERING_NAME) {
|
|
300
|
-
rendering.componentImplementation = this.hiddenRenderingComponent;
|
|
301
|
-
}
|
|
302
|
-
if (!rendering.componentImplementation) {
|
|
303
|
-
const componentName = rendering.componentDefinition.componentName;
|
|
304
|
-
console.error(`Placeholder ${this.name} contains unknown component ${componentName}.`, `Ensure component is mapped, like:
|
|
305
|
-
JssModule.withComponents([
|
|
306
|
-
{ name: '${componentName}', type: ${componentName}Component }
|
|
307
|
-
])`);
|
|
308
|
-
rendering.componentImplementation = this.missingComponentComponent;
|
|
309
|
-
}
|
|
310
|
-
// apply the parent style attribute _ngcontent
|
|
311
|
-
// work-around for https://github.com/angular/angular/issues/12215
|
|
312
|
-
const createdComponentRef = this.view.createComponent(rendering.componentImplementation, {
|
|
313
|
-
ngModuleRef: rendering.componentModuleRef,
|
|
314
|
-
});
|
|
315
|
-
if (this.parentStyleAttribute) {
|
|
316
|
-
this.renderer.setAttribute(createdComponentRef.location.nativeElement, this.parentStyleAttribute, '');
|
|
317
|
-
}
|
|
318
|
-
const componentInstance = createdComponentRef.instance;
|
|
319
|
-
componentInstance.rendering = rendering.componentDefinition;
|
|
320
|
-
componentInstance.data = data;
|
|
321
|
-
if (this._inputs) {
|
|
322
|
-
this._setComponentInputs(componentInstance, this._inputs);
|
|
323
|
-
}
|
|
324
|
-
if (this.outputs) {
|
|
325
|
-
this._subscribeComponentOutputs(componentInstance, this.outputs);
|
|
326
|
-
}
|
|
327
|
-
this._componentInstances.push(componentInstance);
|
|
328
|
-
}
|
|
329
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaceholderComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i1.JssComponentFactoryService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i2.Router }, { token: PLACEHOLDER_MISSING_COMPONENT_COMPONENT }, { token: PLACEHOLDER_HIDDEN_RENDERING_COMPONENT }, { token: GUARD_RESOLVER }, { token: DATA_RESOLVER }, { token: PLATFORM_ID }, { token: i3.JssStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
330
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PlaceholderComponent, selector: "sc-placeholder,[sc-placeholder]", inputs: { name: "name", rendering: "rendering", renderings: "renderings", outputs: "outputs", clientOnly: "clientOnly", inputs: "inputs" }, outputs: { loaded: "loaded", failed: "failed" }, queries: [{ propertyName: "renderEachTemplate", first: true, predicate: RenderEachDirective, descendants: true, static: true }, { propertyName: "renderEmptyTemplate", first: true, predicate: RenderEmptyDirective, descendants: true, static: true }, { propertyName: "placeholderLoading", first: true, predicate: PlaceholderLoadingDirective, descendants: true, static: true }], viewQueries: [{ propertyName: "view", first: true, predicate: ["view"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "metadataNode", first: true, predicate: ["metadataCodeBlock"], descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: `
|
|
331
|
-
<ng-template
|
|
332
|
-
*ngIf="isLoading"
|
|
333
|
-
[ngTemplateOutlet]="placeholderLoading?.templateRef"
|
|
334
|
-
></ng-template>
|
|
335
|
-
<ng-template
|
|
336
|
-
#metadataCodeBlock
|
|
337
|
-
let-kind="kind"
|
|
338
|
-
let-type="chromeType"
|
|
339
|
-
let-renderingId="renderingId"
|
|
340
|
-
>
|
|
341
|
-
<code
|
|
342
|
-
[attr.kind]="kind"
|
|
343
|
-
type="text/sitecore"
|
|
344
|
-
[attr.chrometype]="type"
|
|
345
|
-
class="scpm"
|
|
346
|
-
[attr.id]="getCodeBlockId(kind, renderingId)"
|
|
347
|
-
></code
|
|
348
|
-
></ng-template>
|
|
349
|
-
|
|
350
|
-
<ng-container
|
|
351
|
-
*ngTemplateOutlet="
|
|
352
|
-
metadataMode && metadataCodeBlock;
|
|
353
|
-
context: { kind: 'open', chromeType: 'placeholder' }
|
|
354
|
-
"
|
|
355
|
-
>
|
|
356
|
-
</ng-container>
|
|
357
|
-
|
|
358
|
-
<ng-template #view></ng-template>
|
|
359
|
-
|
|
360
|
-
<ng-container
|
|
361
|
-
*ngTemplateOutlet="
|
|
362
|
-
metadataMode && metadataCodeBlock;
|
|
363
|
-
context: { kind: 'close', chromeType: 'placeholder' }
|
|
364
|
-
"
|
|
365
|
-
>
|
|
366
|
-
</ng-container>
|
|
367
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
368
|
-
}
|
|
369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PlaceholderComponent, decorators: [{
|
|
370
|
-
type: Component,
|
|
371
|
-
args: [{
|
|
372
|
-
selector: 'sc-placeholder,[sc-placeholder]',
|
|
373
|
-
template: `
|
|
374
|
-
<ng-template
|
|
375
|
-
*ngIf="isLoading"
|
|
376
|
-
[ngTemplateOutlet]="placeholderLoading?.templateRef"
|
|
377
|
-
></ng-template>
|
|
378
|
-
<ng-template
|
|
379
|
-
#metadataCodeBlock
|
|
380
|
-
let-kind="kind"
|
|
381
|
-
let-type="chromeType"
|
|
382
|
-
let-renderingId="renderingId"
|
|
383
|
-
>
|
|
384
|
-
<code
|
|
385
|
-
[attr.kind]="kind"
|
|
386
|
-
type="text/sitecore"
|
|
387
|
-
[attr.chrometype]="type"
|
|
388
|
-
class="scpm"
|
|
389
|
-
[attr.id]="getCodeBlockId(kind, renderingId)"
|
|
390
|
-
></code
|
|
391
|
-
></ng-template>
|
|
392
|
-
|
|
393
|
-
<ng-container
|
|
394
|
-
*ngTemplateOutlet="
|
|
395
|
-
metadataMode && metadataCodeBlock;
|
|
396
|
-
context: { kind: 'open', chromeType: 'placeholder' }
|
|
397
|
-
"
|
|
398
|
-
>
|
|
399
|
-
</ng-container>
|
|
400
|
-
|
|
401
|
-
<ng-template #view></ng-template>
|
|
402
|
-
|
|
403
|
-
<ng-container
|
|
404
|
-
*ngTemplateOutlet="
|
|
405
|
-
metadataMode && metadataCodeBlock;
|
|
406
|
-
context: { kind: 'close', chromeType: 'placeholder' }
|
|
407
|
-
"
|
|
408
|
-
>
|
|
409
|
-
</ng-container>
|
|
410
|
-
`,
|
|
411
|
-
}]
|
|
412
|
-
}], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1.JssComponentFactoryService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i2.Router }, { type: i0.Type, decorators: [{
|
|
413
|
-
type: Inject,
|
|
414
|
-
args: [PLACEHOLDER_MISSING_COMPONENT_COMPONENT]
|
|
415
|
-
}] }, { type: i0.Type, decorators: [{
|
|
416
|
-
type: Inject,
|
|
417
|
-
args: [PLACEHOLDER_HIDDEN_RENDERING_COMPONENT]
|
|
418
|
-
}] }, { type: undefined, decorators: [{
|
|
419
|
-
type: Inject,
|
|
420
|
-
args: [GUARD_RESOLVER]
|
|
421
|
-
}] }, { type: undefined, decorators: [{
|
|
422
|
-
type: Inject,
|
|
423
|
-
args: [DATA_RESOLVER]
|
|
424
|
-
}] }, { type: undefined, decorators: [{
|
|
425
|
-
type: Inject,
|
|
426
|
-
args: [PLATFORM_ID]
|
|
427
|
-
}] }, { type: i3.JssStateService }], propDecorators: { name: [{
|
|
428
|
-
type: Input
|
|
429
|
-
}], rendering: [{
|
|
430
|
-
type: Input
|
|
431
|
-
}], renderings: [{
|
|
432
|
-
type: Input
|
|
433
|
-
}], outputs: [{
|
|
434
|
-
type: Input
|
|
435
|
-
}], clientOnly: [{
|
|
436
|
-
type: Input
|
|
437
|
-
}], loaded: [{
|
|
438
|
-
type: Output
|
|
439
|
-
}], failed: [{
|
|
440
|
-
type: Output
|
|
441
|
-
}], renderEachTemplate: [{
|
|
442
|
-
type: ContentChild,
|
|
443
|
-
args: [RenderEachDirective, { static: true }]
|
|
444
|
-
}], renderEmptyTemplate: [{
|
|
445
|
-
type: ContentChild,
|
|
446
|
-
args: [RenderEmptyDirective, { static: true }]
|
|
447
|
-
}], placeholderLoading: [{
|
|
448
|
-
type: ContentChild,
|
|
449
|
-
args: [PlaceholderLoadingDirective, { static: true }]
|
|
450
|
-
}], view: [{
|
|
451
|
-
type: ViewChild,
|
|
452
|
-
args: ['view', { read: ViewContainerRef, static: true }]
|
|
453
|
-
}], metadataNode: [{
|
|
454
|
-
type: ViewChild,
|
|
455
|
-
args: ['metadataCodeBlock', { read: TemplateRef }]
|
|
456
|
-
}], inputs: [{
|
|
457
|
-
type: Input
|
|
458
|
-
}] } });
|
|
459
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGxhY2Vob2xkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFHWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFNTCxNQUFNLEVBQ04sV0FBVyxFQUdYLFdBQVcsRUFFWCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBUSxlQUFlLEVBQVUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUdMLFFBQVEsR0FFVCxNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUtqRixPQUFPLEVBRUwsYUFBYSxFQUViLGNBQWMsRUFDZCxzQ0FBc0MsRUFDdEMsdUNBQXVDLEdBQ3hDLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsNEJBQTRCLEdBQzdCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNB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QUFNO3NCQUFmLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUM4QyxrQkFBa0I7c0JBQXRFLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLG1CQUFtQjtzQkFBeEUsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXBELGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRVUsSUFBSTtzQkFBeEUsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSSxZQUFZO3NCQUExRSxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFpQ2pELE1BQU07c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1jb25mbGljdGluZy1saWZlY3ljbGUgKi9cclxuaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBEb0NoZWNrLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBLZXlWYWx1ZURpZmZlcixcclxuICBLZXlWYWx1ZURpZmZlcnMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFBMQVRGT1JNX0lELFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFR5cGUsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGEsIFJlZGlyZWN0Q29tbWFuZCwgUm91dGVyLCBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRSZW5kZXJpbmcsXHJcbiAgSHRtbEVsZW1lbnRSZW5kZXJpbmcsXHJcbiAgRWRpdE1vZGUsXHJcbiAgQ29tcG9uZW50RmllbGRzLFxyXG59IGZyb20gJ0BzaXRlY29yZS1qc3Mvc2l0ZWNvcmUtanNzL2xheW91dCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEpzc0NhbkFjdGl2YXRlUmVkaXJlY3RFcnJvciB9IGZyb20gJy4uL3NlcnZpY2VzL2pzcy1jYW4tYWN0aXZhdGUtZXJyb3InO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudEZhY3RvcnlSZXN1bHQsXHJcbiAgSnNzQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvanNzLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIERhdGFSZXNvbHZlcixcclxuICBEQVRBX1JFU09MVkVSLFxyXG4gIEd1YXJkUmVzb2x2ZXIsXHJcbiAgR1VBUkRfUkVTT0xWRVIsXHJcbiAgUExBQ0VIT0xERVJfSElEREVOX1JFTkRFUklOR19DT01QT05FTlQsXHJcbiAgUExBQ0VIT0xERVJfTUlTU0lOR19DT01QT05FTlRfQ09NUE9ORU5ULFxyXG59IGZyb20gJy4uL3NlcnZpY2VzL3BsYWNlaG9sZGVyLnRva2VuJztcclxuaW1wb3J0IHsgY29uc3RhbnRzIH0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MnO1xyXG5pbXBvcnQge1xyXG4gIGlzRHluYW1pY1BsYWNlaG9sZGVyLFxyXG4gIGdldER5bmFtaWNQbGFjZWhvbGRlclBhdHRlcm4sXHJcbn0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MvbGF5b3V0JztcclxuaW1wb3J0IHsgUGxhY2Vob2xkZXJMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi9wbGFjZWhvbGRlci1sb2FkaW5nLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlbmRlckVhY2hEaXJlY3RpdmUgfSBmcm9tICcuL3JlbmRlci1lYWNoLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlbmRlckVtcHR5RGlyZWN0aXZlIH0gZnJvbSAnLi9yZW5kZXItZW1wdHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgaXNSYXdSZW5kZXJpbmcgfSBmcm9tICcuL3JlbmRlcmluZyc7XHJcbmltcG9ydCB7IEpzc1N0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2pzcy1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWV0YWRhdGFLaW5kLCBERUZBVUxUX1BMQUNFSE9MREVSX1VJRCB9IGZyb20gJ0BzaXRlY29yZS1qc3Mvc2l0ZWNvcmUtanNzL2VkaXRpbmcnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYWN0b3J5V2l0aERhdGEge1xyXG4gIGZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnlSZXN1bHQ7XHJcbiAgZGF0YT86IERhdGE7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2MtcGxhY2Vob2xkZXIsW3NjLXBsYWNlaG9sZGVyXScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAqbmdJZj1cImlzTG9hZGluZ1wiXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBsYWNlaG9sZGVyTG9hZGluZz8udGVtcGxhdGVSZWZcIlxyXG4gICAgPjwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgI21ldGFkYXRhQ29kZUJsb2NrXHJcbiAgICAgIGxldC1raW5kPVwia2luZFwiXHJcbiAgICAgIGxldC10eXBlPVwiY2hyb21lVHlwZVwiXHJcbiAgICAgIGxldC1yZW5kZXJpbmdJZD1cInJlbmRlcmluZ0lkXCJcclxuICAgID5cclxuICAgICAgPGNvZGVcclxuICAgICAgICBbYXR0ci5raW5kXT1cImtpbmRcIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0L3NpdGVjb3JlXCJcclxuICAgICAgICBbYXR0ci5jaHJvbWV0eXBlXT1cInR5cGVcIlxyXG4gICAgICAgIGNsYXNzPVwic2NwbVwiXHJcbiAgICAgICAgW2F0dHIuaWRdPVwiZ2V0Q29kZUJsb2NrSWQoa2luZCwgcmVuZGVyaW5nSWQpXCJcclxuICAgICAgPjwvY29kZVxyXG4gICAgPjwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgIG1ldGFkYXRhTW9kZSAmJiBtZXRhZGF0YUNvZGVCbG9jaztcclxuICAgICAgICBjb250ZXh0OiB7IGtpbmQ6ICdvcGVuJywgY2hyb21lVHlwZTogJ3BsYWNlaG9sZGVyJyB9XHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3ZpZXc+PC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgbWV0YWRhdGFNb2RlICYmIG1ldGFkYXRhQ29kZUJsb2NrO1xyXG4gICAgICAgIGNvbnRleHQ6IHsga2luZDogJ2Nsb3NlJywgY2hyb21lVHlwZTogJ3BsYWNlaG9sZGVyJyB9XHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGxhY2Vob2xkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRG9DaGVjaywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBuYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJlbmRlcmluZzogQ29tcG9uZW50UmVuZGVyaW5nO1xyXG4gIEBJbnB1dCgpIHJlbmRlcmluZ3M/OiBBcnJheTxDb21wb25lbnRSZW5kZXJpbmcgfCBIdG1sRWxlbWVudFJlbmRlcmluZz47XHJcbiAgQElucHV0KCkgb3V0cHV0czogeyBbazogc3RyaW5nXTogKGV2ZW50VHlwZTogdW5rbm93bikgPT4gdm9pZCB9O1xyXG4gIEBJbnB1dCgpIGNsaWVudE9ubHkgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG4gIEBPdXRwdXQoKSBmYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEVycm9yPigpO1xyXG4gIEBDb250ZW50Q2hpbGQoUmVuZGVyRWFjaERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcmVuZGVyRWFjaFRlbXBsYXRlOiBSZW5kZXJFYWNoRGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoUmVuZGVyRW1wdHlEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHJlbmRlckVtcHR5VGVtcGxhdGU6IFJlbmRlckVtcHR5RGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoUGxhY2Vob2xkZXJMb2FkaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHBsYWNlaG9sZGVyTG9hZGluZz86IFBsYWNlaG9sZGVyTG9hZGluZ0RpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKCd2aWV3JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSB2aWV3OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ21ldGFkYXRhQ29kZUJsb2NrJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBwcml2YXRlIG1ldGFkYXRhTm9kZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IHRydWU7XHJcbiAgbWV0YWRhdGFNb2RlOiBib29sZWFuO1xyXG4gIGNocm9tZVR5cGU6IHN0cmluZztcclxuICBwcml2YXRlIF9pbnB1dHM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xyXG4gIHByaXZhdGUgX2RpZmZlcjogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCB1bmtub3duPjtcclxuICBwcml2YXRlIF9jb21wb25lbnRJbnN0YW5jZXM6IHsgW3Byb3A6IHN0cmluZ106IHVua25vd24gfVtdID0gW107XHJcbiAgcHJpdmF0ZSBwbGFjZWhvbGRlckRhdGE/OiAoQ29tcG9uZW50UmVuZGVyaW5nPENvbXBvbmVudEZpZWxkcz4gfCBIdG1sRWxlbWVudFJlbmRlcmluZylbXTtcclxuICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcGFyZW50U3R5bGVBdHRyaWJ1dGUgPSAnJztcclxuICBwcml2YXRlIGNvbnRleHRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeTogSnNzQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBASW5qZWN0KFBMQUNFSE9MREVSX01JU1NJTkdfQ09NUE9ORU5UX0NPTVBPTkVOVClcclxuICAgIHByaXZhdGUgbWlzc2luZ0NvbXBvbmVudENvbXBvbmVudDogVHlwZTx1bmtub3duPixcclxuICAgIEBJbmplY3QoUExBQ0VIT0xERVJfSElEREVOX1JFTkRFUklOR19DT01QT05FTlQpIHByaXZhdGUgaGlkZGVuUmVuZGVyaW5nQ29tcG9uZW50OiBUeXBlPHVua25vd24+LFxyXG4gICAgQEluamVjdChHVUFSRF9SRVNPTFZFUikgcHJpdmF0ZSBndWFyZFJlc29sdmVyOiBHdWFyZFJlc29sdmVyLFxyXG4gICAgQEluamVjdChEQVRBX1JFU09MVkVSKSBwcml2YXRlIGRhdGFSZXNvbHZlcjogRGF0YVJlc29sdmVyLFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBvYmplY3QsXHJcbiAgICBwcml2YXRlIGpzc1N0YXRlOiBKc3NTdGF0ZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuY29udGV4dFN1YnNjcmlwdGlvbiA9IHRoaXMuanNzU3RhdGUuc3RhdGUuc3Vic2NyaWJlKCh7IHNpdGVjb3JlIH0pID0+IHtcclxuICAgICAgdGhpcy5tZXRhZGF0YU1vZGUgPSBzaXRlY29yZT8uY29udGV4dC5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuTWV0YWRhdGE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlucHV0cyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pIHtcclxuICAgIHRoaXMuX2lucHV0cyA9IHZhbHVlO1xyXG4gICAgaWYgKCF0aGlzLl9kaWZmZXIgJiYgdmFsdWUpIHtcclxuICAgICAgdGhpcy5fZGlmZmVyID0gdGhpcy5kaWZmZXJzLmZpbmQodmFsdWUpLmNyZWF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNocm9tZVR5cGUgPSB0aGlzLm5hbWUgPyAncGxhY2Vob2xkZXInIDogJ3JlbmRlcmluZyc7XHJcbiAgICAvLyBqdXN0IHRvIGVuc3VyZSB0aGUgZWxlbWVudCBleGlzdHNcclxuICAgIGNvbnN0IGVsZW0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzOiBOYW1lZE5vZGVNYXAgPSBlbGVtLmF0dHJpYnV0ZXM7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGF0dHI6IEF0dHIgfCBudWxsID0gYXR0cmlidXRlcy5pdGVtKGkpO1xyXG4gICAgICAgIGlmIChhdHRyICYmIGF0dHIubmFtZS5pbmRleE9mKCdfbmdjb250ZW50JykgIT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnBhcmVudFN0eWxlQXR0cmlidXRlID0gYXR0ci5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wbGFjZWhvbGRlckRhdGEgPSB0aGlzLnJlbmRlcmluZ3MgfHwgdGhpcy5nZXRQbGFjZWhvbGRlcigpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XHJcbiAgICB0aGlzLl9jb21wb25lbnRJbnN0YW5jZXMgPSBbXTtcclxuICAgIGlmICh0aGlzLmNvbnRleHRTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5jb250ZXh0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLmNocm9tZVR5cGUgPSBjaGFuZ2VzLm5hbWUgPyAncGxhY2Vob2xkZXInIDogJ3JlbmRlcmluZyc7XHJcbiAgICBpZiAoY2hhbmdlcy5yZW5kZXJpbmcgfHwgY2hhbmdlcy5yZW5kZXJpbmdzKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJEYXRhID0gdGhpcy5yZW5kZXJpbmdzIHx8IHRoaXMuZ2V0UGxhY2Vob2xkZXIoKSB8fCBbXTtcclxuICAgICAgdGhpcy5fcmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuX2RpZmZlciB8fCAhdGhpcy5faW5wdXRzIHx8IHRoaXMuX2NvbXBvbmVudEluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9pbnB1dHMpO1xyXG4gICAgaWYgKCFjaGFuZ2VzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHVwZGF0ZXM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge307XHJcbiAgICBjaGFuZ2VzLmZvckVhY2hSZW1vdmVkSXRlbSgoY2hhbmdlKSA9PiAodXBkYXRlc1tjaGFuZ2Uua2V5XSA9IG51bGwpKTtcclxuICAgIGNoYW5nZXMuZm9yRWFjaEFkZGVkSXRlbSgoY2hhbmdlKSA9PiAodXBkYXRlc1tjaGFuZ2Uua2V5XSA9IGNoYW5nZS5jdXJyZW50VmFsdWUpKTtcclxuICAgIGNoYW5nZXMuZm9yRWFjaENoYW5nZWRJdGVtKChjaGFuZ2UpID0+ICh1cGRhdGVzW2NoYW5nZS5rZXldID0gY2hhbmdlLmN1cnJlbnRWYWx1ZSkpO1xyXG4gICAgdGhpcy5fY29tcG9uZW50SW5zdGFuY2VzLmZvckVhY2goKGNvbXBvbmVudEluc3RhbmNlKSA9PlxyXG4gICAgICB0aGlzLl9zZXRDb21wb25lbnRJbnB1dHMoY29tcG9uZW50SW5zdGFuY2UsIHVwZGF0ZXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBpZCBmb3IgTWV0YWRhdGEgY29kZSBibG9ja3MsIGluIHNwZWNpZmljIGZvcm1hdFxyXG4gICAqIE1ldGFkYXRhIGNvZGUgYmxvY2tzIHdpbGwgd3JhcCBiZSBhZGRlZCBhcm91bmQgcGxhY2Vob2xkZXIgY29udGVudCBhbmQgZWFjaCByZW5kZXJpbmcgY29tcG9uZW50XHJcbiAgICogdG8gYWxsb3cgZm9yIGVkaXRpbmcgaW50ZWdyYXRpb24gaW4gUGFnZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmQgY29kZSBibG9jayB0eXBlIChcIm9wZW5cIiBvciBcImNsb3NlXCIpLiBcIm9wZW5cIiBpcyBhZGRlZCBiZWZvcmUgYW4gZWxlbWVudCwgYW5kIFwiY2xvc2VcIiBhZGRlZCBhZnRlciBvbmUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc/fSByZW5kZXJpbmdJZCByZW5kZXJpbmcgdWlkIHRvIGFwcGx5IGFzIGlkIHRvIGNvZGUgYmxvY2tcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBmb3JtYXR0ZWQgaWQgdmFsdWUgZm9yIGNvZGUgSFRNTCBub2RlXHJcbiAgICovXHJcbiAgZ2V0Q29kZUJsb2NrSWQgPSAoa2luZDogc3RyaW5nLCByZW5kZXJpbmdJZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBpZiAodGhpcy5yZW5kZXJpbmcgJiYga2luZCA9PT0gTWV0YWRhdGFLaW5kLk9wZW4pIHtcclxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJOYW1lID0gdGhpcy5uYW1lO1xyXG4gICAgICBjb25zdCBpZCA9IHJlbmRlcmluZ0lkIHx8IHRoaXMucmVuZGVyaW5nPy51aWQ7XHJcbiAgICAgIGlmICghcmVuZGVyaW5nSWQgJiYgcGxhY2Vob2xkZXJOYW1lKSB7XHJcbiAgICAgICAgbGV0IHBoSWQgPSAnJztcclxuICAgICAgICBmb3IgKGNvbnN0IHBsYWNlaG9sZGVyIG9mIE9iamVjdC5rZXlzKHRoaXMucmVuZGVyaW5nLnBsYWNlaG9sZGVycyB8fCBbXSkpIHtcclxuICAgICAgICAgIGlmIChwbGFjZWhvbGRlck5hbWUgPT09IHBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgIHBoSWQgPSBpZFxyXG4gICAgICAgICAgICAgID8gYCR7cGxhY2Vob2xkZXJOYW1lfV8ke2lkfWBcclxuICAgICAgICAgICAgICA6IGAke3BsYWNlaG9sZGVyTmFtZX1fJHtERUZBVUxUX1BMQUNFSE9MREVSX1VJRH1gO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBwbGFjZWhvbGRlciBpcyBhIGR5bmFtaWMgcGxhY2Vob2xkZXJcclxuICAgICAgICAgIGlmIChpc0R5bmFtaWNQbGFjZWhvbGRlcihwbGFjZWhvbGRlcikpIHtcclxuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IGdldER5bmFtaWNQbGFjZWhvbGRlclBhdHRlcm4ocGxhY2Vob2xkZXIpO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcGxhY2Vob2xkZXIgbWF0Y2hlcyB0aGUgZHluYW1pYyBwbGFjZWhvbGRlciBwYXR0ZXJuXHJcbiAgICAgICAgICAgIGlmIChwYXR0ZXJuLnRlc3QocGxhY2Vob2xkZXJOYW1lKSkge1xyXG4gICAgICAgICAgICAgIHBoSWQgPSBpZCA/IGAke3BsYWNlaG9sZGVyfV8ke2lkfWAgOiBgJHtwbGFjZWhvbGRlcn1fJHtERUZBVUxUX1BMQUNFSE9MREVSX1VJRH1gO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwaElkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBHZXQgcmVuZGVyaW5ncy9jb21wb25lbnRzIHRvIGJlIHJlbmRlcmVkIGZvciBjdXJyZW50IHBsYWNlaG9sZGVyIG5hbWVcclxuICAgKiBDYW4gbW9kaWZ5IHRoZSBpbm5lciBwbGFjZWhvbGRlcnMgY29sbGVjdGlvbiB0byBhZGp1c3QgdG8gdXNpbmcgU1hBIGR5bmFtaWMgcGxhY2Vob2xkZXJzXHJcbiAgICogQHJldHVybnMge0NvbXBvbmVudFJlbmRlcmluZzxDb21wb25lbnRGaWVsZHM+IHwgSHRtbEVsZW1lbnRSZW5kZXJpbmdbXSB8IG51bGx9IExpc3Qgb2YgcmVuZGVyaW5ncyB0byBiZSByZW5kZXJlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0UGxhY2Vob2xkZXIoKSB7XHJcbiAgICBsZXQgcGhOYW1lID0gdGhpcy5uYW1lPy5zbGljZSgpIHx8ICcnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzIChTWEEpIGR5bmFtaWMgcGxhY2Vob2xkZXJzXHJcbiAgICAgKiBGaW5kIGFuZCByZXBsYWNlIHRoZSBtYXRjaGluZyBkeW5hbWljIHBsYWNlaG9sZGVyIGUuZyAnbmFtZU9mQ29udGFpbmVyLXsqfScgd2l0aCB0aGUgcmVxdWVzdGVkIGUuZy4gJ25hbWVPZkNvbnRhaW5lci0xJy5cclxuICAgICAqIEZvciBNZXRhZGF0YSBFZGl0TW9kZSwgd2UgbmVlZCB0byBrZWVwIHRoZSByYXcgcGxhY2Vob2xkZXIgbmFtZSBpbiBwbGFjZS5cclxuICAgICAqL1xyXG4gICAgdGhpcy5yZW5kZXJpbmc/LnBsYWNlaG9sZGVycyAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnJlbmRlcmluZy5wbGFjZWhvbGRlcnMpLmZvckVhY2goKHBsYWNlaG9sZGVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVyblBsYWNlaG9sZGVyID0gaXNEeW5hbWljUGxhY2Vob2xkZXIocGxhY2Vob2xkZXIpXHJcbiAgICAgICAgICA/IGdldER5bmFtaWNQbGFjZWhvbGRlclBhdHRlcm4ocGxhY2Vob2xkZXIpXHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgaWYgKHBhdHRlcm5QbGFjZWhvbGRlciAmJiBwYXR0ZXJuUGxhY2Vob2xkZXIudGVzdChwaE5hbWUpKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YU1vZGUpIHtcclxuICAgICAgICAgICAgcGhOYW1lID0gcGxhY2Vob2xkZXI7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmluZy5wbGFjZWhvbGRlcnMhW3BoTmFtZV0gPSB0aGlzLnJlbmRlcmluZy5wbGFjZWhvbGRlcnMhW3BsYWNlaG9sZGVyXTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVuZGVyaW5nLnBsYWNlaG9sZGVycyFbcGxhY2Vob2xkZXJdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnJlbmRlcmluZyAmJlxyXG4gICAgICB0aGlzLnJlbmRlcmluZy5wbGFjZWhvbGRlcnMgJiZcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5yZW5kZXJpbmcucGxhY2Vob2xkZXJzKS5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyaW5nLnBsYWNlaG9sZGVyc1twaE5hbWVdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRDb21wb25lbnRJbnB1dHMoXHJcbiAgICBjb21wb25lbnRJbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sXHJcbiAgICBpbnB1dHM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9XHJcbiAgKSB7XHJcbiAgICBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZvckVhY2goXHJcbiAgICAgIChbaW5wdXQsIGlucHV0VmFsdWVdKSA9PiAoY29tcG9uZW50SW5zdGFuY2VbaW5wdXRdID0gaW5wdXRWYWx1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdWJzY3JpYmVDb21wb25lbnRPdXRwdXRzKFxyXG4gICAgY29tcG9uZW50SW5zdGFuY2U6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxyXG4gICAgb3V0cHV0czogeyBbazogc3RyaW5nXTogKGV2ZW50VHlwZTogdW5rbm93bikgPT4gdm9pZCB9XHJcbiAgKSB7XHJcbiAgICBPYmplY3Qua2V5cyhvdXRwdXRzKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvdXRwdXQpID0+IGNvbXBvbmVudEluc3RhbmNlW291dHB1dF0gJiYgY29tcG9uZW50SW5zdGFuY2Vbb3V0cHV0XSBpbnN0YW5jZW9mIE9ic2VydmFibGVcclxuICAgICAgKVxyXG4gICAgICAuZm9yRWFjaCgob3V0cHV0KSA9PlxyXG4gICAgICAgIChjb21wb25lbnRJbnN0YW5jZVtvdXRwdXRdIGFzIE9ic2VydmFibGU8dW5rbm93bj4pXHJcbiAgICAgICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gIXRoaXMuZGVzdHJveWVkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUob3V0cHV0c1tvdXRwdXRdKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyKCkge1xyXG4gICAgaWYgKHRoaXMuY2xpZW50T25seSAmJiBpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NvbXBvbmVudEluc3RhbmNlcyA9IFtdO1xyXG4gICAgdGhpcy52aWV3LmNsZWFyKCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnJlbmRlcmluZyAmJiAhdGhpcy5yZW5kZXJpbmdzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMubmFtZSAmJiAhdGhpcy5yZW5kZXJpbmdzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnUGxhY2Vob2xkZXIgbmFtZSB3YXMgbm90IHNwZWNpZmllZCwgYW5kIGV4cGxpY2l0IHJlbmRlcmluZ3MgYXJyYXkgd2FzIG5vdCBwYXNzZWQuIFBsYWNlaG9sZGVyIHJlcXVpcmVzIGVpdGhlciBuYW1lIGFuZCByZW5kZXJpbmcsIG9yIHJlbmRlcmluZ3MuJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyRGF0YTtcclxuICAgIGlmICghcGxhY2Vob2xkZXIpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBQbGFjZWhvbGRlciAnJHt0aGlzLm5hbWV9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBjdXJyZW50IHJlbmRlcmluZyBkYXRhYCxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnJlbmRlcmluZywgbnVsbCwgMilcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHRoZSBwbGFjZWhvbGRlciBpcyBlbXB0eSAoY29udGFpbnMgb25seSByYXcgcmVuZGVyaW5ncyksIHRoZW4gd2UgbWF5IG5lZWQgdG8gdXNlIHRoZSBlbXB0eSB0ZW1wbGF0ZSBpZiBpdCdzIGRlZmluZWRcclxuICAgIGNvbnN0IHBsYWNlaG9sZGVySXNFbXB0eSA9IHBsYWNlaG9sZGVyLmV2ZXJ5KFxyXG4gICAgICAocmVuZGVyaW5nOiBDb21wb25lbnRSZW5kZXJpbmcgfCBIdG1sRWxlbWVudFJlbmRlcmluZykgPT4gaXNSYXdSZW5kZXJpbmcocmVuZGVyaW5nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZW5kZXJFbXB0eVRlbXBsYXRlICYmIHBsYWNlaG9sZGVySXNFbXB0eSkge1xyXG4gICAgICB0aGlzLnZpZXcuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucmVuZGVyRW1wdHlUZW1wbGF0ZS50ZW1wbGF0ZVJlZiwge1xyXG4gICAgICAgIHJlbmRlcmluZ3M6IHBsYWNlaG9sZGVyLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcmllcyA9IGF3YWl0IHRoaXMuY29tcG9uZW50RmFjdG9yeS5nZXRDb21wb25lbnRzKHBsYWNlaG9sZGVyKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBub25HdWFyZGVkID0gYXdhaXQgdGhpcy5ndWFyZFJlc29sdmVyKGZhY3Rvcmllcyk7XHJcbiAgICAgICAgY29uc3Qgd2l0aERhdGEgPSBhd2FpdCB0aGlzLmRhdGFSZXNvbHZlcihub25HdWFyZGVkKTtcclxuICAgICAgICAvLyBub3QgdXNpbmcgaW5kZXggdG8gZW5zdXJlIGNvZGUgYmxvY2tzIGFyZSByZW5kZXJlZCBhdCBjb3JyZWN0IHBvc2l0aW9uc1xyXG4gICAgICAgIHdpdGhEYXRhLmZvckVhY2goKHJlbmRlcmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZXRhZGF0YU1vZGUgJiZcclxuICAgICAgICAgICAgdGhpcy52aWV3LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLm1ldGFkYXRhTm9kZSwge1xyXG4gICAgICAgICAgICAgIGtpbmQ6IE1ldGFkYXRhS2luZC5PcGVuLFxyXG4gICAgICAgICAgICAgIGNocm9tZVR5cGU6ICdyZW5kZXJpbmcnLFxyXG4gICAgICAgICAgICAgIHJlbmRlcmluZ0lkOiAocmVuZGVyaW5nLmZhY3RvcnkuY29tcG9uZW50RGVmaW5pdGlvbiBhcyBDb21wb25lbnRSZW5kZXJpbmcpPy51aWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnJlbmRlckVhY2hUZW1wbGF0ZSAmJiAhaXNSYXdSZW5kZXJpbmcocmVuZGVyaW5nLmZhY3RvcnkuY29tcG9uZW50RGVmaW5pdGlvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGVtcGxhdGVkQ29tcG9uZW50KHJlbmRlcmluZy5mYWN0b3J5LmNvbXBvbmVudERlZmluaXRpb24pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyRW1iZWRkZWRDb21wb25lbnQocmVuZGVyaW5nLmZhY3RvcnksIHJlbmRlcmluZy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLm1ldGFkYXRhTW9kZSAmJlxyXG4gICAgICAgICAgICB0aGlzLnZpZXcuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubWV0YWRhdGFOb2RlLCB7XHJcbiAgICAgICAgICAgICAga2luZDogTWV0YWRhdGFLaW5kLkNsb3NlLFxyXG4gICAgICAgICAgICAgIGNocm9tZVR5cGU6ICdyZW5kZXJpbmcnLFxyXG4gICAgICAgICAgICAgIHJlbmRlcmluZ0lkOiAocmVuZGVyaW5nLmZhY3RvcnkuY29tcG9uZW50RGVmaW5pdGlvbiBhcyBDb21wb25lbnRSZW5kZXJpbmcpPy51aWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkZWQuZW1pdCh0aGlzLm5hbWUpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEpzc0NhbkFjdGl2YXRlUmVkaXJlY3RFcnJvcikge1xyXG4gICAgICAgICAgY29uc3QgcmVkaXJlY3RWYWx1ZSA9IGUucmVkaXJlY3RWYWx1ZTtcclxuICAgICAgICAgIGlmIChyZWRpcmVjdFZhbHVlIGluc3RhbmNlb2YgUmVkaXJlY3RDb21tYW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocmVkaXJlY3RWYWx1ZS5yZWRpcmVjdFRvKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocmVkaXJlY3RWYWx1ZSBpbnN0YW5jZW9mIFVybFRyZWUpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFZhbHVlKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlZGlyZWN0VmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZWRpcmVjdFZhbHVlXSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyZWRpcmVjdFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mYWlsZWQuZW1pdChlIGFzIEVycm9yKTtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYFBsYWNlaG9sZGVyICcke3RoaXMubmFtZX0nIHdhcyBub3QgYWJsZSB0byByZW5kZXIgd2l0aCB0aGUgY3VycmVudCByZW5kZXJpbmcgZGF0YSBhbmQgZXJyb3JgLFxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnJlbmRlcmluZywgbnVsbCwgMiksXHJcbiAgICAgICAgICAgIGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW5kZXJUZW1wbGF0ZWRDb21wb25lbnQocmVuZGVyaW5nOiBDb21wb25lbnRSZW5kZXJpbmcgfCBIdG1sRWxlbWVudFJlbmRlcmluZykge1xyXG4gICAgLy8gdGhlIHJlbmRlci1lYWNoIHRlbXBsYXRlIHRha2VzIGNhcmUgb2YgYWxsIGNvbXBvbmVudCBtYXBwaW5nIGV0Y1xyXG4gICAgLy8gZ2VuZXJhbGx5IHVzaW5nIDxzYy1yZW5kZXItY29tcG9uZW50PiB3aGljaCBpcyBhYm91dCBsaWtlIF9yZW5kZXJFbWJlZGRlZENvbXBvbmVudCgpXHJcbiAgICAvLyBhcyBhIHNlcGFyYXRlIGNvbXBvbmVudFxyXG4gICAgdGhpcy52aWV3LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnJlbmRlckVhY2hUZW1wbGF0ZS50ZW1wbGF0ZVJlZiwge1xyXG4gICAgICByZW5kZXJpbmcsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbmRlckVtYmVkZGVkQ29tcG9uZW50KHJlbmRlcmluZzogQ29tcG9uZW50RmFjdG9yeVJlc3VsdCwgZGF0YTogRGF0YSkge1xyXG4gICAgaWYgKFxyXG4gICAgICAocmVuZGVyaW5nLmNvbXBvbmVudERlZmluaXRpb24gYXMgQ29tcG9uZW50UmVuZGVyaW5nKS5jb21wb25lbnROYW1lID09PVxyXG4gICAgICBjb25zdGFudHMuSElEREVOX1JFTkRFUklOR19OQU1FXHJcbiAgICApIHtcclxuICAgICAgcmVuZGVyaW5nLmNvbXBvbmVudEltcGxlbWVudGF0aW9uID0gdGhpcy5oaWRkZW5SZW5kZXJpbmdDb21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFyZW5kZXJpbmcuY29tcG9uZW50SW1wbGVtZW50YXRpb24pIHtcclxuICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IChyZW5kZXJpbmcuY29tcG9uZW50RGVmaW5pdGlvbiBhcyBDb21wb25lbnRSZW5kZXJpbmcpLmNvbXBvbmVudE5hbWU7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgYFBsYWNlaG9sZGVyICR7dGhpcy5uYW1lfSBjb250YWlucyB1bmtub3duIGNvbXBvbmVudCAke2NvbXBvbmVudE5hbWV9LmAsXHJcbiAgICAgICAgYEVuc3VyZSBjb21wb25lbnQgaXMgbWFwcGVkLCBsaWtlOlxyXG4gICAgICAgIEpzc01vZHVsZS53aXRoQ29tcG9uZW50cyhbXHJcbiAgICAgICAgICB7IG5hbWU6ICcke2NvbXBvbmVudE5hbWV9JywgdHlwZTogJHtjb21wb25lbnROYW1lfUNvbXBvbmVudCB9XHJcbiAgICAgICAgXSlgXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZW5kZXJpbmcuY29tcG9uZW50SW1wbGVtZW50YXRpb24gPSB0aGlzLm1pc3NpbmdDb21wb25lbnRDb21wb25lbnQ7XHJcbiAgICB9XHJcbiAgICAvLyBhcHBseSB0aGUgcGFyZW50IHN0eWxlIGF0dHJpYnV0ZSBfbmdjb250ZW50XHJcbiAgICAvLyB3b3JrLWFyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTIyMTVcclxuICAgIGNvbnN0IGNyZWF0ZWRDb21wb25lbnRSZWYgPSB0aGlzLnZpZXcuY3JlYXRlQ29tcG9uZW50KHJlbmRlcmluZy5jb21wb25lbnRJbXBsZW1lbnRhdGlvbiwge1xyXG4gICAgICBuZ01vZHVsZVJlZjogcmVuZGVyaW5nLmNvbXBvbmVudE1vZHVsZVJlZixcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMucGFyZW50U3R5bGVBdHRyaWJ1dGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgY3JlYXRlZENvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIHRoaXMucGFyZW50U3R5bGVBdHRyaWJ1dGUsXHJcbiAgICAgICAgJydcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZWRDb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICBjb21wb25lbnRJbnN0YW5jZS5yZW5kZXJpbmcgPSByZW5kZXJpbmcuY29tcG9uZW50RGVmaW5pdGlvbjtcclxuICAgIGNvbXBvbmVudEluc3RhbmNlLmRhdGEgPSBkYXRhO1xyXG5cclxuICAgIGlmICh0aGlzLl9pbnB1dHMpIHtcclxuICAgICAgdGhpcy5fc2V0Q29tcG9uZW50SW5wdXRzKGNvbXBvbmVudEluc3RhbmNlLCB0aGlzLl9pbnB1dHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3V0cHV0cykge1xyXG4gICAgICB0aGlzLl9zdWJzY3JpYmVDb21wb25lbnRPdXRwdXRzKGNvbXBvbmVudEluc3RhbmNlLCB0aGlzLm91dHB1dHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY29tcG9uZW50SW5zdGFuY2VzLnB1c2goY29tcG9uZW50SW5zdGFuY2UpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class RawComponent {
|
|
4
|
-
renderer;
|
|
5
|
-
elementRef;
|
|
6
|
-
rendering;
|
|
7
|
-
constructor(renderer, elementRef) {
|
|
8
|
-
this.renderer = renderer;
|
|
9
|
-
this.elementRef = elementRef;
|
|
10
|
-
}
|
|
11
|
-
ngOnInit() {
|
|
12
|
-
const el = this.renderer.createElement(this.rendering.name);
|
|
13
|
-
const contents = this.renderer.createText(this.rendering.contents || '');
|
|
14
|
-
const attributes = this.rendering.attributes;
|
|
15
|
-
for (const attr in attributes) {
|
|
16
|
-
// eslint-disable-next-line no-prototype-builtins
|
|
17
|
-
if (attributes.hasOwnProperty(attr)) {
|
|
18
|
-
const value = attributes[attr];
|
|
19
|
-
this.renderer.setAttribute(el, attr, value || '');
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
this.renderer.appendChild(el, contents);
|
|
23
|
-
const parentNode = this.renderer.parentNode(this.elementRef.nativeElement);
|
|
24
|
-
this.renderer.insertBefore(parentNode, el, this.elementRef.nativeElement);
|
|
25
|
-
parentNode.removeChild(this.elementRef.nativeElement);
|
|
26
|
-
}
|
|
27
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RawComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RawComponent, selector: "sc-raw", inputs: { rendering: "rendering" }, ngImport: i0, template: '', isInline: true });
|
|
29
|
-
}
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RawComponent, decorators: [{
|
|
31
|
-
type: Component,
|
|
32
|
-
args: [{
|
|
33
|
-
selector: 'sc-raw',
|
|
34
|
-
template: '',
|
|
35
|
-
}]
|
|
36
|
-
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { rendering: [{
|
|
37
|
-
type: Input
|
|
38
|
-
}] } });
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Jhdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDOztBQU9oRixNQUFNLE9BQU8sWUFBWTtJQUdIO0lBQTZCO0lBRnhDLFNBQVMsQ0FBdUI7SUFFekMsWUFBb0IsUUFBbUIsRUFBVSxVQUFzQjtRQUFuRCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFHLENBQUM7SUFFM0UsUUFBUTtRQUNOLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDN0MsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM5QixpREFBaUQ7WUFDakQsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7d0dBckJVLFlBQVk7NEZBQVosWUFBWSxrRkFGYixFQUFFOzs0RkFFRCxZQUFZO2tCQUp4QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxRQUFRO29CQUNsQixRQUFRLEVBQUUsRUFBRTtpQkFDYjt1R0FFVSxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHRtbEVsZW1lbnRSZW5kZXJpbmcgfSBmcm9tICdAc2l0ZWNvcmUtanNzL3NpdGVjb3JlLWpzcy9sYXlvdXQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzYy1yYXcnLFxyXG4gIHRlbXBsYXRlOiAnJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcmVuZGVyaW5nOiBIdG1sRWxlbWVudFJlbmRlcmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQodGhpcy5yZW5kZXJpbmcubmFtZSk7XHJcbiAgICBjb25zdCBjb250ZW50cyA9IHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dCh0aGlzLnJlbmRlcmluZy5jb250ZW50cyB8fCAnJyk7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5yZW5kZXJpbmcuYXR0cmlidXRlcztcclxuICAgIGZvciAoY29uc3QgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcclxuICAgICAgaWYgKGF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0cikpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZXNbYXR0cl07XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWwsIGF0dHIsIHZhbHVlIHx8ICcnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZWwsIGNvbnRlbnRzKTtcclxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLnJlbmRlcmVyLnBhcmVudE5vZGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgZWwsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxufVxyXG4iXX0=
|