speechrecorderng 2.21.4 → 2.22.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 (111) hide show
  1. package/{esm2015/lib/action/action.js → esm2020/lib/action/action.mjs} +0 -0
  2. package/{esm2015/lib/audio/audio_display.js → esm2020/lib/audio/audio_display.mjs} +5 -5
  3. package/esm2020/lib/audio/audio_player.mjs +276 -0
  4. package/esm2020/lib/audio/capture/capture.mjs +547 -0
  5. package/{esm2015/lib/audio/context.js → esm2020/lib/audio/context.mjs} +0 -0
  6. package/esm2020/lib/audio/dsp/level_measure.mjs +351 -0
  7. package/{esm2015/lib/audio/format.js → esm2020/lib/audio/format.mjs} +0 -0
  8. package/{esm2015/lib/audio/impl/wavformat.js → esm2020/lib/audio/impl/wavformat.mjs} +0 -0
  9. package/{esm2015/lib/audio/impl/wavwriter.js → esm2020/lib/audio/impl/wavwriter.mjs} +0 -0
  10. package/{esm2015/lib/audio/io/stream.js → esm2020/lib/audio/io/stream.mjs} +0 -0
  11. package/{esm2015/lib/audio/persistor.js → esm2020/lib/audio/persistor.mjs} +0 -0
  12. package/{esm2015/lib/audio/playback/player.js → esm2020/lib/audio/playback/player.mjs} +0 -0
  13. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +376 -0
  14. package/{esm2015/lib/audio/ui/audio_display_control.js → esm2020/lib/audio/ui/audio_display_control.mjs} +5 -5
  15. package/{esm2015/lib/audio/ui/audio_display_scroll_pane.js → esm2020/lib/audio/ui/audio_display_scroll_pane.mjs} +5 -5
  16. package/{esm2015/lib/audio/ui/audiosignal.js → esm2020/lib/audio/ui/audiosignal.mjs} +5 -5
  17. package/{esm2015/lib/audio/ui/common.js → esm2020/lib/audio/ui/common.mjs} +0 -0
  18. package/esm2020/lib/audio/ui/container.mjs +431 -0
  19. package/{esm2015/lib/audio/ui/livelevel.js → esm2020/lib/audio/ui/livelevel.mjs} +5 -5
  20. package/{esm2015/lib/audio/ui/scroll_pane_horizontal.js → esm2020/lib/audio/ui/scroll_pane_horizontal.mjs} +4 -4
  21. package/{esm2015/lib/audio/ui/sonagram.js → esm2020/lib/audio/ui/sonagram.mjs} +5 -5
  22. package/{esm2015/lib/dsp/utils.js → esm2020/lib/dsp/utils.mjs} +0 -0
  23. package/{esm2015/lib/io/BinaryWriter.js → esm2020/lib/io/BinaryWriter.mjs} +0 -0
  24. package/{esm2015/lib/io/stream.js → esm2020/lib/io/stream.mjs} +0 -0
  25. package/{esm2015/lib/math/2d/geometry.js → esm2020/lib/math/2d/geometry.mjs} +0 -0
  26. package/{esm2015/lib/math/complex.js → esm2020/lib/math/complex.mjs} +0 -0
  27. package/{esm2015/lib/math/dft.js → esm2020/lib/math/dft.mjs} +0 -0
  28. package/{esm2015/lib/math/utils.js → esm2020/lib/math/utils.mjs} +0 -0
  29. package/esm2020/lib/media/utils.mjs +14 -0
  30. package/esm2020/lib/net/uploader.mjs +246 -0
  31. package/{esm2015/lib/speechrecorder/project/project.js → esm2020/lib/speechrecorder/project/project.mjs} +0 -0
  32. package/{esm2015/lib/speechrecorder/project/project.service.js → esm2020/lib/speechrecorder/project/project.service.mjs} +4 -4
  33. package/esm2020/lib/speechrecorder/recording.mjs +54 -0
  34. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +246 -0
  35. package/{esm2015/lib/speechrecorder/script/script.js → esm2020/lib/speechrecorder/script/script.mjs} +2 -2
  36. package/{esm2015/lib/speechrecorder/script/script.service.js → esm2020/lib/speechrecorder/script/script.service.mjs} +4 -4
  37. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +1144 -0
  38. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +449 -0
  39. package/{esm2015/lib/speechrecorder/session/item.js → esm2020/lib/speechrecorder/session/item.mjs} +1 -1
  40. package/{esm2015/lib/speechrecorder/session/progress.js → esm2020/lib/speechrecorder/session/progress.mjs} +5 -5
  41. package/{esm2015/lib/speechrecorder/session/prompting.js → esm2020/lib/speechrecorder/session/prompting.mjs} +21 -21
  42. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +75 -0
  43. package/esm2020/lib/speechrecorder/session/recording_list.mjs +109 -0
  44. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +126 -0
  45. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file-navi.component.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs} +5 -5
  46. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +168 -0
  47. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +415 -0
  48. package/{esm2015/lib/speechrecorder/session/recordingfile/recording-file.js → esm2020/lib/speechrecorder/session/recordingfile/recording-file.mjs} +1 -1
  49. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +251 -0
  50. package/{esm2015/lib/speechrecorder/session/session.js → esm2020/lib/speechrecorder/session/session.mjs} +0 -0
  51. package/{esm2015/lib/speechrecorder/session/session.service.js → esm2020/lib/speechrecorder/session/session.service.mjs} +4 -4
  52. package/{esm2015/lib/speechrecorder/session/session_finished_dialog.js → esm2020/lib/speechrecorder/session/session_finished_dialog.mjs} +4 -4
  53. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +1274 -0
  54. package/{esm2015/lib/speechrecorder/session/warning_bar.js → esm2020/lib/speechrecorder/session/warning_bar.mjs} +5 -5
  55. package/{esm2015/lib/speechrecorder/spruploader.js → esm2020/lib/speechrecorder/spruploader.mjs} +4 -4
  56. package/{esm2015/lib/speechrecorder/startstopsignal/startstopsignal.js → esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs} +0 -0
  57. package/{esm2015/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.js → esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs} +5 -5
  58. package/esm2020/lib/speechrecorderng.component.mjs +427 -0
  59. package/{esm2015/lib/speechrecorderng.module.js → esm2020/lib/speechrecorderng.module.mjs} +12 -11
  60. package/{esm2015/lib/spr.config.js → esm2020/lib/spr.config.mjs} +4 -4
  61. package/{esm2015/lib/spr.module.version.js → esm2020/lib/spr.module.version.mjs} +2 -2
  62. package/{esm2015/lib/ui/canvas_layer_comp.js → esm2020/lib/ui/canvas_layer_comp.mjs} +4 -4
  63. package/{esm2015/lib/ui/message_dialog.js → esm2020/lib/ui/message_dialog.mjs} +4 -4
  64. package/{esm2015/lib/ui/recordingitem_display.js → esm2020/lib/ui/recordingitem_display.mjs} +9 -9
  65. package/{esm2015/lib/utils/css_utils.js → esm2020/lib/utils/css_utils.mjs} +0 -0
  66. package/{esm2015/lib/utils/scrollIntoViewToBottom.js → esm2020/lib/utils/scrollIntoViewToBottom.mjs} +4 -4
  67. package/{esm2015/lib/utils/ua-parser.js → esm2020/lib/utils/ua-parser.mjs} +0 -0
  68. package/{esm2015/lib/utils/utils.js → esm2020/lib/utils/utils.mjs} +0 -0
  69. package/esm2020/public-api.mjs +31 -0
  70. package/{esm2015/speechrecorderng.js → esm2020/speechrecorderng.mjs} +0 -0
  71. package/fesm2015/speechrecorderng.mjs +11991 -0
  72. package/fesm2015/speechrecorderng.mjs.map +1 -0
  73. package/{fesm2015/speechrecorderng.js → fesm2020/speechrecorderng.mjs} +1863 -285
  74. package/fesm2020/speechrecorderng.mjs.map +1 -0
  75. package/lib/media/utils.d.ts +3 -0
  76. package/lib/net/uploader.d.ts +4 -2
  77. package/lib/speechrecorder/recording.d.ts +14 -3
  78. package/lib/speechrecorder/recordings/recordings.service.d.ts +12 -5
  79. package/lib/speechrecorder/session/audiorecorder.d.ts +150 -0
  80. package/lib/speechrecorder/session/controlpanel.d.ts +2 -1
  81. package/lib/speechrecorder/session/item.d.ts +2 -2
  82. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +26 -0
  83. package/lib/speechrecorder/session/recording_list.d.ts +19 -0
  84. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +6 -2
  85. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +5 -4
  86. package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +2 -2
  87. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +5 -3
  88. package/lib/speechrecorder/session/sessionmanager.d.ts +5 -5
  89. package/lib/speechrecorderng.module.d.ts +31 -28
  90. package/lib/spr.module.version.d.ts +1 -1
  91. package/package.json +33 -20
  92. package/public-api.d.ts +2 -1
  93. package/bundles/speechrecorderng.umd.js +0 -10146
  94. package/bundles/speechrecorderng.umd.js.map +0 -1
  95. package/esm2015/lib/audio/audio_player.js +0 -274
  96. package/esm2015/lib/audio/capture/capture.js +0 -544
  97. package/esm2015/lib/audio/dsp/level_measure.js +0 -356
  98. package/esm2015/lib/audio/ui/audio_canvas_layer_comp.js +0 -364
  99. package/esm2015/lib/audio/ui/container.js +0 -412
  100. package/esm2015/lib/net/uploader.js +0 -220
  101. package/esm2015/lib/speechrecorder/recording.js +0 -38
  102. package/esm2015/lib/speechrecorder/recordings/recordings.service.js +0 -173
  103. package/esm2015/lib/speechrecorder/session/controlpanel.js +0 -446
  104. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-meta.component.js +0 -83
  105. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.js +0 -163
  106. package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-view.component.js +0 -386
  107. package/esm2015/lib/speechrecorder/session/recordingfile/recordingfile-service.js +0 -191
  108. package/esm2015/lib/speechrecorder/session/sessionmanager.js +0 -1271
  109. package/esm2015/lib/speechrecorderng.component.js +0 -423
  110. package/esm2015/public-api.js +0 -30
  111. package/fesm2015/speechrecorderng.js.map +0 -1
