ionic-logging-service 16.0.0 → 17.0.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 (26) hide show
  1. package/README.md +1 -0
  2. package/esm2022/lib/ajax-appender.model.mjs +149 -0
  3. package/esm2022/lib/local-storage-appender.model.mjs +177 -0
  4. package/{esm2020 → esm2022}/lib/logging-service.module.mjs +5 -5
  5. package/{esm2020 → esm2022}/lib/logging.service.mjs +4 -4
  6. package/esm2022/lib/memory-appender.model.mjs +133 -0
  7. package/{fesm2015 → fesm2022}/ionic-logging-service.mjs +14 -14
  8. package/{fesm2020 → fesm2022}/ionic-logging-service.mjs.map +1 -1
  9. package/package.json +7 -13
  10. package/esm2020/lib/ajax-appender.model.mjs +0 -149
  11. package/esm2020/lib/local-storage-appender.model.mjs +0 -177
  12. package/esm2020/lib/memory-appender.model.mjs +0 -133
  13. package/fesm2015/ionic-logging-service.mjs.map +0 -1
  14. package/fesm2020/ionic-logging-service.mjs +0 -992
  15. /package/{esm2020 → esm2022}/ionic-logging-service.mjs +0 -0
  16. /package/{esm2020 → esm2022}/lib/ajax-appender.configuration.mjs +0 -0
  17. /package/{esm2020 → esm2022}/lib/browser-console-appender.configuration.mjs +0 -0
  18. /package/{esm2020 → esm2022}/lib/json-layout.model.mjs +0 -0
  19. /package/{esm2020 → esm2022}/lib/local-storage-appender.configuration.mjs +0 -0
  20. /package/{esm2020 → esm2022}/lib/log-level.converter.mjs +0 -0
  21. /package/{esm2020 → esm2022}/lib/log-level.model.mjs +0 -0
  22. /package/{esm2020 → esm2022}/lib/log-message.model.mjs +0 -0
  23. /package/{esm2020 → esm2022}/lib/logger.model.mjs +0 -0
  24. /package/{esm2020 → esm2022}/lib/logging-service.configuration.mjs +0 -0
  25. /package/{esm2020 → esm2022}/lib/memory-appender.configuration.mjs +0 -0
  26. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
package/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  | ionic-logging-service | Ionic | Angular
6
6
  | ------ | -------- | ------
7
+ | 17.0.0 | >= 6.1.9 | ^16.0.0
7
8
  | 16.0.0 | >= 6.1.9 | ^15.0.0
8
9
  | 15.0.0 | >= 6.1.9 | ^14.0.0
9
10
  | 14.0.0 | >= 6.0.0 | ^13.0.0
