speechrecorderng 3.10.13 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/speechrecorderng.mjs +204 -201
  3. package/fesm2022/speechrecorderng.mjs.map +1 -1
  4. package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
  5. package/lib/spr.module.version.d.ts +1 -1
  6. package/lib/ui/canvas_layer_comp.d.ts +1 -1
  7. package/lib/ui/responsive_component.d.ts +1 -1
  8. package/package.json +13 -15
  9. package/esm2022/lib/action/action.mjs +0 -73
  10. package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
  11. package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
  12. package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
  13. package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
  14. package/esm2022/lib/audio/audio_display.mjs +0 -118
  15. package/esm2022/lib/audio/audio_player.mjs +0 -238
  16. package/esm2022/lib/audio/capture/capture.mjs +0 -855
  17. package/esm2022/lib/audio/context.mjs +0 -79
  18. package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
  19. package/esm2022/lib/audio/format.mjs +0 -20
  20. package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
  21. package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
  22. package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
  23. package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
  24. package/esm2022/lib/audio/io/stream.mjs +0 -59
  25. package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
  26. package/esm2022/lib/audio/persistor.mjs +0 -81
  27. package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
  28. package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
  29. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
  30. package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
  31. package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
  32. package/esm2022/lib/audio/playback/player.mjs +0 -402
  33. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
  34. package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
  35. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
  36. package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
  37. package/esm2022/lib/audio/ui/common.mjs +0 -19
  38. package/esm2022/lib/audio/ui/container.mjs +0 -414
  39. package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
  40. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
  41. package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
  42. package/esm2022/lib/db/inddb.mjs +0 -120
  43. package/esm2022/lib/dsp/utils.mjs +0 -48
  44. package/esm2022/lib/environment/environment.defaults.mjs +0 -9
  45. package/esm2022/lib/io/BinaryReader.mjs +0 -93
  46. package/esm2022/lib/io/BinaryWriter.mjs +0 -80
  47. package/esm2022/lib/io/stream.mjs +0 -259
  48. package/esm2022/lib/math/2d/geometry.mjs +0 -28
  49. package/esm2022/lib/math/complex.mjs +0 -58
  50. package/esm2022/lib/math/dft.mjs +0 -196
  51. package/esm2022/lib/media/utils.mjs +0 -14
  52. package/esm2022/lib/net/uploader.mjs +0 -367
  53. package/esm2022/lib/recorder_component.mjs +0 -65
  54. package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
  55. package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
  56. package/esm2022/lib/speechrecorder/recording.mjs +0 -124
  57. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
  58. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
  59. package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
  60. package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
  61. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
  62. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
  63. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
  64. package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
  65. package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
  66. package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
  67. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
  68. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
  69. package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
  70. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
  71. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
  72. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
  73. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
  74. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
  75. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
  76. package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
  77. package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
  78. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
  79. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
  80. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
  81. package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
  82. package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
  83. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
  84. package/esm2022/lib/speechrecorderng.component.mjs +0 -392
  85. package/esm2022/lib/speechrecorderng.module.mjs +0 -97
  86. package/esm2022/lib/spr.config.mjs +0 -27
  87. package/esm2022/lib/spr.module.version.mjs +0 -2
  88. package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
  89. package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
  90. package/esm2022/lib/ui/message_dialog.mjs +0 -51
  91. package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
  92. package/esm2022/lib/ui/responsive_component.mjs +0 -24
  93. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
  94. package/esm2022/lib/utils/ua-parser.mjs +0 -190
  95. package/esm2022/lib/utils/utils.mjs +0 -132
  96. package/esm2022/lib/utils/wake_lock.mjs +0 -114
  97. package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
  98. package/esm2022/public-api.mjs +0 -35
  99. package/esm2022/speechrecorderng.mjs +0 -5
