ngx-rendering-service-lib 0.0.66860 → 0.0.66862

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.
@@ -6,7 +6,7 @@ const ASSET_PATH = "public/asset"
6
6
  const DB_NAME = "Edu-Sharing-Rendering"
7
7
  const DB_STORE = "SessionIds"
8
8
  /** @type {IDBDatabase} */
9
- let db
9
+ let eduServiceWorkerDb
10
10
 
11
11
  self.addEventListener('install', async function (event) {
12
12
  // Skip the 'waiting' lifecycle phase, to go directly from 'installed' to 'activated', even if
@@ -109,7 +109,7 @@ const handleStandardRequest = async (request) => {
109
109
  */
110
110
  const getDb = () => {
111
111
  return new Promise((resolve, reject) => {
112
- if (db !== undefined) {
112
+ if (eduServiceWorkerDb !== undefined) {
113
113
  resolve("success")
114
114
  }
115
115
  if (!indexedDB) {
@@ -125,7 +125,7 @@ const getDb = () => {
125
125
  newDb.createObjectStore(DB_STORE, {keyPath: "id"})
126
126
  }
127
127
  request.onsuccess = () => {
128
- db = request.result
128
+ eduServiceWorkerDb = request.result
129
129
  resolve("success")
130
130
  }
131
131
  })
@@ -138,7 +138,7 @@ const getDb = () => {
138
138
  */
139
139
  const storeSessionIdToDb = (sessionId) => {
140
140
  return new Promise((resolve, reject) => {
141
- const transaction = db.transaction(DB_STORE, "readwrite")
141
+ const transaction = eduServiceWorkerDb.transaction(DB_STORE, "readwrite")
142
142
  const store = transaction.objectStore(DB_STORE)
143
143
  store.put({id: 1, sessionId: sessionId})
144
144
  transaction.oncomplete = () => {
@@ -168,7 +168,7 @@ const storeSessionIdToDb = (sessionId) => {
168
168
  const retrieveSessionIdFromDb = () => {
169
169
  return new Promise((resolve, reject) => {
170
170
  let result = ""
171
- const transaction = db.transaction(DB_STORE, "readonly")
171
+ const transaction = eduServiceWorkerDb.transaction(DB_STORE, "readonly")
172
172
  const store = transaction.objectStore(DB_STORE)
173
173
  const idQuery = store.get(1)
174
174
  idQuery.onsuccess = () => {
@@ -1,4 +1,4 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Inject, Input, Optional } from '@angular/core';
2
2
  import { RenderingModule } from './rendering.module';
3
3
  import { BehaviorSubject, debounceTime, firstValueFrom, interval, Subject, switchMap, takeUntil } from 'rxjs';
4
4
  import { RenderingApiModule } from './rendering-api.module';
@@ -8,19 +8,23 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
8
8
  import { filter } from 'rxjs/operators';
9
9
  import { TranslateService } from '@ngx-translate/core';
10
10
  import { EduSharingUiModule } from 'ngx-edu-sharing-ui';
11
+ import { RENDERING_SERVICE_LIB_CONFIG } from "../rendering-service-lib-configuration";
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "ngx-rendering-service-api";
13
14
  import * as i2 from "../module-info.service";
14
15
  import * as i3 from "@angular/common";
15
16
  import * as i4 from "@angular/material/progress-spinner";
16
17
  import * as i5 from "@angular/material/progress-bar";
18
+ import * as i6 from "../rendering-service-lib-configuration";
17
19
  export class RenderComponent {
18
- constructor(renderControllerService, jobInfoControllerService, moduleInfoService, platformLocation) {
20
+ constructor(renderControllerService, jobInfoControllerService, moduleInfoService, platformLocation, configuration) {
19
21
  this.renderControllerService = renderControllerService;
20
22
  this.jobInfoControllerService = jobInfoControllerService;
21
23
  this.moduleInfoService = moduleInfoService;
22
24
  this.platformLocation = platformLocation;
25
+ this.configuration = configuration;
23
26
  this.activateServiceWorker = true;
27
+ this.assetUrl = '';
24
28
  this.serviceWorkerReady = false;
25
29
  this.loadData = new Subject();
26
30
  this.renderData$ = new BehaviorSubject(null);
@@ -96,6 +100,10 @@ export class RenderComponent {
96
100
  this.finished.next();
97
101
  }
98
102
  async ngOnInit() {
103
+ if (this.assetUrl !== '') {
104
+ console.info("setting assetUrl to: " + this.assetUrl + "");
105
+ this.configuration.assetsUrl = this.assetUrl;
106
+ }
99
107
  // await firstValueFrom(this.translationsService.initialize())
100
108
  if (this.activateServiceWorker && 'serviceWorker' in navigator) {
101
109
  const reg = await navigator.serviceWorker.getRegistrations();
@@ -223,8 +231,8 @@ export class RenderComponent {
223
231
  progress: progress
224
232
  });
225
233
  }
226
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RenderComponent, deps: [{ token: i1.RenderControllerWrapperService }, { token: i1.JobInfoControllerService }, { token: i2.ModuleInfoService }, { token: i3.PlatformLocation }], target: i0.ɵɵFactoryTarget.Component }); }
227
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: RenderComponent, isStandalone: true, selector: "rs-root", inputs: { request: "request", node: "node", serviceWorkerUrl: "serviceWorkerUrl", activateServiceWorker: "activateServiceWorker" }, providers: [
234
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RenderComponent, deps: [{ token: i1.RenderControllerWrapperService }, { token: i1.JobInfoControllerService }, { token: i2.ModuleInfoService }, { token: i3.PlatformLocation }, { token: RENDERING_SERVICE_LIB_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: RenderComponent, isStandalone: true, selector: "rs-root", inputs: { request: "request", node: "node", serviceWorkerUrl: "serviceWorkerUrl", activateServiceWorker: "activateServiceWorker", assetUrl: "assetUrl" }, providers: [
228
236
  TranslateService
229
237
  ], usesOnChanges: true, ngImport: i0, template: "<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:20px;padding:10px 30px}.module{overflow:auto;display:flex;flex-grow:1;height:auto;border:1px solid #aaa;padding:20px}.module rs-module-image,.module rs-module-video{width:100%}.module .progress{display:flex;justify-content:center;flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: RenderingApiModule }, { kind: "ngmodule", type: RenderingModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: EduSharingApiModule }, { kind: "ngmodule", type: EduSharingUiModule }], deferBlockDependencies: [() => [import("./module/image/image.component").then(m => m.ImageComponent)], () => [import("./module/video/video.component").then(m => m.VideoComponent)], () => [import("./module/pdf/pdf.component").then(m => m.PdfComponent)], () => [import("./module/eduhtml/eduHtml.component").then(m => m.EduHtmlComponent)], () => [import("./module/audio/audio.component").then(m => m.AudioComponent)], () => [import("./module/binder/binder.component").then(m => m.BinderComponent)], () => [import("./module/ddb/ddb.component").then(m => m.DdbComponent)], () => [import("./module/default/default.component").then(m => m.DefaultComponent)], () => [import("./module/url/url.component").then(m => m.UrlComponent)], () => [import("./module/error/error.component").then(m => m.ErrorComponent)]] }); }
230
238
  }
@@ -250,7 +258,12 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.2.6", ng
250
258
  ], providers: [
251
259
  TranslateService
252
260
  ], template: "<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:20px;padding:10px 30px}.module{overflow:auto;display:flex;flex-grow:1;height:auto;border:1px solid #aaa;padding:20px}.module rs-module-image,.module rs-module-video{width:100%}.module .progress{display:flex;justify-content:center;flex-grow:1}\n"] }]
253
- }], ctorParameters: () => [{ type: i1.RenderControllerWrapperService }, { type: i1.JobInfoControllerService }, { type: i2.ModuleInfoService }, { type: i3.PlatformLocation }], propDecorators: { request: [{
261
+ }], ctorParameters: () => [{ type: i1.RenderControllerWrapperService }, { type: i1.JobInfoControllerService }, { type: i2.ModuleInfoService }, { type: i3.PlatformLocation }, { type: i6.RenderingServiceLibConfiguration, decorators: [{
262
+ type: Optional
263
+ }, {
264
+ type: Inject,
265
+ args: [RENDERING_SERVICE_LIB_CONFIG]
266
+ }] }], propDecorators: { request: [{
254
267
  type: Input
255
268
  }], node: [{
256
269
  type: Input
@@ -258,5 +271,7 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.2.6", ng
258
271
  type: Input
259
272
  }], activateServiceWorker: [{
260
273
  type: Input
274
+ }], assetUrl: [{
275
+ type: Input
261
276
  }] } }) });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsS0FBSyxFQUE2QyxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFRbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsbUJBQW1CLEVBQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQU1wRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFPdEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUErQnRELE1BQU0sT0FBTyxlQUFlO0lBWTFCLFlBQ1UsdUJBQXVELEVBQ3ZELHdCQUFrRCxFQUNsRCxpQkFBb0MsRUFDcEMsZ0JBQWtDO1FBSGxDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBZ0M7UUFDdkQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFabkMs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QUMsSUFBSSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDNUIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0EzTlUsZUFBZTtrR0FBZixlQUFlLDBMQU5mO1lBQ1QsZ0JBQWdCO1NBQ2pCLCtDQ3hESCxzeEdBMkVBLDBWRHRDSSxrQkFBa0IsOEJBQ2xCLGVBQWUsMGhCQUdmLHdCQUF3QixrT0FDeEIsb0JBQW9CLHdOQVFwQixtQkFBbUIsOEJBQ25CLGtCQUFrQjs7Z0dBU1QsZUFBZTtzQkEzQjNCLFNBQVM7bUNBQ0UsU0FBUyxjQUNQLElBQUksV0FDUDs0QkFDUCxrQkFBa0I7NEJBQ2xCLGVBQWU7NEJBQ2YsY0FBYzs0QkFDZCxjQUFjOzRCQUNkLHdCQUF3Qjs0QkFDeEIsb0JBQW9COzRCQUNwQixZQUFZOzRCQUNaLFlBQVk7NEJBQ1osZ0JBQWdCOzRCQUNoQixnQkFBZ0I7NEJBQ2hCLGNBQWM7NEJBQ2QsZUFBZTs0QkFDZixZQUFZOzRCQUNaLG1CQUFtQjs0QkFDbkIsa0JBQWtCOzRCQUNsQixjQUFjO3lCQUNmLGFBQ1U7NEJBQ1QsZ0JBQWdCO3lCQUNqQjs2TUFLUSxPQUFPOzBCQUFmLEtBQUs7b0JBQ0csSUFBSTswQkFBWixLQUFLO29CQUNHLGdCQUFnQjswQkFBeEIsS0FBSztvQkFDRyxxQkFBcUI7MEJBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVuZGVyaW5nTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy5tb2R1bGUnO1xuaW1wb3J0IHtcbiAgSm9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLFxuICBKb2JJbmZvUmVwbHksXG4gIFJlbmRlckNvbnRyb2xsZXJXcmFwcGVyU2VydmljZSxcbiAgUmVuZGVyRGF0YVJlcXVlc3RXaXRoVG9rZW4sXG4gIFJlbmRlckRhdGFSZXNwb25zZVxufSBmcm9tICduZ3gtcmVuZGVyaW5nLXNlcnZpY2UtYXBpJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpcnN0VmFsdWVGcm9tLCBpbnRlcnZhbCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJbWFnZUNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7UmVuZGVyaW5nQXBpTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy1hcGkubW9kdWxlJztcbmltcG9ydCB7VmlkZW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3ZpZGVvL3ZpZGVvLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge0VkdVNoYXJpbmdBcGlNb2R1bGUsIE5vZGV9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7QXNzZXRTdGF0ZUl0ZW0sIFJlbmRlckRhdGF9IGZyb20gJy4vZHRvL1JlbmRlckRhdGEnO1xuaW1wb3J0IHtQZGZDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3BkZi9wZGYuY29tcG9uZW50JztcbmltcG9ydCB7VXJsQ29tcG9uZW50fSBmcm9tICcuL21vZHVsZS91cmwvdXJsLmNvbXBvbmVudCc7XG5pbXBvcnQge0VkdUh0bWxDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2VkdWh0bWwvZWR1SHRtbC5jb21wb25lbnQnO1xuaW1wb3J0IHtNb2R1bGVJbmZvU2VydmljZX0gZnJvbSAnLi4vbW9kdWxlLWluZm8uc2VydmljZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQbGF0Zm9ybUxvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtEZWZhdWx0Q29tcG9uZW50fSBmcm9tICcuL21vZHVsZS9kZWZhdWx0L2RlZmF1bHQuY29tcG9uZW50JztcbmltcG9ydCB7RnJvbnRlbmRNb2R1bGVDb25maWd9IGZyb20gJy4vZHRvL0Zyb250ZW5kTW9kdWxlQ29uZmlnJztcbmltcG9ydCB7QXVkaW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2F1ZGlvL2F1ZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQge0JpbmRlckNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvYmluZGVyL2JpbmRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtEZGJDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2RkYi9kZGIuY29tcG9uZW50JztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0VkdVNoYXJpbmdVaU1vZHVsZX0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLXVpJztcbmltcG9ydCB7RXJyb3JDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2Vycm9yL2Vycm9yLmNvbXBvbmVudCc7XG5pbXBvcnQge1JFTkRFUklOR19TRVJWSUNFX0xJQl9DT05GSUcsIFJlbmRlcmluZ1NlcnZpY2VMaWJDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vcmVuZGVyaW5nLXNlcnZpY2UtbGliLWNvbmZpZ3VyYXRpb25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnMtcm9vdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZW5kZXJpbmdBcGlNb2R1bGUsXG4gICAgUmVuZGVyaW5nTW9kdWxlLFxuICAgIEltYWdlQ29tcG9uZW50LFxuICAgIFZpZGVvQ29tcG9uZW50LFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBQZGZDb21wb25lbnQsXG4gICAgVXJsQ29tcG9uZW50LFxuICAgIEVkdUh0bWxDb21wb25lbnQsXG4gICAgRGVmYXVsdENvbXBvbmVudCxcbiAgICBBdWRpb0NvbXBvbmVudCxcbiAgICBCaW5kZXJDb21wb25lbnQsXG4gICAgRGRiQ29tcG9uZW50LFxuICAgIEVkdVNoYXJpbmdBcGlNb2R1bGUsXG4gICAgRWR1U2hhcmluZ1VpTW9kdWxlLFxuICAgIEVycm9yQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmFuc2xhdGVTZXJ2aWNlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW5kZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcmVuZGVyLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBSZW5kZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHJlcXVlc3Q6IFJlbmRlckRhdGFSZXF1ZXN0V2l0aFRva2VuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBub2RlOiBOb2RlIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzZXJ2aWNlV29ya2VyVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGFjdGl2YXRlU2VydmljZVdvcmtlcjogYm9vbGVhbiA9IHRydWU7XG4gIHNlcnZpY2VXb3JrZXJSZWFkeSA9IGZhbHNlO1xuICBsb2FkRGF0YSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlbmRlckRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZW5kZXJEYXRhIHwgbnVsbD4obnVsbCk7XG4gIGZpbmlzaGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgc29tZUJ1dE5vdEFsbEZpbmlzaGVkID0gbmV3IFN1YmplY3Q8Qm9vbGVhbj4oKVxuICBwcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgbW9kdWxlOiBzdHJpbmcsIHByb2dyZXNzPzogbnVtYmVyIH0gfCBudWxsPihudWxsKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlckNvbnRyb2xsZXJTZXJ2aWNlOiBSZW5kZXJDb250cm9sbGVyV3JhcHBlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBqb2JJbmZvQ29udHJvbGxlclNlcnZpY2U6IEpvYkluZm9Db250cm9sbGVyU2VydmljZSxcbiAgICBwcml2YXRlIG1vZHVsZUluZm9TZXJ2aWNlOiBNb2R1bGVJbmZvU2VydmljZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtTG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXG4gICkge1xuICAgIHRoaXMubG9hZERhdGEucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLm5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlcnZpY2VXb3JrZXJSZWFkeSksXG4gICAgICBkZWJvdW5jZVRpbWUoMTApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgLy8gc3Vic2NyaWJlIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrTW9kdWxlKClcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogYXN5bmMgKGZyb250ZW5kTW9kdWxlKSA9PiB7XG4gICAgICAgIC8vIE5vIGZ1cnRoZXIgY2FsbHMgdG8gcnMyIG5lY2Vzc2FyeSBpZiB3ZSBoYXZlIGEgZnJvbnRlbmQgb25seSBtb2R1bGVcbiAgICAgICAgaWYgKGZyb250ZW5kTW9kdWxlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgIG1vZHVsZTogZnJvbnRlbmRNb2R1bGUubW9kdWxlLFxuICAgICAgICAgICAgZnJvbnRlbmRNb2R1bGVDb25maWc6IGZyb250ZW5kTW9kdWxlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgICAgICAgIHRoaXMuZmluaXNoZWQubmV4dCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclJlc3BvbnNlRGF0YSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmVuZGVyQ29udHJvbGxlclNlcnZpY2UuZ2V0UmVuZGVyRGF0YVRva2VuKHRoaXMucmVxdWVzdCEhKSlcbiAgICAgICAgICAgIC8vIENhc2UgMTogbm8gam9iIHJldHVybmVkID0+IG5vIHBvbGxpbmcgbmVlZGVkXG4gICAgICAgICAgICBpZiAocmVuZGVyUmVzcG9uc2VEYXRhLmpvYklkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVuZGVyaW5nUmVzcG9uc2VXaXRob3V0Sm9iKHJlbmRlclJlc3BvbnNlRGF0YSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MkLm5leHQoe21vZHVsZTogcmVuZGVyUmVzcG9uc2VEYXRhLm1vZHVsZSA/PyAnJ30pO1xuICAgICAgICAgICAgICBpbnRlcnZhbCg1MDApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZmluaXNoZWQpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmpvYkluZm9Db250cm9sbGVyU2VydmljZS5nZXRKb2JJbmZvKHtqb2JJZDogcmVuZGVyUmVzcG9uc2VEYXRhLmpvYklkISF9KS5waXBlKCkpLFxuICAgICAgICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKGpvYkluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFNvbWUsIGJ1dCBub3QgYWxsLCBqb2JzIGFyZSBpbiBhIGZpbmFsIHN0YXR1cyAodGhpcyBtZWFucyBzb21lIGFyZSBzdGlsbCBRVUVVRUQgb3IgUFJPQ0VTU0lORylcbiAgICAgICAgICAgICAgICAgIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnRklOSVNIRUQnKSAmJiBqb2JJbmZvLnN0YXR1cyAhPT0gJ0ZJTklTSEVEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUpvYkluZm9XaXRoU3ViSm9ic0luUHJvZ3Jlc3MocmVuZGVyUmVzcG9uc2VEYXRhLCBqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgICAvLyBtYWluIGpvYiBmaW5pc2hlZCBvciBwYXJ0aWFsbHkgZmFpbGVkXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpvYkluZm8uc3RhdHVzID09PSAnRklOSVNIRUQnIHx8IGpvYkluZm8uc3RhdHVzID09PSAnUEFSVElBTExZX0ZBSUxFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hlZE9yUGFydGlhbEpvYkluZm8ocmVuZGVyUmVzcG9uc2VEYXRhLCBqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgICAvLyBNYWluIGpvYiBmYWlsZWQgPT4gbm8gbW9kdWxlIGJ1dCBlcnJvciBwYWdlXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpvYkluZm8uc3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZE1haW5Kb2Ioam9iSW5mbylcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIGZpbmlzaGVkIGpvYnMgLT4gc2hvdyBlaXRoZXIgb25lIHByb2dyZXNzIGJhciB3aXRoIHJhY2UgbGVhZGVyIChwcm9ncmVzcyAwLTEwMClcbiAgICAgICAgICAgICAgICAgICAgLy8gb3IgcXVldWUgcG9zaXRpb24gKHByb2dyZXNzICgtaW5mLC0xXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNYWluSm9iV2l0aE5vU3ViSm9iSW5GaW5hbFN0YXR1cyhqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXBpRXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFwaUVycm9yKGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVBcGlFcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUFwaUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBjb25zdCBwdWJsaWNNZXNzYWdlID0gZXJyb3IuZXJyb3IudXNlck1lc3NhZ2UgPz8gJ0dFTkVSSUNfRVJST1JfTUVTU0FHRSdcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiAnRVJST1InLFxuICAgICAgcHVibGljRXJyb3JNZXNzYWdlOiBwdWJsaWNNZXNzYWdlXG4gICAgfVxuICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgIHRoaXMuZmluaXNoZWQubmV4dCgpXG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAvLyBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnRyYW5zbGF0aW9uc1NlcnZpY2UuaW5pdGlhbGl6ZSgpKVxuICAgIGlmICh0aGlzLmFjdGl2YXRlU2VydmljZVdvcmtlciAmJiAnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICBjb25zdCByZWcgPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5nZXRSZWdpc3RyYXRpb25zKCk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChyZWc/Lm1hcCgocjogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbikgPT4gci51bnJlZ2lzdGVyKCkpKTtcbiAgICAgIGNvbnN0IHNlcnZpY2VXb3JrZXJVcmwgPSB0aGlzLnNlcnZpY2VXb3JrZXJVcmwgPz8gKHRoaXMucGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSArICdlZHUtc2VydmljZS13b3JrZXIuanMnKTtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zZXJ2aWNlV29ya2VyVXJsID8gJy8nIDogdGhpcy5wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpO1xuICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoc2VydmljZVdvcmtlclVybCwge1xuICAgICAgICBzY29wZTogc2NvcGVcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlZ2lzdHJhdGlvbi53YWl0aW5nKSB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbi53YWl0aW5nLnBvc3RNZXNzYWdlKHt0eXBlOiAnU0tJUF9XQUlUSU5HJ30pO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlV29ya2VyUmVhZHkgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkRGF0YS5uZXh0KCk7XG4gICAgICByZWdpc3RyYXRpb24ub251cGRhdGVmb3VuZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3V29ya2VyID0gcmVnaXN0cmF0aW9uLmluc3RhbGxpbmc7XG4gICAgICAgIGlmIChuZXdXb3JrZXIpIHtcbiAgICAgICAgICBuZXdXb3JrZXIub25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdXb3JrZXIuc3RhdGUgPT09ICdpbnN0YWxsZWQnKSB7XG4gICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgbmV3V29ya2VyLnBvc3RNZXNzYWdlKHt0eXBlOiAnU0tJUF9XQUlUSU5HJ30pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRyb2xsZXJjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuaW5mbygnU2VydmljZSBXb3JrZXIgY29udHJvbGxpbmcgdGhpcyBwYWdlLicpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yICYmIHRoaXMuYWN0aXZhdGVTZXJ2aWNlV29ya2VyKXtcbiAgICAgICAgY29uc29sZS53YXJuKCdTZXJ2aWNlIHdvcmtlciBBUEkgbm90IGF2YWlsYWJsZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKF86IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmxvYWREYXRhLm5leHQoKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrTW9kdWxlKCk6IFByb21pc2U8RnJvbnRlbmRNb2R1bGVDb25maWcgfCBudWxsPiB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLm1vZHVsZUluZm9TZXJ2aWNlLmlzQXZhaWxhYmxlQmFja2VuZE9iamVjdCh0aGlzLm5vZGUpKSB7XG4gICAgICBpZiAodGhpcy5ub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlSW5mb1NlcnZpY2UuZ2V0RnJvbnRlbmRNb2R1bGVTZXR0aW5nKHRoaXMubm9kZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB7bW9kdWxlOiAnZGVmYXVsdCcsIHVybE1vZHVsZUNvbmZpZzogbnVsbH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSZW5kZXJpbmdSZXNwb25zZVdpdGhvdXRKb2IocmVuZGVyRGF0YVJlc3BvbnNlOiBSZW5kZXJEYXRhUmVzcG9uc2UpIHtcbiAgICBjb25zdCBpdGVtcyA9IHJlbmRlckRhdGFSZXNwb25zZS5vYmplY3RMaW5rcz8ubWFwKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgYXNzZXRJdGVtOiBBc3NldFN0YXRlSXRlbSA9IHtcbiAgICAgICAgbGluazogaXRlbS5saW5rLFxuICAgICAgICBwcm9ncmVzczogMTAwLFxuICAgICAgICBoZWlnaHQ6IGl0ZW0uaGVpZ2h0LFxuICAgICAgICB3aWR0aDogaXRlbS53aWR0aCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiAnRklOSVNIRUQnXG4gICAgICB9XG4gICAgICByZXR1cm4gYXNzZXRJdGVtXG4gICAgfSlcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiByZW5kZXJEYXRhUmVzcG9uc2UubW9kdWxlID8/ICcnLFxuICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgfVxuICAgIHJlbmRlckRhdGFSZXNwb25zZS5vYmplY3RMaW5rcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKTtcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKTtcbiAgfVxuXG4gIGhhbmRsZUpvYkluZm9XaXRoU3ViSm9ic0luUHJvZ3Jlc3MocmVuZGVyRGF0YVJlc3BvbnNlOiBSZW5kZXJEYXRhUmVzcG9uc2UsIGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGNvbnN0IGl0ZW1zID0gam9iSW5mby5qb2JzLm1hcChzdWJKb2IgPT4ge1xuICAgICAgY29uc3QgYXNzZXRJdGVtOiBBc3NldFN0YXRlSXRlbSA9IHtcbiAgICAgICAgbGluazogc3ViSm9iLm9iamVjdExpbms/LmxpbmsgPz8gJycsXG4gICAgICAgIHByb2dyZXNzOiBzdWJKb2Iuc3RhdHVzICE9PSAnUVVFVUVEJyA/IHN1YkpvYi5wcm9ncmVzcyA6IC0oc3ViSm9iLnByb2dyZXNzICsgMSksXG4gICAgICAgIGhlaWdodDogc3ViSm9iLm9iamVjdExpbms/LmhlaWdodCA/PyBzdWJKb2IucXVhbGl0eSxcbiAgICAgICAgd2lkdGg6IHN1YkpvYi5vYmplY3RMaW5rPy53aWR0aCA/PyAwLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogc3ViSm9iLmFkZGl0aW9uYWxEYXRhLFxuICAgICAgICBzdGF0dXM6IHN1YkpvYi5zdGF0dXMsXG4gICAgICB9XG4gICAgICByZXR1cm4gYXNzZXRJdGVtXG4gICAgfSlcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiByZW5kZXJEYXRhUmVzcG9uc2UubW9kdWxlID8/ICcnLFxuICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgfVxuICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgIHRoaXMuc29tZUJ1dE5vdEFsbEZpbmlzaGVkLm5leHQodHJ1ZSlcbiAgfVxuXG4gIGhhbmRsZUZpbmlzaGVkT3JQYXJ0aWFsSm9iSW5mbyhyZW5kZXJEYXRhUmVzcG9uc2U6IFJlbmRlckRhdGFSZXNwb25zZSwgam9iSW5mbzogSm9iSW5mb1JlcGx5KSB7XG4gICAgY29uc3QgaXRlbXMgPSBqb2JJbmZvLmpvYnMubWFwKHN1YkpvYiA9PiB7XG4gICAgICBjb25zdCBhc3NldEl0ZW06IEFzc2V0U3RhdGVJdGVtID0ge1xuICAgICAgICBsaW5rOiBzdWJKb2Iub2JqZWN0TGluaz8ubGluayA/PyAnJyxcbiAgICAgICAgcHJvZ3Jlc3M6IHN1YkpvYi5wcm9ncmVzcyxcbiAgICAgICAgaGVpZ2h0OiBzdWJKb2Iub2JqZWN0TGluaz8uaGVpZ2h0ID8/IHN1YkpvYi5xdWFsaXR5LFxuICAgICAgICB3aWR0aDogc3ViSm9iLm9iamVjdExpbms/LndpZHRoID8/IDAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiBzdWJKb2IuYWRkaXRpb25hbERhdGEsXG4gICAgICAgIHB1YmxpY0Vycm9yTWVzc2FnZTogc3ViSm9iLmVycm9yPy51c2VyTWVzc2FnZSxcbiAgICAgICAgc3RhdHVzOnN1YkpvYi5zdGF0dXMsXG4gICAgICB9XG4gICAgICByZXR1cm4gYXNzZXRJdGVtXG4gICAgfSlcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiByZW5kZXJEYXRhUmVzcG9uc2UubW9kdWxlID8/ICcnLFxuICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgfVxuICAgIHRoaXMucmVuZGVyRGF0YSQubmV4dChkYXRhKVxuICAgIHRoaXMuZmluaXNoZWQubmV4dCgpXG4gIH1cblxuICBoYW5kbGVGYWlsZWRNYWluSm9iKGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGNvbnN0IGRhdGE6IFJlbmRlckRhdGEgPSB7XG4gICAgICBtb2R1bGU6ICdFUlJPUicsXG4gICAgICBwdWJsaWNFcnJvck1lc3NhZ2U6IGpvYkluZm8uZXJyb3JNZXNzYWdlPy51c2VyTWVzc2FnZSA/PyAnR0VORVJJQ19FUlJPUl9NRVNTQUdFJ1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKVxuICB9XG5cbiAgaGFuZGxlTWFpbkpvYldpdGhOb1N1YkpvYkluRmluYWxTdGF0dXMoam9iSW5mbzogSm9iSW5mb1JlcGx5KSB7XG4gICAgbGV0IHByb2dyZXNzID0gMFxuICAgIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnUFJPQ0VTU0lORycpKSB7XG4gICAgICBwcm9ncmVzcyA9IE1hdGgubWF4KC4uLmpvYkluZm8uam9icy5tYXAoaiA9PiBqLnByb2dyZXNzKSlcbiAgICB9IGVsc2UgaWYgKGpvYkluZm8uam9icy5zb21lKGogPT4gai5zdGF0dXMgPT09ICdRVUVVRUQnKSkge1xuICAgICAgcHJvZ3Jlc3MgPSAtKE1hdGgubWluKC4uLmpvYkluZm8uam9icy5tYXAoaiA9PiBqLnByb2dyZXNzICsgMSkpKVxuICAgIH1cbiAgICB0aGlzLnByb2dyZXNzJC5uZXh0KHtcbiAgICAgIG1vZHVsZTogam9iSW5mby5tb2R1bGUgPz8gJycsXG4gICAgICBwcm9ncmVzczogcHJvZ3Jlc3NcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1vZHVsZSBtb2R1bGUte3socmVuZGVyRGF0YSQgfCBhc3luYyk/Lm1vZHVsZX19XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW5kZXJEYXRhJCB8IGFzeW5jIGFzIGRhdGFcIj5cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnSU1BR0UnKXtcbiAgICAgIDxycy1tb2R1bGUtaW1hZ2UgW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1pbWFnZT5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdWSURFTycpe1xuICAgICAgPHJzLW1vZHVsZS12aWRlbyBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLXZpZGVvPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ1BERicgfHwgZGF0YT8ubW9kdWxlID09PSAnRE9DVU1FTlQnKSB7XG4gICAgICA8cnMtbW9kdWxlLXBkZiBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLXBkZj5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdFRFVIVE1MJyB8fCBkYXRhPy5tb2R1bGUgPT09ICdINVAnIHx8IGRhdGE/Lm1vZHVsZSA9PT0gJ0pVUFlURVInIHx8IGRhdGEubW9kdWxlID09PSAnU1BSRUFEU0hFRVQnKSB7XG4gICAgICA8cnMtbW9kdWxlLWVkdS1odG1sIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZWR1LWh0bWw+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnQVVESU8nKXtcbiAgICAgIDxycy1tb2R1bGUtYXVkaW8gW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1hdWRpbz5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdCSU5ERVInKXtcbiAgICAgIDxycy1tb2R1bGUtYmluZGVyIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtYmluZGVyPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0REQicpe1xuICAgICAgPHJzLW1vZHVsZS1kZGIgW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1kZGI+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5tb2R1bGUgPT09ICdkZWZhdWx0J1wiPlxuICAgICAgQGRlZmVyICh3aGVuIGRhdGEubW9kdWxlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgPHJzLW1vZHVsZS1kZWZhdWx0IFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1kZWZhdWx0PlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLm1vZHVsZSA9PT0gJ3VybCdcIj5cbiAgICAgIEBkZWZlciAod2hlbiBkYXRhLm1vZHVsZSA9PT0gJ3VybCcpIHtcbiAgICAgICAgPHJzLW1vZHVsZS11cmwgW25vZGVdPVwibm9kZVwiIFtkYXRhXT1cImRhdGFcIj48L3JzLW1vZHVsZS11cmw+XG4gICAgICB9XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEubW9kdWxlID09PSAnRVJST1InXCI+XG4gICAgICBAZGVmZXIgKHdoZW4gZGF0YS5tb2R1bGUgPT09ICdFUlJPUicpIHtcbiAgICAgICAgPHJzLW1vZHVsZS1lcnJvciBbbm9kZV09XCJub2RlXCIgW2RhdGFdPVwiZGF0YVwiPjwvcnMtbW9kdWxlLWVycm9yPlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiAqbmdJZj1cIihyZW5kZXJEYXRhJCB8IGFzeW5jKSA9PT0gbnVsbDtcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvZ3Jlc3MkIHwgYXN5bmMgYXMgcHJvZ3Jlc3NcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIlsnVklERU8nLCAnQVVESU8nXS5pbmNsdWRlcyhwcm9ncmVzcy5tb2R1bGUpID8gJ2JhcicgOiAnc3Bpbm5lcidcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2JhcidcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKHByb2dyZXNzLnByb2dyZXNzID8/IDApIDwgMFwiPlF1ZXVlIHBvc2l0aW9uOiB7ey0ocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCl9fTwvZGl2PlxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIFt2YWx1ZV09XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMClcIiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA+PSAwXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NwaW5uZXInXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA8IDBcIj5RdWV1ZSBwb3NpdGlvbjoge3stKHByb2dyZXNzLnByb2dyZXNzID8/IDApfTwvZGl2PlxuICAgICAgICAgIDxtYXQtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNTBcIiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA+PSAwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFRbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsbUJBQW1CLEVBQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQU1wRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFPdEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUFDLDRCQUE0QixFQUFtQyxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7OztBQTZCdEgsTUFBTSxPQUFPLGVBQWU7SUFhMUIsWUFDVSx1QkFBdUQsRUFDdkQsd0JBQWtELEVBQ2xELGlCQUFvQyxFQUNwQyxnQkFBa0MsRUFDZSxhQUErQztRQUpoRyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWdDO1FBQ3ZELDZCQUF3QixHQUF4Qix3QkFB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ekMsT0FBTzswQkFBZixLQUFLO29CQUNHLElBQUk7MEJBQVosS0FBSztvQkFDRyxnQkFBZ0I7MEJBQXhCLEtBQUs7b0JBQ0cscUJBQXFCOzBCQUE3QixLQUFLO29CQUNHLFFBQVE7MEJBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVuZGVyaW5nTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy5tb2R1bGUnO1xuaW1wb3J0IHtcbiAgSm9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLFxuICBKb2JJbmZvUmVwbHksXG4gIFJlbmRlckNvbnRyb2xsZXJXcmFwcGVyU2VydmljZSxcbiAgUmVuZGVyRGF0YVJlcXVlc3RXaXRoVG9rZW4sXG4gIFJlbmRlckRhdGFSZXNwb25zZVxufSBmcm9tICduZ3gtcmVuZGVyaW5nLXNlcnZpY2UtYXBpJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpcnN0VmFsdWVGcm9tLCBpbnRlcnZhbCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJbWFnZUNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7UmVuZGVyaW5nQXBpTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy1hcGkubW9kdWxlJztcbmltcG9ydCB7VmlkZW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3ZpZGVvL3ZpZGVvLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge0VkdVNoYXJpbmdBcGlNb2R1bGUsIE5vZGV9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7QXNzZXRTdGF0ZUl0ZW0sIFJlbmRlckRhdGF9IGZyb20gJy4vZHRvL1JlbmRlckRhdGEnO1xuaW1wb3J0IHtQZGZDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3BkZi9wZGYuY29tcG9uZW50JztcbmltcG9ydCB7VXJsQ29tcG9uZW50fSBmcm9tICcuL21vZHVsZS91cmwvdXJsLmNvbXBvbmVudCc7XG5pbXBvcnQge0VkdUh0bWxDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2VkdWh0bWwvZWR1SHRtbC5jb21wb25lbnQnO1xuaW1wb3J0IHtNb2R1bGVJbmZvU2VydmljZX0gZnJvbSAnLi4vbW9kdWxlLWluZm8uc2VydmljZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQbGF0Zm9ybUxvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtEZWZhdWx0Q29tcG9uZW50fSBmcm9tICcuL21vZHVsZS9kZWZhdWx0L2RlZmF1bHQuY29tcG9uZW50JztcbmltcG9ydCB7RnJvbnRlbmRNb2R1bGVDb25maWd9IGZyb20gJy4vZHRvL0Zyb250ZW5kTW9kdWxlQ29uZmlnJztcbmltcG9ydCB7QXVkaW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2F1ZGlvL2F1ZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQge0JpbmRlckNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvYmluZGVyL2JpbmRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtEZGJDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2RkYi9kZGIuY29tcG9uZW50JztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0VkdVNoYXJpbmdVaU1vZHVsZX0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLXVpJztcbmltcG9ydCB7RXJyb3JDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2Vycm9yL2Vycm9yLmNvbXBvbmVudCc7XG5pbXBvcnQge1JFTkRFUklOR19TRVJWSUNFX0xJQl9DT05GSUcsIFJlbmRlcmluZ1NlcnZpY2VMaWJDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vcmVuZGVyaW5nLXNlcnZpY2UtbGliLWNvbmZpZ3VyYXRpb25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnMtcm9vdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZW5kZXJpbmdBcGlNb2R1bGUsXG4gICAgUmVuZGVyaW5nTW9kdWxlLFxuICAgIEltYWdlQ29tcG9uZW50LFxuICAgIFZpZGVvQ29tcG9uZW50LFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBQZGZDb21wb25lbnQsXG4gICAgVXJsQ29tcG9uZW50LFxuICAgIEVkdUh0bWxDb21wb25lbnQsXG4gICAgRGVmYXVsdENvbXBvbmVudCxcbiAgICBBdWRpb0NvbXBvbmVudCxcbiAgICBCaW5kZXJDb21wb25lbnQsXG4gICAgRGRiQ29tcG9uZW50LFxuICAgIEVkdVNoYXJpbmdBcGlNb2R1bGUsXG4gICAgRWR1U2hhcmluZ1VpTW9kdWxlLFxuICAgIEVycm9yQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmFuc2xhdGVTZXJ2aWNlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW5kZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcmVuZGVyLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBSZW5kZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHJlcXVlc3Q6IFJlbmRlckRhdGFSZXF1ZXN0V2l0aFRva2VuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBub2RlOiBOb2RlIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzZXJ2aWNlV29ya2VyVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGFjdGl2YXRlU2VydmljZVdvcmtlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGFzc2V0VXJsOiBzdHJpbmcgPSAnJztcbiAgc2VydmljZVdvcmtlclJlYWR5ID0gZmFsc2U7XG4gIGxvYWREYXRhID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVuZGVyRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlbmRlckRhdGEgfCBudWxsPihudWxsKTtcbiAgZmluaXNoZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBzb21lQnV0Tm90QWxsRmluaXNoZWQgPSBuZXcgU3ViamVjdDxCb29sZWFuPigpXG4gIHByb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBtb2R1bGU6IHN0cmluZywgcHJvZ3Jlc3M/OiBudW1iZXIgfSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyQ29udHJvbGxlclNlcnZpY2U6IFJlbmRlckNvbnRyb2xsZXJXcmFwcGVyU2VydmljZSxcbiAgICBwcml2YXRlIGpvYkluZm9Db250cm9sbGVyU2VydmljZTogSm9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kdWxlSW5mb1NlcnZpY2U6IE1vZHVsZUluZm9TZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm1Mb2NhdGlvbjogUGxhdGZvcm1Mb2NhdGlvbixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJFTkRFUklOR19TRVJWSUNFX0xJQl9DT05GSUcpIHB1YmxpYyBjb25maWd1cmF0aW9uOiBSZW5kZXJpbmdTZXJ2aWNlTGliQ29uZmlndXJhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5sb2FkRGF0YS5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMubm9kZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VydmljZVdvcmtlclJlYWR5KSxcbiAgICAgIGRlYm91bmNlVGltZSgxMCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvLyBzdWJzY3JpYmUgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tNb2R1bGUoKVxuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhc3luYyAoZnJvbnRlbmRNb2R1bGUpID0+IHtcbiAgICAgICAgLy8gTm8gZnVydGhlciBjYWxscyB0byByczIgbmVjZXNzYXJ5IGlmIHdlIGhhdmUgYSBmcm9udGVuZCBvbmx5IG1vZHVsZVxuICAgICAgICBpZiAoZnJvbnRlbmRNb2R1bGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgICAgICAgbW9kdWxlOiBmcm9udGVuZE1vZHVsZS5tb2R1bGUsXG4gICAgICAgICAgICBmcm9udGVuZE1vZHVsZUNvbmZpZzogZnJvbnRlbmRNb2R1bGVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZW5kZXJEYXRhJC5uZXh0KGRhdGEpXG4gICAgICAgICAgdGhpcy5maW5pc2hlZC5uZXh0KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyUmVzcG9uc2VEYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yZW5kZXJDb250cm9sbGVyU2VydmljZS5nZXRSZW5kZXJEYXRhVG9rZW4odGhpcy5yZXF1ZXN0ISEpKVxuICAgICAgICAgICAgLy8gQ2FzZSAxOiBubyBqb2IgcmV0dXJuZWQgPT4gbm8gcG9sbGluZyBuZWVkZWRcbiAgICAgICAgICAgIGlmIChyZW5kZXJSZXNwb25zZURhdGEuam9iSWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZW5kZXJpbmdSZXNwb25zZVdpdGhvdXRKb2IocmVuZGVyUmVzcG9uc2VEYXRhKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyQubmV4dCh7bW9kdWxlOiByZW5kZXJSZXNwb25zZURhdGEubW9kdWxlID8/ICcnfSk7XG4gICAgICAgICAgICAgIGludGVydmFsKDUwMCkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5maW5pc2hlZCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuam9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLmdldEpvYkluZm8oe2pvYklkOiByZW5kZXJSZXNwb25zZURhdGEuam9iSWQhIX0pLnBpcGUoKSksXG4gICAgICAgICAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoam9iSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gU29tZSwgYnV0IG5vdCBhbGwsIGpvYnMgYXJlIGluIGEgZmluYWwgc3RhdHVzICh0aGlzIG1lYW5zIHNvbWUgYXJlIHN0aWxsIFFVRVVFRCBvciBQUk9DRVNTSU5HKVxuICAgICAgICAgICAgICAgICAgaWYgKGpvYkluZm8uam9icy5zb21lKGogPT4gai5zdGF0dXMgPT09ICdGSU5JU0hFRCcpICYmIGpvYkluZm8uc3RhdHVzICE9PSAnRklOSVNIRUQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSm9iSW5mb1dpdGhTdWJKb2JzSW5Qcm9ncmVzcyhyZW5kZXJSZXNwb25zZURhdGEsIGpvYkluZm8pXG4gICAgICAgICAgICAgICAgICAgIC8vIG1haW4gam9iIGZpbmlzaGVkIG9yIHBhcnRpYWxseSBmYWlsZWRcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoam9iSW5mby5zdGF0dXMgPT09ICdGSU5JU0hFRCcgfHwgam9iSW5mby5zdGF0dXMgPT09ICdQQVJUSUFMTFlfRkFJTEVEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaGVkT3JQYXJ0aWFsSm9iSW5mbyhyZW5kZXJSZXNwb25zZURhdGEsIGpvYkluZm8pXG4gICAgICAgICAgICAgICAgICAgIC8vIE1haW4gam9iIGZhaWxlZCA9PiBubyBtb2R1bGUgYnV0IGVycm9yIHBhZ2VcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoam9iSW5mby5zdGF0dXMgPT09ICdGQUlMRUQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkTWFpbkpvYihqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gZmluaXNoZWQgam9icyAtPiBzaG93IGVpdGhlciBvbmUgcHJvZ3Jlc3MgYmFyIHdpdGggcmFjZSBsZWFkZXIgKHByb2dyZXNzIDAtMTAwKVxuICAgICAgICAgICAgICAgICAgICAvLyBvciBxdWV1ZSBwb3NpdGlvbiAocHJvZ3Jlc3MgKC1pbmYsLTFdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1haW5Kb2JXaXRoTm9TdWJKb2JJbkZpbmFsU3RhdHVzKGpvYkluZm8pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBcGlFcnJvcihlcnJvcilcbiAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXBpRXJyb3IoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUFwaUVycm9yKGVycm9yKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQXBpRXJyb3IoZXJyb3I6IGFueSkge1xuICAgIGNvbnN0IHB1YmxpY01lc3NhZ2UgPSBlcnJvci5lcnJvci51c2VyTWVzc2FnZSA/PyAnR0VORVJJQ19FUlJPUl9NRVNTQUdFJ1xuICAgIGNvbnN0IGRhdGE6IFJlbmRlckRhdGEgPSB7XG4gICAgICBtb2R1bGU6ICdFUlJPUicsXG4gICAgICBwdWJsaWNFcnJvck1lc3NhZ2U6IHB1YmxpY01lc3NhZ2VcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJEYXRhJC5uZXh0KGRhdGEpXG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KClcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmFzc2V0VXJsICE9PSAnJykge1xuICAgICAgY29uc29sZS5pbmZvKFwic2V0dGluZyBhc3NldFVybCB0bzogXCIgKyB0aGlzLmFzc2V0VXJsICsgXCJcIik7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYXNzZXRzVXJsID0gdGhpcy5hc3NldFVybDtcbiAgICB9XG4gICAgLy8gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50cmFuc2xhdGlvbnNTZXJ2aWNlLmluaXRpYWxpemUoKSlcbiAgICBpZiAodGhpcy5hY3RpdmF0ZVNlcnZpY2VXb3JrZXIgJiYgJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikge1xuICAgICAgY29uc3QgcmVnID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuZ2V0UmVnaXN0cmF0aW9ucygpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocmVnPy5tYXAoKHI6IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24pID0+IHIudW5yZWdpc3RlcigpKSk7XG4gICAgICBjb25zdCBzZXJ2aWNlV29ya2VyVXJsID0gdGhpcy5zZXJ2aWNlV29ya2VyVXJsID8/ICh0aGlzLnBsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCkgKyAnZWR1LXNlcnZpY2Utd29ya2VyLmpzJyk7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2VydmljZVdvcmtlclVybCA/ICcvJyA6IHRoaXMucGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKHNlcnZpY2VXb3JrZXJVcmwsIHtcbiAgICAgICAgc2NvcGU6IHNjb3BlXG4gICAgICB9KTtcbiAgICAgIGlmIChyZWdpc3RyYXRpb24ud2FpdGluZykge1xuICAgICAgICByZWdpc3RyYXRpb24ud2FpdGluZy5wb3N0TWVzc2FnZSh7dHlwZTogJ1NLSVBfV0FJVElORyd9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VydmljZVdvcmtlclJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZERhdGEubmV4dCgpO1xuICAgICAgcmVnaXN0cmF0aW9uLm9udXBkYXRlZm91bmQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dvcmtlciA9IHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nO1xuICAgICAgICBpZiAobmV3V29ya2VyKSB7XG4gICAgICAgICAgbmV3V29ya2VyLm9uc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3V29ya2VyLnN0YXRlID09PSAnaW5zdGFsbGVkJykge1xuICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIG5ld1dvcmtlci5wb3N0TWVzc2FnZSh7dHlwZTogJ1NLSVBfV0FJVElORyd9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdjb250cm9sbGVyY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmluZm8oJ1NlcnZpY2UgV29ya2VyIGNvbnRyb2xsaW5nIHRoaXMgcGFnZS4nKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvciAmJiB0aGlzLmFjdGl2YXRlU2VydmljZVdvcmtlcil7XG4gICAgICAgIGNvbnNvbGUud2FybignU2VydmljZSB3b3JrZXIgQVBJIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhfOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5sb2FkRGF0YS5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBjaGVja01vZHVsZSgpOiBQcm9taXNlPEZyb250ZW5kTW9kdWxlQ29uZmlnIHwgbnVsbD4ge1xuICAgIGlmICghYXdhaXQgdGhpcy5tb2R1bGVJbmZvU2VydmljZS5pc0F2YWlsYWJsZUJhY2tlbmRPYmplY3QodGhpcy5ub2RlKSkge1xuICAgICAgaWYgKHRoaXMubm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUluZm9TZXJ2aWNlLmdldEZyb250ZW5kTW9kdWxlU2V0dGluZyh0aGlzLm5vZGUpXG4gICAgICB9XG4gICAgICByZXR1cm4ge21vZHVsZTogJ2RlZmF1bHQnLCB1cmxNb2R1bGVDb25maWc6IG51bGx9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUmVuZGVyaW5nUmVzcG9uc2VXaXRob3V0Sm9iKHJlbmRlckRhdGFSZXNwb25zZTogUmVuZGVyRGF0YVJlc3BvbnNlKSB7XG4gICAgY29uc3QgaXRlbXMgPSByZW5kZXJEYXRhUmVzcG9uc2Uub2JqZWN0TGlua3M/Lm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0SXRlbTogQXNzZXRTdGF0ZUl0ZW0gPSB7XG4gICAgICAgIGxpbms6IGl0ZW0ubGluayxcbiAgICAgICAgcHJvZ3Jlc3M6IDEwMCxcbiAgICAgICAgaGVpZ2h0OiBpdGVtLmhlaWdodCxcbiAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGgsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogJ0ZJTklTSEVEJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICByZW5kZXJEYXRhUmVzcG9uc2Uub2JqZWN0TGlua3MgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSk7XG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KCk7XG4gIH1cblxuICBoYW5kbGVKb2JJbmZvV2l0aFN1YkpvYnNJblByb2dyZXNzKHJlbmRlckRhdGFSZXNwb25zZTogUmVuZGVyRGF0YVJlc3BvbnNlLCBqb2JJbmZvOiBKb2JJbmZvUmVwbHkpIHtcbiAgICBjb25zdCBpdGVtcyA9IGpvYkluZm8uam9icy5tYXAoc3ViSm9iID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0SXRlbTogQXNzZXRTdGF0ZUl0ZW0gPSB7XG4gICAgICAgIGxpbms6IHN1YkpvYi5vYmplY3RMaW5rPy5saW5rID8/ICcnLFxuICAgICAgICBwcm9ncmVzczogc3ViSm9iLnN0YXR1cyAhPT0gJ1FVRVVFRCcgPyBzdWJKb2IucHJvZ3Jlc3MgOiAtKHN1YkpvYi5wcm9ncmVzcyArIDEpLFxuICAgICAgICBoZWlnaHQ6IHN1YkpvYi5vYmplY3RMaW5rPy5oZWlnaHQgPz8gc3ViSm9iLnF1YWxpdHksXG4gICAgICAgIHdpZHRoOiBzdWJKb2Iub2JqZWN0TGluaz8ud2lkdGggPz8gMCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHN1YkpvYi5hZGRpdGlvbmFsRGF0YSxcbiAgICAgICAgc3RhdHVzOiBzdWJKb2Iuc3RhdHVzLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLnNvbWVCdXROb3RBbGxGaW5pc2hlZC5uZXh0KHRydWUpXG4gIH1cblxuICBoYW5kbGVGaW5pc2hlZE9yUGFydGlhbEpvYkluZm8ocmVuZGVyRGF0YVJlc3BvbnNlOiBSZW5kZXJEYXRhUmVzcG9uc2UsIGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGNvbnN0IGl0ZW1zID0gam9iSW5mby5qb2JzLm1hcChzdWJKb2IgPT4ge1xuICAgICAgY29uc3QgYXNzZXRJdGVtOiBBc3NldFN0YXRlSXRlbSA9IHtcbiAgICAgICAgbGluazogc3ViSm9iLm9iamVjdExpbms/LmxpbmsgPz8gJycsXG4gICAgICAgIHByb2dyZXNzOiBzdWJKb2IucHJvZ3Jlc3MsXG4gICAgICAgIGhlaWdodDogc3ViSm9iLm9iamVjdExpbms/LmhlaWdodCA/PyBzdWJKb2IucXVhbGl0eSxcbiAgICAgICAgd2lkdGg6IHN1YkpvYi5vYmplY3RMaW5rPy53aWR0aCA/PyAwLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogc3ViSm9iLmFkZGl0aW9uYWxEYXRhLFxuICAgICAgICBwdWJsaWNFcnJvck1lc3NhZ2U6IHN1YkpvYi5lcnJvcj8udXNlck1lc3NhZ2UsXG4gICAgICAgIHN0YXR1czpzdWJKb2Iuc3RhdHVzLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKVxuICB9XG5cbiAgaGFuZGxlRmFpbGVkTWFpbkpvYihqb2JJbmZvOiBKb2JJbmZvUmVwbHkpIHtcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiAnRVJST1InLFxuICAgICAgcHVibGljRXJyb3JNZXNzYWdlOiBqb2JJbmZvLmVycm9yTWVzc2FnZT8udXNlck1lc3NhZ2UgPz8gJ0dFTkVSSUNfRVJST1JfTUVTU0FHRSdcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJEYXRhJC5uZXh0KGRhdGEpXG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KClcbiAgfVxuXG4gIGhhbmRsZU1haW5Kb2JXaXRoTm9TdWJKb2JJbkZpbmFsU3RhdHVzKGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGxldCBwcm9ncmVzcyA9IDBcbiAgICBpZiAoam9iSW5mby5qb2JzLnNvbWUoaiA9PiBqLnN0YXR1cyA9PT0gJ1BST0NFU1NJTkcnKSkge1xuICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1heCguLi5qb2JJbmZvLmpvYnMubWFwKGogPT4gai5wcm9ncmVzcykpXG4gICAgfSBlbHNlIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnUVVFVUVEJykpIHtcbiAgICAgIHByb2dyZXNzID0gLShNYXRoLm1pbiguLi5qb2JJbmZvLmpvYnMubWFwKGogPT4gai5wcm9ncmVzcyArIDEpKSlcbiAgICB9XG4gICAgdGhpcy5wcm9ncmVzcyQubmV4dCh7XG4gICAgICBtb2R1bGU6IGpvYkluZm8ubW9kdWxlID8/ICcnLFxuICAgICAgcHJvZ3Jlc3M6IHByb2dyZXNzXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2R1bGUgbW9kdWxlLXt7KHJlbmRlckRhdGEkIHwgYXN5bmMpPy5tb2R1bGV9fVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyRGF0YSQgfCBhc3luYyBhcyBkYXRhXCI+XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0lNQUdFJyl7XG4gICAgICA8cnMtbW9kdWxlLWltYWdlIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtaW1hZ2U+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnVklERU8nKXtcbiAgICAgIDxycy1tb2R1bGUtdmlkZW8gW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS12aWRlbz5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdQREYnIHx8IGRhdGE/Lm1vZHVsZSA9PT0gJ0RPQ1VNRU5UJykge1xuICAgICAgPHJzLW1vZHVsZS1wZGYgW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1wZGY+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnRURVSFRNTCcgfHwgZGF0YT8ubW9kdWxlID09PSAnSDVQJyB8fCBkYXRhPy5tb2R1bGUgPT09ICdKVVBZVEVSJyB8fCBkYXRhLm1vZHVsZSA9PT0gJ1NQUkVBRFNIRUVUJykge1xuICAgICAgPHJzLW1vZHVsZS1lZHUtaHRtbCBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLWVkdS1odG1sPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0FVRElPJyl7XG4gICAgICA8cnMtbW9kdWxlLWF1ZGlvIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtYXVkaW8+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnQklOREVSJyl7XG4gICAgICA8cnMtbW9kdWxlLWJpbmRlciBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLWJpbmRlcj5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdEREInKXtcbiAgICAgIDxycy1tb2R1bGUtZGRiIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZGRiPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEubW9kdWxlID09PSAnZGVmYXVsdCdcIj5cbiAgICAgIEBkZWZlciAod2hlbiBkYXRhLm1vZHVsZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIDxycy1tb2R1bGUtZGVmYXVsdCBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZGVmYXVsdD5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5tb2R1bGUgPT09ICd1cmwnXCI+XG4gICAgICBAZGVmZXIgKHdoZW4gZGF0YS5tb2R1bGUgPT09ICd1cmwnKSB7XG4gICAgICAgIDxycy1tb2R1bGUtdXJsIFtub2RlXT1cIm5vZGVcIiBbZGF0YV09XCJkYXRhXCI+PC9ycy1tb2R1bGUtdXJsPlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLm1vZHVsZSA9PT0gJ0VSUk9SJ1wiPlxuICAgICAgQGRlZmVyICh3aGVuIGRhdGEubW9kdWxlID09PSAnRVJST1InKSB7XG4gICAgICAgIDxycy1tb2R1bGUtZXJyb3IgW25vZGVdPVwibm9kZVwiIFtkYXRhXT1cImRhdGFcIj48L3JzLW1vZHVsZS1lcnJvcj5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgKm5nSWY9XCIocmVuZGVyRGF0YSQgfCBhc3luYykgPT09IG51bGw7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2dyZXNzJCB8IGFzeW5jIGFzIHByb2dyZXNzXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJbJ1ZJREVPJywgJ0FVRElPJ10uaW5jbHVkZXMocHJvZ3Jlc3MubW9kdWxlKSA/ICdiYXInIDogJ3NwaW5uZXInXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidiYXInXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA8IDBcIj5RdWV1ZSBwb3NpdGlvbjoge3stKHByb2dyZXNzLnByb2dyZXNzID8/IDApfX08L2Rpdj5cbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBbdmFsdWVdPVwiKHByb2dyZXNzLnByb2dyZXNzID8/IDApXCIgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPj0gMFwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGlubmVyJ1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPCAwXCI+UXVldWUgcG9zaXRpb246IHt7LShwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKX08L2Rpdj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCIgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPj0gMFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+XG4gICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -659,12 +659,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
659
659
  }], ctorParameters: () => [{ type: i1.ModuleInfoControllerService }] });
660
660
 
661
661
  class RenderComponent {
662
- constructor(renderControllerService, jobInfoControllerService, moduleInfoService, platformLocation) {
662
+ constructor(renderControllerService, jobInfoControllerService, moduleInfoService, platformLocation, configuration) {
663
663
  this.renderControllerService = renderControllerService;
664
664
  this.jobInfoControllerService = jobInfoControllerService;
665
665
  this.moduleInfoService = moduleInfoService;
666
666
  this.platformLocation = platformLocation;
667
+ this.configuration = configuration;
667
668
  this.activateServiceWorker = true;
669
+ this.assetUrl = '';
668
670
  this.serviceWorkerReady = false;
669
671
  this.loadData = new Subject();
670
672
  this.renderData$ = new BehaviorSubject(null);
@@ -740,6 +742,10 @@ class RenderComponent {
740
742
  this.finished.next();
741
743
  }
742
744
  async ngOnInit() {
745
+ if (this.assetUrl !== '') {
746
+ console.info("setting assetUrl to: " + this.assetUrl + "");
747
+ this.configuration.assetsUrl = this.assetUrl;
748
+ }
743
749
  // await firstValueFrom(this.translationsService.initialize())
744
750
  if (this.activateServiceWorker && 'serviceWorker' in navigator) {
745
751
  const reg = await navigator.serviceWorker.getRegistrations();
@@ -867,8 +873,8 @@ class RenderComponent {
867
873
  progress: progress
868
874
  });
869
875
  }
870
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RenderComponent, deps: [{ token: i1.RenderControllerWrapperService }, { token: i1.JobInfoControllerService }, { token: ModuleInfoService }, { token: i3.PlatformLocation }], target: i0.ɵɵFactoryTarget.Component }); }
871
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: RenderComponent, isStandalone: true, selector: "rs-root", inputs: { request: "request", node: "node", serviceWorkerUrl: "serviceWorkerUrl", activateServiceWorker: "activateServiceWorker" }, providers: [
876
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RenderComponent, deps: [{ token: i1.RenderControllerWrapperService }, { token: i1.JobInfoControllerService }, { token: ModuleInfoService }, { token: i3.PlatformLocation }, { token: RENDERING_SERVICE_LIB_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
877
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: RenderComponent, isStandalone: true, selector: "rs-root", inputs: { request: "request", node: "node", serviceWorkerUrl: "serviceWorkerUrl", activateServiceWorker: "activateServiceWorker", assetUrl: "assetUrl" }, providers: [
872
878
  TranslateService
873
879
  ], usesOnChanges: true, ngImport: i0, template: "<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:20px;padding:10px 30px}.module{overflow:auto;display:flex;flex-grow:1;height:auto;border:1px solid #aaa;padding:20px}.module rs-module-image,.module rs-module-video{width:100%}.module .progress{display:flex;justify-content:center;flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: RenderingApiModule }, { kind: "ngmodule", type: RenderingModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: EduSharingApiModule }, { kind: "ngmodule", type: EduSharingUiModule }], deferBlockDependencies: [() => [Promise.resolve().then(function () { return image_component; }).then(m => m.ImageComponent)], () => [Promise.resolve().then(function () { return video_component; }).then(m => m.VideoComponent)], () => [Promise.resolve().then(function () { return pdf_component; }).then(m => m.PdfComponent)], () => [Promise.resolve().then(function () { return eduHtml_component; }).then(m => m.EduHtmlComponent)], () => [import('./ngx-rendering-service-lib-audio.component-CJInS7_m.mjs').then(m => m.AudioComponent)], () => [import('./ngx-rendering-service-lib-binder.component-qTol-SZV.mjs').then(m => m.BinderComponent)], () => [import('./ngx-rendering-service-lib-ddb.component-nG3wrIO9.mjs').then(m => m.DdbComponent)], () => [import('./ngx-rendering-service-lib-default.component-DyjHM169.mjs').then(m => m.DefaultComponent)], () => [Promise.resolve().then(function () { return url_component; }).then(m => m.UrlComponent)], () => [import('./ngx-rendering-service-lib-error.component-w4_953DU.mjs').then(m => m.ErrorComponent)]] }); }
874
880
  }
@@ -894,7 +900,12 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.2.6", ng
894
900
  ], providers: [
895
901
  TranslateService
896
902
  ], template: "<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:20px;padding:10px 30px}.module{overflow:auto;display:flex;flex-grow:1;height:auto;border:1px solid #aaa;padding:20px}.module rs-module-image,.module rs-module-video{width:100%}.module .progress{display:flex;justify-content:center;flex-grow:1}\n"] }]
897
- }], ctorParameters: () => [{ type: i1.RenderControllerWrapperService }, { type: i1.JobInfoControllerService }, { type: ModuleInfoService }, { type: i3.PlatformLocation }], propDecorators: { request: [{
903
+ }], ctorParameters: () => [{ type: i1.RenderControllerWrapperService }, { type: i1.JobInfoControllerService }, { type: ModuleInfoService }, { type: i3.PlatformLocation }, { type: RenderingServiceLibConfiguration, decorators: [{
904
+ type: Optional
905
+ }, {
906
+ type: Inject,
907
+ args: [RENDERING_SERVICE_LIB_CONFIG]
908
+ }] }], propDecorators: { request: [{
898
909
  type: Input
899
910
  }], node: [{
900
911
  type: Input
@@ -902,6 +913,8 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.2.6", ng
902
913
  type: Input
903
914
  }], activateServiceWorker: [{
904
915
  type: Input
916
+ }], assetUrl: [{
917
+ type: Input
905
918
  }] } }) });
