UNPKG

chrome-devtools-frontend

Version:
63 lines (58 loc) 1.63 kB
// Copyright 2023 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 {type Step} from './Schema.js'; import {type Screenshot} from './ScreenshotStorage.js'; export interface Section { title: string; steps: Step[]; url: string; screenshot?: Screenshot; causingStep?: Step; } function startNewSection(step: Step): Section|null { const navigationEvent = step.assertedEvents?.find( event => event.type === 'navigation', ); if (step.type === 'navigate') { return { title: navigationEvent?.title || '', url: step.url, steps: [], causingStep: step, }; } if (navigationEvent) { return { title: navigationEvent.title || '', url: navigationEvent.url || '', steps: [], }; } return null; } export function buildSections(steps: Step[]): Section[] { let currentSection: Section|null = null; const sections: Section[] = []; for (const step of steps) { if (currentSection) { currentSection.steps.push(step); } else if (step.type === 'navigate') { currentSection = startNewSection(step); continue; } else { currentSection = {title: 'Current page', url: '', steps: [step]}; } const nextSection = startNewSection(step); if (nextSection) { if (currentSection) { sections.push(currentSection); } currentSection = nextSection; } } if (currentSection && (!sections.length || currentSection.steps.length)) { sections.push(currentSection); } return sections; }