@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.
Files changed (85) hide show
  1. package/LICENSE.txt +202 -202
  2. package/README.md +10 -10
  3. package/angular.json +47 -48
  4. package/dist/README.md +10 -10
  5. package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs +228 -393
  6. package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs.map +1 -1
  7. package/dist/index.d.ts +640 -3
  8. package/ng-package.json +13 -13
  9. package/package.json +22 -22
  10. package/tsconfig.json +10 -10
  11. package/tsconfig.spec.json +18 -18
  12. package/typings/README.md +2 -2
  13. package/dist/components/base-field.directive.d.ts +0 -39
  14. package/dist/components/date.directive.d.ts +0 -27
  15. package/dist/components/default-empty-image-field-editing-placeholder.component.d.ts +0 -8
  16. package/dist/components/default-empty-text-field-editing-placeholder.component.d.ts +0 -8
  17. package/dist/components/editframe.component.d.ts +0 -22
  18. package/dist/components/editing-scripts.component.d.ts +0 -16
  19. package/dist/components/field-metadata-marker.component.d.ts +0 -12
  20. package/dist/components/file.directive.d.ts +0 -17
  21. package/dist/components/form.component.d.ts +0 -48
  22. package/dist/components/generic-link.directive.d.ts +0 -24
  23. package/dist/components/hidden-rendering.component.d.ts +0 -6
  24. package/dist/components/image.directive.d.ts +0 -43
  25. package/dist/components/link.directive.d.ts +0 -41
  26. package/dist/components/missing-component.component.d.ts +0 -7
  27. package/dist/components/placeholder-loading.directive.d.ts +0 -8
  28. package/dist/components/placeholder.component.d.ts +0 -82
  29. package/dist/components/raw.component.d.ts +0 -12
  30. package/dist/components/render-component.component.d.ts +0 -33
  31. package/dist/components/render-each.directive.d.ts +0 -8
  32. package/dist/components/render-empty.directive.d.ts +0 -8
  33. package/dist/components/rendering-field-sxa.d.ts +0 -40
  34. package/dist/components/rendering-field.d.ts +0 -39
  35. package/dist/components/rendering.d.ts +0 -5
  36. package/dist/components/rich-text.directive.d.ts +0 -25
  37. package/dist/components/router-link.directive.d.ts +0 -23
  38. package/dist/components/text.directive.d.ts +0 -23
  39. package/dist/esm2022/components/base-field.directive.mjs +0 -56
  40. package/dist/esm2022/components/date.directive.mjs +0 -82
  41. package/dist/esm2022/components/default-empty-image-field-editing-placeholder.component.mjs +0 -26
  42. package/dist/esm2022/components/default-empty-text-field-editing-placeholder.component.mjs +0 -17
  43. package/dist/esm2022/components/editframe.component.mjs +0 -101
  44. package/dist/esm2022/components/editing-scripts.component.mjs +0 -59
  45. package/dist/esm2022/components/field-metadata-marker.component.mjs +0 -36
  46. package/dist/esm2022/components/file.directive.mjs +0 -49
  47. package/dist/esm2022/components/form.component.mjs +0 -125
  48. package/dist/esm2022/components/generic-link.directive.mjs +0 -75
  49. package/dist/esm2022/components/hidden-rendering.component.mjs +0 -20
  50. package/dist/esm2022/components/image.directive.mjs +0 -173
  51. package/dist/esm2022/components/link.directive.mjs +0 -153
  52. package/dist/esm2022/components/missing-component.component.mjs +0 -31
  53. package/dist/esm2022/components/placeholder-loading.directive.mjs +0 -17
  54. package/dist/esm2022/components/placeholder.component.mjs +0 -459
  55. package/dist/esm2022/components/raw.component.mjs +0 -39
  56. package/dist/esm2022/components/render-component.component.mjs +0 -106
  57. package/dist/esm2022/components/render-each.directive.mjs +0 -17
  58. package/dist/esm2022/components/render-empty.directive.mjs +0 -17
  59. package/dist/esm2022/components/rendering-field-sxa.mjs +0 -2
  60. package/dist/esm2022/components/rendering-field.mjs +0 -2
  61. package/dist/esm2022/components/rendering.mjs +0 -8
  62. package/dist/esm2022/components/rich-text.directive.mjs +0 -83
  63. package/dist/esm2022/components/router-link.directive.mjs +0 -57
  64. package/dist/esm2022/components/text.directive.mjs +0 -76
  65. package/dist/esm2022/lib.module.mjs +0 -173
  66. package/dist/esm2022/public_api.mjs +0 -32
  67. package/dist/esm2022/services/data-resolver-factory.mjs +0 -60
  68. package/dist/esm2022/services/guard-resolver-factory.mjs +0 -98
  69. package/dist/esm2022/services/jss-can-activate-error.mjs +0 -15
  70. package/dist/esm2022/services/jss-component-factory.service.mjs +0 -103
  71. package/dist/esm2022/services/jss-state.service.mjs +0 -44
  72. package/dist/esm2022/services/placeholder.token.mjs +0 -28
  73. package/dist/esm2022/services/shared.token.mjs +0 -6
  74. package/dist/esm2022/sitecore-jss-sitecore-jss-angular.mjs +0 -5
  75. package/dist/esm2022/utils.mjs +0 -17
  76. package/dist/lib.module.d.ts +0 -50
  77. package/dist/public_api.d.ts +0 -33
  78. package/dist/services/data-resolver-factory.d.ts +0 -13
  79. package/dist/services/guard-resolver-factory.d.ts +0 -11
  80. package/dist/services/jss-can-activate-error.d.ts +0 -10
  81. package/dist/services/jss-component-factory.service.d.ts +0 -27
  82. package/dist/services/jss-state.service.d.ts +0 -36
  83. package/dist/services/placeholder.token.d.ts +0 -65
  84. package/dist/services/shared.token.d.ts +0 -12
  85. 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=