Path: blob/main/extensions/copilot/src/extension/intents/vscode-node/newWorkspacePreviewFileSystemProvider.ts
13399 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Disposable, Event, EventEmitter, FileChangeEvent, FileStat, FileSystemError, FileSystemProvider, FileType, Uri } from 'vscode';6import { INewWorkspacePreviewContentManager } from '../node/newIntent';789export class NewWorkspacePreviewFileSystemProvider implements FileSystemProvider {10constructor(private readonly contentManager: INewWorkspacePreviewContentManager) { }11async stat(uri: Uri): Promise<FileStat> {12const node = this.contentManager.get(uri);13if (!node) {14throw FileSystemError.FileNotFound(uri);15}1617const size = await node.content?.then((content) => content?.length) ?? 0;18return {19ctime: node.ctime ?? 0,20mtime: node.ctime ?? 0,21size: size,22type: node.children ? FileType.Directory : FileType.File23};24}2526readDirectory(uri: Uri): [string, FileType][] | Thenable<[string, FileType][]> {27const node = this.contentManager.get(uri);28if (!node) {29throw FileSystemError.FileNotFound(uri);30}3132return node.children?.map((child) => [child.name, child.children ? FileType.Directory : FileType.File]) ?? [];33}3435async readFile(uri: Uri): Promise<Uint8Array> {36const node = this.contentManager.get(uri);37if (!node) {38throw FileSystemError.FileNotFound(uri);39}4041let content: Uint8Array | undefined;42try {43content = await node.content;44} catch { }45return content ?? new Uint8Array();46}4748// #region not implemented since this filesystem impl is readonly49private readonly _onDidChangeFile = new EventEmitter<FileChangeEvent[]>();50onDidChangeFile: Event<FileChangeEvent[]> = this._onDidChangeFile.event;51watch(uri: Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[] }): Disposable {52return { dispose() { } };53}54createDirectory(uri: Uri): void | Thenable<void> {55throw FileSystemError.NoPermissions(uri);56}57writeFile(uri: Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean }): void | Thenable<void> {58throw FileSystemError.NoPermissions(uri);59}60delete(uri: Uri, options: { readonly recursive: boolean }): void | Thenable<void> {61throw FileSystemError.NoPermissions(uri);62}63rename(oldUri: Uri, newUri: Uri, options: { readonly overwrite: boolean }): void | Thenable<void> {64throw FileSystemError.NoPermissions(newUri);65}66copy?(source: Uri, destination: Uri, options: { readonly overwrite: boolean }): void | Thenable<void> {67throw FileSystemError.NoPermissions(destination);68}69// #endregion7071dispose(): void {72this._onDidChangeFile.dispose();73}74}757677