@@ -0,0 +1,149 @@
1
+ import { EventEmitter } from "@angular/core";
2
+ import * as log4javascript from "log4javascript";
3
+ import { JsonLayout } from "./json-layout.model";
4
+ import { LogLevelConverter } from "./log-level.converter";
5
+ /**
6
+ * An appender which sends the log messages to a server via HTTP.
7
+ *
8
+ * A typical configuration could be:
9
+ *
10
+ * ```json
11
+ * {
12
+ * "url": "https://my.backend.xy/LoggingBackend",
13
+ * "batchSize": 10,
14
+ * "timerInterval": 60000,
15
+ * "threshold": "INFO"
16
+ * }
17
+ * ```
18
+ */
19
+ export class AjaxAppender extends log4javascript.Appender {
20
+ static { this.batchSizeDefault = 1; }
21
+ static { this.timerIntervalDefault = 0; }
22
+ static { this.thresholdDefault = "WARN"; }
23
+ /**
24
+ * Creates a new instance of the appender.
25
+ *
26
+ * @param configuration configuration for the appender.
27
+ */
28
+ constructor(configuration) {
29
+ super();
30
+ if (!configuration) {
31
+ throw new Error("configuration must be not empty");
32
+ }
33
+ if (!configuration.url) {
34
+ throw new Error("url must be not empty");
35
+ }
36
+ this.ajaxAppender = new log4javascript.AjaxAppender(configuration.url, configuration.withCredentials);
37
+ this.url = configuration.url;
38
+ this.withCredentials = configuration.withCredentials;
39
+ this.ajaxAppender.setLayout(new JsonLayout(false, false));
40
+ this.ajaxAppender.addHeader("Content-Type", "application/json; charset=utf-8");
41
+ this.ajaxAppender.setSendAllOnUnload(true);
42
+ this.appenderFailed = new EventEmitter();
43
+ this.ajaxAppender.setFailCallback((message) => {
44
+ this.appenderFailed.emit(message);
45
+ });
46
+ // process remaining configuration
47
+ this.configure({
48
+ batchSize: configuration.batchSize || AjaxAppender.batchSizeDefault,
49
+ threshold: configuration.threshold || AjaxAppender.thresholdDefault,
50
+ timerInterval: configuration.timerInterval || AjaxAppender.timerIntervalDefault,
51
+ url: configuration.url,
52
+ withCredentials: configuration.withCredentials
53
+ });
54
+ }
55
+ /**
56
+ * Configures the logging depending on the given configuration.
57
+ *
58
+ * Only the defined properties get overwritten.
59
+ * Neither url nor withCredentials can be modified.
60
+ *
61
+ * @param configuration configuration data.
62
+ */
63
+ configure(configuration) {
64
+ if (configuration) {
65
+ if (configuration.url && configuration.url !== this.url) {
66
+ throw new Error("url must not be changed");
67
+ }
68
+ if (configuration.withCredentials && configuration.withCredentials !== this.withCredentials) {
69
+ throw new Error("withCredentials must not be changed");
70
+ }
71
+ if (configuration.batchSize) {
72
+ this.setBatchSize(configuration.batchSize);
73
+ }
74
+ if (typeof configuration.timerInterval === "number") {
75
+ this.setTimerInterval(configuration.timerInterval);
76
+ }
77
+ if (configuration.threshold) {
78
+ const convertedThreshold = LogLevelConverter.levelToLog4Javascript(LogLevelConverter.levelFromString(configuration.threshold));
79
+ this.setThreshold(convertedThreshold);
80
+ }
81
+ }
82
+ }
83
+ /**
84
+ * Appender-specific method to append a log message.
85
+ *
86
+ * @param loggingEvent event to be appended.
87
+ */
88
+ append(loggingEvent) {
89
+ this.ajaxAppender.append(loggingEvent);
90
+ }
91
+ /**
92
+ * Gets the appender's name.
93
+ * Mainly for unit testing purposes.
94
+ *
95
+ * @return appender's name
96
+ */
97
+ toString() {
98
+ return "Ionic.Logging.AjaxAppender";
99
+ }
100
+ /**
101
+ * Get the internally used appender.
102
+ * Mainly for unit testing purposes.
103
+ */
104
+ getInternalAppender() {
105
+ return this.ajaxAppender;
106
+ }
107
+ /**
108
+ * Returns the number of log messages sent in each request.
109
+ */
110
+ getBatchSize() {
111
+ return this.ajaxAppender.getBatchSize();
112
+ }
113
+ /**
114
+ * Sets the number of log messages to send in each request.
115
+ *
116
+ * @param batchSize new batch size
117
+ */
118
+ setBatchSize(batchSize) {
119
+ this.ajaxAppender.setBatchSize(batchSize);
120
+ }
121
+ /**
122
+ * Returns the appender's layout.
123
+ */
124
+ getLayout() {
125
+ return this.ajaxAppender.getLayout();
126
+ }
127
+ /**
128
+ * Sets the appender's layout.
129
+ */
130
+ setLayout(layout) {
131
+ this.ajaxAppender.setLayout(layout);
132
+ }
133
+ /**
134
+ * Returns the length of time in milliseconds between each sending of queued log messages.
135
+ */
136
+ getTimerInterval() {
137
+ return this.ajaxAppender.getTimerInterval();
138
+ }
139
+ /**
140
+ * Sets the length of time in milliseconds between each sending of queued log messages.
141
+ *
142
+ * @param timerInterval new timer interval
143
+ */
144
+ setTimerInterval(timerInterval) {
145
+ this.ajaxAppender.setTimed(timerInterval > 0);
146
+ this.ajaxAppender.setTimerInterval(timerInterval);
147
+ }
148
+ }
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWpheC1hcHBlbmRlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lvbmljLWxvZ2dpbmctc2VydmljZS9zcmMvbGliL2FqYXgtYXBwZW5kZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEtBQUssY0FBYyxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxjQUFjLENBQUMsUUFBUTthQUV6QyxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7YUFDckIseUJBQW9CLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCLHFCQUFnQixHQUFHLE1BQU0sQ0FBQztJQWF6Qzs7OztPQUlHO0lBQ0gsWUFBWSxhQUF3QztRQUNuRCxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQztRQUVyRCxJQUFJLENBQUMsWUFB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T0FFRztJQUNJLFNBQVMsQ0FBQyxNQUE2QjtRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxhQUFxQjtRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0ICogYXMgbG9nNGphdmFzY3JpcHQgZnJvbSBcImxvZzRqYXZhc2NyaXB0XCI7XG5cbmltcG9ydCB7IEFqYXhBcHBlbmRlckNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9hamF4LWFwcGVuZGVyLmNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7IEpzb25MYXlvdXQgfSBmcm9tIFwiLi9qc29uLWxheW91dC5tb2RlbFwiO1xuaW1wb3J0IHsgTG9nTGV2ZWxDb252ZXJ0ZXIgfSBmcm9tIFwiLi9sb2ctbGV2ZWwuY29udmVydGVyXCI7XG5cbi8qKlxuICogQW4gYXBwZW5kZXIgd2hpY2ggc2VuZHMgdGhlIGxvZyBtZXNzYWdlcyB0byBhIHNlcnZlciB2aWEgSFRUUC5cbiAqXG4gKiBBIHR5cGljYWwgY29uZmlndXJhdGlvbiBjb3VsZCBiZTpcbiAqXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwidXJsXCI6IFwiaHR0cHM6Ly9teS5iYWNrZW5kLnh5L0xvZ2dpbmdCYWNrZW5kXCIsXG4gKiAgIFwiYmF0Y2hTaXplXCI6IDEwLFxuICogICBcInRpbWVySW50ZXJ2YWxcIjogNjAwMDAsXG4gKiAgIFwidGhyZXNob2xkXCI6IFwiSU5GT1wiXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFqYXhBcHBlbmRlciBleHRlbmRzIGxvZzRqYXZhc2NyaXB0LkFwcGVuZGVyIHtcblxuXHRwcml2YXRlIHN0YXRpYyBiYXRjaFNpemVEZWZhdWx0ID0gMTtcblx0cHJpdmF0ZSBzdGF0aWMgdGltZXJJbnRlcnZhbERlZmF1bHQgPSAwO1xuXHRwcml2YXRlIHN0YXRpYyB0aHJlc2hvbGREZWZhdWx0ID0gXCJXQVJOXCI7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBhcHBlbmRlciBjb3VsZCBub3Qgc2VuZCBsb2cgbWVzc2FnZXMgdG8gdGhlIHNlcnZlci5cblx0ICpcblx0ICogQHBhcmFtIG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuXHQgKi9cblx0cHVibGljIGFwcGVuZGVyRmFpbGVkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcblxuXHRwcml2YXRlIGFqYXhBcHBlbmRlcjogbG9nNGphdmFzY3JpcHQuQWpheEFwcGVuZGVyO1xuXHRwcml2YXRlIHVybDogc3RyaW5nO1xuXHRwcml2YXRlIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYXBwZW5kZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhcHBlbmRlci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb246IEFqYXhBcHBlbmRlckNvbmZpZ3VyYXRpb24pIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKCFjb25maWd1cmF0aW9uKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjb25maWd1cmF0aW9uIG11c3QgYmUgbm90IGVtcHR5XCIpO1xuXHRcdH1cblx0XHRpZiAoIWNvbmZpZ3VyYXRpb24udXJsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1cmwgbXVzdCBiZSBub3QgZW1wdHlcIik7XG5cdFx0fVxuXHRcdHRoaXMuYWpheEFwcGVuZGVyID0gbmV3IGxvZzRqYXZhc2NyaXB0LkFqYXhBcHBlbmRlcihjb25maWd1cmF0aW9uLnVybCwgY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMpO1xuXHRcdHRoaXMudXJsID0gY29uZmlndXJhdGlvbi51cmw7XG5cdFx0dGhpcy53aXRoQ3JlZGVudGlhbHMgPSBjb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscztcblxuXHRcdHRoaXMuYWpheEFwcGVuZGVyLnNldExheW91dChuZXcgSnNvbkxheW91dChmYWxzZSwgZmFsc2UpKTtcblx0XHR0aGlzLmFqYXhBcHBlbmRlci5hZGRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIpO1xuXHRcdHRoaXMuYWpheEFwcGVuZGVyLnNldFNlbmRBbGxPblVubG9hZCh0cnVlKTtcblxuXHRcdHRoaXMuYXBwZW5kZXJGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblx0XHR0aGlzLmFqYXhBcHBlbmRlci5zZXRGYWlsQ2FsbGJhY2soKG1lc3NhZ2U6IGFueSkgPT4ge1xuXHRcdFx0dGhpcy5hcHBlbmRlckZhaWxlZC5lbWl0KG1lc3NhZ2UpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gcHJvY2VzcyByZW1haW5pbmcgY29uZmlndXJhdGlvblxuXHRcdHRoaXMuY29uZmlndXJlKHtcblx0XHRcdGJhdGNoU2l6ZTogY29uZmlndXJhdGlvbi5iYXRjaFNpemUgfHwgQWpheEFwcGVuZGVyLmJhdGNoU2l6ZURlZmF1bHQsXG5cdFx0XHR0aHJlc2hvbGQ6IGNvbmZpZ3VyYXRpb24udGhyZXNob2xkIHx8IEFqYXhBcHBlbmRlci50aHJlc2hvbGREZWZhdWx0LFxuXHRcdFx0dGltZXJJbnRlcnZhbDogY29uZmlndXJhdGlvbi50aW1lckludGVydmFsIHx8IEFqYXhBcHBlbmRlci50aW1lckludGVydmFsRGVmYXVsdCxcblx0XHRcdHVybDogY29uZmlndXJhdGlvbi51cmwsXG5cdFx0XHR3aXRoQ3JlZGVudGlhbHM6IGNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzXG5cdFx0fSk7XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmVzIHRoZSBsb2dnaW5nIGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogT25seSB0aGUgZGVmaW5lZCBwcm9wZXJ0aWVzIGdldCBvdmVyd3JpdHRlbi5cblx0ICogTmVpdGhlciB1cmwgbm9yIHdpdGhDcmVkZW50aWFscyBjYW4gYmUgbW9kaWZpZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gZGF0YS5cblx0ICovXG5cdHB1YmxpYyBjb25maWd1cmUoY29uZmlndXJhdGlvbjogQWpheEFwcGVuZGVyQ29uZmlndXJhdGlvbik6IHZvaWQge1xuXHRcdGlmIChjb25maWd1cmF0aW9uKSB7XG5cdFx0XHRpZiAoY29uZmlndXJhdGlvbi51cmwgJiYgY29uZmlndXJhdGlvbi51cmwgIT09IHRoaXMudXJsKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVybCBtdXN0IG5vdCBiZSBjaGFuZ2VkXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzICYmIGNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzICE9PSB0aGlzLndpdGhDcmVkZW50aWFscykge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ3aXRoQ3JlZGVudGlhbHMgbXVzdCBub3QgYmUgY2hhbmdlZFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChjb25maWd1cmF0aW9uLmJhdGNoU2l6ZSkge1xuXHRcdFx0XHR0aGlzLnNldEJhdGNoU2l6ZShjb25maWd1cmF0aW9uLmJhdGNoU2l6ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24udGltZXJJbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHR0aGlzLnNldFRpbWVySW50ZXJ2YWwoY29uZmlndXJhdGlvbi50aW1lckludGVydmFsKTtcblx0XHRcdH1cblx0XHRcdGlmIChjb25maWd1cmF0aW9uLnRocmVzaG9sZCkge1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZWRUaHJlc2hvbGQgPSBMb2dMZXZlbENvbnZlcnRlci5sZXZlbFRvTG9nNEphdmFzY3JpcHQoXG5cdFx0XHRcdFx0TG9nTGV2ZWxDb252ZXJ0ZXIubGV2ZWxGcm9tU3RyaW5nKGNvbmZpZ3VyYXRpb24udGhyZXNob2xkKSk7XG5cdFx0XHRcdHRoaXMuc2V0VGhyZXNob2xkKGNvbnZlcnRlZFRocmVzaG9sZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGVuZGVyLXNwZWNpZmljIG1ldGhvZCB0byBhcHBlbmQgYSBsb2cgbWVzc2FnZS5cblx0ICpcblx0ICogQHBhcmFtIGxvZ2dpbmdFdmVudCBldmVudCB0byBiZSBhcHBlbmRlZC5cblx0ICovXG5cdHB1YmxpYyBhcHBlbmQobG9nZ2luZ0V2ZW50OiBsb2c0amF2YXNjcmlwdC5Mb2dnaW5nRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLmFqYXhBcHBlbmRlci5hcHBlbmQobG9nZ2luZ0V2ZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhcHBlbmRlcidzIG5hbWUuXG5cdCAqIE1haW5seSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIGFwcGVuZGVyJ3MgbmFtZVxuXHQgKi9cblx0cHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiSW9uaWMuTG9nZ2luZy5BamF4QXBwZW5kZXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGludGVybmFsbHkgdXNlZCBhcHBlbmRlci5cblx0ICogTWFpbmx5IGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SW50ZXJuYWxBcHBlbmRlcigpOiBsb2c0amF2YXNjcmlwdC5BamF4QXBwZW5kZXIge1xuXHRcdHJldHVybiB0aGlzLmFqYXhBcHBlbmRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbG9nIG1lc3NhZ2VzIHNlbnQgaW4gZWFjaCByZXF1ZXN0LlxuXHQgKi9cblx0cHVibGljIGdldEJhdGNoU2l6ZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmFqYXhBcHBlbmRlci5nZXRCYXRjaFNpemUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBudW1iZXIgb2YgbG9nIG1lc3NhZ2VzIHRvIHNlbmQgaW4gZWFjaCByZXF1ZXN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gYmF0Y2hTaXplIG5ldyBiYXRjaCBzaXplXG5cdCAqL1xuXHRwdWJsaWMgc2V0QmF0Y2hTaXplKGJhdGNoU2l6ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5hamF4QXBwZW5kZXIuc2V0QmF0Y2hTaXplKGJhdGNoU2l6ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYXBwZW5kZXIncyBsYXlvdXQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TGF5b3V0KCk6IGxvZzRqYXZhc2NyaXB0LkxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuYWpheEFwcGVuZGVyLmdldExheW91dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGFwcGVuZGVyJ3MgbGF5b3V0LlxuXHQgKi9cblx0cHVibGljIHNldExheW91dChsYXlvdXQ6IGxvZzRqYXZhc2NyaXB0LkxheW91dCk6IHZvaWQge1xuXHRcdHRoaXMuYWpheEFwcGVuZGVyLnNldExheW91dChsYXlvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGVhY2ggc2VuZGluZyBvZiBxdWV1ZWQgbG9nIG1lc3NhZ2VzLlxuXHQgKi9cblx0cHVibGljIGdldFRpbWVySW50ZXJ2YWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5hamF4QXBwZW5kZXIuZ2V0VGltZXJJbnRlcnZhbCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGxlbmd0aCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGVhY2ggc2VuZGluZyBvZiBxdWV1ZWQgbG9nIG1lc3NhZ2VzLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGltZXJJbnRlcnZhbCBuZXcgdGltZXIgaW50ZXJ2YWxcblx0ICovXG5cdHB1YmxpYyBzZXRUaW1lckludGVydmFsKHRpbWVySW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuYWpheEFwcGVuZGVyLnNldFRpbWVkKHRpbWVySW50ZXJ2YWwgPiAwKTtcblx0XHR0aGlzLmFqYXhBcHBlbmRlci5zZXRUaW1lckludGVydmFsKHRpbWVySW50ZXJ2YWwpO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,177 @@
1
+ import * as log4javascript from "log4javascript";
2
+ import { LogLevelConverter } from "./log-level.converter";
3
+ import { LogLevel } from "./log-level.model";
4
+ /**
5
+ * An appender which stores the log messages in the browser's local storage.
6
+ *
7
+ * The messages are saved JSON-serialized.
8
+ * You have to configure which key is used for storing the messages.
9
+ *
10
+ * A typical configuration could be:
11
+ *
12
+ * ```json
13
+ * {
14
+ * "localStorageKey": "myLogs",
15
+ * "maxMessages": 500,
16
+ * "threshold": "INFO"
17
+ * }
18
+ * ```
19
+ */
20
+ export class LocalStorageAppender extends log4javascript.Appender {
21
+ static { this.maxMessagesDefault = 250; }
22
+ static { this.thresholdDefault = "WARN"; }
23
+ /**
24
+ * Creates a new instance of the appender.
25
+ *
26
+ * @param configuration configuration for the appender.
27
+ */
28
+ constructor(configuration) {
29
+ super();
30
+ if (!configuration) {
31
+ throw new Error("configuration must be not empty");
32
+ }
33
+ if (!configuration.localStorageKey || configuration.localStorageKey === "") {
34
+ throw new Error("localStorageKey must be not empty");
35
+ }
36
+ this.localStorageKey = configuration.localStorageKey;
37
+ // read existing logMessages
38
+ this.logMessages = LocalStorageAppender.loadLogMessages(this.localStorageKey);
39
+ // process remaining configuration
40
+ this.configure({
41
+ localStorageKey: configuration.localStorageKey,
42
+ maxMessages: configuration.maxMessages || LocalStorageAppender.maxMessagesDefault,
43
+ threshold: configuration.threshold || LocalStorageAppender.thresholdDefault,
44
+ });
45
+ }
46
+ /**
47
+ * Load log messages from local storage which are stored there under the given key.
48
+ *
49
+ * @param localStorageKey local storage key
50
+ * @return stored messages
51
+ */
52
+ static loadLogMessages(localStorageKey) {
53
+ let logMessages;
54
+ if (!localStorageKey || localStorage.getItem(localStorageKey) === null) {
55
+ logMessages = [];
56
+ }
57
+ else {
58
+ logMessages = JSON.parse(localStorage.getItem(localStorageKey));
59
+ for (const logMessage of logMessages) {
60
+ // timestamps are serialized as strings
61
+ logMessage.timeStamp = new Date(logMessage.timeStamp);
62
+ }
63
+ }
64
+ return logMessages;
65
+ }
66
+ /**
67
+ * Remove log messages from local storage which are stored there under the given key.
68
+ *
69
+ * @param localStorageKey local storage key
70
+ */
71
+ static removeLogMessages(localStorageKey) {
72
+ localStorage.removeItem(localStorageKey);
73
+ }
74
+ /**
75
+ * Configures the logging depending on the given configuration.
76
+ *
77
+ * Only the defined properties get overwritten.
78
+ * The localStorageKey cannot be modified.
79
+ *
80
+ * @param configuration configuration data.
81
+ */
82
+ configure(configuration) {
83
+ if (configuration) {
84
+ if (configuration.localStorageKey && configuration.localStorageKey !== this.localStorageKey) {
85
+ throw new Error("localStorageKey must not be changed");
86
+ }
87
+ if (configuration.maxMessages) {
88
+ this.setMaxMessages(configuration.maxMessages);
89
+ }
90
+ if (configuration.threshold) {
91
+ const convertedThreshold = LogLevelConverter.levelToLog4Javascript(LogLevelConverter.levelFromString(configuration.threshold));
92
+ this.setThreshold(convertedThreshold);
93
+ }
94
+ }
95
+ }
96
+ /**
97
+ * Appender-specific method to append a log message.
98
+ *
99
+ * @param loggingEvent event to be appended.
100
+ */
101
+ append(loggingEvent) {
102
+ // if logMessages is already full, remove oldest element
103
+ while (this.logMessages.length >= this.maxMessages) {
104
+ this.logMessages.shift();
105
+ }
106
+ // add event to logMessages
107
+ const message = {
108
+ level: LogLevel[LogLevelConverter.levelFromLog4Javascript(loggingEvent.level)],
109
+ logger: typeof loggingEvent.logger !== "undefined" ? loggingEvent.logger.name : undefined,
110
+ message: loggingEvent.messages.slice(1),
111
+ methodName: loggingEvent.messages[0],
112
+ timeStamp: loggingEvent.timeStamp,
113
+ };
114
+ this.logMessages.push(message);
115
+ // write values to localStorage
116
+ localStorage.setItem(this.localStorageKey, JSON.stringify(this.logMessages));
117
+ }
118
+ /**
119
+ * Gets the appender's name.
120
+ * Mainly for unit testing purposes.
121
+ *
122
+ * @return appender's name
123
+ */
124
+ toString() {
125
+ return "Ionic.Logging.LocalStorageAppender";
126
+ }
127
+ /**
128
+ * Get the key which is used to store the messages in the local storage.
129
+ */
130
+ getLocalStorageKey() {
131
+ return this.localStorageKey;
132
+ }
133
+ /**
134
+ * Get the maximum number of messages which will be stored in local storage.
135
+ */
136
+ getMaxMessages() {
137
+ return this.maxMessages;
138
+ }
139
+ /**
140
+ * Set the maximum number of messages which will be stored in local storage.
141
+ *
142
+ * If the appender stores currently more messages than the new value allows, the oldest messages get removed.
143
+ *
144
+ * @param value new maximum number
145
+ */
146
+ setMaxMessages(value) {
147
+ if (this.maxMessages !== value) {
148
+ this.maxMessages = value;
149
+ if (this.logMessages.length > this.maxMessages) {
150
+ // there are too much logMessages for the new value, therefore remove oldest messages
151
+ while (this.logMessages.length > this.maxMessages) {
152
+ this.logMessages.shift();
153
+ }
154
+ // write values to localStorage
155
+ localStorage.setItem(this.localStorageKey, JSON.stringify(this.logMessages));
156
+ }
157
+ }
158
+ }
159
+ /**
160
+ * Gets all messages stored in local storage.
161
+ * Mainly for unit testing purposes.
162
+ *
163
+ * @return stored messages
164
+ */
165
+ getLogMessages() {
166
+ return this.logMessages;
167
+ }
168
+ /**
169
+ * Removes all messages from local storage.
170
+ * Mainly for unit testing purposes.
171
+ */
172
+ clearLog() {
173
+ this.logMessages = [];
174
+ localStorage.removeItem(this.localStorageKey);
175
+ }
176
+ }
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1hcHBlbmRlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lvbmljLWxvZ2dpbmctc2VydmljZS9zcmMvbGliL2xvY2FsLXN0b3JhZ2UtYXBwZW5kZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLGNBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHN0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGNBQWMsQ0FBQyxRQUFRO2FBRWpELHVCQUFrQixHQUFHLEdBQUcsQ0FBQzthQUN6QixxQkFBZ0IsR0FBRyxNQUFNLENBQUM7SUFPekM7Ozs7T0FJRztJQUNILFlBQVksYUFBZ0Q7UUFDM0QsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxJQUFJLGFBQWEsQ0FBQyxlQUFlLEtBQUssRUFBRSxFQUFFO1lBQzNFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQztRQUVyRCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTlFLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2QsZUFBZSxFQUFFLGFBQWEsQ0FBQyxlQUFlO1lBQzlDLFdBQVcsRUFBRSxhQUFhLENB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b0NBQW9DLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksa0JBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYyxDQUFDLEtBQWE7UUFDbEMsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUV6QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQy9DLHFGQUFxRjtnQkFDckYsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUN6QjtnQkFFRCwrQkFBK0I7Z0JBQy9CLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2FBQzdFO1NBQ0Q7SUFDRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUTtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBsb2c0amF2YXNjcmlwdCBmcm9tIFwibG9nNGphdmFzY3JpcHRcIjtcblxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlQXBwZW5kZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vbG9jYWwtc3RvcmFnZS1hcHBlbmRlci5jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgeyBMb2dMZXZlbENvbnZlcnRlciB9IGZyb20gXCIuL2xvZy1sZXZlbC5jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSBcIi4vbG9nLWxldmVsLm1vZGVsXCI7XG5pbXBvcnQgeyBMb2dNZXNzYWdlIH0gZnJvbSBcIi4vbG9nLW1lc3NhZ2UubW9kZWxcIjtcblxuLyoqXG4gKiBBbiBhcHBlbmRlciB3aGljaCBzdG9yZXMgdGhlIGxvZyBtZXNzYWdlcyBpbiB0aGUgYnJvd3NlcidzIGxvY2FsIHN0b3JhZ2UuXG4gKlxuICogVGhlIG1lc3NhZ2VzIGFyZSBzYXZlZCBKU09OLXNlcmlhbGl6ZWQuXG4gKiBZb3UgaGF2ZSB0byBjb25maWd1cmUgd2hpY2gga2V5IGlzIHVzZWQgZm9yIHN0b3JpbmcgdGhlIG1lc3NhZ2VzLlxuICpcbiAqIEEgdHlwaWNhbCBjb25maWd1cmF0aW9uIGNvdWxkIGJlOlxuICpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJsb2NhbFN0b3JhZ2VLZXlcIjogXCJteUxvZ3NcIixcbiAqICAgXCJtYXhNZXNzYWdlc1wiOiA1MDAsXG4gKiAgIFwidGhyZXNob2xkXCI6IFwiSU5GT1wiXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZUFwcGVuZGVyIGV4dGVuZHMgbG9nNGphdmFzY3JpcHQuQXBwZW5kZXIge1xuXG5cdHByaXZhdGUgc3RhdGljIG1heE1lc3NhZ2VzRGVmYXVsdCA9IDI1MDtcblx0cHJpdmF0ZSBzdGF0aWMgdGhyZXNob2xkRGVmYXVsdCA9IFwiV0FSTlwiO1xuXG5cdHByaXZhdGUgbWF4TWVzc2FnZXM6IG51bWJlcjtcblxuXHRwcml2YXRlIGxvY2FsU3RvcmFnZUtleTogc3RyaW5nO1xuXHRwcml2YXRlIGxvZ01lc3NhZ2VzOiBMb2dNZXNzYWdlW107XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGFwcGVuZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgYXBwZW5kZXIuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uOiBMb2NhbFN0b3JhZ2VBcHBlbmRlckNvbmZpZ3VyYXRpb24pIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKCFjb25maWd1cmF0aW9uKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjb25maWd1cmF0aW9uIG11c3QgYmUgbm90IGVtcHR5XCIpO1xuXHRcdH1cblx0XHRpZiAoIWNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlS2V5IHx8IGNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlS2V5ID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJsb2NhbFN0b3JhZ2VLZXkgbXVzdCBiZSBub3QgZW1wdHlcIik7XG5cdFx0fVxuXHRcdHRoaXMubG9jYWxTdG9yYWdlS2V5ID0gY29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VLZXk7XG5cblx0XHQvLyByZWFkIGV4aXN0aW5nIGxvZ01lc3NhZ2VzXG5cdFx0dGhpcy5sb2dNZXNzYWdlcyA9IExvY2FsU3RvcmFnZUFwcGVuZGVyLmxvYWRMb2dNZXNzYWdlcyh0aGlzLmxvY2FsU3RvcmFnZUtleSk7XG5cblx0XHQvLyBwcm9jZXNzIHJlbWFpbmluZyBjb25maWd1cmF0aW9uXG5cdFx0dGhpcy5jb25maWd1cmUoe1xuXHRcdFx0bG9jYWxTdG9yYWdlS2V5OiBjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZUtleSxcblx0XHRcdG1heE1lc3NhZ2VzOiBjb25maWd1cmF0aW9uLm1heE1lc3NhZ2VzIHx8IExvY2FsU3RvcmFnZUFwcGVuZGVyLm1heE1lc3NhZ2VzRGVmYXVsdCxcblx0XHRcdHRocmVzaG9sZDogY29uZmlndXJhdGlvbi50aHJlc2hvbGQgfHwgTG9jYWxTdG9yYWdlQXBwZW5kZXIudGhyZXNob2xkRGVmYXVsdCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkIGxvZyBtZXNzYWdlcyBmcm9tIGxvY2FsIHN0b3JhZ2Ugd2hpY2ggYXJlIHN0b3JlZCB0aGVyZSB1bmRlciB0aGUgZ2l2ZW4ga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0gbG9jYWxTdG9yYWdlS2V5IGxvY2FsIHN0b3JhZ2Uga2V5XG5cdCAqIEByZXR1cm4gc3RvcmVkIG1lc3NhZ2VzXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGxvYWRMb2dNZXNzYWdlcyhsb2NhbFN0b3JhZ2VLZXk6IHN0cmluZyk6IExvZ01lc3NhZ2VbXSB7XG5cdFx0bGV0IGxvZ01lc3NhZ2VzOiBMb2dNZXNzYWdlW107XG5cblx0XHRpZiAoIWxvY2FsU3RvcmFnZUtleSB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFN0b3JhZ2VLZXkpID09PSBudWxsKSB7XG5cdFx0XHRsb2dNZXNzYWdlcyA9IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2dNZXNzYWdlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obG9jYWxTdG9yYWdlS2V5KSk7XG5cdFx0XHRmb3IgKGNvbnN0IGxvZ01lc3NhZ2Ugb2YgbG9nTWVzc2FnZXMpIHtcblx0XHRcdFx0Ly8gdGltZXN0YW1wcyBhcmUgc2VyaWFsaXplZCBhcyBzdHJpbmdzXG5cdFx0XHRcdGxvZ01lc3NhZ2UudGltZVN0YW1wID0gbmV3IERhdGUobG9nTWVzc2FnZS50aW1lU3RhbXApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBsb2dNZXNzYWdlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgbG9nIG1lc3NhZ2VzIGZyb20gbG9jYWwgc3RvcmFnZSB3aGljaCBhcmUgc3RvcmVkIHRoZXJlIHVuZGVyIHRoZSBnaXZlbiBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBsb2NhbFN0b3JhZ2VLZXkgbG9jYWwgc3RvcmFnZSBrZXlcblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgcmVtb3ZlTG9nTWVzc2FnZXMobG9jYWxTdG9yYWdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsb2NhbFN0b3JhZ2VLZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZXMgdGhlIGxvZ2dpbmcgZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBPbmx5IHRoZSBkZWZpbmVkIHByb3BlcnRpZXMgZ2V0IG92ZXJ3cml0dGVuLlxuXHQgKiBUaGUgbG9jYWxTdG9yYWdlS2V5IGNhbm5vdCBiZSBtb2RpZmllZC5cblx0ICpcblx0ICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiBkYXRhLlxuXHQgKi9cblx0cHVibGljIGNvbmZpZ3VyZShjb25maWd1cmF0aW9uOiBMb2NhbFN0b3JhZ2VBcHBlbmRlckNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0XHRpZiAoY29uZmlndXJhdGlvbikge1xuXHRcdFx0aWYgKGNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlS2V5ICYmIGNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlS2V5ICE9PSB0aGlzLmxvY2FsU3RvcmFnZUtleSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJsb2NhbFN0b3JhZ2VLZXkgbXVzdCBub3QgYmUgY2hhbmdlZFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChjb25maWd1cmF0aW9uLm1heE1lc3NhZ2VzKSB7XG5cdFx0XHRcdHRoaXMuc2V0TWF4TWVzc2FnZXMoY29uZmlndXJhdGlvbi5tYXhNZXNzYWdlcyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29uZmlndXJhdGlvbi50aHJlc2hvbGQpIHtcblx0XHRcdFx0Y29uc3QgY29udmVydGVkVGhyZXNob2xkID0gTG9nTGV2ZWxDb252ZXJ0ZXIubGV2ZWxUb0xvZzRKYXZhc2NyaXB0KFxuXHRcdFx0XHRcdExvZ0xldmVsQ29udmVydGVyLmxldmVsRnJvbVN0cmluZyhjb25maWd1cmF0aW9uLnRocmVzaG9sZCkpO1xuXHRcdFx0XHR0aGlzLnNldFRocmVzaG9sZChjb252ZXJ0ZWRUaHJlc2hvbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBlbmRlci1zcGVjaWZpYyBtZXRob2QgdG8gYXBwZW5kIGEgbG9nIG1lc3NhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBsb2dnaW5nRXZlbnQgZXZlbnQgdG8gYmUgYXBwZW5kZWQuXG5cdCAqL1xuXHRwdWJsaWMgYXBwZW5kKGxvZ2dpbmdFdmVudDogbG9nNGphdmFzY3JpcHQuTG9nZ2luZ0V2ZW50KTogdm9pZCB7XG5cdFx0Ly8gaWYgbG9nTWVzc2FnZXMgaXMgYWxyZWFkeSBmdWxsLCByZW1vdmUgb2xkZXN0IGVsZW1lbnRcblx0XHR3aGlsZSAodGhpcy5sb2dNZXNzYWdlcy5sZW5ndGggPj0gdGhpcy5tYXhNZXNzYWdlcykge1xuXHRcdFx0dGhpcy5sb2dNZXNzYWdlcy5zaGlmdCgpO1xuXHRcdH1cblx0XHQvLyBhZGQgZXZlbnQgdG8gbG9nTWVzc2FnZXNcblx0XHRjb25zdCBtZXNzYWdlOiBMb2dNZXNzYWdlID0ge1xuXHRcdFx0bGV2ZWw6IExvZ0xldmVsW0xvZ0xldmVsQ29udmVydGVyLmxldmVsRnJvbUxvZzRKYXZhc2NyaXB0KGxvZ2dpbmdFdmVudC5sZXZlbCldLFxuXHRcdFx0bG9nZ2VyOiB0eXBlb2YgbG9nZ2luZ0V2ZW50LmxvZ2dlciAhPT0gXCJ1bmRlZmluZWRcIiA/IGxvZ2dpbmdFdmVudC5sb2dnZXIubmFtZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1lc3NhZ2U6IGxvZ2dpbmdFdmVudC5tZXNzYWdlcy5zbGljZSgxKSxcblx0XHRcdG1ldGhvZE5hbWU6IGxvZ2dpbmdFdmVudC5tZXNzYWdlc1swXSxcblx0XHRcdHRpbWVTdGFtcDogbG9nZ2luZ0V2ZW50LnRpbWVTdGFtcCxcblx0XHR9O1xuXHRcdHRoaXMubG9nTWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblxuXHRcdC8vIHdyaXRlIHZhbHVlcyB0byBsb2NhbFN0b3JhZ2Vcblx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5sb2dNZXNzYWdlcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcGVuZGVyJ3MgbmFtZS5cblx0ICogTWFpbmx5IGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMuXG5cdCAqXG5cdCAqIEByZXR1cm4gYXBwZW5kZXIncyBuYW1lXG5cdCAqL1xuXHRwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJJb25pYy5Mb2dnaW5nLkxvY2FsU3RvcmFnZUFwcGVuZGVyXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBrZXkgd2hpY2ggaXMgdXNlZCB0byBzdG9yZSB0aGUgbWVzc2FnZXMgaW4gdGhlIGxvY2FsIHN0b3JhZ2UuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TG9jYWxTdG9yYWdlS2V5KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgd2hpY2ggd2lsbCBiZSBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cblx0ICovXG5cdHB1YmxpYyBnZXRNYXhNZXNzYWdlcygpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm1heE1lc3NhZ2VzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgd2hpY2ggd2lsbCBiZSBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cblx0ICpcblx0ICogSWYgdGhlIGFwcGVuZGVyIHN0b3JlcyBjdXJyZW50bHkgbW9yZSBtZXNzYWdlcyB0aGFuIHRoZSBuZXcgdmFsdWUgYWxsb3dzLCB0aGUgb2xkZXN0IG1lc3NhZ2VzIGdldCByZW1vdmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgbmV3IG1heGltdW0gbnVtYmVyXG5cdCAqL1xuXHRwdWJsaWMgc2V0TWF4TWVzc2FnZXModmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1heE1lc3NhZ2VzICE9PSB2YWx1ZSkge1xuXHRcdFx0dGhpcy5tYXhNZXNzYWdlcyA9IHZhbHVlO1xuXG5cdFx0XHRpZiAodGhpcy5sb2dNZXNzYWdlcy5sZW5ndGggPiB0aGlzLm1heE1lc3NhZ2VzKSB7XG5cdFx0XHRcdC8vIHRoZXJlIGFyZSB0b28gbXVjaCBsb2dNZXNzYWdlcyBmb3IgdGhlIG5ldyB2YWx1ZSwgdGhlcmVmb3JlIHJlbW92ZSBvbGRlc3QgbWVzc2FnZXNcblx0XHRcdFx0d2hpbGUgKHRoaXMubG9nTWVzc2FnZXMubGVuZ3RoID4gdGhpcy5tYXhNZXNzYWdlcykge1xuXHRcdFx0XHRcdHRoaXMubG9nTWVzc2FnZXMuc2hpZnQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHdyaXRlIHZhbHVlcyB0byBsb2NhbFN0b3JhZ2Vcblx0XHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KHRoaXMubG9nTWVzc2FnZXMpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbGwgbWVzc2FnZXMgc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG5cdCAqIE1haW5seSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHN0b3JlZCBtZXNzYWdlc1xuXHQgKi9cblx0cHVibGljIGdldExvZ01lc3NhZ2VzKCk6IExvZ01lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nTWVzc2FnZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgbWVzc2FnZXMgZnJvbSBsb2NhbCBzdG9yYWdlLlxuXHQgKiBNYWlubHkgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy5cblx0ICovXG5cdHB1YmxpYyBjbGVhckxvZygpOiB2b2lkIHtcblx0XHR0aGlzLmxvZ01lc3NhZ2VzID0gW107XG5cdFx0bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VLZXkpO1xuXHR9XG59XG4iXX0=
@@ -1,11 +1,11 @@
1
1
  import { NgModule } from "@angular/core";
