Path: blob/main/src/vs/workbench/api/node/extHostDiskFileSystemProvider.ts
3296 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 type * as vscode from 'vscode';6import { IExtHostConsumerFileSystem } from '../common/extHostFileSystemConsumer.js';7import { Schemas } from '../../../base/common/network.js';8import { ILogService } from '../../../platform/log/common/log.js';9import { DiskFileSystemProvider } from '../../../platform/files/node/diskFileSystemProvider.js';10import { FilePermission } from '../../../platform/files/common/files.js';11import { isLinux } from '../../../base/common/platform.js';1213export class ExtHostDiskFileSystemProvider {1415constructor(16@IExtHostConsumerFileSystem extHostConsumerFileSystem: IExtHostConsumerFileSystem,17@ILogService logService: ILogService18) {1920// Register disk file system provider so that certain21// file operations can execute fast within the extension22// host without roundtripping.23extHostConsumerFileSystem.addFileSystemProvider(Schemas.file, new DiskFileSystemProviderAdapter(logService), { isCaseSensitive: isLinux });24}25}2627class DiskFileSystemProviderAdapter implements vscode.FileSystemProvider {2829private readonly impl: DiskFileSystemProvider;3031constructor(logService: ILogService) {32this.impl = new DiskFileSystemProvider(logService);33}3435async stat(uri: vscode.Uri): Promise<vscode.FileStat> {36const stat = await this.impl.stat(uri);3738return {39type: stat.type,40ctime: stat.ctime,41mtime: stat.mtime,42size: stat.size,43permissions: stat.permissions === FilePermission.Readonly ? 1 : undefined44};45}4647readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType][]> {48return this.impl.readdir(uri);49}5051createDirectory(uri: vscode.Uri): Promise<void> {52return this.impl.mkdir(uri);53}5455readFile(uri: vscode.Uri): Promise<Uint8Array> {56return this.impl.readFile(uri);57}5859writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean }): Promise<void> {60return this.impl.writeFile(uri, content, { ...options, unlock: false, atomic: false });61}6263delete(uri: vscode.Uri, options: { readonly recursive: boolean }): Promise<void> {64return this.impl.delete(uri, { ...options, useTrash: false, atomic: false });65}6667rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean }): Promise<void> {68return this.impl.rename(oldUri, newUri, options);69}7071copy(source: vscode.Uri, destination: vscode.Uri, options: { readonly overwrite: boolean }): Promise<void> {72return this.impl.copy(source, destination, options);73}7475// --- Not Implemented ---7677get onDidChangeFile(): never { throw new Error('Method not implemented.'); }78watch(uri: vscode.Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[] }): vscode.Disposable { throw new Error('Method not implemented.'); }79}808182