Skip to content
This repository was archived by the owner on Sep 21, 2021. It is now read-only.

Commit 56568f4

Browse files
committed
Fix Error Rep with longString stacktrace.
This was throwing because we are calling split on preview.stack, as we thought having a string. But if this is a longString, we get an object and thus we have to pick longString's initial value. This can be considered as a hotfix since we are not properly rendering the whole stacktrace in this case. This will be handled in a separate issue, maybe directly on the server side.
1 parent 3f5162b commit 56568f4

File tree

5 files changed

+191
-1
lines changed

5 files changed

+191
-1
lines changed

packages/devtools-reps/src/reps/error.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const {
1111
wrapRender,
1212
} = require("./rep-utils");
1313
const { cleanFunctionName } = require("./function");
14+
const { isLongString } = require("./string");
1415
const { MODE } = require("./constants");
1516

1617
const dom = require("react-dom-factories");
@@ -82,7 +83,16 @@ function ErrorRep(props) {
8283
*/
8384
function getStacktraceElements(props, preview) {
8485
const stack = [];
85-
preview.stack
86+
if (!preview.stack) {
87+
return stack;
88+
}
89+
90+
const isStacktraceALongString = isLongString(preview.stack);
91+
const stackString = isStacktraceALongString
92+
? preview.stack.initial
93+
: preview.stack;
94+
95+
stackString
8696
.split("\n")
8797
.forEach((frame, index) => {
8898
if (!frame) {
@@ -147,6 +157,13 @@ function getStacktraceElements(props, preview) {
147157
}, location));
148158
});
149159

160+
if (isStacktraceALongString) {
161+
// Remove the last frame (i.e. 2 last elements in the array, the function name and the
162+
// location) which is certainly incomplete.
163+
// Can be removed when https://bugzilla.mozilla.org/show_bug.cgi?id=1448833 is fixed.
164+
stack.splice(-2);
165+
}
166+
150167
return span({
151168
key: "stack",
152169
className: "objectBox-stackTrace-grid"

packages/devtools-reps/src/reps/string.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,4 +284,5 @@ function supportsObject(object, noGrip = false) {
284284
module.exports = {
285285
rep: wrapRender(StringRep),
286286
supportsObject,
287+
isLongString,
287288
};

packages/devtools-reps/src/reps/stubs/error.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,4 +209,28 @@ stubs.set("base-loader Error", {
209209
}
210210
});
211211

212+
stubs.set("longString stack Error", {
213+
"type": "object",
214+
"actor": "server1.conn2.child1/obj33",
215+
"class": "Error",
216+
"extensible": true,
217+
"frozen": false,
218+
"sealed": false,
219+
"ownPropertyLength": 4,
220+
"preview": {
221+
"kind": "Error",
222+
"name": "Error",
223+
"message": "",
224+
"stack": {
225+
"type": "longString",
226+
"initial": "NgForOf.prototype.ngOnChanges@webpack-internal:///./node_modules/@angular/common/esm5/common.js:2656:27\n checkAndUpdateDirectiveInline@webpack-internal:///./node_modules/@angular/core/esm5/core.js:12581:9\n checkAndUpdateNodeInline@webpack-internal:///./node_modules/@angular/core/esm5/core.js:14109:20\n checkAndUpdateNode@webpack-internal:///./node_modules/@angular/core/esm5/core.js:14052:16\n debugCheckAndUpdateNode@webpack-internal:///./node_modules/@angular/core/esm5/core.js:14945:55\n debugCheckDirectivesFn@webpack-internal:///./node_modules/@angular/core/esm5/core.js:14886:13\n View_MetaTableComponent_6/<@ng:///AppModule/MetaTableComponent.ngfactory.js:98:5\n debugUpdateDirectives@webpack-internal:///./node_modules/@angular/core/esm5/core.js:14871:12\n checkAndUpdateView@webpack-internal:///./node_modules/@angular/core/esm5/core.js:14018:5\n callViewAction@webpack-internal:///./node_modules/@angular/core/esm5/core.js:14369:21\n execEmbeddedViewsAction@webpack-internal:///./node_modules/@an",
227+
"length": 11907,
228+
"actor": "server1.conn2.child1/longString31"
229+
},
230+
"fileName": "debugger eval code",
231+
"lineNumber": 1,
232+
"columnNumber": 5
233+
}
234+
});
235+
212236
module.exports = stubs;

packages/devtools-reps/src/reps/tests/__snapshots__/error.js.snap

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,3 +348,139 @@ exports[`Error - base-loader.js renders as expected without mode 1`] = `
348348
</span>
349349
</span>
350350
`;
351+
352+
exports[`Error - longString stacktrace renders as expected 1`] = `
353+
<span
354+
className="objectBox-stackTrace"
355+
data-link-actor-id="server1.conn2.child1/obj33"
356+
>
357+
Error: ""
358+
359+
360+
<span
361+
className="objectBox-stackTrace-grid"
362+
key="stack"
363+
>
364+
<span
365+
className="objectBox-stackTrace-fn"
366+
key="fn0"
367+
>
368+
node_modules
369+
</span>
370+
<span
371+
className="objectBox-stackTrace-location"
372+
key="location0"
373+
>
374+
angular/common/esm5/common.js:2656:27
375+
</span>
376+
<span
377+
className="objectBox-stackTrace-fn"
378+
key="fn1"
379+
>
380+
node_modules
381+
</span>
382+
<span
383+
className="objectBox-stackTrace-location"
384+
key="location1"
385+
>
386+
angular/core/esm5/core.js:12581:9
387+
</span>
388+
<span
389+
className="objectBox-stackTrace-fn"
390+
key="fn2"
391+
>
392+
node_modules
393+
</span>
394+
<span
395+
className="objectBox-stackTrace-location"
396+
key="location2"
397+
>
398+
angular/core/esm5/core.js:14109:20
399+
</span>
400+
<span
401+
className="objectBox-stackTrace-fn"
402+
key="fn3"
403+
>
404+
node_modules
405+
</span>
406+
<span
407+
className="objectBox-stackTrace-location"
408+
key="location3"
409+
>
410+
angular/core/esm5/core.js:14052:16
411+
</span>
412+
<span
413+
className="objectBox-stackTrace-fn"
414+
key="fn4"
415+
>
416+
node_modules
417+
</span>
418+
<span
419+
className="objectBox-stackTrace-location"
420+
key="location4"
421+
>
422+
angular/core/esm5/core.js:14945:55
423+
</span>
424+
<span
425+
className="objectBox-stackTrace-fn"
426+
key="fn5"
427+
>
428+
node_modules
429+
</span>
430+
<span
431+
className="objectBox-stackTrace-location"
432+
key="location5"
433+
>
434+
angular/core/esm5/core.js:14886:13
435+
</span>
436+
<span
437+
className="objectBox-stackTrace-fn"
438+
key="fn6"
439+
>
440+
View_MetaTableComponent_6
441+
</span>
442+
<span
443+
className="objectBox-stackTrace-location"
444+
key="location6"
445+
>
446+
ng:///AppModule/MetaTableComponent.ngfactory.js:98:5
447+
</span>
448+
<span
449+
className="objectBox-stackTrace-fn"
450+
key="fn7"
451+
>
452+
node_modules
453+
</span>
454+
<span
455+
className="objectBox-stackTrace-location"
456+
key="location7"
457+
>
458+
angular/core/esm5/core.js:14871:12
459+
</span>
460+
<span
461+
className="objectBox-stackTrace-fn"
462+
key="fn8"
463+
>
464+
node_modules
465+
</span>
466+
<span
467+
className="objectBox-stackTrace-location"
468+
key="location8"
469+
>
470+
angular/core/esm5/core.js:14018:5
471+
</span>
472+
<span
473+
className="objectBox-stackTrace-fn"
474+
key="fn9"
475+
>
476+
node_modules
477+
</span>
478+
<span
479+
className="objectBox-stackTrace-location"
480+
key="location9"
481+
>
482+
angular/core/esm5/core.js:14369:21
483+
</span>
484+
</span>
485+
</span>
486+
`;

packages/devtools-reps/src/reps/tests/error.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,18 @@ describe("Error - base-loader.js", () => {
334334
});
335335
});
336336

337+
describe("Error - longString stacktrace", () => {
338+
const stub = stubs.get("longString stack Error");
339+
340+
it("renders as expected", () => {
341+
const renderedComponent = shallow(ErrorRep.rep({
342+
object: stub
343+
}));
344+
345+
expect(renderedComponent).toMatchSnapshot();
346+
});
347+
});
348+
337349
describe("Error - stacktrace location click", () => {
338350
it("Calls onViewSourceInDebugger with the expected arguments", () => {
339351
const onViewSourceInDebugger = jest.fn();

0 commit comments

Comments
 (0)