Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
function collapseLastFrames(frames) {
const index = frames.findIndex(frame =>
frame.location.source.url?.match(/webpack\/bootstrap/i)
);
if (index == -1) {
return { newFrames: frames, lastGroup: [] };
}
const newFrames = frames.slice(0, index);
const lastGroup = frames.slice(index);
return { newFrames, lastGroup };
}
export function collapseFrames(frames) {
// We collapse groups of one so that user frames
// are not in a group of one
function addGroupToList(group, list) {
if (!group) {
return list;
}
if (group.length > 1) {
list.push(group);
} else {
list = list.concat(group);
}
return list;
}
const { newFrames, lastGroup } = collapseLastFrames(frames);
frames = newFrames;
let items = [];
let currentGroup = null;
let prevItem = null;
for (const frame of frames) {
const prevLibrary = prevItem?.library;
if (!currentGroup) {
currentGroup = [frame];
} else if (prevLibrary && prevLibrary == frame.library) {
currentGroup.push(frame);
} else {
items = addGroupToList(currentGroup, items);
currentGroup = [frame];
}
prevItem = frame;
}
items = addGroupToList(currentGroup, items);
items = addGroupToList(lastGroup, items);
return items;
}