Rocky_Mountain_Vending/.pnpm-store/v10/files/47/7ab91a044d82ec746602502881e12a2e4458d6dba53a4f2cd059b3495879c6747d7815a338faf67426602c7e596b8d6688e5d729aa09e63af13d76ac6cb510
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

119 lines
No EOL
4.9 KiB
Text

// Copyright 2024 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as Handlers from '../handlers/handlers.js';
import * as Helpers from '../helpers/helpers.js';
import * as Types from '../types/types.js';
import * as TraceFilter from './TraceFilter.js';
import * as TraceTree from './TraceTree.js';
/**
*
* Returns Main frame main thread events.
* These events are inline with the ones used by selectedEvents() of TimelineTreeViews
*/
function collectMainThreadActivity(parsedTrace) {
// TODO: Note b/402658800 could be an issue here.
const mainFrameMainThread = parsedTrace.Renderer.processes.values()
.find(p => {
const url = p.url ?? '';
// Frame url checked a la CompatibilityTracksAppenders's addThreadAppenders
return p.isOnMainFrame && !url.startsWith('about:') && !url.startsWith('chrome:');
})
?.threads.values()
.find(t => t.name === 'CrRendererMain');
if (!mainFrameMainThread) {
return [];
}
return mainFrameMainThread.entries;
}
export function summarizeByThirdParty(parsedTrace, traceBounds) {
const mainThreadEvents = collectMainThreadActivity(parsedTrace).sort(Helpers.Trace.eventTimeComparator);
const groupingFunction = (event) => {
const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(event);
return entity?.name ?? '';
};
const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);
const summaries = summarizeBottomUpByEntity(node, parsedTrace);
return summaries;
}
/**
* Used only by Lighthouse.
*/
export function summarizeByURL(parsedTrace, traceBounds) {
const mainThreadEvents = collectMainThreadActivity(parsedTrace).sort(Helpers.Trace.eventTimeComparator);
const groupingFunction = (event) => {
return Handlers.Helpers.getNonResolvedURL(event, parsedTrace) ?? '';
};
const node = getBottomUpTree(mainThreadEvents, traceBounds, groupingFunction);
const summaries = summarizeBottomUpByURL(node, parsedTrace);
return summaries;
}
function summarizeBottomUpByEntity(root, parsedTrace) {
const summaries = [];
// Top nodes are the 3P entities.
const topNodes = [...root.children().values()].flat();
for (const node of topNodes) {
if (node.id === '') {
continue;
}
const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(node.event);
if (!entity) {
continue;
}
// Lets use the mapper events as our source of events, since we use the main thread to construct
// the bottom up tree. The mapper will give us all related events.
const summary = {
transferSize: node.transferSize,
mainThreadTime: Types.Timing.Milli(node.selfTime),
entity,
relatedEvents: parsedTrace.Renderer.entityMappings.eventsByEntity.get(entity) ?? [],
};
summaries.push(summary);
}
return summaries;
}
function summarizeBottomUpByURL(root, parsedTrace) {
const summaries = [];
const allRequests = parsedTrace.NetworkRequests.byTime;
// Top nodes are URLs.
const topNodes = [...root.children().values()].flat();
for (const node of topNodes) {
if (node.id === '' || typeof node.id !== 'string') {
continue;
}
const entity = parsedTrace.Renderer.entityMappings.entityByEvent.get(node.event);
if (!entity) {
continue;
}
const url = node.id;
const request = allRequests.find(r => r.args.data.url === url);
const summary = {
request,
url,
entity,
transferSize: node.transferSize,
mainThreadTime: Types.Timing.Milli(node.selfTime),
};
summaries.push(summary);
}
return summaries;
}
function getBottomUpTree(mainThreadEvents, tracebounds, groupingFunction) {
// Use the same filtering as front_end/panels/timeline/TimelineTreeView.ts.
const visibleEvents = Helpers.Trace.VISIBLE_TRACE_EVENT_TYPES.values().toArray();
const filter = new TraceFilter.VisibleEventsFilter(visibleEvents.concat([Types.Events.Name.SYNTHETIC_NETWORK_REQUEST]));
// The bottom up root node handles all the "in Tracebounds" checks we need for the insight.
const startTime = Helpers.Timing.microToMilli(tracebounds.min);
const endTime = Helpers.Timing.microToMilli(tracebounds.max);
return new TraceTree.BottomUpRootNode(mainThreadEvents, {
textFilter: new TraceFilter.ExclusiveNameFilter([]),
filters: [filter],
startTime,
endTime,
eventGroupIdCallback: groupingFunction,
calculateTransferSize: true,
// Ensure we group by 3P alongside eventID for correct 3P grouping.
forceGroupIdCallback: true,
});
}
//# sourceMappingURL=ThirdParties.js.map