@@ -1,423 +0,0 @@
1
- import { Component, ViewChild } from '@angular/core';
2
- import { EventType as PlaybackEventType, AudioPlayer } from './audio/playback/player';
3
- import { SessionManager } from './speechrecorder/session/sessionmanager';
4
- import { UploaderStatus } from './net/uploader';
5
- import { SessionService } from "./speechrecorder/session/session.service";
6
- import { ProjectUtil } from "./speechrecorder/project/project";
7
- import { AudioContextProvider } from "./audio/context";
8
- import { Arrays } from "./utils/utils";
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/router";
11
- import * as i2 from "./speechrecorder/session/session.service";
12
- import * as i3 from "./speechrecorder/project/project.service";
13
- import * as i4 from "./speechrecorder/script/script.service";
14
- import * as i5 from "./speechrecorder/recordings/recordings.service";
15
- import * as i6 from "./speechrecorder/spruploader";
16
- import * as i7 from "./speechrecorder/session/sessionmanager";
17
- export var Mode;
18
- (function (Mode) {
19
- Mode[Mode["SINGLE_SESSION"] = 0] = "SINGLE_SESSION";
20
- Mode[Mode["DEMO"] = 1] = "DEMO";
21
- })(Mode || (Mode = {}));
22
- export class SpeechrecorderngComponent {
23
- constructor(route, router, changeDetectorRef, sessionsService, projectService, scriptService, recFilesService, uploader) {
24
- this.route = route;
25
- this.router = router;
26
- this.changeDetectorRef = changeDetectorRef;
27
- this.sessionsService = sessionsService;
28
- this.projectService = projectService;
29
- this.scriptService = scriptService;
30
- this.recFilesService = recFilesService;
31
- this.uploader = uploader;
32
- this._project = null;
33
- this.dataSaved = true;
34
- }
35
- ngOnInit() {
36
- try {
37
- let audioContext = AudioContextProvider.audioContextInstance();
38
- if (audioContext) {
39
- this.controlAudioPlayer = new AudioPlayer(audioContext, this);
40
- }
41
- this.sm.controlAudioPlayer = this.controlAudioPlayer;
42
- this.sm.statusAlertType = 'info';
43
- this.sm.statusMsg = 'Player initialized.';
44
- }
45
- catch (err) {
46
- this.sm.statusMsg = err.message;
47
- this.sm.statusAlertType = 'error';
48
- console.error(err.message);
49
- }
50
- }
51
- ngAfterViewInit() {
52
- if (this.sm.status !== 8 /* ERROR */) {
53
- let initSuccess = this.init();
54
- if (initSuccess) {
55
- this.route.queryParams.subscribe((params) => {
56
- if (params['sessionId']) {
57
- this.fetchSession(params['sessionId']);
58
- }
59
- });
60
- this.route.params.subscribe((params) => {
61
- let routeParamsId = params['id'];
62
- if (routeParamsId) {
63
- this.fetchSession(routeParamsId);
64
- }
65
- });
66
- }
67
- }
68
- }
69
- fetchSession(sessionId) {
70
- //Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'statusMsg: Player initialized.'. Current value: 'statusMsg: Fetching session info...'.
71
- // params.subscribe seems not to be asynchronous
72
- // this.sm.statusAlertType='info';
73
- // this.sm.statusMsg = 'Fetching session info...';
74
- // this.sm.statusWaiting=true;
75
- let sessObs = this.sessionsService.sessionObserver(sessionId);
76
- if (sessObs) {
77
- sessObs.subscribe(sess => {
78
- this.setSession(sess);
79
- this.sm.statusAlertType = 'info';
80
- this.sm.statusMsg = 'Received session info.';
81
- this.sm.statusWaiting = false;
82
- if (sess.project) {
83
- //console.debug("Session associated project: "+sess.project)
84
- this.projectService.projectObservable(sess.project).subscribe(project => {
85
- this.project = project;
86
- this.fetchScript(sess);
87
- }, reason => {
88
- this.sm.statusMsg = reason;
89
- this.sm.statusAlertType = 'error';
90
- this.sm.statusWaiting = false;
91
- console.error("Error fetching project config: " + reason);
92
- });
93
- }
94
- else {
95
- console.info("Session has no associated project. Using default configuration.");
96
- this.fetchScript(sess);
97
- }
98
- }, (reason) => {
99
- this.sm.statusMsg = reason;
100
- this.sm.statusAlertType = 'error';
101
- this.sm.statusWaiting = false;
102
- console.error("Error fetching session " + reason);
103
- });
104
- }
105
- }
106
- fetchScript(sess) {
107
- if (sess.script) {
108
- this.sm.statusAlertType = 'info';
109
- this.sm.statusMsg = 'Fetching recording script...';
110
- this.sm.statusWaiting = true;
111
- this.scriptService.scriptObservable(sess.script).subscribe(script => {
112
- this.sm.statusAlertType = 'info';
113
- this.sm.statusMsg = 'Received recording script.';
114
- this.sm.statusWaiting = false;
115
- this.setScript(script);
116
- this.sm.session = sess;
117
- this.fetchRecordings(sess, this.script);
118
- }, reason => {
119
- let errMsg = "Error fetching recording script: " + reason;
120
- console.error(errMsg);
121
- this.sm.statusMsg = errMsg;
122
- this.sm.statusAlertType = 'error';
123
- this.sm.statusWaiting = false;
124
- });
125
- }
126
- else {
127
- let errMsg = "No recording script is defined for this session with ID " + sess.sessionId;
128
- console.error(this.sm.statusMsg);
129
- this.sm.statusMsg = errMsg;
130
- this.sm.statusAlertType = 'error';
131
- }
132
- }
133
- fetchRecordings(sess, script) {
134
- this.sm.statusAlertType = 'info';
135
- this.sm.statusMsg = 'Fetching infos of recordings...';
136
- this.sm.statusWaiting = true;
137
- let prNm = null;
138
- if (this.project) {
139
- let rfsObs = this.recFilesService.recordingFileDescrList(this.project.name, sess.sessionId);
140
- rfsObs.subscribe((rfs) => {
141
- this.sm.statusAlertType = 'info';
142
- this.sm.statusMsg = 'Received infos of recordings.';
143
- this.sm.statusWaiting = false;
144
- if (rfs) {
145
- if (rfs instanceof Array) {
146
- rfs.forEach((rf) => {
147
- //console.debug("Already recorded: " + rf+ " "+rf.recording.itemcode);
148
- this.sm.addRecordingFileByDescriptor(rf);
149
- });
150
- }
151
- else {
152
- console.error('Expected type array for list of already recorded files ');
153
- }
154
- }
155
- else {
156
- //console.debug("Recording file list: " + rfs);
157
- }
158
- }, () => {
159
- // we start the session anyway
160
- this.startSession();
161
- }, () => {
162
- this.startSession();
163
- });
164
- }
165
- else {
166
- // TODO
167
- }
168
- }
169
- startSession() {
170
- this.sm.statusWaiting = false;
171
- this.sm.start();
172
- }
173
- setSession(session) {
174
- if (session) {
175
- // console.debug("Session ID: " + session.sessionId);
176
- }
177
- else {
178
- //console.debug("Session Undefined");
179
- }
180
- }
181
- ready() {
182
- return this.dataSaved && !this.sm.isActive();
183
- }
184
- init() {
185
- var n = navigator;
186
- //var getUserMediaFnct= n.getUserMedia || n.webkitGetUserMedia ||
187
- // n.mozGetUserMedia || n.msGetUserMedia;
188
- var w = window;
189
- // TODO test onyl !!
190
- // let debugFail=true;
191
- // AudioContext = w.AudioContext || w.webkitAudioContext;
192
- // if (typeof AudioContext !== 'function' || debugFail) {
193
- // this.sm.statusAlertType='error';
194
- // this.sm.statusMsg = 'ERROR: Browser does not support Web Audio API!';
195
- // return false;
196
- // } else {
197
- // var context = new AudioContext();
198
- //
199
- // if (typeof navigator.mediaDevices.getUserMedia !== 'function') {
200
- // this.sm.statusAlertType='error';
201
- // this.sm.statusMsg= 'ERROR: Browser does not support Media streams!';
202
- // return false;
203
- // } else {
204
- //
205
- //this.sm = new SessionManager(new SimpleTrafficLight(), this.uploader);
206
- //this.sm.init();
207
- //this.ap = new AudioPlayer(context,this);
208
- //this.sm.listener=this;
209
- // }
210
- // }
211
- this.uploader.listener = (ue) => {
212
- this.uploadUpdate(ue);
213
- };
214
- window.addEventListener('beforeunload', (e) => {
215
- console.debug("Before page unload event");
216
- if (this.ready()) {
217
- return;
218
- }
219
- else {
220
- // all this attempts to customize the message do not work anymore (for security reasons)!!
221
- var message = "Please do not leave the page, until all recordings are uploaded!";
222
- alert(message);
223
- e = e || window.event;
224
- if (e) {
225
- e.returnValue = message;
226
- e.cancelBubble = true;
227
- if (e.stopPropagation) {
228
- e.stopPropagation();
229
- }
230
- if (e.preventDefault) {
231
- e.preventDefault();
232
- }
233
- }
234
- return message;
235
- }
236
- });
237
- return true;
238
- }
239
- uploadUpdate(ue) {
240
- let upStatus = ue.status;
241
- this.dataSaved = (UploaderStatus.DONE === upStatus);
242
- let percentUpl = ue.percentDone();
243
- if (UploaderStatus.ERR === upStatus) {
244
- this.sm.uploadStatus = 'warn';
245
- }
246
- else {
247
- if (percentUpl < 50) {
248
- this.sm.uploadStatus = 'accent';
249
- }
250
- else {
251
- this.sm.uploadStatus = 'success';
252
- }
253
- this.sm.uploadProgress = percentUpl;
254
- }
255
- this.changeDetectorRef.detectChanges();
256
- }
257
- configure() {
258
- this.loadProjectCfg(() => {
259
- // display project name
260
- let prName = '[Unknown]';
261
- if (this.project && this.project.name) {
262
- prName = this.project.name;
263
- }
264
- //this.titleEl.innerText = prName;
265
- });
266
- }
267
- randomize(script) {
268
- script.sections.forEach((s) => {
269
- if ('RANDOM' === s.order) {
270
- s._shuffledGroups = Arrays.shuffleArray(s.groups);
271
- }
272
- else {
273
- s._shuffledGroups = s.groups;
274
- }
275
- s._shuffledGroups.forEach((g) => {
276
- if ('RANDOM' === g.order) {
277
- g._shuffledPromptItems = Arrays.shuffleArray(g.promptItems);
278
- }
279
- else {
280
- g._shuffledPromptItems = g.promptItems;
281
- }
282
- });
283
- });
284
- }
285
- setScript(script) {
286
- this.script = script;
287
- this.randomize(this.script);
288
- this.sm.script = this.script;
289
- }
290
- set project(project) {
291
- this._project = project;
292
- let chCnt = ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;
293
- if (project) {
294
- console.info("Project name: " + project.name);
295
- this.sm.audioDevices = project.audioDevices;
296
- chCnt = ProjectUtil.audioChannelCount(project);
297
- console.info("Project requested recording channel count: " + chCnt);
298
- this.sm.autoGainControlConfigs = project.autoGainControlConfigs;
299
- }
300
- else {
301
- console.error("Empty project configuration!");
302
- }
303
- this.sm.channelCount = chCnt;
304
- }
305
- get project() {
306
- return this._project;
307
- }
308
- loadProjectCfg(callback) {
309
- let projUrl = null;
310
- if (this.sessionId === null) {
311
- if (window.location.hostname === 'localhost' || this.mode === Mode.DEMO) {
312
- // debug or demo mode
313
- projUrl = 'test/Demo1.json?' + new Date().getTime();
314
- }
315
- }
316
- else {
317
- // load RESTful by sessionId
318
- projUrl = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/wikispeech/rest/projects/?sessionId=' + this.sessionId;
319
- }
320
- if (projUrl) {
321
- var pLoader = new XMLHttpRequest();
322
- pLoader.open("GET", projUrl, true);
323
- pLoader.setRequestHeader('Accept', 'application/json');
324
- pLoader.responseType = "json";
325
- pLoader.onload = (e) => {
326
- this.project = pLoader.response.project;
327
- callback();
328
- };
329
- pLoader.onerror = (e) => {
330
- console.error("Error downloading project data ...");
331
- };
332
- pLoader.send();
333
- }
334
- }
335
- // loadScript(callback: ()=>any){
336
- // var scrLoader = new XMLHttpRequest();
337
- // let hn:string =window.location.hostname;
338
- // let pn:string =window.location.pathname;
339
- // let pr:string =window.location.protocol;
340
- // let po:string =window.location.port;
341
- //
342
- // let sessionId:string=this.session.sessionId;
343
- //
344
- // let scrUrl:string | null = null;
345
- //
346
- // if (hn === 'localhost' || this.mode===Mode.DEMO) {
347
- // // local debug mode
348
- // // FF caches
349
- // scrUrl = 'test/' + this.session.script.toString() + '.json?' + new Date().getTime();
350
- //
351
- // } else {
352
- // let scrPath:string = '/wikispeech/session/scripts/servlet';
353
- // let scrQu:string = 'sessionId=' + sessionId;
354
- // scrUrl = pr + '//' + hn + ':' + po + scrPath;
355
- // if (scrQu) {
356
- // scrUrl = scrUrl + '?' + scrQu;
357
- // }
358
- // }
359
- //
360
- // scrLoader.open("GET",scrUrl , true);
361
- // scrLoader.setRequestHeader('Accept','application/json');
362
- // scrLoader.responseType = "json";
363
- // scrLoader.onload = (e) => {
364
- //
365
- // this.script = scrLoader.response;
366
- //
367
- //
368
- // this.sm.script = this.script;
369
- //
370
- // callback();
371
- // }
372
- // scrLoader.onerror = (e) => {
373
- // console.log("Error downloading recording script data ...");
374
- // }
375
- // scrLoader.send();
376
- // }
377
- start() {
378
- //this.configure();
379
- }
380
- audioPlayerUpdate(e) {
381
- if (PlaybackEventType.STARTED === e.type) {
382
- //this.startBtn.disabled=true;
383
- //this.stopBtn.disabled=true;
384
- this.sm.statusAlertType = 'info';
385
- this.sm.statusMsg = 'Playback...';
386
- }
387
- else if (PlaybackEventType.ENDED === e.type) {
388
- //this.startBtn.disabled=false;
389
- //this.stopBtn.disabled=true;
390
- this.sm.statusAlertType = 'info';
391
- this.sm.statusMsg = 'Ready.';
392
- }
393
- }
394
- error() {
395
- this.sm.statusAlertType = 'error';
396
- this.sm.statusMsg = 'ERROR: Recording.';
397
- }
398
- }
399
- SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: i2.SessionService }, { token: i3.ProjectService }, { token: i4.ScriptService }, { token: i5.RecordingService }, { token: i6.SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
400
- SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: SpeechrecorderngComponent, selector: "app-speechrecorder", providers: [SessionService], viewQueries: [{ propertyName: "sm", first: true, predicate: SessionManager, descendants: true, static: true }], ngImport: i0, template: `
401
- <app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
402
- `, isInline: true, styles: [":host{\n flex: 2;\n display: flex;\n flex-direction: column;\n min-height:0;\n\n }"], components: [{ type: i7.SessionManager, selector: "app-sprrecordingsession", inputs: ["projectName", "dataSaved"] }] });
403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SpeechrecorderngComponent, decorators: [{
404
- type: Component,
405
- args: [{
406
- selector: 'app-speechrecorder',
407
- providers: [SessionService],
408
- template: `
409
- <app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
410
- `,
411
- styles: [`:host{
412
- flex: 2;
413
- display: flex;
414
- flex-direction: column;
415
- min-height:0;
416
-
417
- }`]
418
- }]
419
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i0.ChangeDetectorRef }, { type: i2.SessionService }, { type: i3.ProjectService }, { type: i4.ScriptService }, { type: i5.RecordingService }, { type: i6.SpeechRecorderUploader }]; }, propDecorators: { sm: [{
420
- type: ViewChild,
421
- args: [SessionManager, { static: true }]
422
- }] } });
423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXJuZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQzVGLE9BQU8sRUFDa0MsU0FBUyxJQUFJLGlCQUFpQixFQUNyRSxXQUFXLEVBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsY0FBYyxFQUFnQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZHLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBSXhFLE9BQU8sRUFBVSxXQUFXLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFFckMsTUFBTSxDQUFOLElBQVksSUFBMEI7QUFBdEMsV0FBWSxJQUFJO0lBQUUsbURBQWMsQ0FBQTtJQUFDLCtCQUFJLENBQUE7QUFBQSxDQUFDLEVBQTFCLElBQUksS0FBSixJQUFJLFFBQXNCO0FBa0J0QyxNQUFNLE9BQU8seUJBQXlCO0lBY3BDLFlBQW9CLEtBQXFCLEVBQ2YsTUFBYyxFQUNsQixpQkFBb0MsRUFDcEMsZUFBOEIsRUFDOUIsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsZUFBZ0MsRUFDaEMsUUFBK0I7UUFQakMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2xCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUs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QUFDO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFDLG1CQUFtQixDQUFDO0lBQ3ZDLENBQUM7O3VIQS9hVSx5QkFBeUI7MkdBQXpCLHlCQUF5Qiw2Q0FiekIsQ0FBQyxjQUFjLENBQUMsOERBeUJoQixjQUFjLDhEQXhCZjs7R0FFVDs0RkFVVSx5QkFBeUI7a0JBaEJyQyxTQUFTO21CQUFDO29CQUVULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDM0IsUUFBUSxFQUFFOztHQUVUO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7SUFNUCxDQUFDO2lCQUVKO29UQWE4QyxFQUFFO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZSBhcyBQbGF5YmFja0V2ZW50VHlwZSxcclxuICBBdWRpb1BsYXllclxyXG59IGZyb20gJy4vYXVkaW8vcGxheWJhY2svcGxheWVyJztcclxuaW1wb3J0IHtHcm91cCwgT3JkZXIsIFByb21wdEl0ZW0sIFNjcmlwdH0gZnJvbSAnLi9zcGVlY2hyZWNvcmRlci9zY3JpcHQvc2NyaXB0J1xyXG5pbXBvcnQgeyBTZXNzaW9uTWFuYWdlcixTdGF0dXMgYXMgU2Vzc2lvbk1hbmFnZXJTdGF0dXN9IGZyb20gJy4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlcic7XHJcbmltcG9ydCB7IFVwbG9hZGVyU3RhdHVzQ2hhbmdlRXZlbnQsIFVwbG9hZGVyU3RhdHVzIH0gZnJvbSAnLi9uZXQvdXBsb2FkZXInO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1NjcmlwdFNlcnZpY2V9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQuc2VydmljZVwiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3NwcnVwbG9hZGVyXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7UHJvamVjdCwgUHJvamVjdFV0aWx9IGZyb20gXCIuL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge1Byb2plY3RTZXJ2aWNlfSBmcm9tIFwiLi9zcGVlY2hyZWNvcmRlci9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlRGVzY3JpcHRvcn0gZnJvbSBcIi4vc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7QXJyYXlzfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGVudW0gTW9kZSB7U0lOR0xFX1NFU1NJT04sREVNT31cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcGVlY2hyZWNvcmRlcicsXHJcbiAgcHJvdmlkZXJzOiBbU2Vzc2lvblNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXNwcnJlY29yZGluZ3Nlc3Npb24gW3Byb2plY3ROYW1lXT1cInByb2plY3Q/Lm5hbWVcIiBbZGF0YVNhdmVkXT1cImRhdGFTYXZlZFwiPjwvYXBwLXNwcnJlY29yZGluZ3Nlc3Npb24+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3R7XHJcbiAgICBmbGV4OiAyO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBtaW4taGVpZ2h0OjA7XHJcblxyXG4gIH1gXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFNwZWVjaHJlY29yZGVybmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsQWZ0ZXJWaWV3SW5pdCxBdWRpb1BsYXllckxpc3RlbmVyIHtcclxuXHJcblx0ICBtb2RlITpNb2RlO1xyXG5cdFx0Y29udHJvbEF1ZGlvUGxheWVyITpBdWRpb1BsYXllcjtcclxuXHRcdGF1ZGlvOmFueTtcclxuXHJcblx0X3Byb2plY3Q6UHJvamVjdHxudWxsPW51bGw7XHJcbiAgc2Vzc2lvbklkITogc3RyaW5nO1xyXG4gIHNlc3Npb24hOlNlc3Npb247XHJcblxyXG4gIHNjcmlwdCE6U2NyaXB0O1xyXG4gICAgZGF0YVNhdmVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBAVmlld0NoaWxkKFNlc3Npb25NYW5hZ2VyLCB7IHN0YXRpYzogdHJ1ZSB9KSBzbSE6U2Vzc2lvbk1hbmFnZXI7XHJcblxyXG5cdFx0Y29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzZXNzaW9uc1NlcnZpY2U6U2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOlByb2plY3RTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBzY3JpcHRTZXJ2aWNlOlNjcmlwdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVzU2VydmljZTpSZWNvcmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cGxvYWRlcjpTcGVlY2hSZWNvcmRlclVwbG9hZGVyKSB7XHJcblx0XHR9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcblx0XHQgIHRyeSB7XHJcbiAgICAgICAgbGV0IGF1ZGlvQ29udGV4dCA9IEF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgICAgaWYoYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyID0gbmV3IEF1ZGlvUGxheWVyKGF1ZGlvQ29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc20uY29udHJvbEF1ZGlvUGxheWVyPXRoaXMuY29udHJvbEF1ZGlvUGxheWVyO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdQbGF5ZXIgaW5pdGlhbGl6ZWQuJztcclxuICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgICBuZ0FmdGVyVmlld0luaXQoKXtcclxuXHJcblx0XHQgIGlmKHRoaXMuc20uc3RhdHVzIT09IFNlc3Npb25NYW5hZ2VyU3RhdHVzLkVSUk9SKSB7XHJcbiAgICAgICAgbGV0IGluaXRTdWNjZXNzID0gdGhpcy5pbml0KCk7XHJcbiAgICAgICAgaWYgKGluaXRTdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtc1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2Vzc2lvbihwYXJhbXNbJ3Nlc3Npb25JZCddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcm91dGVQYXJhbXNJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgICAgICAgaWYgKHJvdXRlUGFyYW1zSWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2Vzc2lvbihyb3V0ZVBhcmFtc0lkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmZXRjaFNlc3Npb24oc2Vzc2lvbklkOnN0cmluZyl7XHJcblxyXG5cclxuXHRcdCAgLy9FcnJvcjogRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvcjogRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC4gUHJldmlvdXMgdmFsdWU6ICdzdGF0dXNNc2c6IFBsYXllciBpbml0aWFsaXplZC4nLiBDdXJyZW50IHZhbHVlOiAnc3RhdHVzTXNnOiBGZXRjaGluZyBzZXNzaW9uIGluZm8uLi4nLlxyXG4gICAgICAvLyBwYXJhbXMuc3Vic2NyaWJlIHNlZW1zIG5vdCB0byBiZSBhc3luY2hyb25vdXNcclxuXHJcbiAgICAgIC8vIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgLy8gdGhpcy5zbS5zdGF0dXNNc2cgPSAnRmV0Y2hpbmcgc2Vzc2lvbiBpbmZvLi4uJztcclxuICAgICAgLy8gdGhpcy5zbS5zdGF0dXNXYWl0aW5nPXRydWU7XHJcbiAgICAgIGxldCBzZXNzT2JzPSB0aGlzLnNlc3Npb25zU2VydmljZS5zZXNzaW9uT2JzZXJ2ZXIoc2Vzc2lvbklkKTtcclxuXHJcbiAgICAgIGlmKHNlc3NPYnMpIHtcclxuICAgICAgICBzZXNzT2JzLnN1YnNjcmliZShzZXNzID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzKTtcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBzZXNzaW9uIGluZm8uJztcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgICAgICAgaWYgKHNlc3MucHJvamVjdCkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9uIGFzc29jaWF0ZWQgcHJvamVjdDogXCIrc2Vzcy5wcm9qZWN0KVxyXG4gICAgICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3RPYnNlcnZhYmxlKHNlc3MucHJvamVjdCkuc3Vic2NyaWJlKHByb2plY3Q9PntcclxuICAgICAgICAgICAgICB0aGlzLnByb2plY3Q9cHJvamVjdDtcclxuICAgICAgICAgICAgICB0aGlzLmZldGNoU2NyaXB0KHNlc3MpO1xyXG4gICAgICAgICAgICB9LHJlYXNvbiA9PntcclxuICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZz1yZWFzb247XHJcbiAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgcHJvamVjdCBjb25maWc6IFwiK3JlYXNvbilcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiU2Vzc2lvbiBoYXMgbm8gYXNzb2NpYXRlZCBwcm9qZWN0LiBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXCIpXHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hTY3JpcHQoc2Vzcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAocmVhc29uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gcmVhc29uO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlc3Npb24gXCIgKyByZWFzb24pXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmZXRjaFNjcmlwdChzZXNzOlNlc3Npb24pe1xyXG4gICAgICBpZihzZXNzLnNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ0ZldGNoaW5nIHJlY29yZGluZyBzY3JpcHQuLi4nO1xyXG4gICAgICAgICAgdGhpcy5zbS5zdGF0dXNXYWl0aW5nPXRydWU7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRTZXJ2aWNlLnNjcmlwdE9ic2VydmFibGUoc2Vzcy5zY3JpcHQpLnN1YnNjcmliZShzY3JpcHQ9PntcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzTXNnID0gJ1JlY2VpdmVkIHJlY29yZGluZyBzY3JpcHQuJztcclxuICAgICAgICAgIHRoaXMuc20uc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2V0U2NyaXB0KHNjcmlwdClcclxuICAgICAgICAgIHRoaXMuc20uc2Vzc2lvbj1zZXNzO1xyXG4gICAgICAgICAgdGhpcy5mZXRjaFJlY29yZGluZ3Moc2Vzcyx0aGlzLnNjcmlwdClcclxuICAgICAgICB9LHJlYXNvbiA9PntcclxuICAgICAgICAgIGxldCBlcnJNc2c9XCJFcnJvciBmZXRjaGluZyByZWNvcmRpbmcgc2NyaXB0OiBcIityZWFzb25cclxuICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1zZylcclxuICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNNc2c9ZXJyTXNnO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG4gICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgbGV0IGVyck1zZz1cIk5vIHJlY29yZGluZyBzY3JpcHQgaXMgZGVmaW5lZCBmb3IgdGhpcyBzZXNzaW9uIHdpdGggSUQgXCIrc2Vzcy5zZXNzaW9uSWQ7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLnNtLnN0YXR1c01zZylcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c01zZz1lcnJNc2c7XHJcbiAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgZmV0Y2hSZWNvcmRpbmdzKHNlc3M6U2Vzc2lvbixzY3JpcHQ6U2NyaXB0KXtcclxuICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2luZm8nO1xyXG4gICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdGZXRjaGluZyBpbmZvcyBvZiByZWNvcmRpbmdzLi4uJztcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9dHJ1ZTtcclxuICAgICAgICBsZXQgcHJObTpzdHJpbmd8bnVsbD1udWxsO1xyXG4gICAgICAgIGlmKHRoaXMucHJvamVjdCkge1xyXG4gICAgICAgICAgICBsZXQgcmZzT2JzID0gdGhpcy5yZWNGaWxlc1NlcnZpY2UucmVjb3JkaW5nRmlsZURlc2NyTGlzdCh0aGlzLnByb2plY3QubmFtZSwgc2Vzcy5zZXNzaW9uSWQpO1xyXG4gICAgICAgICAgICByZnNPYnMuc3Vic2NyaWJlKChyZnM6IEFycmF5PFJlY29yZGluZ0ZpbGVEZXNjcmlwdG9yPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c01zZyA9ICdSZWNlaXZlZCBpbmZvcyBvZiByZWNvcmRpbmdzLic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmZzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmZzLmZvckVhY2goKHJmKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBbHJlYWR5IHJlY29yZGVkOiBcIiArIHJmKyBcIiBcIityZi5yZWNvcmRpbmcuaXRlbWNvZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbS5hZGRSZWNvcmRpbmdGaWxlQnlEZXNjcmlwdG9yKHJmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFeHBlY3RlZCB0eXBlIGFycmF5IGZvciBsaXN0IG9mIGFscmVhZHkgcmVjb3JkZWQgZmlsZXMgJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlY29yZGluZyBmaWxlIGxpc3Q6IFwiICsgcmZzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gd2Ugc3RhcnQgdGhlIHNlc3Npb24gYW55d2F5XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2Vzc2lvbigpXHJcbiAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTZXNzaW9uKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydFNlc3Npb24oKXtcclxuICAgICAgICB0aGlzLnNtLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcblx0XHQgIHRoaXMuc20uc3RhcnQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgICAgIHNldFNlc3Npb24oc2Vzc2lvbjphbnkpe1xyXG5cdFx0ICAgIGlmKHNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gSUQ6IFwiICsgc2Vzc2lvbi5zZXNzaW9uSWQpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb24gVW5kZWZpbmVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWFkeSgpOmJvb2xlYW57XHJcblx0XHQgICAgcmV0dXJuIHRoaXMuZGF0YVNhdmVkICYmICF0aGlzLnNtLmlzQWN0aXZlKClcclxuICAgICAgICB9XHJcblxyXG5cdFx0aW5pdCgpOmJvb2xlYW4ge1xyXG5cclxuXHRcdFx0dmFyIG4gPSA8YW55Pm5hdmlnYXRvcjtcclxuXHRcdFx0Ly92YXIgZ2V0VXNlck1lZGlhRm5jdD0gbi5nZXRVc2VyTWVkaWEgfHwgbi53ZWJraXRHZXRVc2VyTWVkaWEgfHxcclxuXHRcdFx0Ly9cdG4ubW96R2V0VXNlck1lZGlhIHx8IG4ubXNHZXRVc2VyTWVkaWE7XHJcblx0XHRcdHZhciB3ID0gPGFueT53aW5kb3c7XHJcblx0XHRcdC8vIFRPRE8gdGVzdCBvbnlsICEhXHJcblxyXG4gICAgICAvLyBsZXQgZGVidWdGYWlsPXRydWU7XHJcblx0XHQvLyBcdEF1ZGlvQ29udGV4dCA9IHcuQXVkaW9Db250ZXh0IHx8IHcud2Via2l0QXVkaW9Db250ZXh0O1xyXG5cdFx0Ly8gXHRpZiAodHlwZW9mIEF1ZGlvQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJyB8fCBkZWJ1Z0ZhaWwpIHtcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdlcnJvcic7XHJcblx0XHQvLyBcdFx0dGhpcy5zbS5zdGF0dXNNc2cgPSAnRVJST1I6IEJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWIgQXVkaW8gQVBJISc7XHJcblx0XHQvLyBcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0Ly8gXHR9IGVsc2Uge1xyXG5cdFx0Ly8gXHRcdHZhciBjb250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAvL1xyXG5cdFx0Ly8gXHRcdGlmICh0eXBlb2YgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0nZXJyb3InO1xyXG5cdFx0Ly8gXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9ICdFUlJPUjogQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuXHRcdC8vIFx0XHR9IGVsc2Uge1xyXG4gICAgICAvL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuc20gPSBuZXcgU2Vzc2lvbk1hbmFnZXIobmV3IFNpbXBsZVRyYWZmaWNMaWdodCgpLCB0aGlzLnVwbG9hZGVyKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5pbml0KCk7XHJcblx0XHRcdFx0XHQvL3RoaXMuYXAgPSBuZXcgQXVkaW9QbGF5ZXIoY29udGV4dCx0aGlzKTtcclxuXHRcdFx0XHRcdC8vdGhpcy5zbS5saXN0ZW5lcj10aGlzO1xyXG5cdFx0XHQvL1x0fVxyXG5cdFx0Ly9cdH1cclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlci5saXN0ZW5lciA9ICh1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVcGRhdGUodWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJCZWZvcmUgcGFnZSB1bmxvYWQgZXZlbnRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsIHRoaXMgYXR0ZW1wdHMgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIGRvIG5vdCB3b3JrIGFueW1vcmUgKGZvciBzZWN1cml0eSByZWFzb25zKSEhXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlBsZWFzZSBkbyBub3QgbGVhdmUgdGhlIHBhZ2UsIHVudGlsIGFsbCByZWNvcmRpbmdzIGFyZSB1cGxvYWRlZCFcIjtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgdXBsb2FkVXBkYXRlKHVlOiBVcGxvYWRlclN0YXR1c0NoYW5nZUV2ZW50KSB7XHJcbiAgICBsZXQgdXBTdGF0dXMgPSB1ZS5zdGF0dXM7XHJcbiAgICB0aGlzLmRhdGFTYXZlZCA9IChVcGxvYWRlclN0YXR1cy5ET05FID09PSB1cFN0YXR1cyk7XHJcbiAgICBsZXQgcGVyY2VudFVwbCA9IHVlLnBlcmNlbnREb25lKCk7XHJcbiAgICBpZiAoVXBsb2FkZXJTdGF0dXMuRVJSID09PSB1cFN0YXR1cykge1xyXG4gICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICd3YXJuJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBlcmNlbnRVcGwgPCA1MCkge1xyXG4gICAgICAgIHRoaXMuc20udXBsb2FkU3RhdHVzID0gJ2FjY2VudCdcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNtLnVwbG9hZFN0YXR1cyA9ICdzdWNjZXNzJ1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc20udXBsb2FkUHJvZ3Jlc3MgPSBwZXJjZW50VXBsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBjb25maWd1cmUoKSB7XHJcblxyXG5cclxuXHJcbiAgICAgIHRoaXMubG9hZFByb2plY3RDZmcoKCkgPT4ge1xyXG4gICAgICAgIC8vIGRpc3BsYXkgcHJvamVjdCBuYW1lXHJcbiAgICAgICAgbGV0IHByTmFtZTogc3RyaW5nID0gJ1tVbmtub3duXSc7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvamVjdCAmJiB0aGlzLnByb2plY3QubmFtZSkge1xyXG4gICAgICAgICAgcHJOYW1lID0gdGhpcy5wcm9qZWN0Lm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy50aXRsZUVsLmlubmVyVGV4dCA9IHByTmFtZTtcclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSByYW5kb21pemUoc2NyaXB0OlNjcmlwdCl7XHJcblx0XHQgICAgc2NyaXB0LnNlY3Rpb25zLmZvckVhY2goKHMpPT57XHJcblx0XHQgICAgICAgIGlmKCdSQU5ET00nPT09cy5vcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHMuX3NodWZmbGVkR3JvdXBzID0gQXJyYXlzLnNodWZmbGVBcnJheTxHcm91cD4ocy5ncm91cHMpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICBzLl9zaHVmZmxlZEdyb3Vwcz1zLmdyb3VwcztcclxuICAgICAgICAgICAgICAgIH1cclxuXHRcdCAgICAgICAgcy5fc2h1ZmZsZWRHcm91cHMuZm9yRWFjaCgoZyk9PntcclxuXHRcdCAgICAgICAgICAgIGlmKCdSQU5ET00nPT09Zy5vcmRlcil7XHJcblx0XHQgICAgICAgICAgICAgICBnLl9zaHVmZmxlZFByb21wdEl0ZW1zPUFycmF5cy5zaHVmZmxlQXJyYXk8UHJvbXB0SXRlbT4oZy5wcm9tcHRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblx0XHQgICAgICAgICAgICAgICAgZy5fc2h1ZmZsZWRQcm9tcHRJdGVtcz1nLnByb21wdEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTY3JpcHQoc2NyaXB0OlNjcmlwdCl7XHJcbiAgICAgICAgdGhpcy5zY3JpcHQ9c2NyaXB0O1xyXG4gICAgICAgIHRoaXMucmFuZG9taXplKHRoaXMuc2NyaXB0KTtcclxuICAgICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXQgcHJvamVjdChwcm9qZWN0OiBQcm9qZWN0fG51bGwpIHtcclxuICAgICAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcclxuICAgICAgICBsZXQgY2hDbnQgPSBQcm9qZWN0VXRpbC5ERUZBVUxUX0FVRElPX0NIQU5ORUxfQ09VTlQ7XHJcblxyXG4gICAgICAgIGlmIChwcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgbmFtZTogXCIgKyBwcm9qZWN0Lm5hbWUpXHJcbiAgICAgICAgICAgIHRoaXMuc20uYXVkaW9EZXZpY2VzID0gcHJvamVjdC5hdWRpb0RldmljZXM7XHJcbiAgICAgICAgICAgIGNoQ250ID0gUHJvamVjdFV0aWwuYXVkaW9DaGFubmVsQ291bnQocHJvamVjdCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByb2plY3QgcmVxdWVzdGVkIHJlY29yZGluZyBjaGFubmVsIGNvdW50OiBcIiArIGNoQ250KTtcclxuICAgICAgICAgICAgdGhpcy5zbS5hdXRvR2FpbkNvbnRyb2xDb25maWdzPXByb2plY3QuYXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRW1wdHkgcHJvamVjdCBjb25maWd1cmF0aW9uIVwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNtLmNoYW5uZWxDb3VudCA9IGNoQ250O1xyXG5cclxuICAgIH1cclxuXHJcbiAgZ2V0IHByb2plY3QoKTpQcm9qZWN0fG51bGx7XHJcblx0XHQgIHJldHVybiB0aGlzLl9wcm9qZWN0O1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICBsb2FkUHJvamVjdENmZyhjYWxsYmFjazogKCk9PiBhbnkpe1xyXG4gICAgICBsZXQgcHJvalVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZXNzaW9uSWQgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCB0aGlzLm1vZGUgPT09IE1vZGUuREVNTykge1xyXG4gICAgICAgICAgLy8gZGVidWcgb3IgZGVtbyBtb2RlXHJcbiAgICAgICAgICBwcm9qVXJsID0gJ3Rlc3QvRGVtbzEuanNvbj8nICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxvYWQgUkVTVGZ1bCBieSBzZXNzaW9uSWRcclxuICAgICAgICBwcm9qVXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgJy93aWtpc3BlZWNoL3Jlc3QvcHJvamVjdHMvP3Nlc3Npb25JZD0nICsgdGhpcy5zZXNzaW9uSWQ7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGlmKHByb2pVcmwpIHtcclxuICAgICAgICB2YXIgcExvYWRlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHBMb2FkZXIub3BlbihcIkdFVFwiLCBwcm9qVXJsLCB0cnVlKTtcclxuICAgICAgICBwTG9hZGVyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XHJcbiAgICAgICAgcExvYWRlci5yZXNwb25zZVR5cGUgPSBcImpzb25cIjtcclxuICAgICAgICBwTG9hZGVyLm9ubG9hZCA9IChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgdGhpcy5wcm9qZWN0ID0gcExvYWRlci5yZXNwb25zZS5wcm9qZWN0O1xyXG5cclxuICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBMb2FkZXIub25lcnJvciA9IChlKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgcHJvamVjdCBkYXRhIC4uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcExvYWRlci5zZW5kKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gbG9hZFNjcmlwdChjYWxsYmFjazogKCk9PmFueSl7XHJcbiAgLy8gICB2YXIgc2NyTG9hZGVyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgLy8gICBsZXQgaG46c3RyaW5nID13aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XHJcbiAgLy8gICBsZXQgcG46c3RyaW5nID13aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgLy8gICBsZXQgcHI6c3RyaW5nID13aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7XHJcbiAgLy8gICBsZXQgcG86c3RyaW5nID13aW5kb3cubG9jYXRpb24ucG9ydDtcclxuICAvL1xyXG4gIC8vICAgbGV0IHNlc3Npb25JZDpzdHJpbmc9dGhpcy5zZXNzaW9uLnNlc3Npb25JZDtcclxuICAvL1xyXG4gIC8vICAgICBsZXQgc2NyVXJsOnN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIC8vXHJcbiAgLy8gICAgIGlmIChobiA9PT0gJ2xvY2FsaG9zdCcgIHx8IHRoaXMubW9kZT09PU1vZGUuREVNTykge1xyXG4gIC8vICAgICAgICAgLy8gbG9jYWwgZGVidWcgbW9kZVxyXG4gIC8vICAgICAgICAgLy8gRkYgY2FjaGVzXHJcbiAgLy8gICAgICAgICBzY3JVcmwgPSAndGVzdC8nICsgdGhpcy5zZXNzaW9uLnNjcmlwdC50b1N0cmluZygpICsgJy5qc29uPycgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAvL1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgbGV0IHNjclBhdGg6c3RyaW5nID0gJy93aWtpc3BlZWNoL3Nlc3Npb24vc2NyaXB0cy9zZXJ2bGV0JztcclxuICAvLyAgICAgICAgIGxldCBzY3JRdTpzdHJpbmcgPSAnc2Vzc2lvbklkPScgKyBzZXNzaW9uSWQ7XHJcbiAgLy8gICAgICAgICBzY3JVcmwgPSBwciArICcvLycgKyBobiArICc6JyArIHBvICsgc2NyUGF0aDtcclxuICAvLyAgICAgICAgIGlmIChzY3JRdSkge1xyXG4gIC8vICAgICAgICAgICAgIHNjclVybCA9IHNjclVybCArICc/JyArIHNjclF1O1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy9cclxuICAvLyAgIHNjckxvYWRlci5vcGVuKFwiR0VUXCIsc2NyVXJsICwgdHJ1ZSk7XHJcbiAgLy8gICBzY3JMb2FkZXIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywnYXBwbGljYXRpb24vanNvbicpO1xyXG4gIC8vICAgc2NyTG9hZGVyLnJlc3BvbnNlVHlwZSA9IFwianNvblwiO1xyXG4gIC8vICAgc2NyTG9hZGVyLm9ubG9hZCA9IChlKSA9PiB7XHJcbiAgLy9cclxuICAvLyAgICAgdGhpcy5zY3JpcHQgPSBzY3JMb2FkZXIucmVzcG9uc2U7XHJcbiAgLy9cclxuICAvL1xyXG4gIC8vICAgICB0aGlzLnNtLnNjcmlwdCA9IHRoaXMuc2NyaXB0O1xyXG4gIC8vXHJcbiAgLy8gICAgIGNhbGxiYWNrKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBzY3JMb2FkZXIub25lcnJvciA9IChlKSA9PiB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgZG93bmxvYWRpbmcgcmVjb3JkaW5nIHNjcmlwdCBkYXRhIC4uLlwiKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHNjckxvYWRlci5zZW5kKCk7XHJcbiAgLy8gfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcblxyXG4gICAgICAgIC8vdGhpcy5jb25maWd1cmUoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cdFx0YXVkaW9QbGF5ZXJVcGRhdGUoZTpBdWRpb1BsYXllckV2ZW50KXtcclxuXHRcdFx0aWYoUGxheWJhY2tFdmVudFR5cGUuU1RBUlRFRD09PWUudHlwZSl7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPXRydWU7XHJcblx0XHRcdFx0Ly90aGlzLnN0b3BCdG4uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc20uc3RhdHVzQWxlcnRUeXBlPSdpbmZvJztcclxuXHRcdFx0XHR0aGlzLnNtLnN0YXR1c01zZz0nUGxheWJhY2suLi4nO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChQbGF5YmFja0V2ZW50VHlwZS5FTkRFRCA9PT0gZS50eXBlKSB7XHJcblx0XHRcdFx0Ly90aGlzLnN0YXJ0QnRuLmRpc2FibGVkPWZhbHNlO1xyXG5cdFx0XHRcdC8vdGhpcy5zdG9wQnRuLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtLnN0YXR1c0FsZXJ0VHlwZT0naW5mbyc7XHJcblx0XHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J1JlYWR5Lic7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVycm9yKCl7XHJcblx0XHQgICAgdGhpcy5zbS5zdGF0dXNBbGVydFR5cGU9J2Vycm9yJztcclxuXHRcdFx0dGhpcy5zbS5zdGF0dXNNc2c9J0VSUk9SOiBSZWNvcmRpbmcuJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuLy9cclxuLy9cclxuLy8gZnVuY3Rpb24gc3BlZWNocmVjb3JkZXJJbml0KCkge1xyXG4vLyBcdHZhciBzcHIgPSBuZXcgaXBzLmFwcHMuc3BlZWVjaHJlY29yZGVyLlNwZWVjaFJlY29yZGVyKCk7XHJcbi8vIFx0c3ByLmluaXQoKTtcclxuLy8gICBzcHIuc3RhcnQoKTtcclxuLy9cclxuLy9cclxuLy8gfVxyXG4iXX0=
@@ -1,30 +0,0 @@
1
- /*
2
- * Public API Surface of speechrecorderng
3
- */
4
- export { SpeechrecorderngModule } from './lib/speechrecorderng.module';
5
- export { VERSION } from './lib/spr.module.version';
6
- export { SPEECHRECORDER_CONFIG } from './lib/spr.config';
7
- export { UUID } from "./lib/utils/utils";
8
- export { Action } from "./lib/action/action";
9
- export { MessageDialog } from "./lib/ui/message_dialog";
10
- export { AudioClip, Selection } from './lib/audio/persistor';
11
- export { AudioPlayer, AudioPlayerEvent, EventType } from './lib/audio/playback/player';
12
- export { AudioDisplay } from './lib/audio/audio_display';
13
- export { AudioDisplayPlayer } from './lib/audio/audio_player';
14
- export { AudioClipUIContainer } from './lib/audio/ui/container';
15
- export { ScrollPaneHorizontal } from './lib/audio/ui/scroll_pane_horizontal';
16
- export { AudioDisplayScrollPane } from "./lib/audio/ui/audio_display_scroll_pane";
17
- export { AudioContextProvider } from "./lib/audio/context";
18
- export { AudioDisplayControl } from "./lib/audio/ui/audio_display_control";
19
- export { LevelBar } from './lib/audio/ui/livelevel';
20
- export { ProjectService } from './lib/speechrecorder/project/project.service';
21
- export { SessionService } from './lib/speechrecorder/session/session.service';
22
- export { ScriptService } from './lib/speechrecorder/script/script.service';
23
- export { RecordingService } from './lib/speechrecorder/recordings/recordings.service';
24
- export { RecordingFile } from './lib/speechrecorder/recording';
25
- export { RecordingFileService } from './lib/speechrecorder/session/recordingfile/recordingfile-service';
26
- export { RecordingFileViewComponent } from './lib/speechrecorder/session/recordingfile/recording-file-view.component';
27
- export { RecordingFileUI } from './lib/speechrecorder/session/recordingfile/recording-file-u-i.component';
28
- export { SpeechRecorderConfig, ApiType } from './lib/spr.config';
29
- export { SpeechrecorderngComponent } from './lib/speechrecorderng.component';
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFLSCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDaEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFdEQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3RDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFFckQsT0FBTyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUMsV0FBVyxFQUF1QixnQkFBZ0IsRUFBRSxTQUFTLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUN6RyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDdEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDM0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUNBQXVDLENBQUE7QUFDMUUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0NBQXNDLENBQUE7QUFDeEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBRWpELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQTtBQUUzRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sOENBQThDLENBQUE7QUFDM0UsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBRXhFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9EQUFvRCxDQUFBO0FBQ25GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrRUFBa0UsQ0FBQTtBQUNyRyxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwwRUFBMEUsQ0FBQTtBQUNuSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUVBQXlFLENBQUE7QUFDdkcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE9BQU8sRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQzdELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHNwZWVjaHJlY29yZGVybmdcclxuICovXHJcblxyXG5cclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXlDb250cm9sfSBmcm9tIFwiLi9saWIvYXVkaW8vdWkvYXVkaW9fZGlzcGxheV9jb250cm9sXCI7XHJcblxyXG5leHBvcnQge1NwZWVjaHJlY29yZGVybmdNb2R1bGV9IGZyb20gJy4vbGliL3NwZWVjaHJlY29yZGVybmcubW9kdWxlJ1xyXG5leHBvcnQge1ZFUlNJT059IGZyb20gJy4vbGliL3Nwci5tb2R1bGUudmVyc2lvbidcclxuZXhwb3J0IHtTUEVFQ0hSRUNPUkRFUl9DT05GSUd9IGZyb20gJy4vbGliL3Nwci5jb25maWcnXHJcblxyXG5leHBvcnQge1VVSUR9IGZyb20gXCIuL2xpYi91dGlscy91dGlsc1wiXHJcbmV4cG9ydCB7QWN0aW9ufSBmcm9tIFwiLi9saWIvYWN0aW9uL2FjdGlvblwiO1xyXG5cclxuZXhwb3J0IHtNZXNzYWdlRGlhbG9nfSBmcm9tIFwiLi9saWIvdWkvbWVzc2FnZV9kaWFsb2dcIlxyXG5cclxuZXhwb3J0IHtBdWRpb0NsaXAsU2VsZWN0aW9ufSBmcm9tICcuL2xpYi9hdWRpby9wZXJzaXN0b3InXHJcbmV4cG9ydCB7QXVkaW9QbGF5ZXIsIEF1ZGlvUGxheWVyTGlzdGVuZXIsIEF1ZGlvUGxheWVyRXZlbnQsIEV2ZW50VHlwZX0gZnJvbSAnLi9saWIvYXVkaW8vcGxheWJhY2svcGxheWVyJ1xyXG5leHBvcnQge0F1ZGlvRGlzcGxheX0gZnJvbSAnLi9saWIvYXVkaW8vYXVkaW9fZGlzcGxheSdcclxuZXhwb3J0IHtBdWRpb0Rpc3BsYXlQbGF5ZXJ9IGZyb20gJy4vbGliL2F1ZGlvL2F1ZGlvX3BsYXllcidcclxuZXhwb3J0IHtBdWRpb0NsaXBVSUNvbnRhaW5lcn0gZnJvbSAnLi9saWIvYXVkaW8vdWkvY29udGFpbmVyJ1xyXG5leHBvcnQge1Njcm9sbFBhbmVIb3Jpem9udGFsfSBmcm9tICcuL2xpYi9hdWRpby91aS9zY3JvbGxfcGFuZV9ob3Jpem9udGFsJ1xyXG5leHBvcnQge0F1ZGlvRGlzcGxheVNjcm9sbFBhbmV9IGZyb20gXCIuL2xpYi9hdWRpby91aS9hdWRpb19kaXNwbGF5X3Njcm9sbF9wYW5lXCI7XHJcbmV4cG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuL2xpYi9hdWRpby9jb250ZXh0XCI7XHJcbmV4cG9ydCB7QXVkaW9EaXNwbGF5Q29udHJvbH0gZnJvbSBcIi4vbGliL2F1ZGlvL3VpL2F1ZGlvX2Rpc3BsYXlfY29udHJvbFwiXHJcbmV4cG9ydCB7TGV2ZWxCYXJ9IGZyb20gJy4vbGliL2F1ZGlvL3VpL2xpdmVsZXZlbCdcclxuXHJcbmV4cG9ydCB7UHJvamVjdFNlcnZpY2V9IGZyb20gJy4vbGliL3NwZWVjaHJlY29yZGVyL3Byb2plY3QvcHJvamVjdC5zZXJ2aWNlJ1xyXG5leHBvcnQge1Nlc3Npb259IGZyb20gJy4vbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vc2Vzc2lvbidcclxuZXhwb3J0IHtTZXNzaW9uU2VydmljZX0gZnJvbSAnLi9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uLnNlcnZpY2UnXHJcbmV4cG9ydCB7U2NyaXB0U2VydmljZX0gZnJvbSAnLi9saWIvc3BlZWNocmVjb3JkZXIvc2NyaXB0L3NjcmlwdC5zZXJ2aWNlJ1xyXG5leHBvcnQge1NjcmlwdCxTZWN0aW9uLEdyb3VwLFByb21wdEl0ZW0sTWVkaWFpdGVtLFByb21wdFBoYXNlLE1vZGV9IGZyb20gJy4vbGliL3NwZWVjaHJlY29yZGVyL3NjcmlwdC9zY3JpcHQnXHJcbmV4cG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSAnLi9saWIvc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5ncy9yZWNvcmRpbmdzLnNlcnZpY2UnXHJcbmV4cG9ydCB7UmVjb3JkaW5nRmlsZX0gZnJvbSAnLi9saWIvc3BlZWNocmVjb3JkZXIvcmVjb3JkaW5nJ1xyXG5leHBvcnQge1JlY29yZGluZ0ZpbGVTZXJ2aWNlfSBmcm9tICcuL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGluZ2ZpbGUvcmVjb3JkaW5nZmlsZS1zZXJ2aWNlJ1xyXG5leHBvcnQge1JlY29yZGluZ0ZpbGVWaWV3Q29tcG9uZW50fSBmcm9tICcuL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGluZ2ZpbGUvcmVjb3JkaW5nLWZpbGUtdmlldy5jb21wb25lbnQnXHJcbmV4cG9ydCB7UmVjb3JkaW5nRmlsZVVJfSBmcm9tICcuL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3JlY29yZGluZ2ZpbGUvcmVjb3JkaW5nLWZpbGUtdS1pLmNvbXBvbmVudCdcclxuZXhwb3J0IHtTcGVlY2hSZWNvcmRlckNvbmZpZyxBcGlUeXBlfSBmcm9tICcuL2xpYi9zcHIuY29uZmlnJ1xyXG5leHBvcnQge1NwZWVjaHJlY29yZGVybmdDb21wb25lbnR9IGZyb20gJy4vbGliL3NwZWVjaHJlY29yZGVybmcuY29tcG9uZW50J1xyXG4iXX0=