@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,474 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
2
|
-
// Licensed under the MIT License.
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
arrForEach, arrIndexOf, getIEVersion, isArray, isError, isFunction, isObject, isString, isSymbol, objKeys
|
|
6
|
-
} from "@microsoft/applicationinsights-core-js";
|
|
7
|
-
import { strShimPrototype } from "@microsoft/applicationinsights-shims";
|
|
8
|
-
import { objHasOwnProperty } from "@nevware21/ts-utils";
|
|
9
|
-
|
|
10
|
-
const strConstructor = "constructor";
|
|
11
|
-
const strGetOwnPropertyNames = "getOwnPropertyNames";
|
|
12
|
-
|
|
13
|
-
export const MAX_DEPTH = 16;
|
|
14
|
-
|
|
15
|
-
export function makeRegex(value: string) {
|
|
16
|
-
if (value && value.length > 0) {
|
|
17
|
-
// Escape any slashes first!
|
|
18
|
-
value = value.replace(/\\/g, "\\\\");
|
|
19
|
-
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
20
|
-
value = value.replace(/([\+\?\|\{\}\[\]\(\)\^\$\#\.\=\!\:\/])/g, "\\$1");
|
|
21
|
-
value = value.replace(/\*/g, ".*");
|
|
22
|
-
return new RegExp("(" + value + ")");
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function toggleClassName(el: HTMLElement, className: string) {
|
|
29
|
-
const idx = el.className.indexOf(className);
|
|
30
|
-
if (idx === -1) {
|
|
31
|
-
el.className += className;
|
|
32
|
-
} else {
|
|
33
|
-
el.className = el.className.substring(0, idx) + el.className.substring(idx + className.length);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function traverseAndReplace(target: Object, maxDepth: number, currentDepth: number, thingsReferenced: any[], excludedKeys: string[], includeFunctions: boolean): Object {
|
|
38
|
-
const out = {};
|
|
39
|
-
|
|
40
|
-
if (!thingsReferenced) {
|
|
41
|
-
thingsReferenced = [];
|
|
42
|
-
}
|
|
43
|
-
if (isObject(target)) {
|
|
44
|
-
for (const key of getTargetKeys(target, excludedKeys, includeFunctions)) {
|
|
45
|
-
let targetValue = target[key];
|
|
46
|
-
if (isSymbol(targetValue)) {
|
|
47
|
-
targetValue = targetValue.toString();
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (targetValue !== null && arrIndexOf(thingsReferenced, targetValue) !== -1) {
|
|
51
|
-
out[key] = `<circular (${key} - "${getTargetName(targetValue)}")>`;
|
|
52
|
-
} else if (targetValue !== null && isObject(targetValue)) {
|
|
53
|
-
if (currentDepth >= maxDepth) {
|
|
54
|
-
out[key] = "<max allowed depth reached>";
|
|
55
|
-
} else {
|
|
56
|
-
thingsReferenced.push(target);
|
|
57
|
-
out[key] = traverseAndReplace(targetValue, maxDepth, currentDepth + 1, thingsReferenced, excludedKeys, includeFunctions);
|
|
58
|
-
thingsReferenced.pop();
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
out[key] = targetValue;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return out;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function _sanitizeText(value: string) {
|
|
70
|
-
if (value) {
|
|
71
|
-
value = value.replace(/&/g, "&");
|
|
72
|
-
value = value.replace(/>/g, ">");
|
|
73
|
-
value = value.replace(/</g, "<");
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return value;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function _setInnerText(elm: HTMLElement, theText: string, textFilter: string): boolean {
|
|
80
|
-
let innerText = theText;
|
|
81
|
-
let matchPos = -1;
|
|
82
|
-
let matchLen = 0;
|
|
83
|
-
let rg = makeRegex(textFilter);
|
|
84
|
-
if (rg) {
|
|
85
|
-
let matchTxt = rg.exec(innerText);
|
|
86
|
-
if (matchTxt && matchTxt[1]) {
|
|
87
|
-
matchPos = theText.indexOf(matchTxt[1]);
|
|
88
|
-
matchLen = matchTxt[1].length;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (matchPos !== -1) {
|
|
93
|
-
let innerHtml =
|
|
94
|
-
_sanitizeText(theText.substring(0, matchPos)) +
|
|
95
|
-
"<span class=\"matched-text-filter\">" +
|
|
96
|
-
_sanitizeText(theText.substring(matchPos, matchPos + matchLen)) +
|
|
97
|
-
"</span>" +
|
|
98
|
-
theText.substring(matchPos + matchLen);
|
|
99
|
-
|
|
100
|
-
elm.innerHTML = innerHtml;
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
elm.innerText = theText;
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
let lastSelectedElement: HTMLElement;
|
|
109
|
-
let selectedObject: object;
|
|
110
|
-
|
|
111
|
-
export function copySelectedTree() {
|
|
112
|
-
const toCopy: Object = selectedObject;
|
|
113
|
-
if (!toCopy) {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const textArea = document.createElement("textarea");
|
|
118
|
-
textArea.innerText = JSON.stringify(toCopy);
|
|
119
|
-
textArea.style.opacity = "0";
|
|
120
|
-
document.body.appendChild(textArea);
|
|
121
|
-
textArea.select();
|
|
122
|
-
document.execCommand("copy");
|
|
123
|
-
textArea.parentElement.removeChild(textArea);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export function focusHandler(evt: Event, target: Object, level: number, excludeKeys: string[], includeFunctions: boolean) {
|
|
127
|
-
if (lastSelectedElement) {
|
|
128
|
-
toggleClassName(lastSelectedElement, " last-selected-element");
|
|
129
|
-
}
|
|
130
|
-
lastSelectedElement = (evt.target as HTMLElement);
|
|
131
|
-
for (let i = 0; i < 10; i++) {
|
|
132
|
-
if (lastSelectedElement.tagName === "DIV") {
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
lastSelectedElement = lastSelectedElement.parentElement;
|
|
136
|
-
}
|
|
137
|
-
lastSelectedElement.className += " last-selected-element";
|
|
138
|
-
selectedObject = traverseAndReplace(target, MAX_DEPTH, level, null, excludeKeys, includeFunctions);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function _navHandler(evt: KeyboardEvent, openHandler?: (evt: Event, forceState?: boolean) => void, currentState?: boolean) {
|
|
142
|
-
const el = evt.target as HTMLElement;
|
|
143
|
-
switch (evt.which) {
|
|
144
|
-
// Enter
|
|
145
|
-
case 13: (openHandler) ? openHandler(evt) : void 0; break;
|
|
146
|
-
// ArrowUp
|
|
147
|
-
case 38:
|
|
148
|
-
evt.preventDefault();
|
|
149
|
-
const prev = el.previousElementSibling as HTMLElement;
|
|
150
|
-
if (prev && prev.tagName !== "BUTTON") {
|
|
151
|
-
prev.focus();
|
|
152
|
-
}
|
|
153
|
-
break;
|
|
154
|
-
// ArrowDown
|
|
155
|
-
case 40:
|
|
156
|
-
evt.preventDefault();
|
|
157
|
-
const next = el.nextElementSibling as HTMLElement;
|
|
158
|
-
if (next) {
|
|
159
|
-
next.focus();
|
|
160
|
-
}
|
|
161
|
-
break;
|
|
162
|
-
// ArrowRight
|
|
163
|
-
case 39:
|
|
164
|
-
if (openHandler) {
|
|
165
|
-
openHandler(evt, true);
|
|
166
|
-
if (currentState) {
|
|
167
|
-
(el.firstElementChild.nextSibling as HTMLElement).focus();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
break;
|
|
171
|
-
// ArrowLeft
|
|
172
|
-
case 37:
|
|
173
|
-
if (openHandler) {
|
|
174
|
-
openHandler(evt, false);
|
|
175
|
-
}
|
|
176
|
-
if (!currentState) {
|
|
177
|
-
(el.parentElement as HTMLElement).focus();
|
|
178
|
-
}
|
|
179
|
-
break;
|
|
180
|
-
// c
|
|
181
|
-
case 67:
|
|
182
|
-
if (evt.ctrlKey) {
|
|
183
|
-
copySelectedTree();
|
|
184
|
-
(evt.target as HTMLElement).focus();
|
|
185
|
-
}
|
|
186
|
-
break;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
export function getTargetName(target: any) {
|
|
191
|
-
if (target) {
|
|
192
|
-
if (isString(target.identifier)) {
|
|
193
|
-
return target.identifier;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if (isString(target.name)) {
|
|
197
|
-
return target.name;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if (objHasOwnProperty(target, strShimPrototype)) {
|
|
201
|
-
// Look like a prototype
|
|
202
|
-
return target.name || "";
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return ((target[strConstructor]) || {}).name || "";
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
return "";
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function _toString(value: any) {
|
|
212
|
-
if (isString(value)) {
|
|
213
|
-
return value;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
if (isSymbol(value)) {
|
|
217
|
-
return value.toString();
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
if (isFunction(value["toString"])) {
|
|
221
|
-
return (value["toString"] as any)() || "";
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
return "";
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
export function getTargetKeys(target: any, excludedKeys: string[], includeFunctions: boolean) {
|
|
228
|
-
let keys: string[] = objKeys(target);
|
|
229
|
-
|
|
230
|
-
if (!isArray(target)) {
|
|
231
|
-
try {
|
|
232
|
-
if (Object[strGetOwnPropertyNames]) {
|
|
233
|
-
// We need to use this for built in objects such as Error which don't return their values via objKeys because they are not enumerable for example
|
|
234
|
-
let propKeys = Object[strGetOwnPropertyNames](target);
|
|
235
|
-
if (propKeys) {
|
|
236
|
-
arrForEach(propKeys, (key) => {
|
|
237
|
-
const theKey = _toString(key);
|
|
238
|
-
if (theKey && arrIndexOf(keys, theKey) === -1) {
|
|
239
|
-
keys.push(key);
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
} catch (ex) {
|
|
245
|
-
// getOwnPropertyNames can fail in ES5, if the argument to this method is not an object (a primitive),
|
|
246
|
-
// then it will cause a TypeError. In ES2015, a non-object argument will be coerced to an object.
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
let theKeys: string[] = [];
|
|
251
|
-
arrForEach(keys, (key) => {
|
|
252
|
-
|
|
253
|
-
if (!includeFunctions && isFunction(target[key])) {
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
const theKey = _toString(key);
|
|
258
|
-
if (theKey && arrIndexOf(excludedKeys, theKey) === -1) {
|
|
259
|
-
theKeys.push(theKey);
|
|
260
|
-
}
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
return theKeys;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
export function formatLogElements(target: Object, tmLabel: string, key: string, level: number, textFilter: string, excludeKeys: string[], thingsReferenced?: any[], includeFunctions?:boolean): any {
|
|
267
|
-
let openState = false;
|
|
268
|
-
if (!level) {
|
|
269
|
-
level = 0;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
if (!thingsReferenced) {
|
|
273
|
-
thingsReferenced = [];
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
let isObj = isObject(target) || isError(target);
|
|
277
|
-
let isErr = target["baseType"] === "ExceptionData" || isError(target);
|
|
278
|
-
|
|
279
|
-
const children: HTMLElement[] = [];
|
|
280
|
-
|
|
281
|
-
function _openNode(currentLine: HTMLElement) {
|
|
282
|
-
openState = true;
|
|
283
|
-
arrForEach(children, (child) => {
|
|
284
|
-
rootDiv.appendChild(child);
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
currentLine.className = "obj-key expandable open"
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
function _collapseNode(currentLine: HTMLElement) {
|
|
291
|
-
// rootDiv.innerHTML = '';
|
|
292
|
-
arrForEach(children, (child) => {
|
|
293
|
-
rootDiv.removeChild(child);
|
|
294
|
-
});
|
|
295
|
-
// rootDiv.appendChild(currentLine);
|
|
296
|
-
openState = false;
|
|
297
|
-
currentLine.className = "obj-key expandable closed"
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
let matched = false;
|
|
301
|
-
let childOpened = false;
|
|
302
|
-
const keys = getTargetKeys(target, excludeKeys, includeFunctions);
|
|
303
|
-
if (keys.length === 0) {
|
|
304
|
-
keys.push("<empty>");
|
|
305
|
-
}
|
|
306
|
-
if (level >= MAX_DEPTH) {
|
|
307
|
-
keys.unshift("<maxdepth>");
|
|
308
|
-
}
|
|
309
|
-
for (const key of keys) {
|
|
310
|
-
if (arrIndexOf(excludeKeys, key) !== -1) {
|
|
311
|
-
continue;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
let targetValue = target[key];
|
|
315
|
-
if (isSymbol(targetValue)) {
|
|
316
|
-
targetValue = targetValue.toString();
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
if (key === "<maxdepth>") {
|
|
320
|
-
const builder = document.createElement("div");
|
|
321
|
-
builder.className = "empty";
|
|
322
|
-
builder.innerText = "<max allowed depth reached>";
|
|
323
|
-
children.push(builder);
|
|
324
|
-
break;
|
|
325
|
-
} else if (key === "<empty>") {
|
|
326
|
-
const builder = document.createElement("div");
|
|
327
|
-
builder.className = "empty";
|
|
328
|
-
builder.innerText = "<empty>";
|
|
329
|
-
children.push(builder);
|
|
330
|
-
} else if (targetValue !== null && arrIndexOf(thingsReferenced, targetValue) !== -1) {
|
|
331
|
-
const builder = document.createElement("div");
|
|
332
|
-
builder.className = "empty";
|
|
333
|
-
builder.innerText = `<circular (${key}) - "${getTargetName(targetValue)}">`;
|
|
334
|
-
children.push(builder);
|
|
335
|
-
} else if (targetValue !== null && (isObject(targetValue) || isError(targetValue))) {
|
|
336
|
-
thingsReferenced.push(target);
|
|
337
|
-
let formatted = formatLogElements(targetValue, null, key, level + 1, textFilter, excludeKeys, thingsReferenced, includeFunctions);
|
|
338
|
-
thingsReferenced.pop();
|
|
339
|
-
if (formatted.matched) {
|
|
340
|
-
childOpened = true;
|
|
341
|
-
}
|
|
342
|
-
if (formatted.isErr) {
|
|
343
|
-
isErr = true;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
children.push(formatted.root);
|
|
347
|
-
} else {
|
|
348
|
-
const builder = document.createElement("div");
|
|
349
|
-
builder.setAttribute("tabindex", "0");
|
|
350
|
-
builder.onclick = (evt: MouseEvent) => {
|
|
351
|
-
evt.stopPropagation();
|
|
352
|
-
}
|
|
353
|
-
builder.ontouchend = (evt: TouchEvent) => {
|
|
354
|
-
evt.stopPropagation();
|
|
355
|
-
}
|
|
356
|
-
builder.onkeydown = (evt: KeyboardEvent) => {
|
|
357
|
-
evt.stopPropagation();
|
|
358
|
-
_navHandler(evt);
|
|
359
|
-
}
|
|
360
|
-
builder.onfocus = (evt: Event) => {
|
|
361
|
-
focusHandler(evt, target, level, excludeKeys, includeFunctions);
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
const outerSpan = document.createElement("span");
|
|
365
|
-
const keySpan = document.createElement("span");
|
|
366
|
-
keySpan.className = "key";
|
|
367
|
-
if (_setInnerText(keySpan, `${key}: `, textFilter)) {
|
|
368
|
-
childOpened = true;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
outerSpan.appendChild(keySpan);
|
|
372
|
-
|
|
373
|
-
const valueSpan = document.createElement("span");
|
|
374
|
-
if (isFunction(targetValue)) {
|
|
375
|
-
const fnStr = targetValue.toString();
|
|
376
|
-
const fnHead = fnStr.match(/^([^{]+)/)[1];
|
|
377
|
-
valueSpan.textContent = `${fnHead}{...}`;
|
|
378
|
-
} else {
|
|
379
|
-
if (_setInnerText(valueSpan, `${targetValue}`, textFilter)) {
|
|
380
|
-
childOpened = true;
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
valueSpan.className = `${typeof targetValue}`;
|
|
384
|
-
outerSpan.appendChild(valueSpan);
|
|
385
|
-
builder.appendChild(outerSpan);
|
|
386
|
-
children.push(builder);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
const rootDiv = document.createElement("div");
|
|
391
|
-
|
|
392
|
-
let innerText = "";
|
|
393
|
-
let currentLine = document.createElement("span");
|
|
394
|
-
if (isObj || children.length) {
|
|
395
|
-
innerText = `${key ? key : "obj"}: `;
|
|
396
|
-
if (isArray(target)) {
|
|
397
|
-
innerText += `[${getTargetKeys(target, excludeKeys, includeFunctions).length}]`;
|
|
398
|
-
} else {
|
|
399
|
-
let targetName = getTargetName(target);
|
|
400
|
-
if (targetName) {
|
|
401
|
-
innerText += ` <"${targetName}"> `
|
|
402
|
-
}
|
|
403
|
-
innerText += `{${getTargetKeys(target, excludeKeys, includeFunctions).length}}`;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
matched = _setInnerText(currentLine, innerText, textFilter);
|
|
407
|
-
|
|
408
|
-
if (tmLabel) {
|
|
409
|
-
const tmWrapper = document.createElement("span");
|
|
410
|
-
const tmDetails = document.createElement("span");
|
|
411
|
-
tmDetails.className = "obj-time";
|
|
412
|
-
tmDetails.innerText = tmLabel;
|
|
413
|
-
tmWrapper.appendChild(tmDetails);
|
|
414
|
-
tmWrapper.appendChild(currentLine);
|
|
415
|
-
|
|
416
|
-
currentLine = tmWrapper;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
currentLine.className = "obj-key expandable closed"
|
|
420
|
-
} else {
|
|
421
|
-
innerText = `${key ? key : "obj"}: ${target.toString()}`;
|
|
422
|
-
matched = _setInnerText(currentLine, innerText, textFilter);
|
|
423
|
-
|
|
424
|
-
currentLine.className = "obj-key";
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
rootDiv.appendChild(currentLine);
|
|
428
|
-
rootDiv.setAttribute("tabindex", "0");
|
|
429
|
-
|
|
430
|
-
if (childOpened) {
|
|
431
|
-
// A child node matched so auto-expand
|
|
432
|
-
_openNode(currentLine);
|
|
433
|
-
}
|
|
434
|
-
if (isObj) {
|
|
435
|
-
if (isErr) {
|
|
436
|
-
rootDiv.className = "exception"
|
|
437
|
-
}
|
|
438
|
-
const openHandler = (evt: Event, forceState?: boolean) => {
|
|
439
|
-
evt.stopPropagation();
|
|
440
|
-
if (getIEVersion()) {
|
|
441
|
-
focusHandler(evt, target, level, excludeKeys, includeFunctions);
|
|
442
|
-
}
|
|
443
|
-
if (forceState !== undefined && openState === forceState) {
|
|
444
|
-
return;
|
|
445
|
-
}
|
|
446
|
-
if (lastSelectedElement === rootDiv) {
|
|
447
|
-
if (openState) {
|
|
448
|
-
_collapseNode(currentLine);
|
|
449
|
-
} else {
|
|
450
|
-
_openNode(currentLine);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
rootDiv.onkeydown = (evt: KeyboardEvent) => {
|
|
456
|
-
_navHandler(evt, openHandler, openState);
|
|
457
|
-
}
|
|
458
|
-
rootDiv.onclick = (evt: MouseEvent) => {
|
|
459
|
-
openHandler(evt);
|
|
460
|
-
}
|
|
461
|
-
rootDiv.ontouchend = (evt: TouchEvent) => {
|
|
462
|
-
openHandler(evt);
|
|
463
|
-
}
|
|
464
|
-
rootDiv.onfocus = (evt: Event) => {
|
|
465
|
-
focusHandler(evt, target, level, excludeKeys, includeFunctions);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
return {
|
|
470
|
-
root: rootDiv,
|
|
471
|
-
isErr: isErr,
|
|
472
|
-
matched: matched || childOpened
|
|
473
|
-
};
|
|
474
|
-
}
|