906
919
 
907
920
  class RenderingServiceLibModule {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-rendering-service-lib.mjs","sources":["../../src/lib/asset-link.pipe.ts","../../src/lib/rendering.module.ts","../../src/lib/module/image/image.component.ts","../../src/lib/module/image/image.component.html","../../src/lib/module/video/video.component.ts","../../src/lib/module/video/video.component.html","../../src/rendering-service-lib-configuration.ts","../../src/lib/module/pdf/pdf.component.ts","../../src/lib/module/pdf/pdf.component.html","../../src/lib/dto/FrontendModuleConfig.ts","../../src/lib/module/url/url.component.ts","../../src/lib/module/url/url.component.html","../../src/lib/module/eduhtml/eduHtml.component.ts","../../src/lib/module/eduhtml/eduHtml.component.html","../../src/lib/rendering-api.module.ts","../../src/module-info.service.ts","../../src/lib/render.component.ts","../../src/lib/render.component.html","../../src/rendering-service-lib.module.ts","../../src/index.ts","../../src/ngx-rendering-service-lib.ts"],"sourcesContent":["import {Injector, Pipe, PipeTransform} from '@angular/core';\nimport {RSApiConfiguration} from 'ngx-rendering-service-api';\n\n/**\n * this pipe transforms any reported asset data uri from the rendering to the uri that is currently configured for the backend\n * this is required in case the rendering service is behind a proxy, i.e. in dev mode\n */\n@Pipe({ name: 'rsAssetLink' })\nexport class AssetLinkPipe implements PipeTransform {\n constructor(\n private injector: Injector,\n ) {\n }\n\n transform(value: string | undefined) {\n if(value) {\n const str = value.split('/public');\n str[0] = this.injector.get(RSApiConfiguration).rootUrl;\n return str.join('/public');\n }\n return value;\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AssetLinkPipe} from './asset-link.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n AssetLinkPipe,\n ],\n exports: [\n CommonModule,\n AssetLinkPipe,\n ]\n})\nexport class RenderingModule {}\n","import {AfterViewInit, Component, ElementRef, HostListener, Input, signal} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\n\n@Component({\n selector: 'rs-module-image',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './image.component.html',\n styleUrl: './image.component.scss'\n})\nexport class ImageComponent implements RenderModule, AfterViewInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n activeObject = signal<AssetStateItem | undefined>(undefined);\n constructor(public element: ElementRef) { }\n ngAfterViewInit(): void {\n this.loadOptimalSize();\n }\n\n @HostListener('document:fullscreenchange')\n private loadOptimalSize() {\n const size = this.element.nativeElement.getBoundingClientRect();\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n const matchingItem = allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - size.width) > Math.abs(b.width - size.width) ? 1 : -1;\n })[0]\n this.activeObject.set(matchingItem);\n }\n\n toggleFullscreen() {\n if(document.fullscreenElement) {\n void document.exitFullscreen();\n } else {\n this.element.nativeElement.requestFullscreen();\n }\n }\n}\n","<div class=\"image-wrapper\"\n *ngIf=\"activeObject()\"\n>\n <img\n #image\n [src]=\"activeObject()?.link | rsAssetLink\"\n [alt]=\"node?.title || node?.name || ''\"\n >\n <button mat-icon-button (click)=\"toggleFullscreen()\"><mat-icon>fullscreen</mat-icon></button>\n</div>\n","import {AfterViewInit, Component, ElementRef, Input, signal, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatIconButton} from '@angular/material/button';\nimport {FormsModule} from '@angular/forms';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-video',\n standalone: true,\n imports: [\n RenderingModule,\n MatIcon,\n MatIconButton,\n FormsModule,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n EduSharingUiModule\n ],\n templateUrl: './video.component.html',\n styleUrl: './video.component.scss'\n})\nexport class VideoComponent implements RenderModule, AfterViewInit{\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n @ViewChild('video') videoRef: ElementRef<HTMLVideoElement> | undefined\n activeObject = signal<AssetStateItem | undefined>(undefined);\n hasMultipleResolutions: Boolean = true\n\n ngAfterViewInit(): void {\n this.hasMultipleResolutions = (this.data?.items?.length ?? 1) > 1\n const downlink: number = (navigator as any).connection?.downlink;\n let optimalResolution = 720;\n if(downlink < 2) {\n optimalResolution = 240;\n }\n if(downlink > 6) {\n optimalResolution = 1080;\n }\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n this.activeObject.set(allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - optimalResolution) > Math.abs(b.width - optimalResolution) ? 1 : -1;\n })[0]);\n }\n\n switchResolution(item: AssetStateItem) {\n this.activeObject.set(item)\n const currentTime = this.videoRef?.nativeElement.currentTime\n this.videoRef?.nativeElement.load()\n if (currentTime !== undefined) {\n this.videoRef!.nativeElement.currentTime = currentTime\n }\n }\n\n protected readonly JSON = JSON;\n}\n","<div class=\"video-wrapper\" *ngIf=\"activeObject()\">\n <video\n controls\n #video\n >\n <source [src]=\"activeObject()?.link | rsAssetLink\" />\n </video>\n <button *ngIf=\"hasMultipleResolutions\"\n mat-icon-button\n [matMenuTriggerFor]=\"resolutionMenu\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n <mat-menu\n #resolutionMenu=\"matMenu\"\n xPosition=\"before\"\n >\n <button\n mat-menu-item\n *ngFor=\"let item of data?.items\"\n [disabled]=\"item.link === ''\"\n (click)=\"item.height !== activeObject()?.height && switchResolution(item)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"item.link !== '' ? ready : loading\"\n [ngTemplateOutletContext]=\"{item:item}\"\n >\n </ng-container>\n </button>\n\n </mat-menu>\n</div>\n\n<ng-template #ready let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <mat-icon *ngIf=\"item.height === activeObject()?.height\">\n done\n </mat-icon>\n <div *ngIf=\"item.height !== activeObject()?.height\"></div>\n <div>\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <div>\n <ng-container *ngIf=\"item.status === 'PROCESSING'; else queue\">\n {{ 'RENDERING.CONVERTING' | translate }}: {{ item.progress }}%\n </ng-container>\n <ng-template #queue>\n {{ 'RENDERING.QUEUED' | translate }}: {{ item.progress }}\n </ng-template>\n </div>\n <div style=\"padding-left: .5em\">\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const RENDERING_SERVICE_LIB_CONFIG = new InjectionToken<RenderingServiceLibConfiguration>(\n 'RENDERING_SERVICE_LIB_CONFIG',\n);\n@Injectable({\n providedIn: 'root',\n})\nexport class RenderingServiceLibConfiguration {\n /**\n * the assets url\n * this is important for modules that require to fetch external javascript, i.e. ng2-pdfjs-viewer\n */\n assetsUrl: string | null = null;\n static create(params: RenderingServiceLibConfigurationParams = {}): RenderingServiceLibConfiguration {\n return { ...new RenderingServiceLibConfiguration(), ...params };\n }\n}\n\nexport type RenderingServiceLibConfigurationParams = Partial<RenderingServiceLibConfiguration>;\n\nexport function getConfigProvider(params?: RenderingServiceLibConfigurationParams): Provider[] {\n return [\n // Provide the params given to `forRoot()`. These can be overridden by the application by\n // providing `EDU_SHARING_API_CONFIG` itself.\n {\n provide: RENDERING_SERVICE_LIB_CONFIG,\n useValue: params,\n }\n ];\n}\n","import {Component, Inject, Input, OnChanges, Optional, SimpleChanges, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {PdfJsViewerComponent, PdfJsViewerModule} from 'ng2-pdfjs-viewer';\nimport {AssetControllerService, GetAsset$Params} from 'ngx-rendering-service-api';\nimport {\n RENDERING_SERVICE_LIB_CONFIG,\n RenderingServiceLibConfiguration\n} from \"../../../rendering-service-lib-configuration\";\n\n\n@Component({\n selector: 'rs-module-pdf',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n PdfJsViewerModule\n ],\n templateUrl: './pdf.component.html',\n styleUrl: './pdf.component.scss'\n})\nexport class PdfComponent implements RenderModule, OnChanges {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n @ViewChild('pdfViewer') viewerRef: PdfJsViewerComponent | undefined\n restrictedView: boolean = false\n fileData: Blob | undefined\n\n constructor(\n private assetControllerService: AssetControllerService,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n this.downloadFile()\n }\n\n private downloadFile() {\n if (this.data?.items === undefined || this.data.items[0].link === '') {\n return\n }\n const url = new URL(this.data.items[0].link)\n const assetParams = url.searchParams.get('assetParams')\n if (assetParams === null) {\n return\n }\n const params: GetAsset$Params = {\n assetParams: assetParams\n }\n this.assetControllerService.getAsset$Response(params)\n .subscribe(async (response) => {\n let responseData = response.body\n if (response.headers.get('content-type') === 'application/octet-stream') {\n this.restrictedView = true\n responseData = responseData.slice(0, responseData.size, 'application/pdf')\n }\n this.fileData = responseData\n }\n )\n }\n\n onDocumentLoad() {\n const iFrameDocument = this.viewerRef?.iframe.nativeElement.contentWindow.document\n // Always hide document properties button in right dropdown menu\n iFrameDocument.getElementById('documentProperties').style.display = 'none'\n iFrameDocument.querySelector('.horizontalToolbarSeparator.spreadModeButtons').style.display = 'none'\n if (this.restrictedView) {\n const iFrameWindow = this.viewerRef?.iframe.nativeElement.contentWindow\n // Disable printing in iframe\n iFrameWindow.print = () => {alert('Nice try!')}\n // Disable selection tool and remove the corresponding button from the right dropdown menu\n iFrameDocument.querySelector('.textLayer').style.display = 'none'\n iFrameDocument.getElementById('cursorSelectTool').style.display = 'none'\n // Disable context menu in iframe\n iFrameDocument.body.addEventListener('contextmenu', (event:MouseEvent) => {event.preventDefault();});\n // Disable printing via keyboard shortcuts\n ['keyup', 'keydown'].forEach(type => {\n iFrameDocument.addEventListener(type, (event:KeyboardEvent) => {\n if ((event.key === 's' && event.ctrlKey) || event.key === 'F12') {\n event.preventDefault();\n if (event.stopImmediatePropagation) {\n event.stopImmediatePropagation();\n } else {\n event.stopPropagation();\n }\n }\n })\n })\n }\n }\n}\n","<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n","\nexport type FrontendModuleConfig = {\n module: string,\n urlModuleConfig: UrlModuleConfig | null\n}\n\nexport type UrlModuleConfig = {\n embedding: UrlEmbeddings,\n externalId: string\n}\n\nexport enum UrlEmbeddings {\n YOUTUBE,\n VIMEO,\n VIDEO,\n AUDIO,\n IMAGE,\n LTI13TOOL,\n H5P,\n PREZI,\n LEARNINGAPPS\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {YouTubePlayer} from '@angular/youtube-player';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {NgOptimizedImage} from '@angular/common';\nimport {RenderData} from '../../dto/RenderData';\nimport {UrlEmbeddings} from '../../dto/FrontendModuleConfig';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-url',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n YouTubePlayer,\n NgOptimizedImage,\n EduSharingUiModule,\n ],\n templateUrl: './url.component.html',\n styleUrl: './url.component.scss'\n})\nexport class UrlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n gdpr: any[] | undefined = undefined\n gdprOk: boolean = true\n embedding?: UrlEmbeddings\n externalId?: string\n sanitizedUrl: SafeResourceUrl | null = null\n url: string = ''\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n this.embedding = this.data?.frontendModuleConfig?.urlModuleConfig?.embedding\n this.externalId = this.data?.frontendModuleConfig?.urlModuleConfig?.externalId\n this.url = this.node?.properties?.['ccm:wwwurl']?.[0] || ''\n if (this.embedding === UrlEmbeddings.VIMEO) {\n this.sanitizedUrl = this.getVimeoUri()\n } else if (this.embedding === UrlEmbeddings.PREZI) {\n this.sanitizedUrl = this.getPreziUrl()\n } else if (this.embedding === UrlEmbeddings.LEARNINGAPPS) {\n this.sanitizedUrl = this.getLearningAppsUrl()\n }\n }\n\n isProtected(): boolean {\n return this.gdpr === undefined;\n }\n\n consentToGdprWarning() {\n this.gdprOk = true\n }\n\n getVimeoUri(): SafeResourceUrl {\n let url = '//player.vimeo.com/video/' + this.externalId\n return this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n getPreziUrl(): SafeResourceUrl {\n const preziUrl = this.url.slice(-1) === '/' ? this.url.substring(0, this.url.length - 1) : this.url\n return this.sanitizer.bypassSecurityTrustResourceUrl(preziUrl)\n }\n\n getLearningAppsUrl(): SafeResourceUrl {\n const learningAppsUrl = this.url.replace('https://learningapps.org/', 'https://learningapps.org/view')\n return this.sanitizer.bypassSecurityTrustResourceUrl(learningAppsUrl)\n }\n\n protected readonly UrlEmbeddings = UrlEmbeddings;\n}\n","<div class=\"url-wrapper\">\n <div *ngIf=\"gdprOk\">\n <ng-container *ngIf=\"embedding === UrlEmbeddings.YOUTUBE && externalId !== ''\">\n <youtube-player\n [videoId]=\"externalId ?? ''\"\n [disableCookies]=\"true\"\n ></youtube-player>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIMEO && externalId !== ''\">\n <iframe class=\"vimeoFrame\" [src]=\"sanitizedUrl\"></iframe>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.AUDIO && url !== ''\" >\n <div class=\"audio-wrapper\">\n <video\n controls\n style=\"max-width: 100%\"\n [src]=\"url\"\n poster=\"assets/img/audio.svg\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.IMAGE && url !== ''\">\n <div class=\"image-wrapper\">\n <img\n [ngSrc]=\"url\"\n [alt]=\"node?.title ?? 'Edu-Sharing image'\"\n [title]=\"node?.title ?? 'Edu-Sharing image'\"\n >\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIDEO && url !== ''\">\n <div class=\"video-wrapper\">\n <video\n controls\n [src]=\"url\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(embedding === UrlEmbeddings.PREZI || embedding === UrlEmbeddings.LEARNINGAPPS) && url !== ''\">\n <iframe class=\"eduUrlFrame\" [src]=sanitizedUrl allowfullscreen=\"\" allow=\"autoplay; fullscreen\" ></iframe>\n </ng-container>\n\n </div>\n <div *ngIf=\"!gdprOk\">\n {{ 'RENDERING.GDPR.GDPR_DIALOG' | translate }}\n <button mat-button (click)=\"consentToGdprWarning()\">{{'RENDERING.GDPR.GDPR_CONTINUE' | translate}}</button>\n </div>\n</div>\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\n\n@Component({\n selector: 'rs-module-edu-html',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './eduHtml.component.html',\n styleUrl: './eduHtml.component.scss'\n})\nexport class EduHtmlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n sanitizedUrl: SafeResourceUrl = new class implements SafeResourceUrl {\n }\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n this.sanitizedUrl = this.getSafeUri()\n }\n }\n\n getSafeUri() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n const uri = new URL(this.data.items[0].link)\n /**\n if (uri.hostname.includes('nip.io')) {\n uri.hostname = 'localhost'\n }\n */\n return this.sanitizer.bypassSecurityTrustResourceUrl(uri.toString())\n }\n return new class implements SafeResourceUrl {\n }\n }\n}\n","<div class=\"eduHtml-wrapper\" *ngIf=\"data?.items !== undefined\">\n <iframe class=\"frame\" [src]=\"sanitizedUrl\"></iframe>\n</div>\n","import {NgModule} from '@angular/core';\n\n@NgModule({\n imports: []\n})\nexport class RenderingApiModule {}\n","import {Injectable} from '@angular/core';\nimport {ModuleInfoControllerService} from 'ngx-rendering-service-api';\nimport {firstValueFrom} from 'rxjs';\nimport {Node, RestConstants} from 'ngx-edu-sharing-api';\nimport {FrontendModuleConfig, UrlEmbeddings, UrlModuleConfig} from './lib/dto/FrontendModuleConfig';\n\n@Injectable({providedIn: 'root'})\nexport class ModuleInfoService {\n\n private availableMediaTypes: String[] = []\n private availableMimeTypes: String[] = []\n private availableMimeTypePrefixes: String[] = []\n private availableReplicationSources: String[] = []\n private availableResourceTypes: String[] = []\n private availableRemoteRepositories: String[] = []\n\n constructor(\n private service: ModuleInfoControllerService\n ) {}\n\n async isAvailableBackendObject(node: Node| undefined): Promise<boolean> {\n if (!this.isInitialized()) {\n const result = await firstValueFrom(this.service.getModulesInfo({repoId: node?.ref.repo ?? ''}))\n result.forEach(info => {\n if (info.typeMapping.type !== undefined && info.typeMapping.type !== null) {\n this.availableMediaTypes.push(info.typeMapping.type)\n } else if (info.typeMapping.remoteRepositoryType !== undefined && info.typeMapping.remoteRepositoryType !== null) {\n this.availableRemoteRepositories.push(info.typeMapping.remoteRepositoryType)\n } else if(info.typeMapping.resourceType !== undefined && info.typeMapping.resourceType !== null) {\n this.availableResourceTypes.push(info.typeMapping.resourceType)\n } else if(info.typeMapping.replicationSource !== undefined && info.typeMapping.replicationSource !== null) {\n this.availableReplicationSources.push(info.typeMapping.replicationSource)\n } else if (info.typeMapping.mimeTypeSuffix !== undefined\n && info.typeMapping.mimeTypeSuffix !== null\n && info.typeMapping.mimeTypePrefix !== undefined\n && info.typeMapping.mimeTypePrefix !== null\n ) {\n this.availableMimeTypes.push(`${info.typeMapping.mimeTypePrefix}/${info.typeMapping.mimeTypeSuffix}`)\n } else if (info.typeMapping.mimeTypePrefix !== undefined && info.typeMapping.mimeTypePrefix !== null) {\n this.availableMimeTypePrefixes.push(info.typeMapping.mimeTypePrefix)\n }\n })\n }\n const mimeTypePrefix = (node?.mimetype ?? '').split('/', 2)[0]\n return this.availableMediaTypes.includes(node?.mediatype ?? '') ||\n this.availableRemoteRepositories.includes(node?.remote?.repository?.repositoryType ?? '') ||\n this.availableReplicationSources.includes(node?.properties?.[RestConstants.CCM_PROP_REPLICATIONSOURCE]?.[0]?? '') ||\n this.availableResourceTypes.includes(node?.properties?.[RestConstants.CCM_PROP_CCRESSOURCETYPE]?.[0]?? '') ||\n this.availableMimeTypes.includes(node?.mimetype ?? '') ||\n this.availableMimeTypePrefixes.includes(mimeTypePrefix)\n }\n\n private isInitialized(): boolean {\n return this.availableMediaTypes.length\n + this.availableMimeTypes.length\n + this.availableMimeTypePrefixes.length\n + this.availableReplicationSources.length\n + this.availableResourceTypes.length\n + this.availableRemoteRepositories.length !== 0\n }\n\n getFrontendModuleSetting(node: Node): FrontendModuleConfig {\n const urlModuleConfig = this.checkUrlModule(node)\n if (urlModuleConfig !== null) {\n return urlModuleConfig\n }\n return {\n module: 'default',\n urlModuleConfig: null\n }\n }\n\n checkUrlModule(node: Node): FrontendModuleConfig | null {\n const url = node.properties?.['ccm:wwwurl']?.[0] || ''\n const checkLearningApps = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'learningapps') {\n return {\n embedding: UrlEmbeddings.LEARNINGAPPS,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkYouTube\n */\n const checkYouTube = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'youtube') {\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: node.remote?.id ?? ''\n }\n }\n if (url.includes('youtu.be') ) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: split[split.length - 1]\n }\n }\n if (url.includes('.youtube.com/watch?')) {\n const urlObject = new URL(url)\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: urlObject.searchParams.get('v') ?? ''\n }\n }\n return null\n }\n /**\n * Function checkVimeo\n */\n const checkVimeo = (): UrlModuleConfig | null => {\n if (url.includes('vimeo.com')) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.VIMEO,\n externalId: split[split.length - 1]\n }\n }\n return null\n }\n const checkGenericVideo = (): UrlModuleConfig | null => {\n if (url.length > 0 && ['mp4', 'webm'].includes(url.split('.').pop() ?? '')) {\n return {\n embedding: UrlEmbeddings.VIDEO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkAudio\n */\n const checkAudio = (): UrlModuleConfig | null => {\n if (url.length > 0 && node.mimetype?.startsWith('audio')) {\n return {\n embedding: UrlEmbeddings.AUDIO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkLti13ToolObject\n */\n const checkLti13ToolObject = (): UrlModuleConfig | null => {\n if (node.aspects?.includes('ccm:ltitool_node')) {\n return {\n embedding: UrlEmbeddings.LTI13TOOL,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkImage\n */\n const checkImage = (): UrlModuleConfig | null => {\n if (node.properties?.['ccm:remoterepositorytype']?.[0] === 'DDB') {\n return null\n }\n if (node.mediatype === 'file-image') {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n const mimeTypeSplit = node.mimetype?.split('/') ?? []\n if (mimeTypeSplit.length === 2 && ['png', 'jpg', 'jpeg', 'gif'].includes(mimeTypeSplit[1])) {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectH5P\n */\n const detectH5P = (): UrlModuleConfig | null => {\n if (url.length > 0 && url.includes('h5p.org/h5p/embed')) {\n return {\n embedding: UrlEmbeddings.H5P,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectPrezi\n */\n const detectPrezi = (): UrlModuleConfig | null => {\n if (url.length > 0 &&\n (url.includes('prezi.com/view/') || url.includes('prezi.com/embed/') || url.includes('prezi.com/p/embed'))\n ) {\n return {\n embedding: UrlEmbeddings.PREZI,\n externalId: ''\n }\n }\n return null\n }\n\n /**\n * embedding if applicable to node\n */\n const embedding =\n checkLearningApps()\n ?? checkYouTube()\n ?? checkVimeo()\n ?? checkGenericVideo()\n ?? checkAudio()\n ?? checkImage()\n ?? checkLti13ToolObject()\n ?? detectH5P()\n ?? detectPrezi()\n\n if (embedding !== null) {\n return {\n module: 'url',\n urlModuleConfig: embedding\n }\n }\n return null\n }\n}\n","import {Component, Inject, Input, OnChanges, OnInit, Optional, SimpleChanges} from '@angular/core';\nimport {RenderingModule} from './rendering.module';\nimport {\n JobInfoControllerService,\n JobInfoReply,\n RenderControllerWrapperService,\n RenderDataRequestWithToken,\n RenderDataResponse\n} from 'ngx-rendering-service-api';\nimport {BehaviorSubject, debounceTime, firstValueFrom, interval, Subject, switchMap, takeUntil} from 'rxjs';\nimport {ImageComponent} from './module/image/image.component';\nimport {RenderingApiModule} from './rendering-api.module';\nimport {VideoComponent} from './module/video/video.component';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {EduSharingApiModule, Node} from 'ngx-edu-sharing-api';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {AssetStateItem, RenderData} from './dto/RenderData';\nimport {PdfComponent} from './module/pdf/pdf.component';\nimport {UrlComponent} from './module/url/url.component';\nimport {EduHtmlComponent} from './module/eduhtml/eduHtml.component';\nimport {ModuleInfoService} from '../module-info.service';\nimport {filter} from 'rxjs/operators';\nimport {PlatformLocation} from '@angular/common';\nimport {DefaultComponent} from './module/default/default.component';\nimport {FrontendModuleConfig} from './dto/FrontendModuleConfig';\nimport {AudioComponent} from './module/audio/audio.component';\nimport {BinderComponent} from './module/binder/binder.component';\nimport {DdbComponent} from './module/ddb/ddb.component';\nimport {TranslateService} from '@ngx-translate/core';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\nimport {ErrorComponent} from './module/error/error.component';\nimport {RENDERING_SERVICE_LIB_CONFIG, RenderingServiceLibConfiguration} from \"../rendering-service-lib-configuration\";\n\n@Component({\n selector: 'rs-root',\n standalone: true,\n imports: [\n RenderingApiModule,\n RenderingModule,\n ImageComponent,\n VideoComponent,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n PdfComponent,\n UrlComponent,\n EduHtmlComponent,\n DefaultComponent,\n AudioComponent,\n BinderComponent,\n DdbComponent,\n EduSharingApiModule,\n EduSharingUiModule,\n ErrorComponent,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './render.component.html',\n styleUrl: './render.component.scss'\n})\nexport class RenderComponent implements OnChanges, OnInit {\n @Input() request: RenderDataRequestWithToken | undefined;\n @Input() node: Node | undefined;\n @Input() serviceWorkerUrl: string | undefined;\n @Input() activateServiceWorker: boolean = true;\n serviceWorkerReady = false;\n loadData = new Subject<void>();\n renderData$ = new BehaviorSubject<RenderData | null>(null);\n finished = new Subject<void>();\n someButNotAllFinished = new Subject<Boolean>()\n progress$ = new BehaviorSubject<{ module: string, progress?: number } | null>(null);\n\n constructor(\n private renderControllerService: RenderControllerWrapperService,\n private jobInfoControllerService: JobInfoControllerService,\n private moduleInfoService: ModuleInfoService,\n private platformLocation: PlatformLocation,\n ) {\n this.loadData.pipe(\n filter(() => this.node !== undefined && this.serviceWorkerReady),\n debounceTime(10),\n switchMap(() => {\n // subscribe error handling\n return this.checkModule()\n })\n ).subscribe({\n next: async (frontendModule) => {\n // No further calls to rs2 necessary if we have a frontend only module\n if (frontendModule !== null) {\n const data: RenderData = {\n module: frontendModule.module,\n frontendModuleConfig: frontendModule\n }\n this.renderData$.next(data)\n this.finished.next()\n } else {\n try {\n const renderResponseData = await firstValueFrom(this.renderControllerService.getRenderDataToken(this.request!!))\n // Case 1: no job returned => no polling needed\n if (renderResponseData.jobId === null) {\n this.handleRenderingResponseWithoutJob(renderResponseData)\n } else {\n this.progress$.next({module: renderResponseData.module ?? ''});\n interval(500).pipe(\n takeUntil(this.finished),\n switchMap(() => this.jobInfoControllerService.getJobInfo({jobId: renderResponseData.jobId!!}).pipe()),\n ).subscribe({\n next: async (jobInfo) => {\n // Some, but not all, jobs are in a final status (this means some are still QUEUED or PROCESSING)\n if (jobInfo.jobs.some(j => j.status === 'FINISHED') && jobInfo.status !== 'FINISHED') {\n this.handleJobInfoWithSubJobsInProgress(renderResponseData, jobInfo)\n // main job finished or partially failed\n } else if (jobInfo.status === 'FINISHED' || jobInfo.status === 'PARTIALLY_FAILED') {\n this.handleFinishedOrPartialJobInfo(renderResponseData, jobInfo)\n // Main job failed => no module but error page\n } else if (jobInfo.status === 'FAILED') {\n this.handleFailedMainJob(jobInfo)\n } else {\n // no finished jobs -> show either one progress bar with race leader (progress 0-100)\n // or queue position (progress (-inf,-1])\n this.handleMainJobWithNoSubJobInFinalStatus(jobInfo)\n }\n },\n error: error => {\n this.handleApiError(error)\n }});\n }\n } catch (error) {\n this.handleApiError(error)\n }\n }\n },\n error: (error) => {\n this.handleApiError(error)\n }\n });\n }\n\n handleApiError(error: any) {\n const publicMessage = error.error.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: publicMessage\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n async ngOnInit() {\n // await firstValueFrom(this.translationsService.initialize())\n if (this.activateServiceWorker && 'serviceWorker' in navigator) {\n const reg = await navigator.serviceWorker.getRegistrations();\n await Promise.all(reg?.map((r: ServiceWorkerRegistration) => r.unregister()));\n const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');\n const scope = this.serviceWorkerUrl ? '/' : this.platformLocation.getBaseHrefFromDOM();\n const registration = await navigator.serviceWorker.register(serviceWorkerUrl, {\n scope: scope\n });\n if (registration.waiting) {\n registration.waiting.postMessage({type: 'SKIP_WAITING'});\n }\n this.serviceWorkerReady = true;\n this.loadData.next();\n registration.onupdatefound = () => {\n const newWorker = registration.installing;\n if (newWorker) {\n newWorker.onstatechange = () => {\n if (newWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n newWorker.postMessage({type: 'SKIP_WAITING'});\n }\n }\n };\n }\n };\n navigator.serviceWorker.addEventListener('controllerchange', () => {\n console.info('Service Worker controlling this page.');\n });\n } else if ('serviceWorker' in navigator && this.activateServiceWorker){\n console.warn('Service worker API not available');\n }\n }\n\n async ngOnChanges(_: SimpleChanges) {\n this.loadData.next();\n }\n\n async checkModule(): Promise<FrontendModuleConfig | null> {\n if (!await this.moduleInfoService.isAvailableBackendObject(this.node)) {\n if (this.node !== undefined) {\n return this.moduleInfoService.getFrontendModuleSetting(this.node)\n }\n return {module: 'default', urlModuleConfig: null}\n } else {\n return null\n }\n }\n\n handleRenderingResponseWithoutJob(renderDataResponse: RenderDataResponse) {\n const items = renderDataResponse.objectLinks?.map(item => {\n const assetItem: AssetStateItem = {\n link: item.link,\n progress: 100,\n height: item.height,\n width: item.width,\n additionalData: undefined,\n status: 'FINISHED'\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n renderDataResponse.objectLinks !== undefined && this.renderData$.next(data);\n this.finished.next();\n }\n\n handleJobInfoWithSubJobsInProgress(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.status !== 'QUEUED' ? subJob.progress : -(subJob.progress + 1),\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n status: subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.someButNotAllFinished.next(true)\n }\n\n handleFinishedOrPartialJobInfo(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.progress,\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n publicErrorMessage: subJob.error?.userMessage,\n status:subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleFailedMainJob(jobInfo: JobInfoReply) {\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: jobInfo.errorMessage?.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleMainJobWithNoSubJobInFinalStatus(jobInfo: JobInfoReply) {\n let progress = 0\n if (jobInfo.jobs.some(j => j.status === 'PROCESSING')) {\n progress = Math.max(...jobInfo.jobs.map(j => j.progress))\n } else if (jobInfo.jobs.some(j => j.status === 'QUEUED')) {\n progress = -(Math.min(...jobInfo.jobs.map(j => j.progress + 1)))\n }\n this.progress$.next({\n module: jobInfo.module ?? '',\n progress: progress\n });\n }\n}\n","<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RenderComponent} from './lib/render.component';\nimport {CommonModule} from '@angular/common';\nimport {EduSharingUiConfigurationParams} from \"ngx-edu-sharing-ui/lib/edu-sharing-ui-configuration\";\nimport {getConfigProvider, RenderingServiceLibConfigurationParams} from \"./rendering-service-lib-configuration\";\n\n@NgModule({\n declarations: [],\n imports: [\n RenderComponent,\n CommonModule,\n ],\n exports: [\n CommonModule,\n RenderComponent,\n ],\n})\nexport class RenderingServiceLibModule {\n public static forRoot(\n params: RenderingServiceLibConfigurationParams\n): ModuleWithProviders<RenderingServiceLibModule> {\n return {\n ngModule: RenderingServiceLibModule,\n providers: [getConfigProvider(params)]\n };\n }\n}\n","/*\n * Public API Surface of edu-sharing-ui\n */\n\nexport * from './lib/rendering.module';\nexport * from './lib/module/image/image.component';\nexport * from './lib/module/video/video.component';\nexport * from './lib/module/pdf/pdf.component';\nexport * from './lib/module/url/url.component';\nexport * from './lib/module/eduhtml/eduHtml.component';\nexport * from './lib/render.component';\nexport * from './lib/asset-link.pipe';\nexport * from './rendering-service-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.AssetLinkPipe","i3","i2","i4","i2.ModuleInfoService"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-rendering-service-lib.mjs","sources":["../../src/lib/asset-link.pipe.ts","../../src/lib/rendering.module.ts","../../src/lib/module/image/image.component.ts","../../src/lib/module/image/image.component.html","../../src/lib/module/video/video.component.ts","../../src/lib/module/video/video.component.html","../../src/rendering-service-lib-configuration.ts","../../src/lib/module/pdf/pdf.component.ts","../../src/lib/module/pdf/pdf.component.html","../../src/lib/dto/FrontendModuleConfig.ts","../../src/lib/module/url/url.component.ts","../../src/lib/module/url/url.component.html","../../src/lib/module/eduhtml/eduHtml.component.ts","../../src/lib/module/eduhtml/eduHtml.component.html","../../src/lib/rendering-api.module.ts","../../src/module-info.service.ts","../../src/lib/render.component.ts","../../src/lib/render.component.html","../../src/rendering-service-lib.module.ts","../../src/index.ts","../../src/ngx-rendering-service-lib.ts"],"sourcesContent":["import {Injector, Pipe, PipeTransform} from '@angular/core';\nimport {RSApiConfiguration} from 'ngx-rendering-service-api';\n\n/**\n * this pipe transforms any reported asset data uri from the rendering to the uri that is currently configured for the backend\n * this is required in case the rendering service is behind a proxy, i.e. in dev mode\n */\n@Pipe({ name: 'rsAssetLink' })\nexport class AssetLinkPipe implements PipeTransform {\n constructor(\n private injector: Injector,\n ) {\n }\n\n transform(value: string | undefined) {\n if(value) {\n const str = value.split('/public');\n str[0] = this.injector.get(RSApiConfiguration).rootUrl;\n return str.join('/public');\n }\n return value;\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AssetLinkPipe} from './asset-link.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n AssetLinkPipe,\n ],\n exports: [\n CommonModule,\n AssetLinkPipe,\n ]\n})\nexport class RenderingModule {}\n","import {AfterViewInit, Component, ElementRef, HostListener, Input, signal} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\n\n@Component({\n selector: 'rs-module-image',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './image.component.html',\n styleUrl: './image.component.scss'\n})\nexport class ImageComponent implements RenderModule, AfterViewInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n activeObject = signal<AssetStateItem | undefined>(undefined);\n constructor(public element: ElementRef) { }\n ngAfterViewInit(): void {\n this.loadOptimalSize();\n }\n\n @HostListener('document:fullscreenchange')\n private loadOptimalSize() {\n const size = this.element.nativeElement.getBoundingClientRect();\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n const matchingItem = allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - size.width) > Math.abs(b.width - size.width) ? 1 : -1;\n })[0]\n this.activeObject.set(matchingItem);\n }\n\n toggleFullscreen() {\n if(document.fullscreenElement) {\n void document.exitFullscreen();\n } else {\n this.element.nativeElement.requestFullscreen();\n }\n }\n}\n","<div class=\"image-wrapper\"\n *ngIf=\"activeObject()\"\n>\n <img\n #image\n [src]=\"activeObject()?.link | rsAssetLink\"\n [alt]=\"node?.title || node?.name || ''\"\n >\n <button mat-icon-button (click)=\"toggleFullscreen()\"><mat-icon>fullscreen</mat-icon></button>\n</div>\n","import {AfterViewInit, Component, ElementRef, Input, signal, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatIconButton} from '@angular/material/button';\nimport {FormsModule} from '@angular/forms';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-video',\n standalone: true,\n imports: [\n RenderingModule,\n MatIcon,\n MatIconButton,\n FormsModule,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n EduSharingUiModule\n ],\n templateUrl: './video.component.html',\n styleUrl: './video.component.scss'\n})\nexport class VideoComponent implements RenderModule, AfterViewInit{\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n @ViewChild('video') videoRef: ElementRef<HTMLVideoElement> | undefined\n activeObject = signal<AssetStateItem | undefined>(undefined);\n hasMultipleResolutions: Boolean = true\n\n ngAfterViewInit(): void {\n this.hasMultipleResolutions = (this.data?.items?.length ?? 1) > 1\n const downlink: number = (navigator as any).connection?.downlink;\n let optimalResolution = 720;\n if(downlink < 2) {\n optimalResolution = 240;\n }\n if(downlink > 6) {\n optimalResolution = 1080;\n }\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n this.activeObject.set(allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - optimalResolution) > Math.abs(b.width - optimalResolution) ? 1 : -1;\n })[0]);\n }\n\n switchResolution(item: AssetStateItem) {\n this.activeObject.set(item)\n const currentTime = this.videoRef?.nativeElement.currentTime\n this.videoRef?.nativeElement.load()\n if (currentTime !== undefined) {\n this.videoRef!.nativeElement.currentTime = currentTime\n }\n }\n\n protected readonly JSON = JSON;\n}\n","<div class=\"video-wrapper\" *ngIf=\"activeObject()\">\n <video\n controls\n #video\n >\n <source [src]=\"activeObject()?.link | rsAssetLink\" />\n </video>\n <button *ngIf=\"hasMultipleResolutions\"\n mat-icon-button\n [matMenuTriggerFor]=\"resolutionMenu\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n <mat-menu\n #resolutionMenu=\"matMenu\"\n xPosition=\"before\"\n >\n <button\n mat-menu-item\n *ngFor=\"let item of data?.items\"\n [disabled]=\"item.link === ''\"\n (click)=\"item.height !== activeObject()?.height && switchResolution(item)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"item.link !== '' ? ready : loading\"\n [ngTemplateOutletContext]=\"{item:item}\"\n >\n </ng-container>\n </button>\n\n </mat-menu>\n</div>\n\n<ng-template #ready let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <mat-icon *ngIf=\"item.height === activeObject()?.height\">\n done\n </mat-icon>\n <div *ngIf=\"item.height !== activeObject()?.height\"></div>\n <div>\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <div>\n <ng-container *ngIf=\"item.status === 'PROCESSING'; else queue\">\n {{ 'RENDERING.CONVERTING' | translate }}: {{ item.progress }}%\n </ng-container>\n <ng-template #queue>\n {{ 'RENDERING.QUEUED' | translate }}: {{ item.progress }}\n </ng-template>\n </div>\n <div style=\"padding-left: .5em\">\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const RENDERING_SERVICE_LIB_CONFIG = new InjectionToken<RenderingServiceLibConfiguration>(\n 'RENDERING_SERVICE_LIB_CONFIG',\n);\n@Injectable({\n providedIn: 'root',\n})\nexport class RenderingServiceLibConfiguration {\n /**\n * the assets url\n * this is important for modules that require to fetch external javascript, i.e. ng2-pdfjs-viewer\n */\n assetsUrl: string | null = null;\n static create(params: RenderingServiceLibConfigurationParams = {}): RenderingServiceLibConfiguration {\n return { ...new RenderingServiceLibConfiguration(), ...params };\n }\n}\n\nexport type RenderingServiceLibConfigurationParams = Partial<RenderingServiceLibConfiguration>;\n\nexport function getConfigProvider(params?: RenderingServiceLibConfigurationParams): Provider[] {\n return [\n // Provide the params given to `forRoot()`. These can be overridden by the application by\n // providing `EDU_SHARING_API_CONFIG` itself.\n {\n provide: RENDERING_SERVICE_LIB_CONFIG,\n useValue: params,\n }\n ];\n}\n","import {Component, Inject, Input, OnChanges, Optional, SimpleChanges, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {PdfJsViewerComponent, PdfJsViewerModule} from 'ng2-pdfjs-viewer';\nimport {AssetControllerService, GetAsset$Params} from 'ngx-rendering-service-api';\nimport {\n RENDERING_SERVICE_LIB_CONFIG,\n RenderingServiceLibConfiguration\n} from \"../../../rendering-service-lib-configuration\";\n\n\n@Component({\n selector: 'rs-module-pdf',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n PdfJsViewerModule\n ],\n templateUrl: './pdf.component.html',\n styleUrl: './pdf.component.scss'\n})\nexport class PdfComponent implements RenderModule, OnChanges {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n @ViewChild('pdfViewer') viewerRef: PdfJsViewerComponent | undefined\n restrictedView: boolean = false\n fileData: Blob | undefined\n\n constructor(\n private assetControllerService: AssetControllerService,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n this.downloadFile()\n }\n\n private downloadFile() {\n if (this.data?.items === undefined || this.data.items[0].link === '') {\n return\n }\n const url = new URL(this.data.items[0].link)\n const assetParams = url.searchParams.get('assetParams')\n if (assetParams === null) {\n return\n }\n const params: GetAsset$Params = {\n assetParams: assetParams\n }\n this.assetControllerService.getAsset$Response(params)\n .subscribe(async (response) => {\n let responseData = response.body\n if (response.headers.get('content-type') === 'application/octet-stream') {\n this.restrictedView = true\n responseData = responseData.slice(0, responseData.size, 'application/pdf')\n }\n this.fileData = responseData\n }\n )\n }\n\n onDocumentLoad() {\n const iFrameDocument = this.viewerRef?.iframe.nativeElement.contentWindow.document\n // Always hide document properties button in right dropdown menu\n iFrameDocument.getElementById('documentProperties').style.display = 'none'\n iFrameDocument.querySelector('.horizontalToolbarSeparator.spreadModeButtons').style.display = 'none'\n if (this.restrictedView) {\n const iFrameWindow = this.viewerRef?.iframe.nativeElement.contentWindow\n // Disable printing in iframe\n iFrameWindow.print = () => {alert('Nice try!')}\n // Disable selection tool and remove the corresponding button from the right dropdown menu\n iFrameDocument.querySelector('.textLayer').style.display = 'none'\n iFrameDocument.getElementById('cursorSelectTool').style.display = 'none'\n // Disable context menu in iframe\n iFrameDocument.body.addEventListener('contextmenu', (event:MouseEvent) => {event.preventDefault();});\n // Disable printing via keyboard shortcuts\n ['keyup', 'keydown'].forEach(type => {\n iFrameDocument.addEventListener(type, (event:KeyboardEvent) => {\n if ((event.key === 's' && event.ctrlKey) || event.key === 'F12') {\n event.preventDefault();\n if (event.stopImmediatePropagation) {\n event.stopImmediatePropagation();\n } else {\n event.stopPropagation();\n }\n }\n })\n })\n }\n }\n}\n","<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n","\nexport type FrontendModuleConfig = {\n module: string,\n urlModuleConfig: UrlModuleConfig | null\n}\n\nexport type UrlModuleConfig = {\n embedding: UrlEmbeddings,\n externalId: string\n}\n\nexport enum UrlEmbeddings {\n YOUTUBE,\n VIMEO,\n VIDEO,\n AUDIO,\n IMAGE,\n LTI13TOOL,\n H5P,\n PREZI,\n LEARNINGAPPS\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {YouTubePlayer} from '@angular/youtube-player';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {NgOptimizedImage} from '@angular/common';\nimport {RenderData} from '../../dto/RenderData';\nimport {UrlEmbeddings} from '../../dto/FrontendModuleConfig';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-url',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n YouTubePlayer,\n NgOptimizedImage,\n EduSharingUiModule,\n ],\n templateUrl: './url.component.html',\n styleUrl: './url.component.scss'\n})\nexport class UrlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n gdpr: any[] | undefined = undefined\n gdprOk: boolean = true\n embedding?: UrlEmbeddings\n externalId?: string\n sanitizedUrl: SafeResourceUrl | null = null\n url: string = ''\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n this.embedding = this.data?.frontendModuleConfig?.urlModuleConfig?.embedding\n this.externalId = this.data?.frontendModuleConfig?.urlModuleConfig?.externalId\n this.url = this.node?.properties?.['ccm:wwwurl']?.[0] || ''\n if (this.embedding === UrlEmbeddings.VIMEO) {\n this.sanitizedUrl = this.getVimeoUri()\n } else if (this.embedding === UrlEmbeddings.PREZI) {\n this.sanitizedUrl = this.getPreziUrl()\n } else if (this.embedding === UrlEmbeddings.LEARNINGAPPS) {\n this.sanitizedUrl = this.getLearningAppsUrl()\n }\n }\n\n isProtected(): boolean {\n return this.gdpr === undefined;\n }\n\n consentToGdprWarning() {\n this.gdprOk = true\n }\n\n getVimeoUri(): SafeResourceUrl {\n let url = '//player.vimeo.com/video/' + this.externalId\n return this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n getPreziUrl(): SafeResourceUrl {\n const preziUrl = this.url.slice(-1) === '/' ? this.url.substring(0, this.url.length - 1) : this.url\n return this.sanitizer.bypassSecurityTrustResourceUrl(preziUrl)\n }\n\n getLearningAppsUrl(): SafeResourceUrl {\n const learningAppsUrl = this.url.replace('https://learningapps.org/', 'https://learningapps.org/view')\n return this.sanitizer.bypassSecurityTrustResourceUrl(learningAppsUrl)\n }\n\n protected readonly UrlEmbeddings = UrlEmbeddings;\n}\n","<div class=\"url-wrapper\">\n <div *ngIf=\"gdprOk\">\n <ng-container *ngIf=\"embedding === UrlEmbeddings.YOUTUBE && externalId !== ''\">\n <youtube-player\n [videoId]=\"externalId ?? ''\"\n [disableCookies]=\"true\"\n ></youtube-player>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIMEO && externalId !== ''\">\n <iframe class=\"vimeoFrame\" [src]=\"sanitizedUrl\"></iframe>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.AUDIO && url !== ''\" >\n <div class=\"audio-wrapper\">\n <video\n controls\n style=\"max-width: 100%\"\n [src]=\"url\"\n poster=\"assets/img/audio.svg\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.IMAGE && url !== ''\">\n <div class=\"image-wrapper\">\n <img\n [ngSrc]=\"url\"\n [alt]=\"node?.title ?? 'Edu-Sharing image'\"\n [title]=\"node?.title ?? 'Edu-Sharing image'\"\n >\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIDEO && url !== ''\">\n <div class=\"video-wrapper\">\n <video\n controls\n [src]=\"url\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(embedding === UrlEmbeddings.PREZI || embedding === UrlEmbeddings.LEARNINGAPPS) && url !== ''\">\n <iframe class=\"eduUrlFrame\" [src]=sanitizedUrl allowfullscreen=\"\" allow=\"autoplay; fullscreen\" ></iframe>\n </ng-container>\n\n </div>\n <div *ngIf=\"!gdprOk\">\n {{ 'RENDERING.GDPR.GDPR_DIALOG' | translate }}\n <button mat-button (click)=\"consentToGdprWarning()\">{{'RENDERING.GDPR.GDPR_CONTINUE' | translate}}</button>\n </div>\n</div>\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\n\n@Component({\n selector: 'rs-module-edu-html',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './eduHtml.component.html',\n styleUrl: './eduHtml.component.scss'\n})\nexport class EduHtmlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n sanitizedUrl: SafeResourceUrl = new class implements SafeResourceUrl {\n }\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n this.sanitizedUrl = this.getSafeUri()\n }\n }\n\n getSafeUri() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n const uri = new URL(this.data.items[0].link)\n /**\n if (uri.hostname.includes('nip.io')) {\n uri.hostname = 'localhost'\n }\n */\n return this.sanitizer.bypassSecurityTrustResourceUrl(uri.toString())\n }\n return new class implements SafeResourceUrl {\n }\n }\n}\n","<div class=\"eduHtml-wrapper\" *ngIf=\"data?.items !== undefined\">\n <iframe class=\"frame\" [src]=\"sanitizedUrl\"></iframe>\n</div>\n","import {NgModule} from '@angular/core';\n\n@NgModule({\n imports: []\n})\nexport class RenderingApiModule {}\n","import {Injectable} from '@angular/core';\nimport {ModuleInfoControllerService} from 'ngx-rendering-service-api';\nimport {firstValueFrom} from 'rxjs';\nimport {Node, RestConstants} from 'ngx-edu-sharing-api';\nimport {FrontendModuleConfig, UrlEmbeddings, UrlModuleConfig} from './lib/dto/FrontendModuleConfig';\n\n@Injectable({providedIn: 'root'})\nexport class ModuleInfoService {\n\n private availableMediaTypes: String[] = []\n private availableMimeTypes: String[] = []\n private availableMimeTypePrefixes: String[] = []\n private availableReplicationSources: String[] = []\n private availableResourceTypes: String[] = []\n private availableRemoteRepositories: String[] = []\n\n constructor(\n private service: ModuleInfoControllerService\n ) {}\n\n async isAvailableBackendObject(node: Node| undefined): Promise<boolean> {\n if (!this.isInitialized()) {\n const result = await firstValueFrom(this.service.getModulesInfo({repoId: node?.ref.repo ?? ''}))\n result.forEach(info => {\n if (info.typeMapping.type !== undefined && info.typeMapping.type !== null) {\n this.availableMediaTypes.push(info.typeMapping.type)\n } else if (info.typeMapping.remoteRepositoryType !== undefined && info.typeMapping.remoteRepositoryType !== null) {\n this.availableRemoteRepositories.push(info.typeMapping.remoteRepositoryType)\n } else if(info.typeMapping.resourceType !== undefined && info.typeMapping.resourceType !== null) {\n this.availableResourceTypes.push(info.typeMapping.resourceType)\n } else if(info.typeMapping.replicationSource !== undefined && info.typeMapping.replicationSource !== null) {\n this.availableReplicationSources.push(info.typeMapping.replicationSource)\n } else if (info.typeMapping.mimeTypeSuffix !== undefined\n && info.typeMapping.mimeTypeSuffix !== null\n && info.typeMapping.mimeTypePrefix !== undefined\n && info.typeMapping.mimeTypePrefix !== null\n ) {\n this.availableMimeTypes.push(`${info.typeMapping.mimeTypePrefix}/${info.typeMapping.mimeTypeSuffix}`)\n } else if (info.typeMapping.mimeTypePrefix !== undefined && info.typeMapping.mimeTypePrefix !== null) {\n this.availableMimeTypePrefixes.push(info.typeMapping.mimeTypePrefix)\n }\n })\n }\n const mimeTypePrefix = (node?.mimetype ?? '').split('/', 2)[0]\n return this.availableMediaTypes.includes(node?.mediatype ?? '') ||\n this.availableRemoteRepositories.includes(node?.remote?.repository?.repositoryType ?? '') ||\n this.availableReplicationSources.includes(node?.properties?.[RestConstants.CCM_PROP_REPLICATIONSOURCE]?.[0]?? '') ||\n this.availableResourceTypes.includes(node?.properties?.[RestConstants.CCM_PROP_CCRESSOURCETYPE]?.[0]?? '') ||\n this.availableMimeTypes.includes(node?.mimetype ?? '') ||\n this.availableMimeTypePrefixes.includes(mimeTypePrefix)\n }\n\n private isInitialized(): boolean {\n return this.availableMediaTypes.length\n + this.availableMimeTypes.length\n + this.availableMimeTypePrefixes.length\n + this.availableReplicationSources.length\n + this.availableResourceTypes.length\n + this.availableRemoteRepositories.length !== 0\n }\n\n getFrontendModuleSetting(node: Node): FrontendModuleConfig {\n const urlModuleConfig = this.checkUrlModule(node)\n if (urlModuleConfig !== null) {\n return urlModuleConfig\n }\n return {\n module: 'default',\n urlModuleConfig: null\n }\n }\n\n checkUrlModule(node: Node): FrontendModuleConfig | null {\n const url = node.properties?.['ccm:wwwurl']?.[0] || ''\n const checkLearningApps = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'learningapps') {\n return {\n embedding: UrlEmbeddings.LEARNINGAPPS,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkYouTube\n */\n const checkYouTube = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'youtube') {\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: node.remote?.id ?? ''\n }\n }\n if (url.includes('youtu.be') ) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: split[split.length - 1]\n }\n }\n if (url.includes('.youtube.com/watch?')) {\n const urlObject = new URL(url)\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: urlObject.searchParams.get('v') ?? ''\n }\n }\n return null\n }\n /**\n * Function checkVimeo\n */\n const checkVimeo = (): UrlModuleConfig | null => {\n if (url.includes('vimeo.com')) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.VIMEO,\n externalId: split[split.length - 1]\n }\n }\n return null\n }\n const checkGenericVideo = (): UrlModuleConfig | null => {\n if (url.length > 0 && ['mp4', 'webm'].includes(url.split('.').pop() ?? '')) {\n return {\n embedding: UrlEmbeddings.VIDEO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkAudio\n */\n const checkAudio = (): UrlModuleConfig | null => {\n if (url.length > 0 && node.mimetype?.startsWith('audio')) {\n return {\n embedding: UrlEmbeddings.AUDIO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkLti13ToolObject\n */\n const checkLti13ToolObject = (): UrlModuleConfig | null => {\n if (node.aspects?.includes('ccm:ltitool_node')) {\n return {\n embedding: UrlEmbeddings.LTI13TOOL,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkImage\n */\n const checkImage = (): UrlModuleConfig | null => {\n if (node.properties?.['ccm:remoterepositorytype']?.[0] === 'DDB') {\n return null\n }\n if (node.mediatype === 'file-image') {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n const mimeTypeSplit = node.mimetype?.split('/') ?? []\n if (mimeTypeSplit.length === 2 && ['png', 'jpg', 'jpeg', 'gif'].includes(mimeTypeSplit[1])) {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectH5P\n */\n const detectH5P = (): UrlModuleConfig | null => {\n if (url.length > 0 && url.includes('h5p.org/h5p/embed')) {\n return {\n embedding: UrlEmbeddings.H5P,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectPrezi\n */\n const detectPrezi = (): UrlModuleConfig | null => {\n if (url.length > 0 &&\n (url.includes('prezi.com/view/') || url.includes('prezi.com/embed/') || url.includes('prezi.com/p/embed'))\n ) {\n return {\n embedding: UrlEmbeddings.PREZI,\n externalId: ''\n }\n }\n return null\n }\n\n /**\n * embedding if applicable to node\n */\n const embedding =\n checkLearningApps()\n ?? checkYouTube()\n ?? checkVimeo()\n ?? checkGenericVideo()\n ?? checkAudio()\n ?? checkImage()\n ?? checkLti13ToolObject()\n ?? detectH5P()\n ?? detectPrezi()\n\n if (embedding !== null) {\n return {\n module: 'url',\n urlModuleConfig: embedding\n }\n }\n return null\n }\n}\n","import {Component, Inject, Input, OnChanges, OnInit, Optional, SimpleChanges} from '@angular/core';\nimport {RenderingModule} from './rendering.module';\nimport {\n JobInfoControllerService,\n JobInfoReply,\n RenderControllerWrapperService,\n RenderDataRequestWithToken,\n RenderDataResponse\n} from 'ngx-rendering-service-api';\nimport {BehaviorSubject, debounceTime, firstValueFrom, interval, Subject, switchMap, takeUntil} from 'rxjs';\nimport {ImageComponent} from './module/image/image.component';\nimport {RenderingApiModule} from './rendering-api.module';\nimport {VideoComponent} from './module/video/video.component';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {EduSharingApiModule, Node} from 'ngx-edu-sharing-api';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {AssetStateItem, RenderData} from './dto/RenderData';\nimport {PdfComponent} from './module/pdf/pdf.component';\nimport {UrlComponent} from './module/url/url.component';\nimport {EduHtmlComponent} from './module/eduhtml/eduHtml.component';\nimport {ModuleInfoService} from '../module-info.service';\nimport {filter} from 'rxjs/operators';\nimport {PlatformLocation} from '@angular/common';\nimport {DefaultComponent} from './module/default/default.component';\nimport {FrontendModuleConfig} from './dto/FrontendModuleConfig';\nimport {AudioComponent} from './module/audio/audio.component';\nimport {BinderComponent} from './module/binder/binder.component';\nimport {DdbComponent} from './module/ddb/ddb.component';\nimport {TranslateService} from '@ngx-translate/core';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\nimport {ErrorComponent} from './module/error/error.component';\nimport {RENDERING_SERVICE_LIB_CONFIG, RenderingServiceLibConfiguration} from \"../rendering-service-lib-configuration\";\n\n@Component({\n selector: 'rs-root',\n standalone: true,\n imports: [\n RenderingApiModule,\n RenderingModule,\n ImageComponent,\n VideoComponent,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n PdfComponent,\n UrlComponent,\n EduHtmlComponent,\n DefaultComponent,\n AudioComponent,\n BinderComponent,\n DdbComponent,\n EduSharingApiModule,\n EduSharingUiModule,\n ErrorComponent,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './render.component.html',\n styleUrl: './render.component.scss'\n})\nexport class RenderComponent implements OnChanges, OnInit {\n @Input() request: RenderDataRequestWithToken | undefined;\n @Input() node: Node | undefined;\n @Input() serviceWorkerUrl: string | undefined;\n @Input() activateServiceWorker: boolean = true;\n @Input() assetUrl: string = '';\n serviceWorkerReady = false;\n loadData = new Subject<void>();\n renderData$ = new BehaviorSubject<RenderData | null>(null);\n finished = new Subject<void>();\n someButNotAllFinished = new Subject<Boolean>()\n progress$ = new BehaviorSubject<{ module: string, progress?: number } | null>(null);\n\n constructor(\n private renderControllerService: RenderControllerWrapperService,\n private jobInfoControllerService: JobInfoControllerService,\n private moduleInfoService: ModuleInfoService,\n private platformLocation: PlatformLocation,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {\n this.loadData.pipe(\n filter(() => this.node !== undefined && this.serviceWorkerReady),\n debounceTime(10),\n switchMap(() => {\n // subscribe error handling\n return this.checkModule()\n })\n ).subscribe({\n next: async (frontendModule) => {\n // No further calls to rs2 necessary if we have a frontend only module\n if (frontendModule !== null) {\n const data: RenderData = {\n module: frontendModule.module,\n frontendModuleConfig: frontendModule\n }\n this.renderData$.next(data)\n this.finished.next()\n } else {\n try {\n const renderResponseData = await firstValueFrom(this.renderControllerService.getRenderDataToken(this.request!!))\n // Case 1: no job returned => no polling needed\n if (renderResponseData.jobId === null) {\n this.handleRenderingResponseWithoutJob(renderResponseData)\n } else {\n this.progress$.next({module: renderResponseData.module ?? ''});\n interval(500).pipe(\n takeUntil(this.finished),\n switchMap(() => this.jobInfoControllerService.getJobInfo({jobId: renderResponseData.jobId!!}).pipe()),\n ).subscribe({\n next: async (jobInfo) => {\n // Some, but not all, jobs are in a final status (this means some are still QUEUED or PROCESSING)\n if (jobInfo.jobs.some(j => j.status === 'FINISHED') && jobInfo.status !== 'FINISHED') {\n this.handleJobInfoWithSubJobsInProgress(renderResponseData, jobInfo)\n // main job finished or partially failed\n } else if (jobInfo.status === 'FINISHED' || jobInfo.status === 'PARTIALLY_FAILED') {\n this.handleFinishedOrPartialJobInfo(renderResponseData, jobInfo)\n // Main job failed => no module but error page\n } else if (jobInfo.status === 'FAILED') {\n this.handleFailedMainJob(jobInfo)\n } else {\n // no finished jobs -> show either one progress bar with race leader (progress 0-100)\n // or queue position (progress (-inf,-1])\n this.handleMainJobWithNoSubJobInFinalStatus(jobInfo)\n }\n },\n error: error => {\n this.handleApiError(error)\n }});\n }\n } catch (error) {\n this.handleApiError(error)\n }\n }\n },\n error: (error) => {\n this.handleApiError(error)\n }\n });\n }\n\n handleApiError(error: any) {\n const publicMessage = error.error.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: publicMessage\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n async ngOnInit() {\n if (this.assetUrl !== '') {\n console.info(\"setting assetUrl to: \" + this.assetUrl + \"\");\n this.configuration.assetsUrl = this.assetUrl;\n }\n // await firstValueFrom(this.translationsService.initialize())\n if (this.activateServiceWorker && 'serviceWorker' in navigator) {\n const reg = await navigator.serviceWorker.getRegistrations();\n await Promise.all(reg?.map((r: ServiceWorkerRegistration) => r.unregister()));\n const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');\n const scope = this.serviceWorkerUrl ? '/' : this.platformLocation.getBaseHrefFromDOM();\n const registration = await navigator.serviceWorker.register(serviceWorkerUrl, {\n scope: scope\n });\n if (registration.waiting) {\n registration.waiting.postMessage({type: 'SKIP_WAITING'});\n }\n this.serviceWorkerReady = true;\n this.loadData.next();\n registration.onupdatefound = () => {\n const newWorker = registration.installing;\n if (newWorker) {\n newWorker.onstatechange = () => {\n if (newWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n newWorker.postMessage({type: 'SKIP_WAITING'});\n }\n }\n };\n }\n };\n navigator.serviceWorker.addEventListener('controllerchange', () => {\n console.info('Service Worker controlling this page.');\n });\n } else if ('serviceWorker' in navigator && this.activateServiceWorker){\n console.warn('Service worker API not available');\n }\n }\n\n async ngOnChanges(_: SimpleChanges) {\n this.loadData.next();\n }\n\n async checkModule(): Promise<FrontendModuleConfig | null> {\n if (!await this.moduleInfoService.isAvailableBackendObject(this.node)) {\n if (this.node !== undefined) {\n return this.moduleInfoService.getFrontendModuleSetting(this.node)\n }\n return {module: 'default', urlModuleConfig: null}\n } else {\n return null\n }\n }\n\n handleRenderingResponseWithoutJob(renderDataResponse: RenderDataResponse) {\n const items = renderDataResponse.objectLinks?.map(item => {\n const assetItem: AssetStateItem = {\n link: item.link,\n progress: 100,\n height: item.height,\n width: item.width,\n additionalData: undefined,\n status: 'FINISHED'\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n renderDataResponse.objectLinks !== undefined && this.renderData$.next(data);\n this.finished.next();\n }\n\n handleJobInfoWithSubJobsInProgress(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.status !== 'QUEUED' ? subJob.progress : -(subJob.progress + 1),\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n status: subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.someButNotAllFinished.next(true)\n }\n\n handleFinishedOrPartialJobInfo(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.progress,\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n publicErrorMessage: subJob.error?.userMessage,\n status:subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleFailedMainJob(jobInfo: JobInfoReply) {\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: jobInfo.errorMessage?.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleMainJobWithNoSubJobInFinalStatus(jobInfo: JobInfoReply) {\n let progress = 0\n if (jobInfo.jobs.some(j => j.status === 'PROCESSING')) {\n progress = Math.max(...jobInfo.jobs.map(j => j.progress))\n } else if (jobInfo.jobs.some(j => j.status === 'QUEUED')) {\n progress = -(Math.min(...jobInfo.jobs.map(j => j.progress + 1)))\n }\n this.progress$.next({\n module: jobInfo.module ?? '',\n progress: progress\n });\n }\n}\n","<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RenderComponent} from './lib/render.component';\nimport {CommonModule} from '@angular/common';\nimport {EduSharingUiConfigurationParams} from \"ngx-edu-sharing-ui/lib/edu-sharing-ui-configuration\";\nimport {getConfigProvider, RenderingServiceLibConfigurationParams} from \"./rendering-service-lib-configuration\";\n\n@NgModule({\n declarations: [],\n imports: [\n RenderComponent,\n CommonModule,\n ],\n exports: [\n CommonModule,\n RenderComponent,\n ],\n})\nexport class RenderingServiceLibModule {\n public static forRoot(\n params: RenderingServiceLibConfigurationParams\n): ModuleWithProviders<RenderingServiceLibModule> {\n return {\n ngModule: RenderingServiceLibModule,\n providers: [getConfigProvider(params)]\n };\n }\n}\n","/*\n * Public API Surface of edu-sharing-ui\n */\n\nexport * from './lib/rendering.module';\nexport * from './lib/module/image/image.component';\nexport * from './lib/module/video/video.component';\nexport * from './lib/module/pdf/pdf.component';\nexport * from './lib/module/url/url.component';\nexport * from './lib/module/eduhtml/eduHtml.component';\nexport * from './lib/render.component';\nexport * from './lib/asset-link.pipe';\nexport * from './rendering-service-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.AssetLinkPipe","i3","i2","i4"],"mappings":"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"}
