diff --git a/packages/playwright-core/src/server/trace/test/inMemorySnapshotter.ts b/packages/playwright-core/src/server/trace/test/inMemorySnapshotter.ts index af07910159..f7461599aa 100644 --- a/packages/playwright-core/src/server/trace/test/inMemorySnapshotter.ts +++ b/packages/playwright-core/src/server/trace/test/inMemorySnapshotter.ts @@ -17,8 +17,8 @@ import type { BrowserContext } from '../../browserContext'; import type { Page } from '../../page'; import type { FrameSnapshot } from '@trace/snapshot'; -import type { SnapshotRenderer } from '../../../../../trace-viewer/src/snapshotRenderer'; -import { SnapshotStorage } from '../../../../../trace-viewer/src/snapshotStorage'; +import type { SnapshotRenderer } from '../../../../../trace-viewer/src/sw/snapshotRenderer'; +import { SnapshotStorage } from '../../../../../trace-viewer/src/sw/snapshotStorage'; import type { SnapshotterBlob, SnapshotterDelegate } from '../recorder/snapshotter'; import { Snapshotter } from '../recorder/snapshotter'; import type { ElementHandle } from '../../dom'; diff --git a/packages/trace-viewer/src/DEPS.list b/packages/trace-viewer/src/DEPS.list index f2614cff83..f52c0a024e 100644 --- a/packages/trace-viewer/src/DEPS.list +++ b/packages/trace-viewer/src/DEPS.list @@ -3,3 +3,6 @@ @trace/** @web/** ui/ + +[sw-main.ts] +sw/** diff --git a/packages/trace-viewer/src/multimap.ts b/packages/trace-viewer/src/multimap.ts deleted file mode 100644 index 18777d29e5..0000000000 --- a/packages/trace-viewer/src/multimap.ts +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Copyright (c) Microsoft Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export class MultiMap { - private _map: Map; - - constructor() { - this._map = new Map(); - } - - set(key: K, value: V) { - let values = this._map.get(key); - if (!values) { - values = []; - this._map.set(key, values); - } - values.push(value); - } - - get(key: K): V[] { - return this._map.get(key) || []; - } - - has(key: K): boolean { - return this._map.has(key); - } - - delete(key: K, value: V) { - const values = this._map.get(key); - if (!values) - return; - if (values.includes(value)) - this._map.set(key, values.filter(v => value !== v)); - } - - deleteAll(key: K) { - this._map.delete(key); - } - - hasValue(key: K, value: V): boolean { - const values = this._map.get(key); - if (!values) - return false; - return values.includes(value); - } - - get size(): number { - return this._map.size; - } - - [Symbol.iterator](): Iterator<[K, V[]]> { - return this._map[Symbol.iterator](); - } - - keys(): IterableIterator { - return this._map.keys(); - } - - values(): Iterable { - const result: V[] = []; - for (const key of this.keys()) - result.push(...this.get(key)); - return result; - } - - clear() { - this._map.clear(); - } -} diff --git a/packages/trace-viewer/src/sw-main.ts b/packages/trace-viewer/src/sw-main.ts new file mode 100644 index 0000000000..5d11452851 --- /dev/null +++ b/packages/trace-viewer/src/sw-main.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import './sw/main'; diff --git a/packages/trace-viewer/src/sw/DEPS.list b/packages/trace-viewer/src/sw/DEPS.list new file mode 100644 index 0000000000..047840f509 --- /dev/null +++ b/packages/trace-viewer/src/sw/DEPS.list @@ -0,0 +1,2 @@ +[*] +@isomorphic/** diff --git a/packages/trace-viewer/src/sw.ts b/packages/trace-viewer/src/sw/main.ts similarity index 100% rename from packages/trace-viewer/src/sw.ts rename to packages/trace-viewer/src/sw/main.ts diff --git a/packages/trace-viewer/src/progress.ts b/packages/trace-viewer/src/sw/progress.ts similarity index 100% rename from packages/trace-viewer/src/progress.ts rename to packages/trace-viewer/src/sw/progress.ts diff --git a/packages/trace-viewer/src/snapshotRenderer.ts b/packages/trace-viewer/src/sw/snapshotRenderer.ts similarity index 100% rename from packages/trace-viewer/src/snapshotRenderer.ts rename to packages/trace-viewer/src/sw/snapshotRenderer.ts diff --git a/packages/trace-viewer/src/snapshotServer.ts b/packages/trace-viewer/src/sw/snapshotServer.ts similarity index 100% rename from packages/trace-viewer/src/snapshotServer.ts rename to packages/trace-viewer/src/sw/snapshotServer.ts diff --git a/packages/trace-viewer/src/snapshotStorage.ts b/packages/trace-viewer/src/sw/snapshotStorage.ts similarity index 100% rename from packages/trace-viewer/src/snapshotStorage.ts rename to packages/trace-viewer/src/sw/snapshotStorage.ts diff --git a/packages/trace-viewer/src/traceModel.ts b/packages/trace-viewer/src/sw/traceModel.ts similarity index 90% rename from packages/trace-viewer/src/traceModel.ts rename to packages/trace-viewer/src/sw/traceModel.ts index 893e928691..dfd417bef8 100644 --- a/packages/trace-viewer/src/traceModel.ts +++ b/packages/trace-viewer/src/sw/traceModel.ts @@ -14,9 +14,8 @@ * limitations under the License. */ -import { parseClientSideCallMetadata } from '../../../packages/playwright-core/src/utils/isomorphic/traceUtils'; -import type { ActionEntry, ContextEntry } from './entries'; -import { createEmptyContext } from './entries'; +import { parseClientSideCallMetadata } from '@isomorphic/traceUtils'; +import type { ActionEntry, ContextEntry } from '../types/entries'; import { SnapshotStorage } from './snapshotStorage'; import { TraceModernizer } from './traceModernizer'; @@ -150,3 +149,26 @@ function collapseActionsForRecorder(actions: ActionEntry[]): ActionEntry[] { } return result; } + +function createEmptyContext(): ContextEntry { + return { + origin: 'testRunner', + traceUrl: '', + startTime: Number.MAX_SAFE_INTEGER, + wallTime: Number.MAX_SAFE_INTEGER, + endTime: 0, + browserName: '', + options: { + deviceScaleFactor: 1, + isMobile: false, + viewport: { width: 1280, height: 800 }, + }, + pages: [], + resources: [], + actions: [], + events: [], + errors: [], + stdio: [], + hasSource: false, + }; +} diff --git a/packages/trace-viewer/src/traceModelBackends.ts b/packages/trace-viewer/src/sw/traceModelBackends.ts similarity index 100% rename from packages/trace-viewer/src/traceModelBackends.ts rename to packages/trace-viewer/src/sw/traceModelBackends.ts diff --git a/packages/trace-viewer/src/traceModernizer.ts b/packages/trace-viewer/src/sw/traceModernizer.ts similarity index 99% rename from packages/trace-viewer/src/traceModernizer.ts rename to packages/trace-viewer/src/sw/traceModernizer.ts index 7c6ff19ce6..69d7f965dc 100644 --- a/packages/trace-viewer/src/traceModernizer.ts +++ b/packages/trace-viewer/src/sw/traceModernizer.ts @@ -19,7 +19,7 @@ import type * as traceV3 from './versions/traceV3'; import type * as traceV4 from './versions/traceV4'; import type * as traceV5 from './versions/traceV5'; import type * as traceV6 from './versions/traceV6'; -import type { ActionEntry, ContextEntry, PageEntry } from './entries'; +import type { ActionEntry, ContextEntry, PageEntry } from '../types/entries'; import type { SnapshotStorage } from './snapshotStorage'; export class TraceVersionError extends Error { diff --git a/packages/trace-viewer/src/versions/traceV3.ts b/packages/trace-viewer/src/sw/versions/traceV3.ts similarity index 97% rename from packages/trace-viewer/src/versions/traceV3.ts rename to packages/trace-viewer/src/sw/versions/traceV3.ts index fea10264a7..a9cb7d7704 100644 --- a/packages/trace-viewer/src/versions/traceV3.ts +++ b/packages/trace-viewer/src/sw/versions/traceV3.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { Entry as ResourceSnapshot } from '../../../trace/src/har'; +import type { Entry as ResourceSnapshot } from '@trace/har'; type SerializedValue = { n?: number, diff --git a/packages/trace-viewer/src/versions/traceV4.ts b/packages/trace-viewer/src/sw/versions/traceV4.ts similarity index 98% rename from packages/trace-viewer/src/versions/traceV4.ts rename to packages/trace-viewer/src/sw/versions/traceV4.ts index 982bea1492..722604f0ad 100644 --- a/packages/trace-viewer/src/versions/traceV4.ts +++ b/packages/trace-viewer/src/sw/versions/traceV4.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { Entry as ResourceSnapshot } from '../../../trace/src/har'; +import type { Entry as ResourceSnapshot } from '@trace/har'; type Language = 'javascript' | 'python' | 'java' | 'csharp' | 'jsonl'; type Point = { x: number, y: number }; diff --git a/packages/trace-viewer/src/versions/traceV5.ts b/packages/trace-viewer/src/sw/versions/traceV5.ts similarity index 98% rename from packages/trace-viewer/src/versions/traceV5.ts rename to packages/trace-viewer/src/sw/versions/traceV5.ts index 8024330ebd..54d54459ce 100644 --- a/packages/trace-viewer/src/versions/traceV5.ts +++ b/packages/trace-viewer/src/sw/versions/traceV5.ts @@ -15,7 +15,7 @@ */ -import type { Entry as ResourceSnapshot } from '../../../trace/src/har'; +import type { Entry as ResourceSnapshot } from '@trace/har'; type Language = 'javascript' | 'python' | 'java' | 'csharp' | 'jsonl'; type Point = { x: number, y: number }; diff --git a/packages/trace-viewer/src/versions/traceV6.ts b/packages/trace-viewer/src/sw/versions/traceV6.ts similarity index 98% rename from packages/trace-viewer/src/versions/traceV6.ts rename to packages/trace-viewer/src/sw/versions/traceV6.ts index 2bbbd447b3..1b069a20b2 100644 --- a/packages/trace-viewer/src/versions/traceV6.ts +++ b/packages/trace-viewer/src/sw/versions/traceV6.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { Entry as ResourceSnapshot } from '../../../trace/src/har'; +import type { Entry as ResourceSnapshot } from '@trace/har'; type Language = 'javascript' | 'python' | 'java' | 'csharp' | 'jsonl'; type Point = { x: number, y: number }; diff --git a/packages/trace-viewer/src/entries.ts b/packages/trace-viewer/src/types/entries.ts similarity index 73% rename from packages/trace-viewer/src/entries.ts rename to packages/trace-viewer/src/types/entries.ts index dbfec63be8..df6dc7972e 100644 --- a/packages/trace-viewer/src/entries.ts +++ b/packages/trace-viewer/src/types/entries.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { Language } from '../../playwright-core/src/utils/isomorphic/locatorGenerators'; +import type { Language } from 'playwright-core/src/utils/isomorphic/locatorGenerators'; import type { ResourceSnapshot } from '@trace/snapshot'; import type * as trace from '@trace/trace'; @@ -54,26 +54,3 @@ export type PageEntry = { export type ActionEntry = trace.ActionTraceEvent & { log: { time: number, message: string }[]; }; - -export function createEmptyContext(): ContextEntry { - return { - origin: 'testRunner', - traceUrl: '', - startTime: Number.MAX_SAFE_INTEGER, - wallTime: Number.MAX_SAFE_INTEGER, - endTime: 0, - browserName: '', - options: { - deviceScaleFactor: 1, - isMobile: false, - viewport: { width: 1280, height: 800 }, - }, - pages: [], - resources: [], - actions: [], - events: [], - errors: [], - stdio: [], - hasSource: false, - }; -} diff --git a/packages/trace-viewer/src/ui/actionList.tsx b/packages/trace-viewer/src/ui/actionList.tsx index 55f4f4028a..f375ab0baa 100644 --- a/packages/trace-viewer/src/ui/actionList.tsx +++ b/packages/trace-viewer/src/ui/actionList.tsx @@ -24,7 +24,7 @@ import type { Language } from '@isomorphic/locatorGenerators'; import type { TreeState } from '@web/components/treeView'; import { TreeView } from '@web/components/treeView'; import type { ActionTraceEventInContext, ActionTreeItem } from './modelUtil'; -import type { Boundaries } from '../geometry'; +import type { Boundaries } from './geometry'; export interface ActionListProps { actions: ActionTraceEventInContext[], diff --git a/packages/trace-viewer/src/ui/consoleTab.tsx b/packages/trace-viewer/src/ui/consoleTab.tsx index 3ae847ef50..881b1c05f2 100644 --- a/packages/trace-viewer/src/ui/consoleTab.tsx +++ b/packages/trace-viewer/src/ui/consoleTab.tsx @@ -19,7 +19,7 @@ import * as React from 'react'; import './consoleTab.css'; import type * as modelUtil from './modelUtil'; import { ListView } from '@web/components/listView'; -import type { Boundaries } from '../geometry'; +import type { Boundaries } from './geometry'; import { clsx, msToString } from '@web/uiUtils'; import { ansi2html } from '@web/ansi2html'; import { PlaceholderPanel } from './placeholderPanel'; diff --git a/packages/trace-viewer/src/ui/embeddedWorkbenchLoader.tsx b/packages/trace-viewer/src/ui/embeddedWorkbenchLoader.tsx index 1f1b5327da..3500b93b1f 100644 --- a/packages/trace-viewer/src/ui/embeddedWorkbenchLoader.tsx +++ b/packages/trace-viewer/src/ui/embeddedWorkbenchLoader.tsx @@ -15,7 +15,7 @@ */ import * as React from 'react'; -import type { ContextEntry } from '../entries'; +import type { ContextEntry } from '../types/entries'; import { MultiTraceModel } from './modelUtil'; import './embeddedWorkbenchLoader.css'; import { Workbench } from './workbench'; diff --git a/packages/trace-viewer/src/ui/filmStrip.tsx b/packages/trace-viewer/src/ui/filmStrip.tsx index a0818c10ed..dd8a0cb0ac 100644 --- a/packages/trace-viewer/src/ui/filmStrip.tsx +++ b/packages/trace-viewer/src/ui/filmStrip.tsx @@ -15,10 +15,10 @@ */ import './filmStrip.css'; -import type { Boundaries, Size } from '../geometry'; +import type { Boundaries, Size } from './geometry'; import * as React from 'react'; import { useMeasure, upperBound } from '@web/uiUtils'; -import type { PageEntry } from '../entries'; +import type { PageEntry } from '../types/entries'; import type { ActionTraceEventInContext, MultiTraceModel } from './modelUtil'; import { renderAction } from './actionList'; import type { Language } from '@isomorphic/locatorGenerators'; diff --git a/packages/trace-viewer/src/geometry.ts b/packages/trace-viewer/src/ui/geometry.ts similarity index 100% rename from packages/trace-viewer/src/geometry.ts rename to packages/trace-viewer/src/ui/geometry.ts diff --git a/packages/trace-viewer/src/ui/modelUtil.ts b/packages/trace-viewer/src/ui/modelUtil.ts index 098b387c8f..92dfdb1e8f 100644 --- a/packages/trace-viewer/src/ui/modelUtil.ts +++ b/packages/trace-viewer/src/ui/modelUtil.ts @@ -18,7 +18,7 @@ import type { Language } from '@isomorphic/locatorGenerators'; import type { ResourceSnapshot } from '@trace/snapshot'; import type * as trace from '@trace/trace'; import type { ActionTraceEvent } from '@trace/trace'; -import type { ContextEntry, PageEntry } from '../entries'; +import type { ContextEntry, PageEntry } from '../types/entries'; import type { StackFrame } from '@protocol/channels'; const contextSymbol = Symbol('context'); diff --git a/packages/trace-viewer/src/ui/networkTab.tsx b/packages/trace-viewer/src/ui/networkTab.tsx index 62b139be0d..ec9156d9e6 100644 --- a/packages/trace-viewer/src/ui/networkTab.tsx +++ b/packages/trace-viewer/src/ui/networkTab.tsx @@ -16,7 +16,7 @@ import type { Entry } from '@trace/har'; import * as React from 'react'; -import type { Boundaries } from '../geometry'; +import type { Boundaries } from './geometry'; import './networkTab.css'; import { NetworkResourceDetails } from './networkResourceDetails'; import { bytesToString, msToString } from '@web/uiUtils'; @@ -24,7 +24,7 @@ import { PlaceholderPanel } from './placeholderPanel'; import { context, type MultiTraceModel } from './modelUtil'; import { GridView, type RenderedGridCell } from '@web/components/gridView'; import { SplitView } from '@web/components/splitView'; -import type { ContextEntry } from '../entries'; +import type { ContextEntry } from '../types/entries'; import { NetworkFilters, defaultFilterState, type FilterState, type ResourceType } from './networkFilters'; type NetworkTabModel = { diff --git a/packages/trace-viewer/src/ui/recorderView.tsx b/packages/trace-viewer/src/ui/recorderView.tsx index 159536d925..23c223eede 100644 --- a/packages/trace-viewer/src/ui/recorderView.tsx +++ b/packages/trace-viewer/src/ui/recorderView.tsx @@ -21,8 +21,8 @@ import type { TabbedPaneTabModel } from '@web/components/tabbedPane'; import { TabbedPane } from '@web/components/tabbedPane'; import { sha1, useSetting } from '@web/uiUtils'; import * as React from 'react'; -import type { ContextEntry } from '../entries'; -import type { Boundaries } from '../geometry'; +import type { ContextEntry } from '../types/entries'; +import type { Boundaries } from './geometry'; import { ActionList } from './actionList'; import { ConsoleTab, useConsoleTabModel } from './consoleTab'; import { InspectorTab } from './inspectorTab'; diff --git a/packages/trace-viewer/src/ui/timeline.tsx b/packages/trace-viewer/src/ui/timeline.tsx index 2dfeb9adfe..e2dbfed8c1 100644 --- a/packages/trace-viewer/src/ui/timeline.tsx +++ b/packages/trace-viewer/src/ui/timeline.tsx @@ -17,7 +17,7 @@ import { clsx, msToString, useMeasure } from '@web/uiUtils'; import { GlassPane } from '@web/shared/glassPane'; import * as React from 'react'; -import type { Boundaries } from '../geometry'; +import type { Boundaries } from './geometry'; import { FilmStrip } from './filmStrip'; import type { FilmStripPreviewPoint } from './filmStrip'; import type { ActionTraceEventInContext, MultiTraceModel } from './modelUtil'; diff --git a/packages/trace-viewer/src/ui/uiModeTraceView.tsx b/packages/trace-viewer/src/ui/uiModeTraceView.tsx index c0763fee3d..ed63a2adab 100644 --- a/packages/trace-viewer/src/ui/uiModeTraceView.tsx +++ b/packages/trace-viewer/src/ui/uiModeTraceView.tsx @@ -20,7 +20,7 @@ import '@web/common.css'; import '@web/third_party/vscode/codicon.css'; import type * as reporterTypes from 'playwright/types/testReporter'; import React from 'react'; -import type { ContextEntry } from '../entries'; +import type { ContextEntry } from '../types/entries'; import type { SourceLocation } from './modelUtil'; import { MultiTraceModel } from './modelUtil'; import { Workbench } from './workbench'; diff --git a/packages/trace-viewer/src/ui/workbench.tsx b/packages/trace-viewer/src/ui/workbench.tsx index 2905bb052f..8e40f60e14 100644 --- a/packages/trace-viewer/src/ui/workbench.tsx +++ b/packages/trace-viewer/src/ui/workbench.tsx @@ -33,7 +33,7 @@ import { Timeline } from './timeline'; import { MetadataView } from './metadataView'; import { AttachmentsTab } from './attachmentsTab'; import { AnnotationsTab } from './annotationsTab'; -import type { Boundaries } from '../geometry'; +import type { Boundaries } from './geometry'; import { InspectorTab } from './inspectorTab'; import { ToolbarButton } from '@web/components/toolbarButton'; import { useSetting, msToString, clsx } from '@web/uiUtils'; diff --git a/packages/trace-viewer/src/ui/workbenchLoader.tsx b/packages/trace-viewer/src/ui/workbenchLoader.tsx index 4764b3d6a8..19793d4b57 100644 --- a/packages/trace-viewer/src/ui/workbenchLoader.tsx +++ b/packages/trace-viewer/src/ui/workbenchLoader.tsx @@ -16,7 +16,7 @@ import { ToolbarButton } from '@web/components/toolbarButton'; import * as React from 'react'; -import type { ContextEntry } from '../entries'; +import type { ContextEntry } from '../types/entries'; import { MultiTraceModel } from './modelUtil'; import './workbenchLoader.css'; import { toggleTheme } from '@web/theme'; diff --git a/packages/trace-viewer/vite.sw.config.ts b/packages/trace-viewer/vite.sw.config.ts index c0dba9f124..dc621448b9 100644 --- a/packages/trace-viewer/vite.sw.config.ts +++ b/packages/trace-viewer/vite.sw.config.ts @@ -41,11 +41,11 @@ export default defineConfig({ emptyOutDir: false, rollupOptions: { input: { - sw: path.resolve(__dirname, 'src/sw.ts'), + sw: path.resolve(__dirname, 'src/sw-main.ts'), }, output: { - entryFileNames: info => '[name].bundle.js', - assetFileNames: () => '[name].[hash][extname]', + entryFileNames: info => 'sw.bundle.js', + assetFileNames: () => 'sw.[hash][extname]', manualChunks: undefined, }, }, diff --git a/tests/config/utils.ts b/tests/config/utils.ts index 52a30f2d25..9955b5d755 100644 --- a/tests/config/utils.ts +++ b/tests/config/utils.ts @@ -16,10 +16,10 @@ import type { Frame, Page } from 'playwright-core'; import { ZipFile } from '../../packages/playwright-core/lib/utils/zipFile'; -import type { TraceModelBackend } from '../../packages/trace-viewer/src/traceModel'; +import type { TraceModelBackend } from '../../packages/trace-viewer/src/sw/traceModel'; import type { StackFrame } from '../../packages/protocol/src/channels'; import { parseClientSideCallMetadata } from '../../packages/playwright-core/lib/utils/isomorphic/traceUtils'; -import { TraceModel } from '../../packages/trace-viewer/src/traceModel'; +import { TraceModel } from '../../packages/trace-viewer/src/sw/traceModel'; import type { ActionTreeItem } from '../../packages/trace-viewer/src/ui/modelUtil'; import { buildActionTree, MultiTraceModel } from '../../packages/trace-viewer/src/ui/modelUtil'; import type { ActionTraceEvent, ConsoleMessageTraceEvent, EventTraceEvent, TraceEvent } from '@trace/trace';