@@ -1,24 +0,0 @@
1
- import { Breakpoints } from "@angular/cdk/layout";
2
- import { Directive } from "@angular/core";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/cdk/layout";
5
- export class ResponsiveComponent {
6
- constructor(breakpointObserver) {
7
- this.breakpointObserver = breakpointObserver;
8
- this.screenXs = false;
9
- breakpointObserver
10
- .observe([
11
- Breakpoints.XSmall
12
- ])
13
- .subscribe(result => {
14
- this.screenXs = (result.matches);
15
- //console.debug("Screen XS: "+this.screenXs);
16
- });
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ResponsiveComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Directive }); }
19
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: ResponsiveComponent, ngImport: i0 }); }
20
- }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ResponsiveComponent, decorators: [{
22
- type: Directive
23
- }], ctorParameters: () => [{ type: i1.BreakpointObserver }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2l2ZV9jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdWkvcmVzcG9uc2l2ZV9jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7QUFHeEMsTUFBTSxPQUFPLG1CQUFtQjtJQUk5QixZQUFzQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUY1RCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR2Ysa0JBQWtCO2FBQ2YsT0FBTyxDQUFDO1lBQ1AsV0FBVyxDQUFDLE1BQU07U0FDbkIsQ0FBQzthQUNELFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLDZDQUE2QztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBYlUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcbmltcG9ydCB7RGlyZWN0aXZlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBjbGFzcyBSZXNwb25zaXZlQ29tcG9uZW50IHtcclxuXHJcbiAgc2NyZWVuWHMgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyKSB7XHJcbiAgICBicmVha3BvaW50T2JzZXJ2ZXJcclxuICAgICAgLm9ic2VydmUoW1xyXG4gICAgICAgIEJyZWFrcG9pbnRzLlhTbWFsbFxyXG4gICAgICBdKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy5zY3JlZW5YcyA9IChyZXN1bHQubWF0Y2hlcyk7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiU2NyZWVuIFhTOiBcIit0aGlzLnNjcmVlblhzKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -1,23 +0,0 @@
1
- import { Directive, Input } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- export class ScrollIntoViewDirective {
4
- constructor(elRef) {
5
- this.elRef = elRef;
6
- }
7
- set scrollIntoViewToBottom(siv) {
8
- if (siv) {
9
- this.elRef.nativeElement.scrollIntoView(false);
10
- }
11
- }
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScrollIntoViewDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
13
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: { scrollIntoViewToBottom: "scrollIntoViewToBottom" }, ngImport: i0 }); }
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
16
- type: Directive,
17
- args: [{
18
- selector: "[scrollIntoViewToBottom]"
19
- }]
20
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { scrollIntoViewToBottom: [{
21
- type: Input
22
- }] } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsSW50b1ZpZXdUb0JvdHRvbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi91dGlscy9zY3JvbGxJbnRvVmlld1RvQm90dG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxTQUFTLEVBQWMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUkzRCxNQUFNLE9BQU8sdUJBQXVCO0lBRWxDLFlBQW9CLEtBQWdCO1FBQWhCLFVBQUssR0FBTCxLQUFLLENBQVc7SUFBRSxDQUFDO0lBQ3ZDLElBQ0ksc0JBQXNCLENBQUMsR0FBVztRQUNsQyxJQUFHLEdBQUcsRUFBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDOytHQVJVLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUhuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7aUJBQ3JDOytFQUtLLHNCQUFzQjtzQkFEekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogXCJbc2Nyb2xsSW50b1ZpZXdUb0JvdHRvbV1cIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Nyb2xsSW50b1ZpZXdEaXJlY3RpdmV7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6RWxlbWVudFJlZil7fVxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbEludG9WaWV3VG9Cb3R0b20oc2l2OmJvb2xlYW4pe1xyXG4gICAgICBpZihzaXYpe1xyXG4gICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyhmYWxzZSk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -1,190 +0,0 @@
1
- export class UserAgentComponent {
2
- constructor(name, version, comment) {
3
- this.name = name;
4
- this.version = version;
5
- this.comment = comment;
6
- }
7
- toString() {
8
- let s = '[' + this.name + ']';
9
- if (this.version) {
10
- s = s + ' [' + this.version + ']';
11
- }
12
- if (this.comment) {
13
- s = s + ' [' + this.comment + ']';
14
- }
15
- return s;
16
- }
17
- }
18
- export const NAME_FIREFOX = 'Firefox';
19
- export const NAME_CHROME = 'Chrome';
20
- export const NAME_SAFARI = 'Safari';
21
- export const NAME_EDGE = 'Edge';
22
- export var Browser;
23
- (function (Browser) {
24
- Browser["Firefox"] = "Firefox";
25
- Browser["Chrome"] = "Chrome";
26
- Browser["Safari"] = "Safari";
27
- Browser["Edge"] = "Edge";
28
- })(Browser || (Browser = {}));
29
- export const OS_WINDOWS = 'Windows';
30
- export const OS_ANDROID = 'Android';
31
- export var Platform;
32
- (function (Platform) {
33
- Platform["Windows"] = "Windows";
34
- Platform["Android"] = "Android";
35
- Platform["macOS"] = "MAC OS X";
36
- })(Platform || (Platform = {}));
37
- export class UserAgent {
38
- constructor(_detectedPlatform, _detectedBrowser, _detectedBrowserVersion = null) {
39
- this._detectedPlatform = _detectedPlatform;
40
- this._detectedBrowser = _detectedBrowser;
41
- this._detectedBrowserVersion = _detectedBrowserVersion;
42
- }
43
- get detectedBrowser() {
44
- return this._detectedBrowser;
45
- }
46
- get detectedBrowserVersion() {
47
- return this._detectedBrowserVersion;
48
- }
49
- get detectedPlatform() {
50
- return this._detectedPlatform;
51
- }
52
- }
53
- export class UserAgentBuilder {
54
- constructor() {
55
- this.comps = new Array();
56
- }
57
- static { this.instance = undefined; }
58
- build() {
59
- // // @ts-ignore
60
- // if(navigator.userAgentData){
61
- // // maybe we can use this in the future
62
- // console.info("Browser provides userAgentData:");
63
- //
64
- // console.info("Brands:");
65
- // // @ts-ignore
66
- // navigator.userAgentData.brands.forEach((br=>{
67
- // console.info(br.brand +" "+br.version);
68
- // }))
69
- // // @ts-ignore
70
- // console.info("Platform: "+navigator.userAgentData.platform);
71
- // // @ts-ignore
72
- // console.info("Mobile:"+navigator.userAgentData.mobile);
73
- // // @ts-ignore
74
- // //console.info(navigator.userAgentData.toJSON());
75
- // }else {
76
- // console.info("Browser does not provide userAgentData.");
77
- // }
78
- let ua = navigator.userAgent;
79
- console.debug("User agent: " + ua);
80
- this.comps = new Array();
81
- let pp = 0;
82
- while (pp < ua.length) {
83
- //parse name/version
84
- let name = null;
85
- let version = null;
86
- let comment;
87
- let blPos = ua.indexOf(' ', pp);
88
- let prt;
89
- // TODO Replace substr with substring (?)
90
- // https://stackoverflow.com/questions/52640271/why-is-string-prototype-substr-deprecated
91
- if (blPos == -1) {
92
- prt = ua.substr(pp);
93
- pp += prt.length;
94
- }
95
- else {
96
- prt = ua.substr(pp, blPos - pp);
97
- pp = blPos + 1;
98
- }
99
- let sepPos = prt.indexOf('/');
100
- if (sepPos > 0) {
101
- name = prt.substr(0, sepPos);
102
- version = prt.substr(sepPos + 1);
103
- }
104
- else {
105
- name = prt;
106
- }
107
- while (ua[pp] === ' ' && pp < ua.length) {
108
- pp++;
109
- }
110
- if (ua[pp] === '(') {
111
- pp++;
112
- let commEnd = ua.indexOf(')', pp);
113
- comment = ua.substr(pp, commEnd - pp);
114
- pp = commEnd + 1;
115
- }
116
- while (ua[pp] === ' ' && pp < ua.length) {
117
- pp++;
118
- }
119
- const uac = new UserAgentComponent(name, version, comment);
120
- console.debug("user agent comp: " + uac);
121
- this.comps.push(uac);
122
- }
123
- let detPlatf = null;
124
- if (this.runsOnOS(Platform.Android)) {
125
- detPlatf = Platform.Android;
126
- }
127
- else if (this.runsOnOS(Platform.Windows)) {
128
- detPlatf = Platform.Windows;
129
- }
130
- else if (this.runsOnOS(Platform.macOS)) {
131
- detPlatf = Platform.macOS;
132
- }
133
- let detBr = null;
134
- if (this.matchesBrowser(Browser.Firefox)) {
135
- detBr = Browser.Firefox;
136
- }
137
- else if (this.matchesBrowser(Browser.Chrome)) {
138
- detBr = Browser.Chrome;
139
- }
140
- else if (this.matchesBrowser(Browser.Safari)) {
141
- detBr = Browser.Safari;
142
- }
143
- let detBrVers = null;
144
- if (detBr) {
145
- detBrVers = this.browserVersion(detBr);
146
- }
147
- this.userAgent = new UserAgent(detPlatf, detBr, detBrVers);
148
- }
149
- matchesBrowser(browserName) {
150
- for (let ci = 0; ci < this.comps.length; ci++) {
151
- let bn = this.comps[ci].name;
152
- let bnRe = new RegExp(browserName, 'i');
153
- if (bn.match(bnRe)) {
154
- return true;
155
- }
156
- }
157
- return false;
158
- }
159
- browserVersion(browserName) {
160
- for (let ci = 0; ci < this.comps.length; ci++) {
161
- const comp = this.comps[ci];
162
- const bn = comp.name;
163
- const bnRe = new RegExp(browserName, 'i');
164
- if (bn.match(bnRe)) {
165
- return comp.version;
166
- }
167
- }
168
- return null;
169
- }
170
- runsOnOS(os) {
171
- for (let ci = 0; ci < this.comps.length; ci++) {
172
- let cc = this.comps[ci].comment;
173
- if (cc) {
174
- var osRe = new RegExp(os, 'i');
175
- if (cc.match(osRe)) {
176
- return true;
177
- }
178
- }
179
- }
180
- return false;
181
- }
182
- static userAgent() {
183
- if (!this.instance) {
184
- this.instance = new UserAgentBuilder();
185
- }
186
- this.instance.build();
187
- return this.instance.userAgent;
188
- }
189
- }
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWEtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3V0aWxzL3VhLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQW1CLElBQVcsRUFBUSxPQUFtQixFQUFRLE9BQWU7UUFBN0QsU0FBSSxHQUFKLElBQUksQ0FBTztRQUFRLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUSxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBRWhGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDO1FBQ3hCLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDO1lBQ2YsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxHQUFHLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDO1lBQ2YsQ0FBQyxHQUFDLENBQUMsR0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLE9BQU8sR0FBQyxHQUFHLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztDQUNGO0FBQ0QsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFDLFNBQVMsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUMsUUFBUSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBQyxRQUFRLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFDLE1BQU0sQ0FBQztBQUk5QixNQUFNLENBQU4sSUFBWSxPQUF1RTtBQUFuRixXQUFZLE9BQU87SUFBRSw4QkFBaUIsQ0FBQTtJQUFDLDRCQUFlLENBQUE7SUFBQyw0QkFBZSxDQUFBO0lBQUMsd0JBQVcsQ0FB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TCxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDO29CQUNqQixPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUztRQUNaLElBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUVuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFVzZXJBZ2VudENvbXBvbmVudHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTpzdHJpbmcscHVibGljIHZlcnNpb246c3RyaW5nfG51bGwscHVibGljIGNvbW1lbnQ/OnN0cmluZykge1xyXG5cclxuICB9XHJcblxyXG4gIHRvU3RyaW5nKCk6c3RyaW5ne1xyXG4gICAgbGV0IHM9J1snK3RoaXMubmFtZSsnXSc7XHJcbiAgICBpZih0aGlzLnZlcnNpb24pe1xyXG4gICAgICBzPXMrJyBbJyt0aGlzLnZlcnNpb24rJ10nO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jb21tZW50KXtcclxuICAgICAgcz1zKycgWycrdGhpcy5jb21tZW50KyddJztcclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgTkFNRV9GSVJFRk9YPSdGaXJlZm94JztcclxuZXhwb3J0IGNvbnN0IE5BTUVfQ0hST01FPSdDaHJvbWUnO1xyXG5leHBvcnQgY29uc3QgTkFNRV9TQUZBUkk9J1NhZmFyaSc7XHJcbmV4cG9ydCBjb25zdCBOQU1FX0VER0U9J0VkZ2UnO1xyXG5cclxuXHJcblxyXG5leHBvcnQgZW51bSBCcm93c2VyIHtGaXJlZm94PSdGaXJlZm94JyxDaHJvbWU9J0Nocm9tZScsU2FmYXJpPSdTYWZhcmknLEVkZ2U9J0VkZ2UnfVxyXG5cclxuZXhwb3J0IGNvbnN0IE9TX1dJTkRPV1M9J1dpbmRvd3MnO1xyXG5leHBvcnQgY29uc3QgT1NfQU5EUk9JRD0nQW5kcm9pZCc7XHJcblxyXG5leHBvcnQgZW51bSBQbGF0Zm9ybSB7V2luZG93cz0nV2luZG93cycsQW5kcm9pZD0nQW5kcm9pZCcsbWFjT1M9J01BQyBPUyBYJ31cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyQWdlbnR7XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kZXRlY3RlZFBsYXRmb3JtOlBsYXRmb3JtfG51bGwscHJpdmF0ZSBfZGV0ZWN0ZWRCcm93c2VyOkJyb3dzZXJ8bnVsbCxwcml2YXRlIF9kZXRlY3RlZEJyb3dzZXJWZXJzaW9uOnN0cmluZ3xudWxsPW51bGwpIHtcclxuICB9XHJcblxyXG4gIGdldCBkZXRlY3RlZEJyb3dzZXIoKTogQnJvd3NlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RldGVjdGVkQnJvd3NlcjtcclxuICB9XHJcblxyXG4gIGdldCBkZXRlY3RlZEJyb3dzZXJWZXJzaW9uKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RldGVjdGVkQnJvd3NlclZlcnNpb247XHJcbiAgfVxyXG5cclxuICBnZXQgZGV0ZWN0ZWRQbGF0Zm9ybSgpOiBQbGF0Zm9ybSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RldGVjdGVkUGxhdGZvcm07XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJBZ2VudEJ1aWxkZXIge1xyXG4gIHN0YXRpYyBpbnN0YW5jZTpVc2VyQWdlbnRCdWlsZGVyfHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBjb21wczpBcnJheTxVc2VyQWdlbnRDb21wb25lbnQ+PW5ldyBBcnJheTxVc2VyQWdlbnRDb21wb25lbnQ+KCk7XHJcbiAgcHJpdmF0ZSB1c2VyQWdlbnQhOlVzZXJBZ2VudDtcclxuXHJcbiAgcHJpdmF0ZSBidWlsZCgpIHtcclxuXHJcbiAgICAvLyAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyBpZihuYXZpZ2F0b3IudXNlckFnZW50RGF0YSl7XHJcbiAgICAvLyAgIC8vIG1heWJlIHdlIGNhbiB1c2UgdGhpcyBpbiAgdGhlIGZ1dHVyZVxyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJCcm93c2VyIHByb3ZpZGVzIHVzZXJBZ2VudERhdGE6XCIpO1xyXG4gICAgLy9cclxuICAgIC8vICAgY29uc29sZS5pbmZvKFwiQnJhbmRzOlwiKTtcclxuICAgIC8vICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgLy8gICBuYXZpZ2F0b3IudXNlckFnZW50RGF0YS5icmFuZHMuZm9yRWFjaCgoYnI9PntcclxuICAgIC8vICAgICBjb25zb2xlLmluZm8oYnIuYnJhbmQgK1wiIFwiK2JyLnZlcnNpb24pO1xyXG4gICAgLy8gICB9KSlcclxuICAgIC8vICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgLy8gICBjb25zb2xlLmluZm8oXCJQbGF0Zm9ybTogXCIrbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEucGxhdGZvcm0pO1xyXG4gICAgLy8gICAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyAgIGNvbnNvbGUuaW5mbyhcIk1vYmlsZTpcIituYXZpZ2F0b3IudXNlckFnZW50RGF0YS5tb2JpbGUpO1xyXG4gICAgLy8gICAvLyBAdHMtaWdub3JlXHJcbiAgICAvLyAgIC8vY29uc29sZS5pbmZvKG5hdmlnYXRvci51c2VyQWdlbnREYXRhLnRvSlNPTigpKTtcclxuICAgIC8vIH1lbHNlIHtcclxuICAgIC8vICAgY29uc29sZS5pbmZvKFwiQnJvd3NlciBkb2VzIG5vdCBwcm92aWRlIHVzZXJBZ2VudERhdGEuXCIpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGxldCB1YT1uYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcIlVzZXIgYWdlbnQ6IFwiK3VhKTtcclxuICAgIHRoaXMuY29tcHMgPSBuZXcgQXJyYXk8VXNlckFnZW50Q29tcG9uZW50PigpO1xyXG5cclxuICAgIGxldCBwcCA9IDA7XHJcbiAgICB3aGlsZSAocHAgPCB1YS5sZW5ndGgpIHtcclxuICAgICAgLy9wYXJzZSBuYW1lL3ZlcnNpb25cclxuICAgICAgbGV0IG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsXHJcbiAgICAgIGxldCB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgbGV0IGNvbW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGxldCBibFBvcyA9IHVhLmluZGV4T2YoJyAnLCBwcCk7XHJcbiAgICAgIGxldCBwcnQ6IHN0cmluZztcclxuICAgICAgLy8gVE9ETyBSZXBsYWNlIHN1YnN0ciB3aXRoIHN1YnN0cmluZyAoPylcclxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTI2NDAyNzEvd2h5LWlzLXN0cmluZy1wcm90b3R5cGUtc3Vic3RyLWRlcHJlY2F0ZWRcclxuICAgICAgaWYgKGJsUG9zID09IC0xKSB7XHJcbiAgICAgICAgcHJ0ID0gdWEuc3Vic3RyKHBwKTtcclxuICAgICAgICBwcCArPSBwcnQubGVuZ3RoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBydCA9IHVhLnN1YnN0cihwcCwgYmxQb3MgLSBwcCk7XHJcbiAgICAgICAgcHAgPSBibFBvcyArIDE7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHNlcFBvcyA9IHBydC5pbmRleE9mKCcvJyk7XHJcbiAgICAgIGlmIChzZXBQb3MgPiAwKSB7XHJcbiAgICAgICAgbmFtZSA9IHBydC5zdWJzdHIoMCwgc2VwUG9zKTtcclxuICAgICAgICB2ZXJzaW9uID0gcHJ0LnN1YnN0cihzZXBQb3MgKyAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuYW1lID0gcHJ0O1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlICh1YVtwcF0gPT09ICcgJyAmJiBwcCA8IHVhLmxlbmd0aCkge1xyXG4gICAgICAgIHBwKys7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHVhW3BwXSA9PT0gJygnKSB7XHJcbiAgICAgICAgcHArKztcclxuICAgICAgICBsZXQgY29tbUVuZCA9IHVhLmluZGV4T2YoJyknLCBwcCk7XHJcbiAgICAgICAgY29tbWVudCA9IHVhLnN1YnN0cihwcCwgY29tbUVuZCAtIHBwKTtcclxuICAgICAgICBwcCA9IGNvbW1FbmQgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlICh1YVtwcF0gPT09ICcgJyAmJiBwcCA8IHVhLmxlbmd0aCkge1xyXG4gICAgICAgIHBwKys7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdWFjPW5ldyBVc2VyQWdlbnRDb21wb25lbnQobmFtZSwgdmVyc2lvbiwgY29tbWVudCk7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1c2VyIGFnZW50IGNvbXA6IFwiK3VhYyk7XHJcbiAgICAgIHRoaXMuY29tcHMucHVzaCh1YWMpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkZXRQbGF0ZjpQbGF0Zm9ybXxudWxsPW51bGw7XHJcbiAgICBpZih0aGlzLnJ1bnNPbk9TKFBsYXRmb3JtLkFuZHJvaWQpKXtcclxuICAgICAgZGV0UGxhdGY9UGxhdGZvcm0uQW5kcm9pZDtcclxuICAgIH1lbHNlIGlmKHRoaXMucnVuc09uT1MoUGxhdGZvcm0uV2luZG93cykpe1xyXG4gICAgICBkZXRQbGF0Zj1QbGF0Zm9ybS5XaW5kb3dzO1xyXG4gICAgfWVsc2UgaWYodGhpcy5ydW5zT25PUyhQbGF0Zm9ybS5tYWNPUykpe1xyXG4gICAgICBkZXRQbGF0Zj1QbGF0Zm9ybS5tYWNPUztcclxuICAgIH1cclxuXHJcblxyXG4gIGxldCBkZXRCcjpCcm93c2VyfG51bGw9bnVsbDtcclxuICAgIGlmKHRoaXMubWF0Y2hlc0Jyb3dzZXIoQnJvd3Nlci5GaXJlZm94KSl7XHJcbiAgICAgIGRldEJyPUJyb3dzZXIuRmlyZWZveDtcclxuICAgIH1lbHNlIGlmKHRoaXMubWF0Y2hlc0Jyb3dzZXIoQnJvd3Nlci5DaHJvbWUpKXtcclxuICAgICAgZGV0QnI9QnJvd3Nlci5DaHJvbWU7XHJcbiAgICB9ZWxzZSBpZih0aGlzLm1hdGNoZXNCcm93c2VyKEJyb3dzZXIuU2FmYXJpKSl7XHJcbiAgICAgIGRldEJyPUJyb3dzZXIuU2FmYXJpO1xyXG4gICAgfVxyXG4gICAgbGV0IGRldEJyVmVycyA9bnVsbDtcclxuICAgIGlmKGRldEJyKSB7XHJcbiAgICAgZGV0QnJWZXJzPXRoaXMuYnJvd3NlclZlcnNpb24oZGV0QnIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51c2VyQWdlbnQ9bmV3IFVzZXJBZ2VudChkZXRQbGF0ZixkZXRCcixkZXRCclZlcnMpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWF0Y2hlc0Jyb3dzZXIoYnJvd3Nlck5hbWU6c3RyaW5nKXtcclxuICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNvbXBzLmxlbmd0aDtjaSsrKXtcclxuICAgICAgbGV0IGJuPXRoaXMuY29tcHNbY2ldLm5hbWVcclxuICAgICAgbGV0IGJuUmU9bmV3IFJlZ0V4cChicm93c2VyTmFtZSwnaScpO1xyXG4gICAgICBpZihibi5tYXRjaChiblJlKSl7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnJvd3NlclZlcnNpb24oYnJvd3Nlck5hbWU6c3RyaW5nKTpzdHJpbmd8bnVsbHtcclxuICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNvbXBzLmxlbmd0aDtjaSsrKXtcclxuICAgICAgY29uc3QgY29tcD10aGlzLmNvbXBzW2NpXTtcclxuICAgICAgY29uc3QgYm49Y29tcC5uYW1lO1xyXG4gICAgICBjb25zdCBiblJlPW5ldyBSZWdFeHAoYnJvd3Nlck5hbWUsJ2knKTtcclxuICAgICAgaWYoYm4ubWF0Y2goYm5SZSkpe1xyXG4gICAgICAgIHJldHVybiBjb21wLnZlcnNpb247XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBydW5zT25PUyhvczpzdHJpbmcpOmJvb2xlYW57XHJcbiAgICBmb3IobGV0IGNpPTA7Y2k8dGhpcy5jb21wcy5sZW5ndGg7Y2krKyl7XHJcbiAgICAgIGxldCBjYz10aGlzLmNvbXBzW2NpXS5jb21tZW50XHJcbiAgICAgIGlmKGNjKXtcclxuICAgICAgICB2YXIgb3NSZSA9IG5ldyBSZWdFeHAob3MsJ2knKTtcclxuICAgICAgICBpZihjYy5tYXRjaChvc1JlKSl7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB1c2VyQWdlbnQoKTpVc2VyQWdlbnR7XHJcbiAgICAgIGlmKCF0aGlzLmluc3RhbmNlKXtcclxuICAgICAgICB0aGlzLmluc3RhbmNlPW5ldyBVc2VyQWdlbnRCdWlsZGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnN0YW5jZS5idWlsZCgpO1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS51c2VyQWdlbnQ7XHJcblxyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -1,132 +0,0 @@
1
- export class UUID {
2
- static generate() {
3
- return UUID.s4() + UUID.s4() + '-' + UUID.s4() + '-' + UUID.s4() + '-' +
4
- UUID.s4() + '-' + UUID.s4() + UUID.s4() + UUID.s4();
5
- }
6
- static s4() {
7
- return Math.floor((1 + Math.random()) * 0x10000)
8
- .toString(16)
9
- .substring(1);
10
- }
11
- }
12
- export class DataSize {
13
- static { this.BINARY_UNITS = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB', 'RiB', 'QiB']; }
14
- static { this.BINARY_UNIT_FACTOR = 1024; }
15
- static { this.BINARY_UNIT_FACTOR_LOG = Math.log(DataSize.BINARY_UNIT_FACTOR); }
16
- static formatBytesToBinaryUnits(bytes, decimals = 2) {
17
- let binaryUnitIdx = 0;
18
- let divisor = 1;
19
- if (bytes > 0) {
20
- const bytesLog = Math.log(bytes);
21
- binaryUnitIdx = Math.floor(bytesLog / this.BINARY_UNIT_FACTOR_LOG);
22
- if (binaryUnitIdx >= this.BINARY_UNITS.length) {
23
- // fallback to bytes
24
- binaryUnitIdx = 0;
25
- }
26
- divisor = Math.pow(this.BINARY_UNIT_FACTOR, binaryUnitIdx);
27
- }
28
- let decimalsUnitValue;
29
- if (binaryUnitIdx === 0) {
30
- decimalsUnitValue = bytes.toString();
31
- }
32
- else {
33
- const unitValue = bytes / divisor;
34
- decimalsUnitValue = unitValue.toFixed(decimals);
35
- }
36
- const binaryUnitStr = decimalsUnitValue + ' ' + this.BINARY_UNITS[binaryUnitIdx];
37
- return binaryUnitStr;
38
- }
39
- }
40
- export class Arrays {
41
- static cloneNumberArray(numberArray) {
42
- let len = numberArray.length;
43
- let cloneArr = new Array(len);
44
- for (let c = 0; c < numberArray.length; c++) {
45
- cloneArr[c] = numberArray[c];
46
- }
47
- return cloneArr;
48
- }
49
- static swap(items, i, j) {
50
- let tmp = items[i];
51
- items[i] = items[j];
52
- items[j] = tmp;
53
- }
54
- static shuffleArray(orgArray) {
55
- let shuffledArray = [...orgArray];
56
- for (let i = shuffledArray.length; i > 1; i--) {
57
- let rnd = Math.random();
58
- let rndArrIdx = Math.floor(rnd * i);
59
- Arrays.swap(shuffledArray, i - 1, rndArrIdx);
60
- }
61
- return shuffledArray;
62
- }
63
- }
64
- export class WorkerHelper {
65
- static { this.DEBUG = false; }
66
- static buildWorkerBlobURL(workerFct) {
67
- if (!(workerFct instanceof Function)) {
68
- throw new Error('Parameter workerFct is not a function! (XSS attack?).');
69
- }
70
- let woFctNm = workerFct.name;
71
- if (WorkerHelper.DEBUG) {
72
- console.info("Worker method name: " + woFctNm);
73
- }
74
- let woFctStr = workerFct.toString();
75
- if (WorkerHelper.DEBUG) {
76
- console.info("Worker method string:");
77
- console.info(woFctStr);
78
- }
79
- // Make sure code starts with "function()"
80
- // Chrome, Firefox: "[wofctNm](){...}", Safari: "function [wofctNm](){...}"
81
- // we need an anonymous function: "function() {...}"
82
- let piWoFctStr = woFctStr.replace(/^function +/, '');
83
- if (WorkerHelper.DEBUG) {
84
- console.info("Worker platform independent function string:");
85
- console.info(piWoFctStr);
86
- }
87
- // Convert to anonymous function
88
- let anonWoFctStr = piWoFctStr.replace(woFctNm + '()', 'function()');
89
- if (WorkerHelper.DEBUG) {
90
- console.info("Worker anonymous function string:");
91
- console.info(piWoFctStr);
92
- }
93
- // Self executing
94
- let ws = '(' + anonWoFctStr + ')();';
95
- if (WorkerHelper.DEBUG) {
96
- console.info("Worker self executing anonymous function string:");
97
- console.info(anonWoFctStr);
98
- }
99
- // Build the worker blob
100
- let wb = new Blob([ws], { type: 'text/javascript' });
101
- let workerBlobUrl = window.URL.createObjectURL(wb);
102
- return workerBlobUrl;
103
- }
104
- }
105
- export class ErrorHelper {
106
- static messageFromError(error) {
107
- let msg = null;
108
- if (error instanceof Error) {
109
- msg = error.message;
110
- }
111
- return msg;
112
- }
113
- static messageFromErrorNonNull(error) {
114
- let msg = '';
115
- const msgNullable = ErrorHelper.messageFromError(error);
116
- if (msgNullable != null) {
117
- msg = msgNullable;
118
- }
119
- return msg;
120
- }
121
- static message(baseMessage, error) {
122
- let msg = baseMessage;
123
- if (error instanceof Error) {
124
- msg = baseMessage + ': ' + error.message;
125
- }
126
- else {
127
- msg = baseMessage + '.';
128
- }
129
- return msg;
130
- }
131
- }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvdXRpbHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0UsTUFBTSxPQUFPLElBQUk7SUFFZixNQUFNLENBQUMsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRztZQUNwRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFUyxNQUFNLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQzdDLFFBQVEsQ0FBQyxFQUFFLENBQUM7YUFDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNBO0FBRUQsTUFBTSxPQUFPLFFBQVE7YUFDSixpQkFBWSxHQUFDLENBQUMsR0FBRyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9FLHVCQUFrQixHQUFRLElBQUksQ0FBQzthQUMvQiwyQkFBc0IsR0FBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRW5GLE1BQU0sQ0FBQyx3QkFBd0Is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LFdBQVcsR0FBQyxJQUFJLEdBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNyQyxDQUFDO2FBQUksQ0FBQztZQUNKLEdBQUcsR0FBQyxXQUFXLEdBQUMsR0FBRyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gIGV4cG9ydCBjbGFzcyBVVUlEIHtcclxuXHJcbiAgICBzdGF0aWMgZ2VuZXJhdGUoKTpzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVVSUQuczQoKSArIFVVSUQuczQoKSArICctJyArIFVVSUQuczQoKSArICctJyArIFVVSUQuczQoKSArICctJyArXHJcbiAgICAgIFVVSUQuczQoKSArICctJyArIFVVSUQuczQoKSArIFVVSUQuczQoKSArIFVVSUQuczQoKTtcclxuICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgczQoKSB7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcclxuICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAuc3Vic3RyaW5nKDEpO1xyXG4gIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyBEYXRhU2l6ZXtcclxuICAgIHByaXZhdGUgc3RhdGljIEJJTkFSWV9VTklUUz1bJ0InLCdLaUInLCdNaUInLCdHaUInLCdUaUInLCdQaUInLCdFaUInLCdaaUInLCdZaUInLCdSaUInLCdRaUInXTtcclxuICAgIHByaXZhdGUgc3RhdGljIEJJTkFSWV9VTklUX0ZBQ1RPUjpudW1iZXI9MTAyNDtcclxuICAgIHByaXZhdGUgc3RhdGljIEJJTkFSWV9VTklUX0ZBQ1RPUl9MT0c6bnVtYmVyPU1hdGgubG9nKERhdGFTaXplLkJJTkFSWV9VTklUX0ZBQ1RPUik7XHJcblxyXG4gICAgc3RhdGljIGZvcm1hdEJ5dGVzVG9CaW5hcnlVbml0cyhieXRlczpudW1iZXIsZGVjaW1hbHM6bnVtYmVyPTIpOnN0cmluZ3tcclxuXHJcbiAgICAgIGxldCBiaW5hcnlVbml0SWR4PTA7XHJcbiAgICAgIGxldCBkaXZpc29yPTE7XHJcbiAgICAgIGlmKGJ5dGVzPjApIHtcclxuICAgICAgICBjb25zdCBieXRlc0xvZyA9IE1hdGgubG9nKGJ5dGVzKTtcclxuICAgICAgICBiaW5hcnlVbml0SWR4ID0gTWF0aC5mbG9vcihieXRlc0xvZyAvIHRoaXMuQklOQVJZX1VOSVRfRkFDVE9SX0xPRyk7XHJcbiAgICAgICAgaWYgKGJpbmFyeVVuaXRJZHggPj0gdGhpcy5CSU5BUllfVU5JVFMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyBmYWxsYmFjayB0byBieXRlc1xyXG4gICAgICAgICAgYmluYXJ5VW5pdElkeCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpdmlzb3IgPSBNYXRoLnBvdyh0aGlzLkJJTkFSWV9VTklUX0ZBQ1RPUiwgYmluYXJ5VW5pdElkeCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGRlY2ltYWxzVW5pdFZhbHVlOnN0cmluZztcclxuICAgICAgaWYoYmluYXJ5VW5pdElkeD09PTApe1xyXG4gICAgICAgIGRlY2ltYWxzVW5pdFZhbHVlPWJ5dGVzLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICBjb25zdCB1bml0VmFsdWUgPSBieXRlcyAvIGRpdmlzb3I7XHJcbiAgICAgICAgZGVjaW1hbHNVbml0VmFsdWU9dW5pdFZhbHVlLnRvRml4ZWQoZGVjaW1hbHMpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGJpbmFyeVVuaXRTdHIgPSBkZWNpbWFsc1VuaXRWYWx1ZSArICcgJyArIHRoaXMuQklOQVJZX1VOSVRTW2JpbmFyeVVuaXRJZHhdO1xyXG5cclxuICAgICAgcmV0dXJuIGJpbmFyeVVuaXRTdHI7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIEFycmF5cyB7XHJcblxyXG4gICAgc3RhdGljIGNsb25lTnVtYmVyQXJyYXkobnVtYmVyQXJyYXk6IEFycmF5PG51bWJlcj4pOiBBcnJheTxudW1iZXI+IHtcclxuICAgICAgbGV0IGxlbiA9IG51bWJlckFycmF5Lmxlbmd0aDtcclxuICAgICAgbGV0IGNsb25lQXJyID0gbmV3IEFycmF5PG51bWJlcj4obGVuKTtcclxuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBudW1iZXJBcnJheS5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgIGNsb25lQXJyW2NdID0gbnVtYmVyQXJyYXlbY107XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNsb25lQXJyO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzd2FwPFQ+KGl0ZW1zOkFycmF5PFQ+LCBpOm51bWJlciwgajpudW1iZXIpIHtcclxuICAgICAgbGV0IHRtcCA9IGl0ZW1zW2ldO1xyXG4gICAgICBpdGVtc1tpXSA9IGl0ZW1zW2pdO1xyXG4gICAgICBpdGVtc1tqXSA9IHRtcDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2h1ZmZsZUFycmF5PFQ+KG9yZ0FycmF5OkFycmF5PFQ+KTpBcnJheTxUPntcclxuICAgICAgICBsZXQgc2h1ZmZsZWRBcnJheSA9IFsuLi5vcmdBcnJheV07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHNodWZmbGVkQXJyYXkubGVuZ3RoOyBpID4gMTsgaS0tKSB7XHJcbiAgICAgICAgICBsZXQgcm5kPU1hdGgucmFuZG9tKCk7XHJcbiAgICAgICAgICBsZXQgcm5kQXJySWR4PU1hdGguZmxvb3Iocm5kKmkpO1xyXG4gICAgICAgICAgQXJyYXlzLnN3YXAoc2h1ZmZsZWRBcnJheSwgaSAtIDEsIHJuZEFycklkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaHVmZmxlZEFycmF5O1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgY2xhc3MgV29ya2VySGVscGVyIHtcclxuXHJcbiAgICBzdGF0aWMgREVCVUc9ZmFsc2U7XHJcbiAgICBzdGF0aWMgYnVpbGRXb3JrZXJCbG9iVVJMKHdvcmtlckZjdDogRnVuY3Rpb24pOiBzdHJpbmcge1xyXG5cclxuICAgICAgaWYoISAod29ya2VyRmN0IGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnUGFyYW1ldGVyIHdvcmtlckZjdCBpcyBub3QgYSBmdW5jdGlvbiEgKFhTUyBhdHRhY2s/KS4nXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCAgd29GY3RObSA9IHdvcmtlckZjdC5uYW1lXHJcbiAgICAgIGlmIChXb3JrZXJIZWxwZXIuREVCVUcpIHtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJXb3JrZXIgbWV0aG9kIG5hbWU6IFwiICsgd29GY3RObSlcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHdvRmN0U3RyID0gd29ya2VyRmN0LnRvU3RyaW5nKClcclxuICAgICAgaWYgKFdvcmtlckhlbHBlci5ERUJVRykge1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIldvcmtlciBtZXRob2Qgc3RyaW5nOlwiKVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyh3b0ZjdFN0cilcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSBjb2RlIHN0YXJ0cyB3aXRoIFwiZnVuY3Rpb24oKVwiXHJcblxyXG4gICAgICAvLyBDaHJvbWUsIEZpcmVmb3g6IFwiW3dvZmN0Tm1dKCl7Li4ufVwiLCBTYWZhcmk6IFwiZnVuY3Rpb24gW3dvZmN0Tm1dKCl7Li4ufVwiXHJcbiAgICAgIC8vIHdlIG5lZWQgYW4gYW5vbnltb3VzIGZ1bmN0aW9uOiBcImZ1bmN0aW9uKCkgey4uLn1cIlxyXG4gICAgICBsZXQgcGlXb0ZjdFN0ciA9IHdvRmN0U3RyLnJlcGxhY2UoL15mdW5jdGlvbiArLywgJycpO1xyXG5cclxuICAgICAgaWYoV29ya2VySGVscGVyLkRFQlVHKXtcclxuICAgICAgICBjb25zb2xlLmluZm8oXCJXb3JrZXIgcGxhdGZvcm0gaW5kZXBlbmRlbnQgZnVuY3Rpb24gc3RyaW5nOlwiKVxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhwaVdvRmN0U3RyKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDb252ZXJ0IHRvIGFub255bW91cyBmdW5jdGlvblxyXG4gICAgICBsZXQgYW5vbldvRmN0U3RyID0gcGlXb0ZjdFN0ci5yZXBsYWNlKHdvRmN0Tm0gKyAnKCknLCAnZnVuY3Rpb24oKScpXHJcbiAgICAgIGlmKFdvcmtlckhlbHBlci5ERUJVRyl7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiV29ya2VyIGFub255bW91cyBmdW5jdGlvbiBzdHJpbmc6XCIpXHJcbiAgICAgICAgY29uc29sZS5pbmZvKHBpV29GY3RTdHIpXHJcbiAgICAgIH1cclxuICAgICAgLy8gU2VsZiBleGVjdXRpbmdcclxuICAgICAgbGV0IHdzID0gJygnICsgYW5vbldvRmN0U3RyICsgJykoKTsnXHJcbiAgICAgIGlmKFdvcmtlckhlbHBlci5ERUJVRyl7XHJcbiAgICAgICAgY29uc29sZS5pbmZvKFwiV29ya2VyIHNlbGYgZXhlY3V0aW5nIGFub255bW91cyBmdW5jdGlvbiBzdHJpbmc6XCIpXHJcbiAgICAgICAgY29uc29sZS5pbmZvKGFub25Xb0ZjdFN0cilcclxuICAgICAgfVxyXG4gICAgICAvLyBCdWlsZCB0aGUgd29ya2VyIGJsb2JcclxuICAgICAgbGV0IHdiID0gbmV3IEJsb2IoW3dzXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XHJcblxyXG4gICAgICBsZXQgd29ya2VyQmxvYlVybD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh3Yik7XHJcbiAgICAgIHJldHVybiB3b3JrZXJCbG9iVXJsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIEVycm9ySGVscGVye1xyXG5cclxuICAgIHN0YXRpYyBtZXNzYWdlRnJvbUVycm9yKGVycm9yOmFueSk6c3RyaW5nfG51bGx7XHJcbiAgICAgICAgbGV0IG1zZz1udWxsO1xyXG4gICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3Ipe1xyXG4gICAgICAgICAgbXNnPWVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtc2c7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG1lc3NhZ2VGcm9tRXJyb3JOb25OdWxsKGVycm9yOmFueSk6c3RyaW5ne1xyXG4gICAgICBsZXQgbXNnPScnO1xyXG4gICAgICBjb25zdCBtc2dOdWxsYWJsZT1FcnJvckhlbHBlci5tZXNzYWdlRnJvbUVycm9yKGVycm9yKTtcclxuICAgICAgaWYobXNnTnVsbGFibGUhPW51bGwpe1xyXG4gICAgICAgIG1zZz1tc2dOdWxsYWJsZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbXNnO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBtZXNzYWdlKGJhc2VNZXNzYWdlOnN0cmluZyxlcnJvcjphbnkpOnN0cmluZ3tcclxuICAgICAgbGV0IG1zZz1iYXNlTWVzc2FnZTtcclxuICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcil7XHJcbiAgICAgICAgbXNnPWJhc2VNZXNzYWdlKyc6ICcrZXJyb3IubWVzc2FnZTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgbXNnPWJhc2VNZXNzYWdlKycuJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbXNnO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiJdfQ==
@@ -1,114 +0,0 @@
1
- import { BehaviorSubject } from "rxjs";
2
- import { WAKE_LOCK_VIDEO_MP4_URI } from "./wake_lock_media";
3
- import { Browser, UserAgentBuilder } from "./ua-parser";
4
- /**
5
- * Utility to prevent devices from screen lock.
6
- * If supported uses the HTML5 wake lock API, if not, plays an invisible video.
7
- *
8
- * Note: I've used the GitHub project richtr/nosleep.js for that. The worked in most cases, but failed sometimes on an
9
- * Android smartphone.
10
- */
11
- export class WakeLockManager {
12
- get behaviorSubject() {
13
- return this._behaviorSubject;
14
- }
15
- constructor() {
16
- this.wakeLockApiSupported = false;
17
- this.wakeLockRetryCount = 0;
18
- this.randomSeekRequired = false;
19
- this._behaviorSubject = new BehaviorSubject(false);
20
- this.VIDEO_LENGTH = 10;
21
- this.wakeLockApiSupported = ('wakeLock' in navigator);
22
- console.debug("Wake lock API supported: " + this.wakeLockApiSupported);
23
- this.userAgent = UserAgentBuilder.userAgent();
24
- this.randomSeekRequired = (this.userAgent?.detectedBrowser === Browser.Safari);
25
- }
26
- enableWakeLock() {
27
- if (this.wakeLockApiSupported) {
28
- //@ts-ignore
29
- navigator.wakeLock.request('screen').then((wls) => {
30
- this.wakeLockSentinel = wls;
31
- this.wakeLockRetryCount = 0;
32
- console.debug('Wake lock screen request successful.');
33
- this._behaviorSubject.next(true);
34
- }).catch((reason) => {
35
- console.error('Wakelock failed: ' + reason);
36
- this._behaviorSubject.error(reason);
37
- });
38
- }
39
- else {
40
- if (!this.mp4VideoElement) {
41
- this.mp4VideoElement = document.createElement('video');
42
- this.mp4VideoElement.loop = !this.randomSeekRequired;
43
- this.mp4VideoElement.playsInline = true;
44
- this.mp4VideoElement.src = WAKE_LOCK_VIDEO_MP4_URI;
45
- this.mp4VideoElement.addEventListener('play', (ev) => {
46
- console.debug('Wake lock video playing...');
47
- this._behaviorSubject.next(true);
48
- });
49
- this.mp4VideoElement.addEventListener('ended', (ev) => {
50
- console.debug('Wake lock video ended.');
51
- this._behaviorSubject.next(false);
52
- });
53
- this.mp4VideoElement.addEventListener('pause', (ev) => {
54
- console.debug('Wake lock video pause.');
55
- this._behaviorSubject.next(false);
56
- });
57
- if (this.randomSeekRequired) {
58
- this.mp4VideoElement.addEventListener('timeupdate', (ev) => {
59
- if (this.randomSeekRequired && this.mp4VideoElement) {
60
- let thirdVideoLen = this.VIDEO_LENGTH / 3;
61
- if (this.mp4VideoElement.currentTime > thirdVideoLen * 2) {
62
- let newPos = (thirdVideoLen * Math.random());
63
- //console.debug('Wake lock random seek to '+newPos+'s');
64
- this.mp4VideoElement.currentTime = newPos;
65
- }
66
- }
67
- });
68
- }
69
- this.mp4VideoElement.addEventListener('error', (ev) => {
70
- console.debug('Wake lock video error: ' + ev.message);
71
- this._behaviorSubject.error(ev.error);
72
- });
73
- console.debug('Added listeners to wake lock video.');
74
- }
75
- this.startWakeLockVideo();
76
- }
77
- }
78
- startWakeLockVideo() {
79
- if (this.mp4VideoElement) {
80
- this.mp4VideoElement.play().then(() => {
81
- this.wakeLockRetryCount = 0;
82
- }).catch((err) => {
83
- console.debug('Failed starting wake lock video!');
84
- if (this.wakeLockRetryCount < 1) {
85
- window.setTimeout(() => {
86
- this.wakeLockRetryCount++;
87
- console.debug('Retry wake lock video #' + this.wakeLockRetryCount);
88
- this.startWakeLockVideo();
89
- }, 4000);
90
- }
91
- else {
92
- console.debug('Giving up to try to start wake lock video.');
93
- }
94
- });
95
- }
96
- }
97
- disableWakeLock() {
98
- if (this.wakeLockApiSupported) {
99
- this.wakeLockSentinel.release().then(() => {
100
- console.debug('Wake lock release successful.');
101
- this._behaviorSubject.next(false);
102
- }).catch((reason) => {
103
- console.error('Wakelock release failed: ' + reason);
104
- this._behaviorSubject.error(reason);
105
- });
106
- }
107
- else {
108
- if (this.mp4VideoElement) {
109
- this.mp4VideoElement.pause();
110
- }
111
- }
112
- }
113
- }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FrZV9sb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3V0aWxzL3dha2VfbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFakU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUIsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFjRDtRQVRRLHlCQUFvQixHQUFDLEtBQUssQ0FBQztRQUMzQix1QkFBa0IsR0FBQyxDQUFDLENBQUM7UUFFckIsdUJBQWtCLEdBQUMsS0FBSyxDQUFDO1FBRXpCLHFCQUFnQixHQUEwQixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVyRSxpQkFBWSxHQUFDLEVBQUUsQ0FBQztRQUcvQixJQUFJLENBQUMsb0JBQW9CLEdBQUMsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsR0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxrQkFBa0IsR0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxLQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDM0IsWUFBWTtZQUNaLFNBQVMsQ0FB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QUFDLG9CQUFvQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFFLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFVLEVBQUMsRUFBRTtnQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsR0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBSyxDQUFDO1lBQ0wsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtXQUtFX0xPQ0tfVklERU9fTVA0X1VSSX0gZnJvbSBcIi4vd2FrZV9sb2NrX21lZGlhXCI7XHJcbmltcG9ydCB7QnJvd3NlciwgVXNlckFnZW50LCBVc2VyQWdlbnRCdWlsZGVyfSBmcm9tIFwiLi91YS1wYXJzZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBVdGlsaXR5IHRvIHByZXZlbnQgZGV2aWNlcyBmcm9tIHNjcmVlbiBsb2NrLlxyXG4gKiBJZiBzdXBwb3J0ZWQgdXNlcyB0aGUgSFRNTDUgd2FrZSBsb2NrIEFQSSwgaWYgbm90LCBwbGF5cyBhbiBpbnZpc2libGUgdmlkZW8uXHJcbiAqXHJcbiAqIE5vdGU6IEkndmUgdXNlZCB0aGUgR2l0SHViIHByb2plY3QgcmljaHRyL25vc2xlZXAuanMgZm9yIHRoYXQuIFRoZSB3b3JrZWQgaW4gbW9zdCBjYXNlcywgYnV0IGZhaWxlZCBzb21ldGltZXMgb24gYW5cclxuICogICBBbmRyb2lkIHNtYXJ0cGhvbmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgV2FrZUxvY2tNYW5hZ2VyIHtcclxuICBnZXQgYmVoYXZpb3JTdWJqZWN0KCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmVoYXZpb3JTdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIHByaXZhdGUgd2FrZUxvY2tTZW50aW5lbDpXYWtlTG9ja1NlbnRpbmVsO1xyXG4gIHByaXZhdGUgbXA0VmlkZW9FbGVtZW50PzpIVE1MVmlkZW9FbGVtZW50O1xyXG4gIHByaXZhdGUgd2FrZUxvY2tBcGlTdXBwb3J0ZWQ9ZmFsc2U7XHJcbiAgcHJpdmF0ZSB3YWtlTG9ja1JldHJ5Q291bnQ9MDtcclxuICBwcml2YXRlIHVzZXJBZ2VudD86VXNlckFnZW50O1xyXG4gIHByaXZhdGUgcmFuZG9tU2Vla1JlcXVpcmVkPWZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9iZWhhdmlvclN1YmplY3Q6QmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+PW5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IFZJREVPX0xFTkdUSD0xMDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLndha2VMb2NrQXBpU3VwcG9ydGVkPSgnd2FrZUxvY2snIGluIG5hdmlnYXRvcik7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiV2FrZSBsb2NrIEFQSSBzdXBwb3J0ZWQ6IFwiK3RoaXMud2FrZUxvY2tBcGlTdXBwb3J0ZWQpO1xyXG4gICAgdGhpcy51c2VyQWdlbnQ9VXNlckFnZW50QnVpbGRlci51c2VyQWdlbnQoKTtcclxuICAgIHRoaXMucmFuZG9tU2Vla1JlcXVpcmVkPSh0aGlzLnVzZXJBZ2VudD8uZGV0ZWN0ZWRCcm93c2VyPT09QnJvd3Nlci5TYWZhcmkpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlV2FrZUxvY2soKXtcclxuICAgICAgaWYodGhpcy53YWtlTG9ja0FwaVN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICBuYXZpZ2F0b3Iud2FrZUxvY2sucmVxdWVzdCgnc2NyZWVuJykudGhlbigod2xzKT0+e1xyXG4gICAgICAgICAgICB0aGlzLndha2VMb2NrU2VudGluZWw9d2xzO1xyXG4gICAgICAgICAgICB0aGlzLndha2VMb2NrUmV0cnlDb3VudD0wO1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdXYWtlIGxvY2sgc2NyZWVuIHJlcXVlc3Qgc3VjY2Vzc2Z1bC4nKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KS5jYXRjaCgocmVhc29uOmFueSk9PntcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignV2FrZWxvY2sgZmFpbGVkOiAnK3JlYXNvbilcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0LmVycm9yKHJlYXNvbik7XHJcblxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1wNFZpZGVvRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xyXG5cclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50Lmxvb3AgPSAhdGhpcy5yYW5kb21TZWVrUmVxdWlyZWQ7XHJcbiAgICAgICAgICB0aGlzLm1wNFZpZGVvRWxlbWVudC5wbGF5c0lubGluZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuc3JjPVdBS0VfTE9DS19WSURFT19NUDRfVVJJO1xyXG5cclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnV2FrZSBsb2NrIHZpZGVvIHBsYXlpbmcuLi4nKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnV2FrZSBsb2NrIHZpZGVvIGVuZGVkLicpO1xyXG4gICAgICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCAoZXYpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1dha2UgbG9jayB2aWRlbyBwYXVzZS4nKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGlmKHRoaXMucmFuZG9tU2Vla1JlcXVpcmVkKXtcclxuICAgICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIChldikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMucmFuZG9tU2Vla1JlcXVpcmVkICYmIHRoaXMubXA0VmlkZW9FbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGhpcmRWaWRlb0xlbj10aGlzLlZJREVPX0xFTkdUSC8zO1xyXG4gICAgICAgICAgICAgICBpZiAodGhpcy5tcDRWaWRlb0VsZW1lbnQuY3VycmVudFRpbWUgPiB0aGlyZFZpZGVvTGVuKjIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3UG9zPSh0aGlyZFZpZGVvTGVuKk1hdGgucmFuZG9tKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnV2FrZSBsb2NrIHJhbmRvbSBzZWVrIHRvICcrbmV3UG9zKydzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tcDRWaWRlb0VsZW1lbnQuY3VycmVudFRpbWU9bmV3UG9zO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1dha2UgbG9jayB2aWRlbyBlcnJvcjogJytldi5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0LmVycm9yKGV2LmVycm9yKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdBZGRlZCBsaXN0ZW5lcnMgdG8gd2FrZSBsb2NrIHZpZGVvLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXJ0V2FrZUxvY2tWaWRlbygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRXYWtlTG9ja1ZpZGVvKCl7XHJcbiAgICBpZih0aGlzLm1wNFZpZGVvRWxlbWVudCl7XHJcbiAgICAgIHRoaXMubXA0VmlkZW9FbGVtZW50LnBsYXkoKS50aGVuKCgpPT57XHJcbiAgICAgICAgdGhpcy53YWtlTG9ja1JldHJ5Q291bnQ9MDtcclxuICAgICAgfSkuY2F0Y2goKGVycik9PiB7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnRmFpbGVkIHN0YXJ0aW5nIHdha2UgbG9jayB2aWRlbyEnKTtcclxuICAgICAgICBpZiAodGhpcy53YWtlTG9ja1JldHJ5Q291bnQgPCAxKSB7XHJcbiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMud2FrZUxvY2tSZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1JldHJ5IHdha2UgbG9jayB2aWRlbyAjJyArIHRoaXMud2FrZUxvY2tSZXRyeUNvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFdha2VMb2NrVmlkZW8oKTtcclxuICAgICAgICAgIH0sIDQwMDApXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdHaXZpbmcgdXAgdG8gdHJ5IHRvIHN0YXJ0IHdha2UgbG9jayB2aWRlby4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGRpc2FibGVXYWtlTG9jaygpe1xyXG4gICAgaWYodGhpcy53YWtlTG9ja0FwaVN1cHBvcnRlZCkge1xyXG4gICAgICAgIHRoaXMud2FrZUxvY2tTZW50aW5lbC5yZWxlYXNlKCkudGhlbigoKT0+e1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnV2FrZSBsb2NrIHJlbGVhc2Ugc3VjY2Vzc2Z1bC4nKTtcclxuICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9KS5jYXRjaCgocmVhc29uOmFueSk9PntcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dha2Vsb2NrIHJlbGVhc2UgZmFpbGVkOiAnK3JlYXNvbilcclxuICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdC5lcnJvcihyZWFzb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5tcDRWaWRlb0VsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLm1wNFZpZGVvRWxlbWVudC5wYXVzZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=