@microsoft/applicationinsights-debugplugin-js 3.0.0-beta.2303-11 → 3.0.0-nightly3.2304-28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/{ai.dbg.3.0.0-beta.2303-11.cjs.js → es5/ai.dbg.3.0.0-nightly3.2304-28.cjs.js} +794 -773
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.cjs.js.map +1 -0
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.cjs.min.js +6 -0
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.cjs.min.js.map +1 -0
- package/browser/{ai.dbg.3.0.0-beta.2303-11.gbl.js → es5/ai.dbg.3.0.0-nightly3.2304-28.gbl.js} +795 -774
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.gbl.js.map +1 -0
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.gbl.min.js +6 -0
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.gbl.min.js.map +1 -0
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.integrity.json +66 -0
- package/browser/{ai.dbg.3.0.0-beta.2303-11.js → es5/ai.dbg.3.0.0-nightly3.2304-28.js} +795 -774
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.js.map +1 -0
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.min.js +6 -0
- package/browser/es5/ai.dbg.3.0.0-nightly3.2304-28.min.js.map +1 -0
- package/browser/{ai.dbg.3.cjs.js → es5/ai.dbg.3.cjs.js} +793 -772
- package/browser/es5/ai.dbg.3.cjs.js.map +1 -0
- package/browser/es5/ai.dbg.3.cjs.min.js +6 -0
- package/browser/es5/ai.dbg.3.cjs.min.js.map +1 -0
- package/browser/{ai.dbg.3.gbl.js → es5/ai.dbg.3.gbl.js} +794 -773
- package/browser/es5/ai.dbg.3.gbl.js.map +1 -0
- package/browser/es5/ai.dbg.3.gbl.min.js +6 -0
- package/browser/es5/ai.dbg.3.gbl.min.js.map +1 -0
- package/browser/{ai.dbg.3.js → es5/ai.dbg.3.js} +794 -773
- package/browser/es5/ai.dbg.3.js.map +1 -0
- package/browser/es5/ai.dbg.3.min.js +6 -0
- package/browser/es5/ai.dbg.3.min.js.map +1 -0
- package/dist/{applicationinsights-debugplugin-js.js → es5/applicationinsights-debugplugin-js.js} +794 -773
- package/dist/es5/applicationinsights-debugplugin-js.js.map +1 -0
- package/dist/es5/applicationinsights-debugplugin-js.min.js +6 -0
- package/dist/es5/applicationinsights-debugplugin-js.min.js.map +1 -0
- package/{dist-esm → dist-es5}/DebugPlugin.js +1 -1
- package/{dist-esm → dist-es5}/__DynamicConstants.js +1 -1
- package/dist-es5/applicationinsights-debugplugin-js.js +9 -0
- package/{dist-esm → dist-es5}/components/Dashboard.js +1 -1
- package/{dist-esm → dist-es5}/components/LogEntry.js +1 -1
- package/{dist-esm → dist-es5}/components/debugBins.js +1 -1
- package/{dist-esm → dist-es5}/components/filterList.js +1 -1
- package/{dist-esm → dist-es5}/components/helpers.js +1 -1
- package/{dist-esm → dist-es5}/components/styleNodeSrc.js +1 -1
- package/dist-es5/interfaces/IDebugPluginConfig.js +8 -0
- package/package.json +18 -17
- package/tsconfig.json +4 -3
- package/types/applicationinsights-debugplugin-js.d.ts +59 -2
- package/{dist/applicationinsights-debugplugin-js.d.ts → types/applicationinsights-debugplugin-js.namespaced.d.ts} +1 -1
- package/browser/ai.dbg.3.0.0-beta.2303-11.cjs.js.map +0 -1
- package/browser/ai.dbg.3.0.0-beta.2303-11.cjs.min.js +0 -6
- package/browser/ai.dbg.3.0.0-beta.2303-11.cjs.min.js.map +0 -1
- package/browser/ai.dbg.3.0.0-beta.2303-11.gbl.js.map +0 -1
- package/browser/ai.dbg.3.0.0-beta.2303-11.gbl.min.js +0 -6
- package/browser/ai.dbg.3.0.0-beta.2303-11.gbl.min.js.map +0 -1
- package/browser/ai.dbg.3.0.0-beta.2303-11.integrity.json +0 -66
- package/browser/ai.dbg.3.0.0-beta.2303-11.js.map +0 -1
- package/browser/ai.dbg.3.0.0-beta.2303-11.min.js +0 -6
- package/browser/ai.dbg.3.0.0-beta.2303-11.min.js.map +0 -1
- package/browser/ai.dbg.3.cjs.js.map +0 -1
- package/browser/ai.dbg.3.cjs.min.js +0 -6
- package/browser/ai.dbg.3.cjs.min.js.map +0 -1
- package/browser/ai.dbg.3.gbl.js.map +0 -1
- package/browser/ai.dbg.3.gbl.min.js +0 -6
- package/browser/ai.dbg.3.gbl.min.js.map +0 -1
- package/browser/ai.dbg.3.js.map +0 -1
- package/browser/ai.dbg.3.min.js +0 -6
- package/browser/ai.dbg.3.min.js.map +0 -1
- package/dist/applicationinsights-debugplugin-js.api.json +0 -464
- package/dist/applicationinsights-debugplugin-js.api.md +0 -32
- package/dist/applicationinsights-debugplugin-js.js.map +0 -1
- package/dist/applicationinsights-debugplugin-js.min.js +0 -6
- package/dist/applicationinsights-debugplugin-js.min.js.map +0 -1
- package/dist/applicationinsights-debugplugin-js.rollup.d.ts +0 -60
- package/dist-esm/applicationinsights-debugplugin-js.js +0 -9
- package/dist-esm/interfaces/IDebugPluginConfig.js +0 -8
- package/src/DebugPlugin.ts +0 -397
- package/src/__DynamicConstants.ts +0 -51
- package/src/applicationinsights-debugplugin-js.ts +0 -6
- package/src/components/Dashboard.ts +0 -288
- package/src/components/LogEntry.ts +0 -102
- package/src/components/debugBins.ts +0 -127
- package/src/components/filterList.ts +0 -128
- package/src/components/helpers.ts +0 -474
- package/src/components/styleNodeSrc.ts +0 -435
- package/src/interfaces/IDebugPluginConfig.ts +0 -39
- package/src/localization/EN-US.json +0 -0
- package/types/DebugPlugin.d.ts +0 -9
- package/types/__DynamicConstants.d.ts +0 -39
- package/types/components/Dashboard.d.ts +0 -19
- package/types/components/LogEntry.d.ts +0 -9
- package/types/components/debugBins.d.ts +0 -24
- package/types/components/filterList.d.ts +0 -7
- package/types/components/helpers.d.ts +0 -9
- package/types/components/styleNodeSrc.d.ts +0 -2
- package/types/interfaces/IDebugPluginConfig.d.ts +0 -28
- package/types/tsdoc-metadata.json +0 -11
- /package/{dist-esm → dist-es5}/DebugPlugin.js.map +0 -0
- /package/{dist-esm → dist-es5}/__DynamicConstants.js.map +0 -0
- /package/{dist-esm → dist-es5}/applicationinsights-debugplugin-js.js.map +0 -0
- /package/{dist-esm → dist-es5}/components/Dashboard.js.map +0 -0
- /package/{dist-esm → dist-es5}/components/LogEntry.js.map +0 -0
- /package/{dist-esm → dist-es5}/components/debugBins.js.map +0 -0
- /package/{dist-esm → dist-es5}/components/filterList.js.map +0 -0
- /package/{dist-esm → dist-es5}/components/helpers.js.map +0 -0
- /package/{dist-esm → dist-es5}/components/styleNodeSrc.js.map +0 -0
- /package/{dist-esm → dist-es5}/interfaces/IDebugPluginConfig.js.map +0 -0
|
@@ -1,288 +0,0 @@
|
|
|
1
|
-
import dynamicProto from "@microsoft/dynamicproto-js";
|
|
2
|
-
import { arrForEach, arrIndexOf } from "@microsoft/applicationinsights-core-js";
|
|
3
|
-
import { ITimerHandler, scheduleTimeout } from "@nevware21/ts-utils";
|
|
4
|
-
import { LogEntry } from "./LogEntry";
|
|
5
|
-
import { FilterList } from "./filterList";
|
|
6
|
-
import { copySelectedTree } from "./helpers";
|
|
7
|
-
import { tempStyle } from "./styleNodeSrc";
|
|
8
|
-
|
|
9
|
-
export interface IDashboardConfig {
|
|
10
|
-
prefix: string;
|
|
11
|
-
trackers: string[];
|
|
12
|
-
excludeKeys: string[],
|
|
13
|
-
maxMessages: number,
|
|
14
|
-
includeFunctions: boolean
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export class Dashboard {
|
|
18
|
-
constructor(config: IDashboardConfig) {
|
|
19
|
-
let msgTracker: LogEntry[] = [];
|
|
20
|
-
|
|
21
|
-
let textFilter: string ="";
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* the root element of the logger
|
|
25
|
-
*/
|
|
26
|
-
let rootElement: HTMLDivElement;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* the style that is only on the webpage when the log is active
|
|
30
|
-
*/
|
|
31
|
-
let tempStyleEl: HTMLStyleElement;
|
|
32
|
-
|
|
33
|
-
let filterList: FilterList;
|
|
34
|
-
|
|
35
|
-
let loggerEl: HTMLElement;
|
|
36
|
-
|
|
37
|
-
dynamicProto(Dashboard, this, (_self) => {
|
|
38
|
-
let prefix = config.prefix;
|
|
39
|
-
let trackers = config.trackers;
|
|
40
|
-
const rootEl = rootElement = document.createElement("div");
|
|
41
|
-
rootEl.className = `${prefix}-dbg-lgr-dashboard`;
|
|
42
|
-
|
|
43
|
-
tempStyleEl = document.createElement("style");
|
|
44
|
-
tempStyleEl.innerHTML = tempStyle(prefix);
|
|
45
|
-
|
|
46
|
-
// TODO: research more accessibility (aria)
|
|
47
|
-
rootEl.style.position = "fixed";
|
|
48
|
-
rootEl.style.width = "100vw";
|
|
49
|
-
rootEl.style.height = "100vh";
|
|
50
|
-
rootEl.style.backgroundColor = "#ffffff";
|
|
51
|
-
rootEl.style.opacity = "1";
|
|
52
|
-
rootEl.style.pointerEvents = "auto";
|
|
53
|
-
rootEl.style.top = "-100%";
|
|
54
|
-
rootEl.style.transition = ".2s top cubic-bezier(0.87, 0, 0.13, 1)";
|
|
55
|
-
|
|
56
|
-
const logHeading = document.createElement("h1");
|
|
57
|
-
logHeading.textContent = "dashboard";
|
|
58
|
-
logHeading.style.fontFamily = "monospace";
|
|
59
|
-
logHeading.style.textAlign = "center";
|
|
60
|
-
rootEl.appendChild(logHeading);
|
|
61
|
-
|
|
62
|
-
_createLogger(rootEl, prefix, trackers);
|
|
63
|
-
|
|
64
|
-
_self.getElm = () => {
|
|
65
|
-
return rootEl;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
_self.isDisplayed = () => {
|
|
69
|
-
return !!(rootEl.parentElement || rootEl.parentNode);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
_self.getTextFilter = () => {
|
|
73
|
-
return textFilter;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
_self.setTextFilter = (value: string) => {
|
|
77
|
-
if (value !== textFilter) {
|
|
78
|
-
textFilter = value;
|
|
79
|
-
_self.render();
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
_self.getTrackers = () => {
|
|
84
|
-
return trackers;
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
_self.newLogEntry = (target: Object, tm: number, key?: string, level?: number, kind?: string, keep?: boolean) => {
|
|
88
|
-
const _self = this;
|
|
89
|
-
msgTracker.push(new LogEntry(target, tm, key, level, kind, keep));
|
|
90
|
-
if (msgTracker.length > config.maxMessages) {
|
|
91
|
-
let lp = 0;
|
|
92
|
-
while (lp < msgTracker.length) {
|
|
93
|
-
let entry = msgTracker[lp];
|
|
94
|
-
if (!entry.isKeep()) {
|
|
95
|
-
let el = entry.getEl();
|
|
96
|
-
if (el && el.parentElement) {
|
|
97
|
-
el.parentElement.removeChild(el);
|
|
98
|
-
}
|
|
99
|
-
msgTracker.splice(lp, 1);
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
lp++;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
_self.render();
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
_self.show = () => {
|
|
110
|
-
if (!this.isDisplayed()) {
|
|
111
|
-
document.body.appendChild(rootEl);
|
|
112
|
-
document.head.appendChild(tempStyleEl);
|
|
113
|
-
rootEl.style.top = "0%";
|
|
114
|
-
rootEl.style.pointerEvents = "auto";
|
|
115
|
-
_self.render();
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
_self.hide = () => {
|
|
120
|
-
if (_self.isDisplayed()) {
|
|
121
|
-
rootEl.style.top = "-100%";
|
|
122
|
-
rootEl.style.pointerEvents = "none";
|
|
123
|
-
document.head.removeChild(tempStyleEl);
|
|
124
|
-
document.body.removeChild(rootEl);
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
_self.render = () => {
|
|
129
|
-
if (_self.isDisplayed()) {
|
|
130
|
-
const excludedTypes = filterList.getCurrentFilter();
|
|
131
|
-
arrForEach(msgTracker, (entry) => {
|
|
132
|
-
let el = entry.getEl();
|
|
133
|
-
if (el && el.parentElement) {
|
|
134
|
-
el.parentElement.removeChild(el);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (!entry.isMatch(textFilter, config.excludeKeys, config.includeFunctions)) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
let type = entry.getKind();
|
|
142
|
-
let allowOther = arrIndexOf(excludedTypes, "other") === -1; // Other types are not excluded
|
|
143
|
-
if (arrIndexOf(trackers, type) === -1 && !allowOther) {
|
|
144
|
-
// Not a tracked type and we are not allowing other types
|
|
145
|
-
return;
|
|
146
|
-
} else if (arrIndexOf(excludedTypes, type) !== -1) {
|
|
147
|
-
// This type is explicitly excluded
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
let newEl = entry.render(textFilter, config.excludeKeys, config.includeFunctions);
|
|
152
|
-
if (newEl) {
|
|
153
|
-
loggerEl.appendChild(newEl);
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
function clearEvents() {
|
|
160
|
-
let newEvents: LogEntry[] = [];
|
|
161
|
-
arrForEach(msgTracker, (entry) => {
|
|
162
|
-
if (entry.isKeep()) {
|
|
163
|
-
newEvents.push(entry);
|
|
164
|
-
} else {
|
|
165
|
-
let el = entry.getEl();
|
|
166
|
-
if (el && el.parentElement) {
|
|
167
|
-
el.parentElement.removeChild(el);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
msgTracker = newEvents;
|
|
173
|
-
_self.render();
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function closeDashboard() {
|
|
177
|
-
_self.hide();
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
function _createLogger(hostDiv: HTMLElement, prefix: string, trackers: string[]) {
|
|
181
|
-
loggerEl = document.createElement("div");
|
|
182
|
-
loggerEl.className = `${prefix}-dbg-lgr`;
|
|
183
|
-
|
|
184
|
-
const controlDiv = document.createElement("div");
|
|
185
|
-
controlDiv.className = "controls";
|
|
186
|
-
|
|
187
|
-
const textFilterInput = document.createElement("input");
|
|
188
|
-
textFilterInput.className = "text-filter-input";
|
|
189
|
-
textFilterInput.setAttribute("placeholder", "filter text");
|
|
190
|
-
textFilterInput.onchange = (evt: Event) => {
|
|
191
|
-
_self.setTextFilter(textFilterInput.value);
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
textFilterInput.onblur = (evt: Event) => {
|
|
195
|
-
_self.setTextFilter(textFilterInput.value);
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
textFilterInput.onkeyup = (evt: Event) => {
|
|
199
|
-
keyupTimer && keyupTimer.cancel();
|
|
200
|
-
keyupTimer = null;
|
|
201
|
-
|
|
202
|
-
let newValue = textFilterInput.value;
|
|
203
|
-
if (newValue !== _self.getTextFilter()) {
|
|
204
|
-
keyupTimer = scheduleTimeout(() => {
|
|
205
|
-
keyupTimer = null;
|
|
206
|
-
_self.setTextFilter(textFilterInput.value);
|
|
207
|
-
}, 200);
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
controlDiv.appendChild(textFilterInput);
|
|
212
|
-
|
|
213
|
-
const copyButton = document.createElement("button");
|
|
214
|
-
copyButton.innerText = "copy current node";
|
|
215
|
-
copyButton.className = "btn-secondary";
|
|
216
|
-
copyButton.onclick = copySelectedTree;
|
|
217
|
-
copyButton.ontouchend = copySelectedTree;
|
|
218
|
-
|
|
219
|
-
let keyupTimer: ITimerHandler = null;
|
|
220
|
-
|
|
221
|
-
filterList = new FilterList(controlDiv, trackers.slice(0), () => _self.render());
|
|
222
|
-
|
|
223
|
-
controlDiv.appendChild(copyButton);
|
|
224
|
-
|
|
225
|
-
const clearEventsBtn = document.createElement("button");
|
|
226
|
-
clearEventsBtn.innerText = "clear events";
|
|
227
|
-
clearEventsBtn.className = "btn-secondary";
|
|
228
|
-
clearEventsBtn.onclick = clearEvents;
|
|
229
|
-
clearEventsBtn.ontouchend = clearEvents;
|
|
230
|
-
|
|
231
|
-
controlDiv.appendChild(clearEventsBtn);
|
|
232
|
-
|
|
233
|
-
const closeEventsBtn = document.createElement("button");
|
|
234
|
-
closeEventsBtn.id = "close-dashboard";
|
|
235
|
-
closeEventsBtn.innerText = "close dashboard";
|
|
236
|
-
closeEventsBtn.className = "btn-primary";
|
|
237
|
-
closeEventsBtn.onclick = closeDashboard;
|
|
238
|
-
closeEventsBtn.ontouchend = closeDashboard;
|
|
239
|
-
|
|
240
|
-
controlDiv.appendChild(closeEventsBtn);
|
|
241
|
-
|
|
242
|
-
hostDiv.appendChild(controlDiv);
|
|
243
|
-
|
|
244
|
-
hostDiv.appendChild(loggerEl);
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
public getElm(): HTMLElement {
|
|
250
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
251
|
-
return null;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
public isDisplayed(): boolean {
|
|
255
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
256
|
-
return false;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
public getTextFilter(): string {
|
|
260
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
261
|
-
return null;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
public setTextFilter(value: string) {
|
|
265
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
public getTrackers(): string[] {
|
|
269
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
270
|
-
return null;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
public newLogEntry(target: Object, tm: number, key?: string, level?: number, kind?: string, keep?: boolean) {
|
|
274
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
public render(): void {
|
|
278
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
public show(): void {
|
|
282
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
public hide(): void {
|
|
286
|
-
// @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
|
|
287
|
-
}
|
|
288
|
-
}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { isArray, isBoolean, isError, isNumber, isObject, isString, objToString } from "@microsoft/applicationinsights-core-js";
|
|
2
|
-
import { MAX_DEPTH, formatLogElements, getTargetKeys, getTargetName, makeRegex, toggleClassName, traverseAndReplace } from "./helpers";
|
|
3
|
-
|
|
4
|
-
export class LogEntry {
|
|
5
|
-
isKeep: () => boolean;
|
|
6
|
-
isMatch: (textFilter: string, excludedKeys: string[], includeFunctions: boolean) => boolean;
|
|
7
|
-
render: (searchText: string, excludeKeys: string[], includeFunctions: boolean) => HTMLElement;
|
|
8
|
-
getEl: () => HTMLElement;
|
|
9
|
-
getKind: () => string;
|
|
10
|
-
|
|
11
|
-
constructor(target: Object, tm: number, key?: string, level?: number, kind?: string, keep?: boolean) {
|
|
12
|
-
let _self = this;
|
|
13
|
-
let searchContent: any = null;
|
|
14
|
-
let lastTextFilter: string;
|
|
15
|
-
let theEl: HTMLElement = null;
|
|
16
|
-
|
|
17
|
-
_self.isKeep = () => {
|
|
18
|
-
return !!keep;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function _testValue(rg: RegExp, value: string) {
|
|
22
|
-
if (rg && value) {
|
|
23
|
-
return rg.exec(value) !== null;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function _testObj(rg: RegExp, value: any, excludedKeys: string[], includeFunctions: boolean): boolean {
|
|
30
|
-
if (value !== null && value !== undefined && value !== "") {
|
|
31
|
-
if (isArray(value)) {
|
|
32
|
-
for (let lp = 0; lp < value.length; lp++) {
|
|
33
|
-
if (_testObj(rg, value[lp], excludedKeys, includeFunctions)) {
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
} else if (isObject(value) || isError(value)) {
|
|
38
|
-
let keys = getTargetKeys(value, excludedKeys, includeFunctions);
|
|
39
|
-
for (let lp = 0; lp < keys.length; lp++) {
|
|
40
|
-
let key = keys[lp];
|
|
41
|
-
if (_testValue(rg, key) || _testObj(rg, value[key], excludedKeys, includeFunctions)) {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
} else if (isString(value) || isNumber(value) || isBoolean(value)) {
|
|
46
|
-
return _testValue(rg, objToString(value));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
_self.isMatch = (textFilter: string, excludedKeys: string[], includeFunctions: boolean) => {
|
|
54
|
-
let rg = makeRegex(textFilter);
|
|
55
|
-
if (rg) {
|
|
56
|
-
if (_testValue(rg, key)) {
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (_testValue(rg, getTargetName(_self))) {
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (!searchContent) {
|
|
65
|
-
// Delaying creating the search optimization until needed -- for performance
|
|
66
|
-
searchContent = traverseAndReplace(target, MAX_DEPTH, level, [], excludedKeys, includeFunctions);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return _testObj(rg, searchContent, excludedKeys, includeFunctions);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
_self.render = (textFilter: string, excludeKeys: string[], includeFunctions: boolean): HTMLElement => {
|
|
76
|
-
if (!theEl || lastTextFilter !== textFilter) {
|
|
77
|
-
lastTextFilter = textFilter;
|
|
78
|
-
let ms: string = "" + tm;
|
|
79
|
-
while (ms.length < 4) {
|
|
80
|
-
ms = "0" + ms;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
ms = ms.replace(/(.)(\d{3}){1}$/g, "$1.$2s")
|
|
84
|
-
while (ms.length <= 9) {
|
|
85
|
-
ms = " " + ms;
|
|
86
|
-
}
|
|
87
|
-
theEl = formatLogElements(target, `[${ms}]`, key, level, textFilter, excludeKeys, [], includeFunctions).root;
|
|
88
|
-
toggleClassName(theEl, " tree-root");
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return theEl;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
_self.getEl = () => {
|
|
95
|
-
return theEl;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
_self.getKind = () => {
|
|
99
|
-
return kind;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
2
|
-
// Licensed under the MIT License.
|
|
3
|
-
|
|
4
|
-
import { scheduleTimeout } from "@nevware21/ts-utils";
|
|
5
|
-
|
|
6
|
-
export class DebugBinParent {
|
|
7
|
-
public showChildren: boolean = false;
|
|
8
|
-
|
|
9
|
-
private el: HTMLDivElement;
|
|
10
|
-
private elSpan: HTMLSpanElement;
|
|
11
|
-
private value: number = 0;
|
|
12
|
-
constructor(
|
|
13
|
-
private parent: HTMLDivElement,
|
|
14
|
-
private children: Array<DebugBin | HTMLButtonElement>,
|
|
15
|
-
bottomDistance: number,
|
|
16
|
-
prefix: string
|
|
17
|
-
) {
|
|
18
|
-
const _self = this;
|
|
19
|
-
|
|
20
|
-
_self.el = document.createElement("div");
|
|
21
|
-
_self.el.setAttribute("tabindex", "0");
|
|
22
|
-
_self.el.className = `${prefix}-debug-bin-parent`;
|
|
23
|
-
_self.el.style.bottom = `${20 + bottomDistance}px`;
|
|
24
|
-
|
|
25
|
-
_self.elSpan = document.createElement("span");
|
|
26
|
-
_self.elSpan.innerText = `${_self.value}`;
|
|
27
|
-
_self.elSpan.setAttribute("data-name", "AppInsights");
|
|
28
|
-
_self.el.appendChild(_self.elSpan);
|
|
29
|
-
|
|
30
|
-
_self.el.onclick = () => {
|
|
31
|
-
_self.showChildren = !_self.showChildren;
|
|
32
|
-
_self.el.className = (_self.showChildren) ? `${prefix}-debug-bin-parent active` : `${prefix}-debug-bin-parent`;
|
|
33
|
-
_self.render();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
_self.el.onkeydown = (evt: KeyboardEvent) => {
|
|
37
|
-
if (evt.which === 13 || evt.which === 32) {
|
|
38
|
-
evt.preventDefault();
|
|
39
|
-
(evt.target as HTMLElement).click();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
_self.render();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
addClassToEl(name: string) {
|
|
47
|
-
const _self = this;
|
|
48
|
-
if (_self.el.className.indexOf(name) === -1) {
|
|
49
|
-
_self.el.className += ` ${name}`;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
addChild(bin: DebugBin | HTMLButtonElement) {
|
|
54
|
-
this.children.push(bin);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
addButton(handler: (evt: MouseEvent) => void, label: string) {
|
|
58
|
-
const btn = document.createElement("button");
|
|
59
|
-
btn.innerText = label;
|
|
60
|
-
btn.onclick = handler;
|
|
61
|
-
this.addChild(btn);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
increment() {
|
|
65
|
-
const _self = this;
|
|
66
|
-
_self.elSpan.innerText = `${++_self.value}`;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
render() {
|
|
70
|
-
const _self = this;
|
|
71
|
-
if (!_self.el.parentElement) {
|
|
72
|
-
_self.parent.appendChild(_self.el);
|
|
73
|
-
}
|
|
74
|
-
for (const ch of _self.children) {
|
|
75
|
-
if (ch instanceof DebugBin) {
|
|
76
|
-
if (ch.el.parentElement !== _self.el && _self.showChildren) {
|
|
77
|
-
_self.el.appendChild(ch.el);
|
|
78
|
-
} else if (ch.el.parentElement === _self.el && !_self.showChildren) {
|
|
79
|
-
_self.el.removeChild(ch.el);
|
|
80
|
-
}
|
|
81
|
-
} else {
|
|
82
|
-
if (_self.showChildren) {
|
|
83
|
-
_self.el.appendChild(ch);
|
|
84
|
-
} else {
|
|
85
|
-
_self.el.removeChild(ch);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export class DebugBin {
|
|
93
|
-
public el: HTMLDivElement;
|
|
94
|
-
private elName: HTMLSpanElement;
|
|
95
|
-
private elValue: HTMLSpanElement;
|
|
96
|
-
|
|
97
|
-
constructor(
|
|
98
|
-
private name: string,
|
|
99
|
-
private value: number,
|
|
100
|
-
private parent: DebugBinParent,
|
|
101
|
-
bottomDistance: number,
|
|
102
|
-
backgroundColor?: string
|
|
103
|
-
) {
|
|
104
|
-
const _self = this;
|
|
105
|
-
parent.addChild(_self);
|
|
106
|
-
|
|
107
|
-
_self.el = document.createElement("div");
|
|
108
|
-
|
|
109
|
-
_self.elName = document.createElement("span");
|
|
110
|
-
_self.elName.innerText = `${name}: `;
|
|
111
|
-
_self.elName.className = "el-name";
|
|
112
|
-
_self.el.appendChild(_self.elName);
|
|
113
|
-
|
|
114
|
-
_self.elValue = document.createElement("span");
|
|
115
|
-
_self.elValue.innerText = `${value}`;
|
|
116
|
-
_self.elValue.className = "el-value";
|
|
117
|
-
_self.el.appendChild(_self.elValue);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
increment() {
|
|
121
|
-
const _self = this;
|
|
122
|
-
_self.elValue.innerText = `${++_self.value}`;
|
|
123
|
-
_self.parent.increment();
|
|
124
|
-
_self.elValue.className = "el-value incremented";
|
|
125
|
-
scheduleTimeout(() => _self.elValue.className = "el-value", 1);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
2
|
-
// Licensed under the MIT License.
|
|
3
|
-
|
|
4
|
-
import { arrIndexOf } from "@microsoft/applicationinsights-core-js";
|
|
5
|
-
|
|
6
|
-
export class FilterList {
|
|
7
|
-
|
|
8
|
-
private el: HTMLElement;
|
|
9
|
-
private filterList: string[];
|
|
10
|
-
private children: HTMLElement[] = [];
|
|
11
|
-
|
|
12
|
-
constructor(
|
|
13
|
-
parent: HTMLElement,
|
|
14
|
-
trackers: string[],
|
|
15
|
-
toggleCb: () => void
|
|
16
|
-
) {
|
|
17
|
-
const _self = this;
|
|
18
|
-
let active = false;
|
|
19
|
-
|
|
20
|
-
trackers = trackers.concat("other");
|
|
21
|
-
_self.filterList = [];
|
|
22
|
-
|
|
23
|
-
_self.el = document.createElement("div");
|
|
24
|
-
_self.el.className = "filterlist";
|
|
25
|
-
|
|
26
|
-
const inputEl = document.createElement("div");
|
|
27
|
-
inputEl.className = "filterlist-input";
|
|
28
|
-
inputEl.innerText = "filter nodes...";
|
|
29
|
-
_self.el.appendChild(inputEl);
|
|
30
|
-
|
|
31
|
-
const dropdownMenuEl = document.createElement("div");
|
|
32
|
-
dropdownMenuEl.className = "filterlist-dropdown";
|
|
33
|
-
_self.el.appendChild(dropdownMenuEl)
|
|
34
|
-
|
|
35
|
-
dropdownMenuEl.onkeyup = (evt) => {
|
|
36
|
-
if (active && evt.keyCode === 27) {
|
|
37
|
-
evt.stopPropagation();
|
|
38
|
-
_hideDropdown();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
for (const t of trackers) {
|
|
43
|
-
const chEl = document.createElement("div");
|
|
44
|
-
chEl.setAttribute("tabindex", "0");
|
|
45
|
-
chEl.setAttribute("filter-type", t);
|
|
46
|
-
chEl.className = "filterlist-toggle";
|
|
47
|
-
|
|
48
|
-
const checkbox = document.createElement("div");
|
|
49
|
-
checkbox.className = "checkbox on"
|
|
50
|
-
|
|
51
|
-
const label = document.createElement("span");
|
|
52
|
-
label.className = "label";
|
|
53
|
-
label.innerText = t;
|
|
54
|
-
|
|
55
|
-
chEl.appendChild(checkbox);
|
|
56
|
-
chEl.appendChild(label);
|
|
57
|
-
|
|
58
|
-
chEl.onkeyup = (evt) => {
|
|
59
|
-
if (active && evt.keyCode === 27) {
|
|
60
|
-
evt.stopPropagation();
|
|
61
|
-
_hideDropdown();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
chEl.onclick = (evt) => {
|
|
66
|
-
evt.stopPropagation();
|
|
67
|
-
chEl.focus();
|
|
68
|
-
if (checkbox.className === "checkbox off") {
|
|
69
|
-
if (evt.shiftKey) {
|
|
70
|
-
_self.filterList = trackers.concat();
|
|
71
|
-
for (const ch of _self.children) {
|
|
72
|
-
(ch.childNodes[0] as HTMLElement).className = "checkbox off";
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
_self.filterList.splice(arrIndexOf(_self.filterList, t), 1);
|
|
76
|
-
checkbox.className = "checkbox on";
|
|
77
|
-
} else {
|
|
78
|
-
if (evt.shiftKey) {
|
|
79
|
-
_self.filterList = [];
|
|
80
|
-
for (const ch of _self.children) {
|
|
81
|
-
(ch.childNodes[0] as HTMLElement).className = "checkbox on";
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
_self.filterList.push(t);
|
|
85
|
-
checkbox.className = "checkbox off";
|
|
86
|
-
}
|
|
87
|
-
toggleCb();
|
|
88
|
-
}
|
|
89
|
-
_self.children.push(chEl);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function _hideDropdown() {
|
|
93
|
-
active = false;
|
|
94
|
-
for (const ch of _self.children) {
|
|
95
|
-
dropdownMenuEl.removeChild(ch);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function _showDropdown() {
|
|
100
|
-
active = true;
|
|
101
|
-
for (const ch of _self.children) {
|
|
102
|
-
dropdownMenuEl.appendChild(ch);
|
|
103
|
-
}
|
|
104
|
-
dropdownMenuEl.focus();
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
_self.el.onkeyup = (evt) => {
|
|
108
|
-
if (active && evt.keyCode === 27) {
|
|
109
|
-
evt.stopPropagation();
|
|
110
|
-
_hideDropdown();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
_self.el.onclick = () => {
|
|
115
|
-
if (!active) {
|
|
116
|
-
_showDropdown();
|
|
117
|
-
} else {
|
|
118
|
-
_hideDropdown();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
parent.appendChild(_self.el);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
getCurrentFilter = () => {
|
|
126
|
-
return this.filterList;
|
|
127
|
-
}
|
|
128
|
-
}
|