2
2
  import * as i0 from "@angular/core";
3
3
  export class LoggingServiceModule {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: LoggingServiceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.3", ngImport: i0, type: LoggingServiceModule }); }
6
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: LoggingServiceModule }); }
4
7
  }
5
- LoggingServiceModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingServiceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6
- LoggingServiceModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: LoggingServiceModule });
7
- LoggingServiceModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingServiceModule });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingServiceModule, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: LoggingServiceModule, decorators: [{
9
9
  type: NgModule,
10
10
  args: [{
11
11
  imports: [],
@@ -13,4 +13,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
13
13
  exports: []
14
14
  }]
15
15
  }] });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1zZXJ2aWNlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lvbmljLWxvZ2dpbmctc2VydmljZS9zcmMvbGliL2xvZ2dpbmctc2VydmljZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVekMsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFSaEMsUUFBUTttQkFBQztvQkFDVCxPQUFPLEVBQUUsRUFDUjtvQkFDRCxZQUFZLEVBQUUsRUFDYjtvQkFDRCxPQUFPLEVBQUUsRUFDUjtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW1xuXHRdLFxuXHRkZWNsYXJhdGlvbnM6IFtcblx0XSxcblx0ZXhwb3J0czogW1xuXHRdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdTZXJ2aWNlTW9kdWxlIHsgfVxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1zZXJ2aWNlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lvbmljLWxvZ2dpbmctc2VydmljZS9zcmMvbGliL2xvZ2dpbmctc2VydmljZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVekMsTUFBTSxPQUFPLG9CQUFvQjs4R0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFSaEMsUUFBUTttQkFBQztvQkFDVCxPQUFPLEVBQUUsRUFDUjtvQkFDRCxZQUFZLEVBQUUsRUFDYjtvQkFDRCxPQUFPLEVBQUUsRUFDUjtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW1xuXHRdLFxuXHRkZWNsYXJhdGlvbnM6IFtcblx0XSxcblx0ZXhwb3J0czogW1xuXHRdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdTZXJ2aWNlTW9kdWxlIHsgfVxuIl19
