chrome-devtools-frontend
Version:
Chrome DevTools UI
80 lines (70 loc) • 3.69 kB
text/typescript
// Copyright 2022 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 Platform from '../core/platform/platform.js';
import * as SDK from '../core/sdk/sdk.js';
import * as Bindings from '../models/bindings/bindings.js';
import * as Breakpoints from '../models/breakpoints/breakpoints.js';
import * as Persistence from '../models/persistence/persistence.js';
import * as Workspace from '../models/workspace/workspace.js';
const {urlString} = Platform.DevToolsPath;
export function setUpEnvironment() {
const workspace = Workspace.Workspace.WorkspaceImpl.instance();
const targetManager = SDK.TargetManager.TargetManager.instance();
const resourceMapping = new Bindings.ResourceMapping.ResourceMapping(targetManager, workspace);
const debuggerWorkspaceBinding = Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance(
{forceNew: true, resourceMapping, targetManager});
const breakpointManager = Breakpoints.BreakpointManager.BreakpointManager.instance(
{forceNew: true, targetManager, workspace, debuggerWorkspaceBinding});
Persistence.Persistence.PersistenceImpl.instance({forceNew: true, workspace, breakpointManager});
const networkPersistenceManager =
Persistence.NetworkPersistenceManager.NetworkPersistenceManager.instance({forceNew: true, workspace});
return {networkPersistenceManager, workspace, debuggerWorkspaceBinding};
}
export async function createWorkspaceProject(
baseUrl: Platform.DevToolsPath.UrlString, files: Array<{path: string, content: string, name: string}>) {
const {networkPersistenceManager} = setUpEnvironment();
const fileSystem: Partial<Persistence.FileSystemWorkspaceBinding.FileSystem> = {
fileSystemPath: () => baseUrl,
fileSystemBaseURL: urlString`${baseUrl}/`,
type: () => Workspace.Workspace.projectTypes.FileSystem,
fileSystem: () => ({
supportsAutomapping: () => false,
} as unknown as Persistence.PlatformFileSystem.PlatformFileSystem),
};
const uiSourceCodes = new Map<string, Workspace.UISourceCode.UISourceCode>();
const mockProject: Partial<Persistence.FileSystemWorkspaceBinding.FileSystem> = {
uiSourceCodes: () => Array.from(uiSourceCodes.values()),
id: () => baseUrl,
fileSystemPath: () => baseUrl,
uiSourceCodeForURL: (url: string) => {
return uiSourceCodes.get(url) || null;
},
type: () => Workspace.Workspace.projectTypes.FileSystem,
initialGitFolders: () => [],
fileSystem: () => ({
type: () => 'filesystem',
} as unknown as Persistence.PlatformFileSystem.PlatformFileSystem),
fileSystemBaseURL: urlString`${baseUrl}/`,
createFile: () => Promise.resolve(null),
};
await networkPersistenceManager.setProject(mockProject as Workspace.Workspace.Project);
for (const file of files) {
const url = urlString`${file.path.concat(file.name)}`;
const fileUrl = networkPersistenceManager.fileUrlFromNetworkUrl(url, true);
uiSourceCodes.set(fileUrl, {
requestContent: () => Promise.resolve({content: file.content}),
url: () => fileUrl,
project: () => {
return {...fileSystem, requestFileBlob: () => new Blob([file.content])};
},
name: () => file.name,
setWorkingCopy: () => {},
commitWorkingCopy: () => {},
} as unknown as Workspace.UISourceCode.UISourceCode);
}
await networkPersistenceManager.setProject(mockProject as Workspace.Workspace.Project);
const workspace = Workspace.Workspace.WorkspaceImpl.instance();
workspace.addProject(mockProject as Workspace.Workspace.Project);
return networkPersistenceManager;
}