@@ -6,16 +6,19 @@ import { RenderData } from './dto/RenderData';
6
6
  import { ModuleInfoService } from '../module-info.service';
7
7
  import { PlatformLocation } from '@angular/common';
8
8
  import { FrontendModuleConfig } from './dto/FrontendModuleConfig';
9
+ import { RenderingServiceLibConfiguration } from "../rendering-service-lib-configuration";
9
10
  import * as i0 from "@angular/core";
10
11
  export declare class RenderComponent implements OnChanges, OnInit {
11
12
  private renderControllerService;
12
13
  private jobInfoControllerService;
13
14
  private moduleInfoService;
14
15
  private platformLocation;
16
+ configuration: RenderingServiceLibConfiguration;
15
17
  request: RenderDataRequestWithToken | undefined;
16
18
  node: Node | undefined;
17
19
  serviceWorkerUrl: string | undefined;
18
20
  activateServiceWorker: boolean;
21
+ assetUrl: string;
19
22
  serviceWorkerReady: boolean;
20
23
  loadData: Subject<void>;
21
24
  renderData$: BehaviorSubject<RenderData | null>;
@@ -25,7 +28,7 @@ export declare class RenderComponent implements OnChanges, OnInit {
25
28
  module: string;
26
29
  progress?: number | undefined;
27
30
  } | null>;
28
- constructor(renderControllerService: RenderControllerWrapperService, jobInfoControllerService: JobInfoControllerService, moduleInfoService: ModuleInfoService, platformLocation: PlatformLocation);
31
+ constructor(renderControllerService: RenderControllerWrapperService, jobInfoControllerService: JobInfoControllerService, moduleInfoService: ModuleInfoService, platformLocation: PlatformLocation, configuration: RenderingServiceLibConfiguration);
29
32
  handleApiError(error: any): void;
30
33
  ngOnInit(): Promise<void>;
31
34
  ngOnChanges(_: SimpleChanges): Promise<void>;
@@ -35,6 +38,6 @@ export declare class RenderComponent implements OnChanges, OnInit {
35
38
  handleFinishedOrPartialJobInfo(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply): void;
36
39
  handleFailedMainJob(jobInfo: JobInfoReply): void;
37
40
  handleMainJobWithNoSubJobInFinalStatus(jobInfo: JobInfoReply): void;
38
- static ɵfac: i0.ɵɵFactoryDeclaration<RenderComponent, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<RenderComponent, "rs-root", never, { "request": { "alias": "request"; "required": false; }; "node": { "alias": "node"; "required": false; }; "serviceWorkerUrl": { "alias": "serviceWorkerUrl"; "required": false; }; "activateServiceWorker": { "alias": "activateServiceWorker"; "required": false; }; }, {}, never, never, true, never>;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<RenderComponent, [null, null, null, null, { optional: true; }]>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<RenderComponent, "rs-root", never, { "request": { "alias": "request"; "required": false; }; "node": { "alias": "node"; "required": false; }; "serviceWorkerUrl": { "alias": "serviceWorkerUrl"; "required": false; }; "activateServiceWorker": { "alias": "activateServiceWorker"; "required": false; }; "assetUrl": { "alias": "assetUrl"; "required": false; }; }, {}, never, never, true, never>;
40
43
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-rendering-service-lib",
3
- "version": "0.0.66860",
3
+ "version": "0.0.66862",
4
4
  "private": false,
5
5
  "dependencies": {
6
6
  "tslib": "^2.3.0"