@@ -155,13 +155,13 @@ export class LoggingService {
155
155
  LocalStorageAppender.removeLogMessages(localStorageKey);
156
156
  this.logMessagesChanged.emit();
157
157
  }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
159
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: LoggingService, providedIn: "root" }); }
158
160
  }
159
- LoggingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
160
- LoggingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingService, providedIn: "root" });
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingService, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: LoggingService, decorators: [{
162
162
  type: Injectable,
163
163
  args: [{
164
164
  providedIn: "root"
165
165
  }]
166
166
  }], ctorParameters: function () { return []; } });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uaWMtbG9nZ2luZy1zZXJ2aWNlL3NyYy9saWIvbG9nZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRXpEOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFxQjFCOztPQUVHO0lBQ0g7UUFFQywwREFBMEQ7UUFDMUQsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXJELHFCQUFxQjtRQUNyQixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMxRSxJ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QUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUNBQWlDLENBQUMsZUFBdUI7UUFDL0Qsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7OzJHQW5MVyxjQUFjOytHQUFkLGNBQWMsY0FGZCxNQUFNOzJGQUVOLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCAqIGFzIGxvZzRqYXZhc2NyaXB0IGZyb20gXCJsb2c0amF2YXNjcmlwdFwiO1xuXG5pbXBvcnQgeyBBamF4QXBwZW5kZXIgfSBmcm9tIFwiLi9hamF4LWFwcGVuZGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VBcHBlbmRlciB9IGZyb20gXCIuL2xvY2FsLXN0b3JhZ2UtYXBwZW5kZXIubW9kZWxcIjtcbmltcG9ydCB7IExvZ0xldmVsQ29udmVydGVyIH0gZnJvbSBcIi4vbG9nLWxldmVsLmNvbnZlcnRlclwiO1xuaW1wb3J0IHsgTG9nTWVzc2FnZSB9IGZyb20gXCIuL2xvZy1tZXNzYWdlLm1vZGVsXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXIubW9kZWxcIjtcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2xvZ2dpbmctc2VydmljZS5jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgeyBNZW1vcnlBcHBlbmRlciB9IGZyb20gXCIuL21lbW9yeS1hcHBlbmRlci5tb2RlbFwiO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSB1c2VkOlxuICogIC0gbG9nZ2VyOiByb290IHdpdGggbGV2ZWwgV0FSTlxuICogIC0gYXBwZW5kZXI6IEJyb3dzZXJDb25zb2xlQXBwZW5kZXIgd2l0aCB0aHJlc2hvbGQgREVCVUcgYW5kIE1lbW9yeUFwcGVuZGVyIHdpdGggdGhyZXNob2xkIEFMTFxuICpcbiAqIFZpYSBbY29uZmlndXJlXSgjY29uZmlndXJlKSwgaXQgaXMgcG9zc2libGUgdG8gYW1lbmQgdGhlc2Ugc2V0dGluZ3MuXG4gKi9cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogXCJyb290XCJcbn0pXG5leHBvcnQgY2xhc3MgTG9nZ2luZ1NlcnZpY2Uge1xuXG5cdC8qKlxuXHQgKiBFdmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgbG9nIG1lc3NhZ2VzIGdvdCAocG90ZW50aWFsbHkpIGNoYW5nZS5cblx0ICogVGhpcyBjYW4gaGFwcGVuIHdoZW46XG5cdCAqIC0gbmV3IG1lc3NhZ2Ugd2FzIGFkZGVkXG5cdCAqIC0gYWxsIG1lc3NhZ2Ugd2hlcmUgcmVtb3ZlZCBmcm9tIG1lbW9yeVxuXHQgKiAtIGFsbCBtYXNzYWdlcyB3aGVyZSByZW1vdmVkIGZvciBvbmUgc3BjaWZpYyBMb2NhbFN0b3JhZ2VBcHBlbmRlclxuXHQgKi9cblx0cHVibGljIGxvZ01lc3NhZ2VzQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+O1xuXG5cdC8qKlxuXHQgKiBFdmVudCB0cmlnZ2VyZWQgd2hlbiBhamF4IGFwcGVuZGVyIGNvdWxkIG5vdCBzZW5kIGxvZyBtZXNzYWdlcyB0byB0aGUgc2VydmVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBtZXNzYWdlXG5cdCAqL1xuXHRwdWJsaWMgYWpheEFwcGVuZGVyRmFpbGVkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcblxuXHRwcml2YXRlIG1lbW9yeUFwcGVuZGVyOiBNZW1vcnlBcHBlbmRlcjtcblx0cHJpdmF0ZSBicm93c2VyQ29uc29sZUFwcGVuZGVyOiBsb2c0amF2YXNjcmlwdC5Ccm93c2VyQ29uc29sZUFwcGVuZGVyO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHQvLyBwcmV2ZW50IGxvZzRqYXZhc2NyaXB0IHRvIHNob3cgYWxlcnRzIG9uIGNhc2Ugb2YgZXJyb3JzXG5cdFx0bG9nNGphdmFzY3JpcHQubG9nTG9nLnNldFF1aWV0TW9kZSh0cnVlKTtcblxuXHRcdC8vIGNyZWF0ZSBldmVudCBlbWl0dGVyXG5cdFx0dGhpcy5sb2dNZXNzYWdlc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdFx0dGhpcy5hamF4QXBwZW5kZXJGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuXHRcdC8vIGNvbmZpZ3VyZSBhcHBlbmRlclxuXHRcdGNvbnN0IGxvZ2dlciA9IGxvZzRqYXZhc2NyaXB0LmdldFJvb3RMb2dnZXIoKTtcblx0XHRsb2dnZXIuc2V0TGV2ZWwobG9nNGphdmFzY3JpcHQuTGV2ZWwuV0FSTik7XG5cblx0XHQvLyBicm93c2VyIGNvbnNvbGUgYXBwZW5kZXIgZm9yIGRlYnVnZ2VyXG5cdFx0dGhpcy5icm93c2VyQ29uc29sZUFwcGVuZGVyID0gbmV3IGxvZzRqYXZhc2NyaXB0LkJyb3dzZXJDb25zb2xlQXBwZW5kZXIoKTtcblx0XHR0aGlzLmJyb3dzZXJDb25zb2xlQXBwZW5kZXIuc2V0TGF5b3V0KG5ldyBsb2c0amF2YXNjcmlwdC5QYXR0ZXJuTGF5b3V0KFwiJWR7SEg6bW06c3MsU1NTfSAlYyAlbVwiKSk7XG5cdFx0dGhpcy5icm93c2VyQ29uc29sZUFwcGVuZGVyLnNldFRocmVzaG9sZChsb2c0amF2YXNjcmlwdC5MZXZlbC5BTEwpO1xuXHRcdGxvZ2dlci5hZGRBcHBlbmRlcih0aGlzLmJyb3dzZXJDb25zb2xlQXBwZW5kZXIpO1xuXG5cdFx0Ly8gaW4tbWVtb3J5IGFwcGVuZGVyIGZvciBkaXNwbGF5IG9uIGxvZyBtZXNzYWdlcyBwYWdlXG5cdFx0dGhpcy5tZW1vcnlBcHBlbmRlciA9IG5ldyBNZW1vcnlBcHBlbmRlcigpO1xuXHRcdHRoaXMubWVtb3J5QXBwZW5kZXIuc2V0TGF5b3V0KG5ldyBsb2c0amF2YXNjcmlwdC5QYXR0ZXJuTGF5b3V0KFwiJWR7SEg6bW06c3MsU1NTfSAlYyAlbVwiKSk7XG5cdFx0dGhpcy5tZW1vcnlBcHBlbmRlci5zZXRPbkxvZ01lc3NhZ2VzQ2hhbmdlZENhbGxiYWNrKChtZXNzYWdlKSA9PiB7XG5cdFx0XHR0aGlzLmxvZ01lc3NhZ2VzQ2hhbmdlZC5lbWl0KCk7XG5cdFx0fSk7XG5cdFx0bG9nZ2VyLmFkZEFwcGVuZGVyKHRoaXMubWVtb3J5QXBwZW5kZXIpO1xuXG5cdFx0dGhpcy5jb25maWd1cmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmVzIHRoZSBsb2dnaW5nIGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiBkYXRhLlxuXHQgKi9cblx0cHVibGljIGNvbmZpZ3VyZShjb25maWd1cmF0aW9uPzogTG9nZ2luZ1NlcnZpY2VDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cblx0XHRpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24gPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdGNvbmZpZ3VyYXRpb24gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBzZXQgbG9nIGxldmVsc1xuXHRcdGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5sb2dMZXZlbHMgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdGZvciAoY29uc3QgbGV2ZWwgb2YgY29uZmlndXJhdGlvbi5sb2dMZXZlbHMpIHtcblx0XHRcdFx0bGV0IGxvZ2dlcjogbG9nNGphdmFzY3JpcHQuTG9nZ2VyO1xuXHRcdFx0XHRpZiAobGV2ZWwubG9nZ2VyTmFtZSA9PT0gXCJyb290XCIpIHtcblx0XHRcdFx0XHRsb2dnZXIgPSBsb2c0amF2YXNjcmlwdC5nZXRSb290TG9nZ2VyKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bG9nZ2VyID0gbG9nNGphdmFzY3JpcHQuZ2V0TG9nZ2VyKGxldmVsLmxvZ2dlck5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9nZ2VyLnNldExldmVsKExvZ0xldmVsQ29udmVydGVyLmxldmVsVG9Mb2c0SmF2YXNjcmlwdChMb2dMZXZlbENvbnZlcnRlci5sZXZlbEZyb21TdHJpbmcobGV2ZWwubG9nTGV2ZWwpKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbG9nIGxldmVsICR7bGV2ZWwubG9nTGV2ZWx9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjb25maWd1cmUgQWpheEFwcGVuZGVyXG5cdFx0aWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmFqYXhBcHBlbmRlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0Y29uc3QgYWpheEFwcGVuZGVyID0gbmV3IEFqYXhBcHBlbmRlcihjb25maWd1cmF0aW9uLmFqYXhBcHBlbmRlcik7XG5cdFx0XHRhamF4QXBwZW5kZXIuYXBwZW5kZXJGYWlsZWQuc3Vic2NyaWJlKChtZXNzYWdlOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpcy5hamF4QXBwZW5kZXJGYWlsZWQuZW1pdChtZXNzYWdlKTtcblx0XHRcdH0pO1xuXHRcdFx0bG9nNGphdmFzY3JpcHQuZ2V0Um9vdExvZ2dlcigpLmFkZEFwcGVuZGVyKGFqYXhBcHBlbmRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gY29uZmlndXJlIExvY2FsU3RvcmFnZUFwcGVuZGVyXG5cdFx0aWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZUFwcGVuZGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRjb25zdCBsb2NhbFN0b3JhZ2VBcHBlbmRlciA9IG5ldyBMb2NhbFN0b3JhZ2VBcHBlbmRlcihjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZUFwcGVuZGVyKTtcblx0XHRcdGxvZzRqYXZhc2NyaXB0LmdldFJvb3RMb2dnZXIoKS5hZGRBcHBlbmRlcihsb2NhbFN0b3JhZ2VBcHBlbmRlcik7XG5cblx0XHRcdC8vIGVuc3VyZSB0aGF0IGFuIGV2ZW50dWFsIG1lbW9yeUFwcGVuZGVyIGlzIGJlaGluZCB0aGUgbG9jYWxTdG9yYWdlQXBwZW5kZXJcblx0XHRcdGNvbnN0IGFwcGVuZGVycyA9IG5ldyBMb2dnZXIoKS5nZXRJbnRlcm5hbExvZ2dlcigpLmdldEVmZmVjdGl2ZUFwcGVuZGVycygpO1xuXHRcdFx0Y29uc3QgbWVtb3J5QXBwZW5kZXIgPSBhcHBlbmRlcnMuZmluZCgoYSkgPT4gYS50b1N0cmluZygpID09PSBcIklvbmljLkxvZ2dpbmcuTWVtb3J5QXBwZW5kZXJcIikgYXMgTWVtb3J5QXBwZW5kZXI7XG5cdFx0XHRpZiAobWVtb3J5QXBwZW5kZXIpIHtcblx0XHRcdFx0bG9nNGphdmFzY3JpcHQuZ2V0Um9vdExvZ2dlcigpLnJlbW92ZUFwcGVuZGVyKG1lbW9yeUFwcGVuZGVyKTtcblx0XHRcdFx0bG9nNGphdmFzY3JpcHQuZ2V0Um9vdExvZ2dlcigpLmFkZEFwcGVuZGVyKG1lbW9yeUFwcGVuZGVyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjb25maWd1cmUgTWVtb3J5QXBwZW5kZXJcblx0XHRpZiAoY29uZmlndXJhdGlvbi5tZW1vcnlBcHBlbmRlcikge1xuXHRcdFx0dGhpcy5tZW1vcnlBcHBlbmRlci5jb25maWd1cmUoY29uZmlndXJhdGlvbi5tZW1vcnlBcHBlbmRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gY29uZmlndXJlIEJyb3dzZXJDb25zb2xlQXBwZW5kZXJcblx0XHRpZiAoY29uZmlndXJhdGlvbi5icm93c2VyQ29uc29sZUFwcGVuZGVyKSB7XG5cdFx0XHRpZiAoY29uZmlndXJhdGlvbi5icm93c2VyQ29uc29sZUFwcGVuZGVyLnRocmVzaG9sZCkge1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZWRUaHJlc2hvbGQgPSBMb2dMZXZlbENvbnZlcnRlci5sZXZlbFRvTG9nNEphdmFzY3JpcHQoXG5cdFx0XHRcdFx0TG9nTGV2ZWxDb252ZXJ0ZXIubGV2ZWxGcm9tU3RyaW5nKGNvbmZpZ3VyYXRpb24uYnJvd3NlckNvbnNvbGVBcHBlbmRlci50aHJlc2hvbGQpKTtcblx0XHRcdFx0dGhpcy5icm93c2VyQ29uc29sZUFwcGVuZGVyLnNldFRocmVzaG9sZChjb252ZXJ0ZWRUaHJlc2hvbGQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJvb3QgbG9nZ2VyIGZyb20gd2hpY2ggYWxsIG90aGVyIGxvZ2dlcnMgZGVyaXZlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHJvb3QgbG9nZ2VyXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Um9vdExvZ2dlcigpOiBMb2dnZXIge1xuXHRcdHJldHVybiBuZXcgTG9nZ2VyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhIGxvZ2dlciB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwgY3JlYXRpbmcgaXQgaWYgYSBsb2dnZXIgd2l0aCB0aGF0IG5hbWUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC5cblx0ICpcblx0ICogQHBhcmFtIGxvZ2dlck5hbWUgbmFtZSBvZiB0aGUgbG9nZ2VyXG5cdCAqIEByZXR1cm4gbG9nZ2VyXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TG9nZ2VyKGxvZ2dlck5hbWU6IHN0cmluZyk6IExvZ2dlciB7XG5cdFx0cmV0dXJuIG5ldyBMb2dnZXIobG9nZ2VyTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFzdCBsb2cgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIFRoZSBsb2cgbWVzc2FnZXMgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBpbnRlcm5hbCBbTWVtb3J5QXBwZW5kZXJdKC4uL21lbW9yeWFwcGVuZGVyLmh0bWwpLlxuXHQgKiBUaGF0IG1lYW5zIHlvdSB3aWxsIGdldCBvbmx5IHRoZSBtb3N0IGN1cnJlbnQgbWVzc2FnZXMuIFRoZSBudW1iZXIgb2YgdGhlIG1lc3NhZ2VzIGlzIGxpbWl0ZWRcblx0ICogYnkgaXRzIG1heE1lc3NhZ2VzIHZhbHVlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIGxvZyBtZXNzYWdlc1xuXHQgKi9cblx0cHVibGljIGdldExvZ01lc3NhZ2VzKCk6IExvZ01lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIHRoaXMubWVtb3J5QXBwZW5kZXIuZ2V0TG9nTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyB0aGUgbG9nIG1lc3NhZ2VzIHdyaXR0ZW4gYnkgdGhlIExvY2FsU3RvcmFnZUFwcGVuZGVyIHdpdGggdGhlIGdpdmVuIGtleS5cblx0ICpcblx0ICogQHBhcmFtIGxvY2FsU3RvcmFnZUtleSBrZXkgZm9yIHRoZSBsb2NhbCBzdG9yYWdlXG5cdCAqIEByZXR1cm5zIGxvZyBtZXNzYWdlc1xuXHQgKi9cblx0cHVibGljIGdldExvZ01lc3NhZ2VzRnJvbUxvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2VLZXk6IHN0cmluZyk6IExvZ01lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIExvY2FsU3RvcmFnZUFwcGVuZGVyLmxvYWRMb2dNZXNzYWdlcyhsb2NhbFN0b3JhZ2VLZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBhbGwgbG9nIG1lc3NhZ2VzLlxuXHQgKi9cblx0cHVibGljIHJlbW92ZUxvZ01lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMubWVtb3J5QXBwZW5kZXIucmVtb3ZlTG9nTWVzc2FnZXMoKTtcblx0XHR0aGlzLmxvZ01lc3NhZ2VzQ2hhbmdlZC5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbG9nIG1lc3NhZ2VzIHdyaXR0ZW4gYnkgdGhlIExvY2FsU3RvcmFnZUFwcGVuZGVyIHdpdGggdGhlIGdpdmVuIGtleS5cblx0ICpcblx0ICogQHBhcmFtIGxvY2FsU3RvcmFnZUtleSBrZXkgZm9yIHRoZSBsb2NhbCBzdG9yYWdlXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlTG9nTWVzc2FnZXNGcm9tTG9jYWxTdG9yYWdlKGxvY2FsU3RvcmFnZUtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0TG9jYWxTdG9yYWdlQXBwZW5kZXIucmVtb3ZlTG9nTWVzc2FnZXMobG9jYWxTdG9yYWdlS2V5KTtcblx0XHR0aGlzLmxvZ01lc3NhZ2VzQ2hhbmdlZC5lbWl0KCk7XG5cdH1cbn1cbiJdfQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uaWMtbG9nZ2luZy1zZXJ2aWNlL3NyYy9saWIvbG9nZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRXpEOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFxQjFCOztPQUVHO0lBQ0g7UUFFQywwREFBMEQ7UUFDMUQsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXJELHFCQUFxQjtRQUNyQixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMxRSxJ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QUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUNBQWlDLENBQUMsZUFBdUI7UUFDL0Qsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7OEdBbkxXLGNBQWM7a0hBQWQsY0FBYyxjQUZkLE1BQU07OzJGQUVOLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCAqIGFzIGxvZzRqYXZhc2NyaXB0IGZyb20gXCJsb2c0amF2YXNjcmlwdFwiO1xuXG5pbXBvcnQgeyBBamF4QXBwZW5kZXIgfSBmcm9tIFwiLi9hamF4LWFwcGVuZGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VBcHBlbmRlciB9IGZyb20gXCIuL2xvY2FsLXN0b3JhZ2UtYXBwZW5kZXIubW9kZWxcIjtcbmltcG9ydCB7IExvZ0xldmVsQ29udmVydGVyIH0gZnJvbSBcIi4vbG9nLWxldmVsLmNvbnZlcnRlclwiO1xuaW1wb3J0IHsgTG9nTWVzc2FnZSB9IGZyb20gXCIuL2xvZy1tZXNzYWdlLm1vZGVsXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXIubW9kZWxcIjtcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2xvZ2dpbmctc2VydmljZS5jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgeyBNZW1vcnlBcHBlbmRlciB9IGZyb20gXCIuL21lbW9yeS1hcHBlbmRlci5tb2RlbFwiO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSB1c2VkOlxuICogIC0gbG9nZ2VyOiByb290IHdpdGggbGV2ZWwgV0FSTlxuICogIC0gYXBwZW5kZXI6IEJyb3dzZXJDb25zb2xlQXBwZW5kZXIgd2l0aCB0aHJlc2hvbGQgREVCVUcgYW5kIE1lbW9yeUFwcGVuZGVyIHdpdGggdGhyZXNob2xkIEFMTFxuICpcbiAqIFZpYSBbY29uZmlndXJlXSgjY29uZmlndXJlKSwgaXQgaXMgcG9zc2libGUgdG8gYW1lbmQgdGhlc2Ugc2V0dGluZ3MuXG4gKi9cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogXCJyb290XCJcbn0pXG5leHBvcnQgY2xhc3MgTG9nZ2luZ1NlcnZpY2Uge1xuXG5cdC8qKlxuXHQgKiBFdmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgbG9nIG1lc3NhZ2VzIGdvdCAocG90ZW50aWFsbHkpIGNoYW5nZS5cblx0ICogVGhpcyBjYW4gaGFwcGVuIHdoZW46XG5cdCAqIC0gbmV3IG1lc3NhZ2Ugd2FzIGFkZGVkXG5cdCAqIC0gYWxsIG1lc3NhZ2Ugd2hlcmUgcmVtb3ZlZCBmcm9tIG1lbW9yeVxuXHQgKiAtIGFsbCBtYXNzYWdlcyB3aGVyZSByZW1vdmVkIGZvciBvbmUgc3BjaWZpYyBMb2NhbFN0b3JhZ2VBcHBlbmRlclxuXHQgKi9cblx0cHVibGljIGxvZ01lc3NhZ2VzQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+O1xuXG5cdC8qKlxuXHQgKiBFdmVudCB0cmlnZ2VyZWQgd2hlbiBhamF4IGFwcGVuZGVyIGNvdWxkIG5vdCBzZW5kIGxvZyBtZXNzYWdlcyB0byB0aGUgc2VydmVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBlcnJvciBtZXNzYWdlXG5cdCAqL1xuXHRwdWJsaWMgYWpheEFwcGVuZGVyRmFpbGVkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcblxuXHRwcml2YXRlIG1lbW9yeUFwcGVuZGVyOiBNZW1vcnlBcHBlbmRlcjtcblx0cHJpdmF0ZSBicm93c2VyQ29uc29sZUFwcGVuZGVyOiBsb2c0amF2YXNjcmlwdC5Ccm93c2VyQ29uc29sZUFwcGVuZGVyO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cblx0XHQvLyBwcmV2ZW50IGxvZzRqYXZhc2NyaXB0IHRvIHNob3cgYWxlcnRzIG9uIGNhc2Ugb2YgZXJyb3JzXG5cdFx0bG9nNGphdmFzY3JpcHQubG9nTG9nLnNldFF1aWV0TW9kZSh0cnVlKTtcblxuXHRcdC8vIGNyZWF0ZSBldmVudCBlbWl0dGVyXG5cdFx0dGhpcy5sb2dNZXNzYWdlc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdFx0dGhpcy5hamF4QXBwZW5kZXJGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuXHRcdC8vIGNvbmZpZ3VyZSBhcHBlbmRlclxuXHRcdGNvbnN0IGxvZ2dlciA9IGxvZzRqYXZhc2NyaXB0LmdldFJvb3RMb2dnZXIoKTtcblx0XHRsb2dnZXIuc2V0TGV2ZWwobG9nNGphdmFzY3JpcHQuTGV2ZWwuV0FSTik7XG5cblx0XHQvLyBicm93c2VyIGNvbnNvbGUgYXBwZW5kZXIgZm9yIGRlYnVnZ2VyXG5cdFx0dGhpcy5icm93c2VyQ29uc29sZUFwcGVuZGVyID0gbmV3IGxvZzRqYXZhc2NyaXB0LkJyb3dzZXJDb25zb2xlQXBwZW5kZXIoKTtcblx0XHR0aGlzLmJyb3dzZXJDb25zb2xlQXBwZW5kZXIuc2V0TGF5b3V0KG5ldyBsb2c0amF2YXNjcmlwdC5QYXR0ZXJuTGF5b3V0KFwiJWR7SEg6bW06c3MsU1NTfSAlYyAlbVwiKSk7XG5cdFx0dGhpcy5icm93c2VyQ29uc29sZUFwcGVuZGVyLnNldFRocmVzaG9sZChsb2c0amF2YXNjcmlwdC5MZXZlbC5BTEwpO1xuXHRcdGxvZ2dlci5hZGRBcHBlbmRlcih0aGlzLmJyb3dzZXJDb25zb2xlQXBwZW5kZXIpO1xuXG5cdFx0Ly8gaW4tbWVtb3J5IGFwcGVuZGVyIGZvciBkaXNwbGF5IG9uIGxvZyBtZXNzYWdlcyBwYWdlXG5cdFx0dGhpcy5tZW1vcnlBcHBlbmRlciA9IG5ldyBNZW1vcnlBcHBlbmRlcigpO1xuXHRcdHRoaXMubWVtb3J5QXBwZW5kZXIuc2V0TGF5b3V0KG5ldyBsb2c0amF2YXNjcmlwdC5QYXR0ZXJuTGF5b3V0KFwiJWR7SEg6bW06c3MsU1NTfSAlYyAlbVwiKSk7XG5cdFx0dGhpcy5tZW1vcnlBcHBlbmRlci5zZXRPbkxvZ01lc3NhZ2VzQ2hhbmdlZENhbGxiYWNrKChtZXNzYWdlKSA9PiB7XG5cdFx0XHR0aGlzLmxvZ01lc3NhZ2VzQ2hhbmdlZC5lbWl0KCk7XG5cdFx0fSk7XG5cdFx0bG9nZ2VyLmFkZEFwcGVuZGVyKHRoaXMubWVtb3J5QXBwZW5kZXIpO1xuXG5cdFx0dGhpcy5jb25maWd1cmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmVzIHRoZSBsb2dnaW5nIGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiBkYXRhLlxuXHQgKi9cblx0cHVibGljIGNvbmZpZ3VyZShjb25maWd1cmF0aW9uPzogTG9nZ2luZ1NlcnZpY2VDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cblx0XHRpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24gPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdGNvbmZpZ3VyYXRpb24gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBzZXQgbG9nIGxldmVsc1xuXHRcdGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5sb2dMZXZlbHMgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdGZvciAoY29uc3QgbGV2ZWwgb2YgY29uZmlndXJhdGlvbi5sb2dMZXZlbHMpIHtcblx0XHRcdFx0bGV0IGxvZ2dlcjogbG9nNGphdmFzY3JpcHQuTG9nZ2VyO1xuXHRcdFx0XHRpZiAobGV2ZWwubG9nZ2VyTmFtZSA9PT0gXCJyb290XCIpIHtcblx0XHRcdFx0XHRsb2dnZXIgPSBsb2c0amF2YXNjcmlwdC5nZXRSb290TG9nZ2VyKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bG9nZ2VyID0gbG9nNGphdmFzY3JpcHQuZ2V0TG9nZ2VyKGxldmVsLmxvZ2dlck5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9nZ2VyLnNldExldmVsKExvZ0xldmVsQ29udmVydGVyLmxldmVsVG9Mb2c0SmF2YXNjcmlwdChMb2dMZXZlbENvbnZlcnRlci5sZXZlbEZyb21TdHJpbmcobGV2ZWwubG9nTGV2ZWwpKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbG9nIGxldmVsICR7bGV2ZWwubG9nTGV2ZWx9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjb25maWd1cmUgQWpheEFwcGVuZGVyXG5cdFx0aWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmFqYXhBcHBlbmRlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0Y29uc3QgYWpheEFwcGVuZGVyID0gbmV3IEFqYXhBcHBlbmRlcihjb25maWd1cmF0aW9uLmFqYXhBcHBlbmRlcik7XG5cdFx0XHRhamF4QXBwZW5kZXIuYXBwZW5kZXJGYWlsZWQuc3Vic2NyaWJlKChtZXNzYWdlOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpcy5hamF4QXBwZW5kZXJGYWlsZWQuZW1pdChtZXNzYWdlKTtcblx0XHRcdH0pO1xuXHRcdFx0bG9nNGphdmFzY3JpcHQuZ2V0Um9vdExvZ2dlcigpLmFkZEFwcGVuZGVyKGFqYXhBcHBlbmRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gY29uZmlndXJlIExvY2FsU3RvcmFnZUFwcGVuZGVyXG5cdFx0aWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZUFwcGVuZGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRjb25zdCBsb2NhbFN0b3JhZ2VBcHBlbmRlciA9IG5ldyBMb2NhbFN0b3JhZ2VBcHBlbmRlcihjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZUFwcGVuZGVyKTtcblx0XHRcdGxvZzRqYXZhc2NyaXB0LmdldFJvb3RMb2dnZXIoKS5hZGRBcHBlbmRlcihsb2NhbFN0b3JhZ2VBcHBlbmRlcik7XG5cblx0XHRcdC8vIGVuc3VyZSB0aGF0IGFuIGV2ZW50dWFsIG1lbW9yeUFwcGVuZGVyIGlzIGJlaGluZCB0aGUgbG9jYWxTdG9yYWdlQXBwZW5kZXJcblx0XHRcdGNvbnN0IGFwcGVuZGVycyA9IG5ldyBMb2dnZXIoKS5nZXRJbnRlcm5hbExvZ2dlcigpLmdldEVmZmVjdGl2ZUFwcGVuZGVycygpO1xuXHRcdFx0Y29uc3QgbWVtb3J5QXBwZW5kZXIgPSBhcHBlbmRlcnMuZmluZCgoYSkgPT4gYS50b1N0cmluZygpID09PSBcIklvbmljLkxvZ2dpbmcuTWVtb3J5QXBwZW5kZXJcIikgYXMgTWVtb3J5QXBwZW5kZXI7XG5cdFx0XHRpZiAobWVtb3J5QXBwZW5kZXIpIHtcblx0XHRcdFx0bG9nNGphdmFzY3JpcHQuZ2V0Um9vdExvZ2dlcigpLnJlbW92ZUFwcGVuZGVyKG1lbW9yeUFwcGVuZGVyKTtcblx0XHRcdFx0bG9nNGphdmFzY3JpcHQuZ2V0Um9vdExvZ2dlcigpLmFkZEFwcGVuZGVyKG1lbW9yeUFwcGVuZGVyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjb25maWd1cmUgTWVtb3J5QXBwZW5kZXJcblx0XHRpZiAoY29uZmlndXJhdGlvbi5tZW1vcnlBcHBlbmRlcikge1xuXHRcdFx0dGhpcy5tZW1vcnlBcHBlbmRlci5jb25maWd1cmUoY29uZmlndXJhdGlvbi5tZW1vcnlBcHBlbmRlcik7XG5cdFx0fVxuXG5cdFx0Ly8gY29uZmlndXJlIEJyb3dzZXJDb25zb2xlQXBwZW5kZXJcblx0XHRpZiAoY29uZmlndXJhdGlvbi5icm93c2VyQ29uc29sZUFwcGVuZGVyKSB7XG5cdFx0XHRpZiAoY29uZmlndXJhdGlvbi5icm93c2VyQ29uc29sZUFwcGVuZGVyLnRocmVzaG9sZCkge1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZWRUaHJlc2hvbGQgPSBMb2dMZXZlbENvbnZlcnRlci5sZXZlbFRvTG9nNEphdmFzY3JpcHQoXG5cdFx0XHRcdFx0TG9nTGV2ZWxDb252ZXJ0ZXIubGV2ZWxGcm9tU3RyaW5nKGNvbmZpZ3VyYXRpb24uYnJvd3NlckNvbnNvbGVBcHBlbmRlci50aHJlc2hvbGQpKTtcblx0XHRcdFx0dGhpcy5icm93c2VyQ29uc29sZUFwcGVuZGVyLnNldFRocmVzaG9sZChjb252ZXJ0ZWRUaHJlc2hvbGQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJvb3QgbG9nZ2VyIGZyb20gd2hpY2ggYWxsIG90aGVyIGxvZ2dlcnMgZGVyaXZlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHJvb3QgbG9nZ2VyXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Um9vdExvZ2dlcigpOiBMb2dnZXIge1xuXHRcdHJldHVybiBuZXcgTG9nZ2VyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhIGxvZ2dlciB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwgY3JlYXRpbmcgaXQgaWYgYSBsb2dnZXIgd2l0aCB0aGF0IG5hbWUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC5cblx0ICpcblx0ICogQHBhcmFtIGxvZ2dlck5hbWUgbmFtZSBvZiB0aGUgbG9nZ2VyXG5cdCAqIEByZXR1cm4gbG9nZ2VyXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TG9nZ2VyKGxvZ2dlck5hbWU6IHN0cmluZyk6IExvZ2dlciB7XG5cdFx0cmV0dXJuIG5ldyBMb2dnZXIobG9nZ2VyTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFzdCBsb2cgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIFRoZSBsb2cgbWVzc2FnZXMgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBpbnRlcm5hbCBbTWVtb3J5QXBwZW5kZXJdKC4uL21lbW9yeWFwcGVuZGVyLmh0bWwpLlxuXHQgKiBUaGF0IG1lYW5zIHlvdSB3aWxsIGdldCBvbmx5IHRoZSBtb3N0IGN1cnJlbnQgbWVzc2FnZXMuIFRoZSBudW1iZXIgb2YgdGhlIG1lc3NhZ2VzIGlzIGxpbWl0ZWRcblx0ICogYnkgaXRzIG1heE1lc3NhZ2VzIHZhbHVlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIGxvZyBtZXNzYWdlc1xuXHQgKi9cblx0cHVibGljIGdldExvZ01lc3NhZ2VzKCk6IExvZ01lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIHRoaXMubWVtb3J5QXBwZW5kZXIuZ2V0TG9nTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyB0aGUgbG9nIG1lc3NhZ2VzIHdyaXR0ZW4gYnkgdGhlIExvY2FsU3RvcmFnZUFwcGVuZGVyIHdpdGggdGhlIGdpdmVuIGtleS5cblx0ICpcblx0ICogQHBhcmFtIGxvY2FsU3RvcmFnZUtleSBrZXkgZm9yIHRoZSBsb2NhbCBzdG9yYWdlXG5cdCAqIEByZXR1cm5zIGxvZyBtZXNzYWdlc1xuXHQgKi9cblx0cHVibGljIGdldExvZ01lc3NhZ2VzRnJvbUxvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2VLZXk6IHN0cmluZyk6IExvZ01lc3NhZ2VbXSB7XG5cdFx0cmV0dXJuIExvY2FsU3RvcmFnZUFwcGVuZGVyLmxvYWRMb2dNZXNzYWdlcyhsb2NhbFN0b3JhZ2VLZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBhbGwgbG9nIG1lc3NhZ2VzLlxuXHQgKi9cblx0cHVibGljIHJlbW92ZUxvZ01lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMubWVtb3J5QXBwZW5kZXIucmVtb3ZlTG9nTWVzc2FnZXMoKTtcblx0XHR0aGlzLmxvZ01lc3NhZ2VzQ2hhbmdlZC5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbG9nIG1lc3NhZ2VzIHdyaXR0ZW4gYnkgdGhlIExvY2FsU3RvcmFnZUFwcGVuZGVyIHdpdGggdGhlIGdpdmVuIGtleS5cblx0ICpcblx0ICogQHBhcmFtIGxvY2FsU3RvcmFnZUtleSBrZXkgZm9yIHRoZSBsb2NhbCBzdG9yYWdlXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlTG9nTWVzc2FnZXNGcm9tTG9jYWxTdG9yYWdlKGxvY2FsU3RvcmFnZUtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0TG9jYWxTdG9yYWdlQXBwZW5kZXIucmVtb3ZlTG9nTWVzc2FnZXMobG9jYWxTdG9yYWdlS2V5KTtcblx0XHR0aGlzLmxvZ01lc3NhZ2VzQ2hhbmdlZC5lbWl0KCk7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,133 @@
