ngx-scandoc 18.0.2 → 19.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngx-scandoc.mjs +130 -130
- package/fesm2022/ngx-scandoc.mjs.map +1 -1
- package/package.json +9 -11
- package/esm2022/core/app.worker.mjs +0 -236
- package/esm2022/core/components/base.component.mjs +0 -15
- package/esm2022/core/components/camera-switch/camera-switch.component.mjs +0 -25
- package/esm2022/core/components/components.module.mjs +0 -69
- package/esm2022/core/components/manual-scan/manual-scan.component.mjs +0 -290
- package/esm2022/core/components/scan/scan.component.mjs +0 -733
- package/esm2022/core/components/scan-results/scan-results.component.mjs +0 -65
- package/esm2022/core/components/webcam/domain/webcam-image.mjs +0 -58
- package/esm2022/core/components/webcam/domain/webcam-init-error.mjs +0 -3
- package/esm2022/core/components/webcam/domain/webcam-mirror-properties.mjs +0 -3
- package/esm2022/core/components/webcam/util/webcam.util.mjs +0 -50
- package/esm2022/core/components/webcam/webcam/webcam.component.mjs +0 -543
- package/esm2022/core/components/webcam/webcam.module.mjs +0 -29
- package/esm2022/core/helpers/object-utils.mjs +0 -100
- package/esm2022/core/interfaces/config.mjs +0 -2
- package/esm2022/core/interfaces/guest.data.mjs +0 -2
- package/esm2022/core/pipes/pipes.module.mjs +0 -19
- package/esm2022/core/pipes/safeResourceUrl.pipe.mjs +0 -20
- package/esm2022/core/shared/material.module.mjs +0 -162
- package/esm2022/core/tokens/config.tokens.mjs +0 -4
- package/esm2022/dialogs/components/blank/blank.component.mjs +0 -46
- package/esm2022/dialogs/components/confirm/confirm.component.mjs +0 -51
- package/esm2022/dialogs/components/loading/loading.component.mjs +0 -12
- package/esm2022/dialogs/components/prompt-manual/prompt-manual.component.mjs +0 -30
- package/esm2022/dialogs/components/scan-profile/scan-profile.component.mjs +0 -79
- package/esm2022/dialogs/components/scan-selfie/scan-selfie.component.mjs +0 -95
- package/esm2022/dialogs/components/turn-document/turn-document.component.mjs +0 -31
- package/esm2022/dialogs/dialogs.core.provider.mjs +0 -120
- package/esm2022/dialogs/dialogs.module.mjs +0 -102
- package/esm2022/forms/form.module.mjs +0 -87
- package/esm2022/forms/types/avatar.type.mjs +0 -58
- package/esm2022/forms/types/profile.image.type.mjs +0 -64
- package/esm2022/forms/types/title.type.mjs +0 -32
- package/esm2022/lib/ngx-scandoc.module.mjs +0 -44
- package/esm2022/ngx-scandoc.mjs +0 -5
- package/esm2022/providers/auth.provider.mjs +0 -113
- package/esm2022/providers/camera.provider.mjs +0 -87
- package/esm2022/providers/interceptor.provider.mjs +0 -77
- package/esm2022/providers/layout.provider.mjs +0 -30
- package/esm2022/providers/scan.form.mjs +0 -347
- package/esm2022/providers/scan.provider.mjs +0 -756
- package/esm2022/providers/translate-loader.provider.mjs +0 -126
- package/esm2022/providers/translation.provider.mjs +0 -133
- package/esm2022/providers/webrtc.provider.mjs +0 -58
- package/esm2022/public-api.mjs +0 -33
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
-
import { FormGroup } from '@angular/forms';
|
|
3
|
-
import { BaseComponent } from '../base.component';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../../../providers/camera.provider";
|
|
6
|
-
import * as i2 from "../../../providers/scan.form";
|
|
7
|
-
import * as i3 from "../../../providers/scan.provider";
|
|
8
|
-
import * as i4 from "@angular/common";
|
|
9
|
-
import * as i5 from "@angular/forms";
|
|
10
|
-
import * as i6 from "@angular/material/card";
|
|
11
|
-
import * as i7 from "@ngx-formly/core";
|
|
12
|
-
import * as i8 from "@ngx-translate/core";
|
|
13
|
-
export class ScanResultsComponent extends BaseComponent {
|
|
14
|
-
constructor(cameraProvider, formProvider, provider, cd, zone) {
|
|
15
|
-
super();
|
|
16
|
-
this.cameraProvider = cameraProvider;
|
|
17
|
-
this.formProvider = formProvider;
|
|
18
|
-
this.provider = provider;
|
|
19
|
-
this.cd = cd;
|
|
20
|
-
this.zone = zone;
|
|
21
|
-
this.action = new EventEmitter();
|
|
22
|
-
}
|
|
23
|
-
ngOnInit() {
|
|
24
|
-
console.time('fields');
|
|
25
|
-
this.fields = this.formProvider.document();
|
|
26
|
-
console.timeEnd('fields');
|
|
27
|
-
this.__subs(this.data).subscribe((resp) => {
|
|
28
|
-
this.zone.run(() => {
|
|
29
|
-
switch (resp.type) {
|
|
30
|
-
case 'avatar':
|
|
31
|
-
this.model._avatar = resp.data;
|
|
32
|
-
this.form = new FormGroup({});
|
|
33
|
-
console.log(this.model);
|
|
34
|
-
break;
|
|
35
|
-
case 'model':
|
|
36
|
-
this.model = resp.data;
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
console.timeEnd('results');
|
|
40
|
-
this.cd.detectChanges();
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
ngOnDestroy() {
|
|
45
|
-
this.__destroy();
|
|
46
|
-
}
|
|
47
|
-
selfie() {
|
|
48
|
-
this.action.emit({ selfie: true });
|
|
49
|
-
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScanResultsComponent, deps: [{ token: i1.NgxScandocCameraProvider }, { token: i2.NgxScandocFieldsProvider }, { token: i3.ScanProvider }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ScanResultsComponent, selector: "ngx-scan-results", inputs: { data: "data", images: "images", form: "form" }, outputs: { action: "action" }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"model\" class=\"wraper\">\n <div style=\"flex: 1\">\n\n\n <form class=\"py-0 w-100-p\" [formGroup]=\"form\">\n <formly-form fxFlex [form]=\"form\" [fields]=\"fields\" [model]=\"model\">\n </formly-form>\n </form>\n </div>\n <div style=\"flex: 1\" >\n <mat-card appearance=\"outlined\" style=\"margin:0px 4px; padding: 16px\" class=\"images\">\n <h3>{{ \"scandoc.result.images\" | translate }}</h3>\n <ng-container *ngFor=\"let img of model.images\">\n <div fxLayout=\"column\">\n <ng-container *ngIf=\"img.side === 0\">\n <div class=\"title\">\n {{ \"scandoc.result.frontSide\" | translate }}\n </div>\n </ng-container>\n <ng-container *ngIf=\"img.side === 1\">\n <div class=\"title\">{{ \"scandoc.result.backSide\" | translate }}</div>\n </ng-container>\n <img\n class=\"preview\"\n style=\"max-width: 460px; border-radius: 1rem\"\n [src]=\"img.data\"\n />\n </div>\n </ng-container>\n </mat-card>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;overflow-y:auto;overflow-x:hidden}.images .title{padding:8px 0;font-weight:600}.images img{margin-bottom:16px;width:100%}.wraper{padding:4px;flex:1;display:flex;flex-direction:row}mat-card{box-shadow:none!important}.selfieContainer{display:flex;flex-direction:row;align-items:center}.selfieContainer .selfie{width:150px}.selfieContainer .selfie .preview{width:120px;height:120px;border-radius:80px}.selfieContainer .button{box-shadow:none;border:1px solid rgba(0,0,0,.1)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i7.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
|
|
52
|
-
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScanResultsComponent, decorators: [{
|
|
54
|
-
type: Component,
|
|
55
|
-
args: [{ selector: 'ngx-scan-results', template: "<div *ngIf=\"model\" class=\"wraper\">\n <div style=\"flex: 1\">\n\n\n <form class=\"py-0 w-100-p\" [formGroup]=\"form\">\n <formly-form fxFlex [form]=\"form\" [fields]=\"fields\" [model]=\"model\">\n </formly-form>\n </form>\n </div>\n <div style=\"flex: 1\" >\n <mat-card appearance=\"outlined\" style=\"margin:0px 4px; padding: 16px\" class=\"images\">\n <h3>{{ \"scandoc.result.images\" | translate }}</h3>\n <ng-container *ngFor=\"let img of model.images\">\n <div fxLayout=\"column\">\n <ng-container *ngIf=\"img.side === 0\">\n <div class=\"title\">\n {{ \"scandoc.result.frontSide\" | translate }}\n </div>\n </ng-container>\n <ng-container *ngIf=\"img.side === 1\">\n <div class=\"title\">{{ \"scandoc.result.backSide\" | translate }}</div>\n </ng-container>\n <img\n class=\"preview\"\n style=\"max-width: 460px; border-radius: 1rem\"\n [src]=\"img.data\"\n />\n </div>\n </ng-container>\n </mat-card>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;overflow-y:auto;overflow-x:hidden}.images .title{padding:8px 0;font-weight:600}.images img{margin-bottom:16px;width:100%}.wraper{padding:4px;flex:1;display:flex;flex-direction:row}mat-card{box-shadow:none!important}.selfieContainer{display:flex;flex-direction:row;align-items:center}.selfieContainer .selfie{width:150px}.selfieContainer .selfie .preview{width:120px;height:120px;border-radius:80px}.selfieContainer .button{box-shadow:none;border:1px solid rgba(0,0,0,.1)}\n"] }]
|
|
56
|
-
}], ctorParameters: () => [{ type: i1.NgxScandocCameraProvider }, { type: i2.NgxScandocFieldsProvider }, { type: i3.ScanProvider }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { data: [{
|
|
57
|
-
type: Input
|
|
58
|
-
}], images: [{
|
|
59
|
-
type: Input
|
|
60
|
-
}], form: [{
|
|
61
|
-
type: Input
|
|
62
|
-
}], action: [{
|
|
63
|
-
type: Output
|
|
64
|
-
}] } });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi1yZXN1bHRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zY2FuZG9jL3NyYy9jb3JlL2NvbXBvbmVudHMvc2Nhbi1yZXN1bHRzL3NjYW4tcmVzdWx0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3NjYW4tcmVzdWx0cy9zY2FuLXJlc3VsdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osS0FBSyxFQUdMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7O0FBU2xELE1BQU0sT0FBTyxvQkFDWCxTQUFRLGFBQWE7SUFXckIsWUFDUyxjQUF3QyxFQUN2QyxZQUFzQyxFQUN0QyxRQUFzQixFQUN0QixFQUFxQixFQUNyQixJQUFZO1FBRXBCLEtBQUssRUFBRSxDQUFDO1FBTkQsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3ZDLGlCQUFZLEdBQVosWUFBWSxDQUEwQjtRQUN0QyxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3RCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQVE7UUFQWixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQVV0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNqQixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbEIsS0FBSyxRQUFRO3dCQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBRS9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN4QixNQUFNO29CQUNSLEtBQUssT0FBTzt3QkFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLE1BQU07Z0JBQ1YsQ0FBQztnQkFFRCxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUUzQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQzsrR0F0RFUsb0JBQW9CO21HQUFwQixvQkFBb0Isd0tDekJqQyxnbUNBZ0NBOzs0RkRQYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCO29OQVNuQixJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFNjYW5kb2NDYW1lcmFQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9jYW1lcmEucHJvdmlkZXInO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmd4U2NhbmRvY0ZpZWxkc1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL3NjYW4uZm9ybSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2NhblByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL3NjYW4ucHJvdmlkZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtc2Nhbi1yZXN1bHRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjYW4tcmVzdWx0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NjYW4tcmVzdWx0cy5jb21wb25lbnQuc2NzcyddLFxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NhblJlc3VsdHNDb21wb25lbnRcbiAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KCkgZGF0YSE6IFN1YmplY3Q8YW55PjtcbiAgbW9kZWw6IGFueTtcbiAgQElucHV0KCkgaW1hZ2VzOiBhbnk7XG4gIGZpZWxkczogYW55O1xuXG4gIEBJbnB1dCgpIGZvcm0hOiBGb3JtR3JvdXA7XG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNhbWVyYVByb3ZpZGVyOiBOZ3hTY2FuZG9jQ2FtZXJhUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSBmb3JtUHJvdmlkZXI6IE5neFNjYW5kb2NGaWVsZHNQcm92aWRlcixcbiAgICBwcml2YXRlIHByb3ZpZGVyOiBTY2FuUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUudGltZSgnZmllbGRzJyk7XG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmZvcm1Qcm92aWRlci5kb2N1bWVudCgpO1xuICAgIGNvbnNvbGUudGltZUVuZCgnZmllbGRzJyk7XG5cbiAgICB0aGlzLl9fc3Vicyh0aGlzLmRhdGEpLnN1YnNjcmliZSgocmVzcCkgPT4ge1xuICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAocmVzcC50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnYXZhdGFyJzpcbiAgICAgICAgICAgIHRoaXMubW9kZWwuX2F2YXRhciA9IHJlc3AuZGF0YTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21vZGVsJzpcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSByZXNwLmRhdGE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgncmVzdWx0cycpO1xuXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9fZGVzdHJveSgpO1xuICB9XG5cbiAgc2VsZmllKCkge1xuICAgIHRoaXMuYWN0aW9uLmVtaXQoeyBzZWxmaWU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJtb2RlbFwiIGNsYXNzPVwid3JhcGVyXCI+XG4gIDxkaXYgc3R5bGU9XCJmbGV4OiAxXCI+XG5cblxuICAgIDxmb3JtIGNsYXNzPVwicHktMCB3LTEwMC1wXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICA8Zm9ybWx5LWZvcm0gZnhGbGV4IFtmb3JtXT1cImZvcm1cIiBbZmllbGRzXT1cImZpZWxkc1wiIFttb2RlbF09XCJtb2RlbFwiPlxuICAgICAgPC9mb3JtbHktZm9ybT5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuICA8ZGl2IHN0eWxlPVwiZmxleDogMVwiID5cbiAgICA8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgc3R5bGU9XCJtYXJnaW46MHB4IDRweDsgcGFkZGluZzogMTZweFwiIGNsYXNzPVwiaW1hZ2VzXCI+XG4gICAgICA8aDM+e3sgXCJzY2FuZG9jLnJlc3VsdC5pbWFnZXNcIiB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbWcgb2YgbW9kZWwuaW1hZ2VzXCI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1nLnNpZGUgPT09IDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICB7eyBcInNjYW5kb2MucmVzdWx0LmZyb250U2lkZVwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1nLnNpZGUgPT09IDFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7IFwic2NhbmRvYy5yZXN1bHQuYmFja1NpZGVcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwicHJldmlld1wiXG4gICAgICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogNDYwcHg7IGJvcmRlci1yYWRpdXM6IDFyZW1cIlxuICAgICAgICAgICAgW3NyY109XCJpbWcuZGF0YVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Container class for a captured webcam image
|
|
3
|
-
* @author basst314, davidshen84
|
|
4
|
-
*/
|
|
5
|
-
export class WebcamImage {
|
|
6
|
-
constructor(imageAsDataUrl, mimeType, imageData, resized) {
|
|
7
|
-
this._mimeType = mimeType;
|
|
8
|
-
this._imageAsDataUrl = imageAsDataUrl;
|
|
9
|
-
this._imageData = imageData;
|
|
10
|
-
this._imageResized = resized;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Extracts the Base64 data out of the given dataUrl.
|
|
14
|
-
* @param dataUrl the given dataUrl
|
|
15
|
-
* @param mimeType the mimeType of the data
|
|
16
|
-
*/
|
|
17
|
-
static getDataFromDataUrl(dataUrl, mimeType) {
|
|
18
|
-
return dataUrl.replace(`data:${mimeType};base64,`, '');
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Get the base64 encoded image data
|
|
22
|
-
* @returns base64 data of the image
|
|
23
|
-
*/
|
|
24
|
-
get imageAsBase64() {
|
|
25
|
-
return this._imageAsBase64
|
|
26
|
-
? this._imageAsBase64
|
|
27
|
-
: (this._imageAsBase64 = WebcamImage.getDataFromDataUrl(this._imageAsDataUrl, this._mimeType));
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Get the encoded image as dataUrl
|
|
31
|
-
* @returns the dataUrl of the image
|
|
32
|
-
*/
|
|
33
|
-
get imageAsDataUrl() {
|
|
34
|
-
return this._imageAsDataUrl;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Get the ImageData object associated with the canvas' 2d context.
|
|
38
|
-
* @returns the ImageData of the canvas's 2d context.
|
|
39
|
-
*/
|
|
40
|
-
get imageData() {
|
|
41
|
-
return this._imageData;
|
|
42
|
-
}
|
|
43
|
-
get imageResized() {
|
|
44
|
-
return this._imageResized;
|
|
45
|
-
}
|
|
46
|
-
get dataUrl() {
|
|
47
|
-
const canvas = document.createElement('canvas');
|
|
48
|
-
const { width, height } = this._imageData;
|
|
49
|
-
canvas.width = width;
|
|
50
|
-
canvas.height = height;
|
|
51
|
-
const ctx = canvas.getContext('2d');
|
|
52
|
-
if (ctx) {
|
|
53
|
-
ctx.putImageData(this._imageData, 0, 0);
|
|
54
|
-
}
|
|
55
|
-
return canvas.toDataURL(this._mimeType, 1);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjYW5kb2Mvc3JjL2NvcmUvY29tcG9uZW50cy93ZWJjYW0vZG9tYWluL3dlYmNhbS1pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUNFLGNBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLFNBQWMsRUFDZCxPQUFZO1FBRVosSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQVNEOzs7O09BSUc7SUFDSyxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFFBQWdCO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLFFBQVEsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYztZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDckIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQ25ELElBQUksQ0FBQyxlQUFlLEVBQ3BCLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUV2QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRhaW5lciBjbGFzcyBmb3IgYSBjYXB0dXJlZCB3ZWJjYW0gaW1hZ2VcbiAqIEBhdXRob3IgYmFzc3QzMTQsIGRhdmlkc2hlbjg0XG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJjYW1JbWFnZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBpbWFnZUFzRGF0YVVybDogc3RyaW5nLFxuICAgIG1pbWVUeXBlOiBzdHJpbmcsXG4gICAgaW1hZ2VEYXRhOiBhbnksXG4gICAgcmVzaXplZDogYW55XG4gICkge1xuICAgIHRoaXMuX21pbWVUeXBlID0gbWltZVR5cGU7XG4gICAgdGhpcy5faW1hZ2VBc0RhdGFVcmwgPSBpbWFnZUFzRGF0YVVybDtcbiAgICB0aGlzLl9pbWFnZURhdGEgPSBpbWFnZURhdGE7XG4gICAgdGhpcy5faW1hZ2VSZXNpemVkID0gcmVzaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbWVUeXBlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2ltYWdlQXNCYXNlNjQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ltYWdlQXNEYXRhVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ltYWdlRGF0YTogSW1hZ2VEYXRhO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbWFnZVJlc2l6ZWQ6IHN0cmluZztcblxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgQmFzZTY0IGRhdGEgb3V0IG9mIHRoZSBnaXZlbiBkYXRhVXJsLlxuICAgKiBAcGFyYW0gZGF0YVVybCB0aGUgZ2l2ZW4gZGF0YVVybFxuICAgKiBAcGFyYW0gbWltZVR5cGUgdGhlIG1pbWVUeXBlIG9mIHRoZSBkYXRhXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXREYXRhRnJvbURhdGFVcmwoZGF0YVVybDogc3RyaW5nLCBtaW1lVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRhdGFVcmwucmVwbGFjZShgZGF0YToke21pbWVUeXBlfTtiYXNlNjQsYCwgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYmFzZTY0IGVuY29kZWQgaW1hZ2UgZGF0YVxuICAgKiBAcmV0dXJucyBiYXNlNjQgZGF0YSBvZiB0aGUgaW1hZ2VcbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VBc0Jhc2U2NCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZUFzQmFzZTY0XG4gICAgICA/IHRoaXMuX2ltYWdlQXNCYXNlNjRcbiAgICAgIDogKHRoaXMuX2ltYWdlQXNCYXNlNjQgPSBXZWJjYW1JbWFnZS5nZXREYXRhRnJvbURhdGFVcmwoXG4gICAgICAgICAgdGhpcy5faW1hZ2VBc0RhdGFVcmwsXG4gICAgICAgICAgdGhpcy5fbWltZVR5cGVcbiAgICAgICAgKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBlbmNvZGVkIGltYWdlIGFzIGRhdGFVcmxcbiAgICogQHJldHVybnMgdGhlIGRhdGFVcmwgb2YgdGhlIGltYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlQXNEYXRhVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlQXNEYXRhVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSW1hZ2VEYXRhIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbnZhcycgMmQgY29udGV4dC5cbiAgICogQHJldHVybnMgdGhlIEltYWdlRGF0YSBvZiB0aGUgY2FudmFzJ3MgMmQgY29udGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VEYXRhKCk6IEltYWdlRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW1hZ2VSZXNpemVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlUmVzaXplZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YVVybCgpIHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5faW1hZ2VEYXRhO1xuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBpZiAoY3R4KSB7XG4gICAgICBjdHgucHV0SW1hZ2VEYXRhKHRoaXMuX2ltYWdlRGF0YSwgMCwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwodGhpcy5fbWltZVR5cGUsIDEpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export class WebcamInitError {
|
|
2
|
-
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLWluaXQtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3dlYmNhbS9kb21haW4vd2ViY2FtLWluaXQtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGVBQWU7Q0FHM0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgV2ViY2FtSW5pdEVycm9yIHtcbiAgcHVibGljIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHB1YmxpYyBtZWRpYVN0cmVhbUVycm9yPzphbnk7XG59XG4iXX0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export class WebcamMirrorProperties {
|
|
2
|
-
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLW1pcnJvci1wcm9wZXJ0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjYW5kb2Mvc3JjL2NvcmUvY29tcG9uZW50cy93ZWJjYW0vZG9tYWluL3dlYmNhbS1taXJyb3ItcHJvcGVydGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sc0JBQXNCO0NBRWxDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFdlYmNhbU1pcnJvclByb3BlcnRpZXMge1xuICBwdWJsaWMgeD86IHN0cmluZzsgIC8vIFtcImF1dG9cIiwgXCJhbHdheXNcIiwgXCJuZXZlclwiXVxufVxuIl19
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { from, Observable } from 'rxjs';
|
|
2
|
-
import { switchMap, tap } from 'rxjs/operators';
|
|
3
|
-
export class WebcamUtil {
|
|
4
|
-
/**
|
|
5
|
-
* Lists available videoInput devices
|
|
6
|
-
* @returns a list of media device info.
|
|
7
|
-
*/
|
|
8
|
-
static getAvailableVideoInputs(facingMode = 'environment') {
|
|
9
|
-
return new Observable((observer) => {
|
|
10
|
-
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
|
|
11
|
-
return observer.error(null);
|
|
12
|
-
}
|
|
13
|
-
const _window = window;
|
|
14
|
-
let streams;
|
|
15
|
-
from(navigator.mediaDevices.getUserMedia({
|
|
16
|
-
video: { facingMode, deviceId: undefined },
|
|
17
|
-
}))
|
|
18
|
-
.pipe(tap((s) => {
|
|
19
|
-
streams = s;
|
|
20
|
-
}), switchMap((s) => from(navigator.mediaDevices.enumerateDevices())))
|
|
21
|
-
.subscribe((devices) => {
|
|
22
|
-
// console.log(devices);
|
|
23
|
-
if (streams) {
|
|
24
|
-
streams.getTracks().forEach((track) => {
|
|
25
|
-
track.stop();
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
observer.next(devices.filter((device) => device.kind === 'videoinput'));
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
// return new Promise((resolve, reject) => {
|
|
32
|
-
// navigator.mediaDevices.getUserMedia({
|
|
33
|
-
// video: undefined,
|
|
34
|
-
// });
|
|
35
|
-
// navigator.mediaDevices
|
|
36
|
-
// .enumerateDevices()
|
|
37
|
-
// .then((devices: MediaDeviceInfo[]) => {
|
|
38
|
-
// resolve(
|
|
39
|
-
// devices.filter(
|
|
40
|
-
// (device: MediaDeviceInfo) => device.kind === 'videoinput'
|
|
41
|
-
// )
|
|
42
|
-
// );
|
|
43
|
-
// })
|
|
44
|
-
// .catch((err) => {
|
|
45
|
-
// reject(err.message || err);
|
|
46
|
-
// });
|
|
47
|
-
// });
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3dlYmNhbS91dGlsL3dlYmNhbS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFNLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFVBQVU7SUFDckI7OztPQUdHO0lBRUksTUFBTSxDQUFDLHVCQUF1QixDQUNuQyxhQUFxQyxhQUFhO1FBRWxELE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEUsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBUSxNQUFNLENBQUM7WUFDNUIsSUFBSSxPQUFZLENBQUM7WUFDakIsSUFBSSxDQUNGLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO2dCQUNsQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRTthQUMxQyxDQUFDLENBQ0g7aUJBQ0UsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDZCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUNsRTtpQkFDQSxTQUFTLENBQUMsQ0FBQyxPQUEwQixFQUFFLEVBQUU7Z0JBQ3ZDLHdCQUF3QjtnQkFFekIsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7d0JBQ3pDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDZixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FDWixDQUFDLE1BQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUMxRCxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsNENBQTRDO1FBQzVDLDBDQUEwQztRQUMxQyx3QkFBd0I7UUFDeEIsUUFBUTtRQUNSLDJCQUEyQjtRQUMzQiwwQkFBMEI7UUFDMUIsOENBQThDO1FBQzlDLGlCQUFpQjtRQUNqQiwwQkFBMEI7UUFDMUIsc0VBQXNFO1FBQ3RFLFlBQVk7UUFDWixXQUFXO1FBQ1gsU0FBUztRQUNULHdCQUF3QjtRQUN4QixvQ0FBb0M7UUFDcEMsVUFBVTtRQUNWLE1BQU07SUFDUixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBXZWJjYW1VdGlsIHtcbiAgLyoqXG4gICAqIExpc3RzIGF2YWlsYWJsZSB2aWRlb0lucHV0IGRldmljZXNcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIG1lZGlhIGRldmljZSBpbmZvLlxuICAgKi9cblxuICBwdWJsaWMgc3RhdGljIGdldEF2YWlsYWJsZVZpZGVvSW5wdXRzKFxuICAgIGZhY2luZ01vZGU6ICd1c2VyJyB8ICdlbnZpcm9ubWVudCcgPSAnZW52aXJvbm1lbnQnXG4gICk6IE9ic2VydmFibGU8TWVkaWFEZXZpY2VJbmZvW10+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXMgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcykge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IobnVsbCk7XG4gICAgICB9XG4gICAgICBjb25zdCBfd2luZG93OiBhbnkgPSB3aW5kb3c7XG4gICAgICBsZXQgc3RyZWFtczogYW55O1xuICAgICAgZnJvbShcbiAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe1xuICAgICAgICAgIHZpZGVvOiB7IGZhY2luZ01vZGUsZGV2aWNlSWQ6IHVuZGVmaW5lZCB9LFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgICAgIHN0cmVhbXMgPSBzO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN3aXRjaE1hcCgocykgPT4gZnJvbShuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKSkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZGV2aWNlczogTWVkaWFEZXZpY2VJbmZvW10pID0+IHtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2coZGV2aWNlcyk7XG5cbiAgICAgICAgICBpZiAoc3RyZWFtcykge1xuICAgICAgICAgICAgc3RyZWFtcy5nZXRUcmFja3MoKS5mb3JFYWNoKCh0cmFjazogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KFxuICAgICAgICAgICAgZGV2aWNlcy5maWx0ZXIoXG4gICAgICAgICAgICAgIChkZXZpY2U6IE1lZGlhRGV2aWNlSW5mbykgPT4gZGV2aWNlLmtpbmQgPT09ICd2aWRlb2lucHV0J1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcbiAgICAvLyAgICAgdmlkZW86IHVuZGVmaW5lZCxcbiAgICAvLyAgIH0pO1xuICAgIC8vICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlc1xuICAgIC8vICAgICAuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgLy8gICAgIC50aGVuKChkZXZpY2VzOiBNZWRpYURldmljZUluZm9bXSkgPT4ge1xuICAgIC8vICAgICAgIHJlc29sdmUoXG4gICAgLy8gICAgICAgICBkZXZpY2VzLmZpbHRlcihcbiAgICAvLyAgICAgICAgICAgKGRldmljZTogTWVkaWFEZXZpY2VJbmZvKSA9PiBkZXZpY2Uua2luZCA9PT0gJ3ZpZGVvaW5wdXQnXG4gICAgLy8gICAgICAgICApXG4gICAgLy8gICAgICAgKTtcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAvLyAgICAgICByZWplY3QoZXJyLm1lc3NhZ2UgfHwgZXJyKTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfSk7XG4gIH1cbn1cbiJdfQ==
|