1
+ import * as log4javascript from "log4javascript";
2
+ import { LogLevelConverter } from "./log-level.converter";
3
+ import { LogLevel } from "./log-level.model";
4
+ /**
5
+ * An appender which stores the log messages in the browser's memory.
6
+ *
7
+ * The MemoryAppender is enabled by default.
8
+ * If you do not specify anything else, it is using this configuration:
9
+ *
10
+ * ```JSON
11
+ * {
12
+ * "memoryAppender": [
13
+ * {
14
+ * "maxMessages": 250,
15
+ * "threshold": "ALL"
16
+ * }
17
+ * }
18
+ * ```
19
+ */
20
+ export class MemoryAppender extends log4javascript.Appender {
21
+ static { this.maxMessagesDefault = 250; }
22
+ static { this.thresholdDefault = "ALL"; }
23
+ /**
24
+ * Creates a new instance of the appender.
25
+ *
26
+ * @param configuration configuration for the appender.
27
+ */
28
+ constructor(configuration) {
29
+ super();
30
+ this.logMessages = [];
31
+ // process configuration
32
+ configuration = configuration || {};
33
+ this.configure({
34
+ maxMessages: configuration.maxMessages || MemoryAppender.maxMessagesDefault,
35
+ threshold: configuration.threshold || MemoryAppender.thresholdDefault,
36
+ });
37
+ this.maxMessages = MemoryAppender.maxMessagesDefault;
38
+ }
39
+ /**
40
+ * Configures the logging depending on the given configuration.
41
+ * Only the defined properties get overwritten.
42
+ *
43
+ * @param configuration configuration data.
44
+ */
45
+ configure(configuration) {
46
+ if (configuration) {
47
+ if (configuration.maxMessages) {
48
+ this.setMaxMessages(configuration.maxMessages);
49
+ }
50
+ if (configuration.threshold) {
51
+ const convertedThreshold = LogLevelConverter.levelToLog4Javascript(LogLevelConverter.levelFromString(configuration.threshold));
52
+ this.setThreshold(convertedThreshold);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Appender-specific method to append a log message.
58
+ *
59
+ * @param loggingEvent event to be appended.
60
+ */
61
+ append(loggingEvent) {
62
+ // if logMessages is already full, remove oldest element
63
+ while (this.logMessages.length >= this.maxMessages) {
64
+ this.logMessages.shift();
65
+ }
66
+ // add event to logMessages
67
+ const message = {
68
+ level: LogLevel[LogLevelConverter.levelFromLog4Javascript(loggingEvent.level)],
69
+ logger: typeof loggingEvent.logger === "object" ? loggingEvent.logger.name : undefined,
70
+ message: loggingEvent.messages.slice(1),
71
+ methodName: loggingEvent.messages[0],
72
+ timeStamp: loggingEvent.timeStamp,
73
+ };
74
+ this.logMessages.push(message);
75
+ // inform about new message
76
+ if (typeof this.onLogMessagesChangedCallback === "function") {
77
+ this.onLogMessagesChangedCallback(message);
78
+ }
79
+ }
80
+ /**
81
+ * Gets the appender's name.
82
+ * Mainly for unit testing purposes.
83
+ *
84
+ * @return appender's name
85
+ */
86
+ toString() {
87
+ return "Ionic.Logging.MemoryAppender";
88
+ }
89
+ /**
90
+ * Get the maximum number of messages which will be stored in memory.
91
+ */
92
+ getMaxMessages() {
93
+ return this.maxMessages;
94
+ }
95
+ /**
96
+ * Set the maximum number of messages which will be stored in memory.
97
+ *
98
+ * If the appender stores currently more messages than the new value allows, the oldest messages get removed.
99
+ *
100
+ * @param value new maximum number
101
+ */
102
+ setMaxMessages(value) {
103
+ this.maxMessages = value;
104
+ // if there are too much logMessages for the new value, remove oldest messages
105
+ if (this.logMessages.length > this.maxMessages) {
106
+ this.logMessages.splice(0, this.logMessages.length - this.maxMessages);
107
+ }
108
+ }
109
+ /**
110
+ * Gets all messages stored in memory.
111
+ *
112
+ * @return stored messages
113
+ */
114
+ getLogMessages() {
115
+ return this.logMessages;
116
+ }
117
+ /**
118
+ * Remove all messages stored in memory.
119
+ */
120
+ removeLogMessages() {
121
+ this.logMessages.splice(0);
122
+ }
123
+ /**
124
+ * Registers a callback which will be called every time a new message is appended.
125
+ * This could be useful if you want to show new messages in realtime.
126
+ *
127
+ * @param callback callback to be called
128
+ */
129
+ setOnLogMessagesChangedCallback(callback) {
130
+ this.onLogMessagesChangedCallback = callback;
131
+ }
132
+ }
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWFwcGVuZGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uaWMtbG9nZ2luZy1zZXJ2aWNlL3NyYy9saWIvbWVtb3J5LWFwcGVuZGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSTdDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsY0FBYyxDQUFDLFFBQVE7YUFFM0MsdUJBQWtCLEdBQUcsR0FBRyxDQUFDO2FBQ3pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQU94Qzs7OztPQUlHO0lBQ0gsWUFBWSxhQUEyQztRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXRCLHdCQUF3QjtRQUN4QixhQUFhLEdBQUcsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2QsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDLGtCQUFrQjtZQUMzRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUMsZ0JBQWdCO1NBQ3JFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDLGtCQUFrQixDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxhQUEwQztRQUMxRCxJQUFJLGFBQWEsRUFBRTtZQUNsQixJQUFJLGFBQWEsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFO2dCQUM1QixNQUFNLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDLHFCQUFxQixDQUNqRSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUN0QztTQUNEO0lBQ0YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsWUFBeUM7UUFDdEQsd0RBQXdEO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsMkJBQTJCO1FBQzNCLE1BQU0sT0FBTyxHQUFlO1lBQzNCLEtBQUssRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlFLE1BQU0sRUFBRSxPQUFPLFlBQVksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztZQUN0RixPQUFPLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLFVBQVUsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNwQyxTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVM7U0FDakMsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLDJCQUEyQjtRQUMzQixJQUFJLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixLQUFLLFVBQVUsRUFBRTtZQUM1RCxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0M7SUFDRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxRQUFRO1FBQ2QsT0FBTyw4QkFBOEIsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYyxDQUFDLEtBQWE7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFekIsOEVBQThFO1FBQzlFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksK0JBQStCLENBQUMsUUFBdUM7UUFDN0UsSUFBSSxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQztJQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbG9nNGphdmFzY3JpcHQgZnJvbSBcImxvZzRqYXZhc2NyaXB0XCI7XG5cbmltcG9ydCB7IExvZ0xldmVsQ29udmVydGVyIH0gZnJvbSBcIi4vbG9nLWxldmVsLmNvbnZlcnRlclwiO1xuaW1wb3J0IHsgTG9nTGV2ZWwgfSBmcm9tIFwiLi9sb2ctbGV2ZWwubW9kZWxcIjtcbmltcG9ydCB7IExvZ01lc3NhZ2UgfSBmcm9tIFwiLi9sb2ctbWVzc2FnZS5tb2RlbFwiO1xuaW1wb3J0IHsgTWVtb3J5QXBwZW5kZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vbWVtb3J5LWFwcGVuZGVyLmNvbmZpZ3VyYXRpb25cIjtcblxuLyoqXG4gKiBBbiBhcHBlbmRlciB3aGljaCBzdG9yZXMgdGhlIGxvZyBtZXNzYWdlcyBpbiB0aGUgYnJvd3NlcidzIG1lbW9yeS5cbiAqXG4gKiBUaGUgTWVtb3J5QXBwZW5kZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuICogSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueXRoaW5nIGVsc2UsIGl0IGlzIHVzaW5nIHRoaXMgY29uZmlndXJhdGlvbjpcbiAqXG4gKiBgYGBKU09OXG4gKiB7XG4gKiAgIFwibWVtb3J5QXBwZW5kZXJcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwibWF4TWVzc2FnZXNcIjogMjUwLFxuICogICAgICAgXCJ0aHJlc2hvbGRcIjogXCJBTExcIlxuICogICAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5QXBwZW5kZXIgZXh0ZW5kcyBsb2c0amF2YXNjcmlwdC5BcHBlbmRlciB7XG5cblx0cHJpdmF0ZSBzdGF0aWMgbWF4TWVzc2FnZXNEZWZhdWx0ID0gMjUwO1xuXHRwcml2YXRlIHN0YXRpYyB0aHJlc2hvbGREZWZhdWx0ID0gXCJBTExcIjtcblxuXHRwcml2YXRlIG1heE1lc3NhZ2VzOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBsb2dNZXNzYWdlczogTG9nTWVzc2FnZVtdO1xuXHRwcml2YXRlIG9uTG9nTWVzc2FnZXNDaGFuZ2VkQ2FsbGJhY2s6IChtZXNzYWdlOiBMb2dNZXNzYWdlKSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBhcHBlbmRlci5cblx0ICpcblx0ICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGFwcGVuZGVyLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IE1lbW9yeUFwcGVuZGVyQ29uZmlndXJhdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmxvZ01lc3NhZ2VzID0gW107XG5cblx0XHQvLyBwcm9jZXNzIGNvbmZpZ3VyYXRpb25cblx0XHRjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCB7fTtcblx0XHR0aGlzLmNvbmZpZ3VyZSh7XG5cdFx0XHRtYXhNZXNzYWdlczogY29uZmlndXJhdGlvbi5tYXhNZXNzYWdlcyB8fCBNZW1vcnlBcHBlbmRlci5tYXhNZXNzYWdlc0RlZmF1bHQsXG5cdFx0XHR0aHJlc2hvbGQ6IGNvbmZpZ3VyYXRpb24udGhyZXNob2xkIHx8IE1lbW9yeUFwcGVuZGVyLnRocmVzaG9sZERlZmF1bHQsXG5cdFx0fSk7XG5cblx0XHR0aGlzLm1heE1lc3NhZ2VzID0gTWVtb3J5QXBwZW5kZXIubWF4TWVzc2FnZXNEZWZhdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZXMgdGhlIGxvZ2dpbmcgZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLlxuXHQgKiBPbmx5IHRoZSBkZWZpbmVkIHByb3BlcnRpZXMgZ2V0IG92ZXJ3cml0dGVuLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uIGRhdGEuXG5cdCAqL1xuXHRwdWJsaWMgY29uZmlndXJlKGNvbmZpZ3VyYXRpb246IE1lbW9yeUFwcGVuZGVyQ29uZmlndXJhdGlvbik6IHZvaWQge1xuXHRcdGlmIChjb25maWd1cmF0aW9uKSB7XG5cdFx0XHRpZiAoY29uZmlndXJhdGlvbi5tYXhNZXNzYWdlcykge1xuXHRcdFx0XHR0aGlzLnNldE1heE1lc3NhZ2VzKGNvbmZpZ3VyYXRpb24ubWF4TWVzc2FnZXMpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNvbmZpZ3VyYXRpb24udGhyZXNob2xkKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnZlcnRlZFRocmVzaG9sZCA9IExvZ0xldmVsQ29udmVydGVyLmxldmVsVG9Mb2c0SmF2YXNjcmlwdChcblx0XHRcdFx0XHRMb2dMZXZlbENvbnZlcnRlci5sZXZlbEZyb21TdHJpbmcoY29uZmlndXJhdGlvbi50aHJlc2hvbGQpKTtcblx0XHRcdFx0dGhpcy5zZXRUaHJlc2hvbGQoY29udmVydGVkVGhyZXNob2xkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kZXItc3BlY2lmaWMgbWV0aG9kIHRvIGFwcGVuZCBhIGxvZyBtZXNzYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0gbG9nZ2luZ0V2ZW50IGV2ZW50IHRvIGJlIGFwcGVuZGVkLlxuXHQgKi9cblx0cHVibGljIGFwcGVuZChsb2dnaW5nRXZlbnQ6IGxvZzRqYXZhc2NyaXB0LkxvZ2dpbmdFdmVudCk6IHZvaWQge1xuXHRcdC8vIGlmIGxvZ01lc3NhZ2VzIGlzIGFscmVhZHkgZnVsbCwgcmVtb3ZlIG9sZGVzdCBlbGVtZW50XG5cdFx0d2hpbGUgKHRoaXMubG9nTWVzc2FnZXMubGVuZ3RoID49IHRoaXMubWF4TWVzc2FnZXMpIHtcblx0XHRcdHRoaXMubG9nTWVzc2FnZXMuc2hpZnQoKTtcblx0XHR9XG5cdFx0Ly8gYWRkIGV2ZW50IHRvIGxvZ01lc3NhZ2VzXG5cdFx0Y29uc3QgbWVzc2FnZTogTG9nTWVzc2FnZSA9IHtcblx0XHRcdGxldmVsOiBMb2dMZXZlbFtMb2dMZXZlbENvbnZlcnRlci5sZXZlbEZyb21Mb2c0SmF2YXNjcmlwdChsb2dnaW5nRXZlbnQubGV2ZWwpXSxcblx0XHRcdGxvZ2dlcjogdHlwZW9mIGxvZ2dpbmdFdmVudC5sb2dnZXIgPT09IFwib2JqZWN0XCIgPyBsb2dnaW5nRXZlbnQubG9nZ2VyLm5hbWUgOiB1bmRlZmluZWQsXG5cdFx0XHRtZXNzYWdlOiBsb2dnaW5nRXZlbnQubWVzc2FnZXMuc2xpY2UoMSksXG5cdFx0XHRtZXRob2ROYW1lOiBsb2dnaW5nRXZlbnQubWVzc2FnZXNbMF0sXG5cdFx0XHR0aW1lU3RhbXA6IGxvZ2dpbmdFdmVudC50aW1lU3RhbXAsXG5cdFx0fTtcblx0XHR0aGlzLmxvZ01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cblx0XHQvLyBpbmZvcm0gYWJvdXQgbmV3IG1lc3NhZ2Vcblx0XHRpZiAodHlwZW9mIHRoaXMub25Mb2dNZXNzYWdlc0NoYW5nZWRDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aGlzLm9uTG9nTWVzc2FnZXNDaGFuZ2VkQ2FsbGJhY2sobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcGVuZGVyJ3MgbmFtZS5cblx0ICogTWFpbmx5IGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMuXG5cdCAqXG5cdCAqIEByZXR1cm4gYXBwZW5kZXIncyBuYW1lXG5cdCAqL1xuXHRwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJJb25pYy5Mb2dnaW5nLk1lbW9yeUFwcGVuZGVyXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyB3aGljaCB3aWxsIGJlIHN0b3JlZCBpbiBtZW1vcnkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TWF4TWVzc2FnZXMoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhNZXNzYWdlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHdoaWNoIHdpbGwgYmUgc3RvcmVkIGluIG1lbW9yeS5cblx0ICpcblx0ICogSWYgdGhlIGFwcGVuZGVyIHN0b3JlcyBjdXJyZW50bHkgbW9yZSBtZXNzYWdlcyB0aGFuIHRoZSBuZXcgdmFsdWUgYWxsb3dzLCB0aGUgb2xkZXN0IG1lc3NhZ2VzIGdldCByZW1vdmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgbmV3IG1heGltdW0gbnVtYmVyXG5cdCAqL1xuXHRwdWJsaWMgc2V0TWF4TWVzc2FnZXModmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubWF4TWVzc2FnZXMgPSB2YWx1ZTtcblxuXHRcdC8vIGlmIHRoZXJlIGFyZSB0b28gbXVjaCBsb2dNZXNzYWdlcyBmb3IgdGhlIG5ldyB2YWx1ZSwgcmVtb3ZlIG9sZGVzdCBtZXNzYWdlc1xuXHRcdGlmICh0aGlzLmxvZ01lc3NhZ2VzLmxlbmd0aCA+IHRoaXMubWF4TWVzc2FnZXMpIHtcblx0XHRcdHRoaXMubG9nTWVzc2FnZXMuc3BsaWNlKDAsIHRoaXMubG9nTWVzc2FnZXMubGVuZ3RoIC0gdGhpcy5tYXhNZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYWxsIG1lc3NhZ2VzIHN0b3JlZCBpbiBtZW1vcnkuXG5cdCAqXG5cdCAqIEByZXR1cm4gc3RvcmVkIG1lc3NhZ2VzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TG9nTWVzc2FnZXMoKTogTG9nTWVzc2FnZVtdIHtcblx0XHRyZXR1cm4gdGhpcy5sb2dNZXNzYWdlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYWxsIG1lc3NhZ2VzIHN0b3JlZCBpbiBtZW1vcnkuXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlTG9nTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5sb2dNZXNzYWdlcy5zcGxpY2UoMCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSBhIG5ldyBtZXNzYWdlIGlzIGFwcGVuZGVkLlxuXHQgKiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzaG93IG5ldyBtZXNzYWdlcyBpbiByZWFsdGltZS5cblx0ICpcblx0ICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNrIHRvIGJlIGNhbGxlZFxuXHQgKi9cblx0cHVibGljIHNldE9uTG9nTWVzc2FnZXNDaGFuZ2VkQ2FsbGJhY2soY2FsbGJhY2s6IChtZXNzYWdlOiBMb2dNZXNzYWdlKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5vbkxvZ01lc3NhZ2VzQ2hhbmdlZENhbGxiYWNrID0gY2FsbGJhY2s7XG5cdH1cbn1cbiJdfQ==