1
>
/*---------------------------------------------------------------------------------------------
fileService.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { coalesce } from '../../../base/common/arrays.js';
7
>
import { Promises, ResourceQueue } from '../../../base/common/async.js';
8
>
import { bufferedStreamToBuffer, bufferToReadable, newWriteableBufferStream, readableToBuffer, streamToBuffer, VSBuffer, VSBufferReadable, VSBufferReadableBufferedStream, VSBufferReadableStream } from '../../../base/common/buffer.js';
9
>
import { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js';
10
>
import { Emitter } from '../../../base/common/event.js';
11
>
import { hash } from '../../../base/common/hash.js';
12
>
import { Iterable } from '../../../base/common/iterator.js';
13
>
import { Disposable, DisposableStore, dispose, IDisposable, toDisposable } from '../../../base/common/lifecycle.js';
14
>
import { TernarySearchTree } from '../../../base/common/ternarySearchTree.js';
15
>
import { Schemas } from '../../../base/common/network.js';
16
>
import { mark } from '../../../base/common/performance.js';
17
>
import { extUri, extUriIgnorePathCase, IExtUri, isAbsolutePath } from '../../../base/common/resources.js';
18
>
import { consumeStream, isReadableBufferedStream, isReadableStream, listenStream, newWriteableStream, peekReadable, peekStream, transform } from '../../../base/common/stream.js';
19
>
import { URI } from '../../../base/common/uri.js';
20
>
import { localize } from '../../../nls.js';
21
>
import { ensureFileSystemProviderError, etag, ETAG_DISABLED, FileChangesEvent, IFileDeleteOptions, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FilePermission, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, hasFileAppendCapability, hasFileAtomicReadCapability, hasFileFolderCopyCapability, hasFileReadStreamCapability, hasOpenReadWriteCloseCapability, hasReadWriteCapability, ICreateFileOptions, IFileContent, IFileService, IFileStat, IFileStatWithMetadata, IFileStreamContent, IFileSystemProvider, IFileSystemProviderActivationEvent, IFileSystemProviderCapabilitiesChangeEvent, IFileSystemProviderRegistrationEvent, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IReadFileOptions, IReadFileStreamOptions, IResolveFileOptions, IFileStatResult, IFileStatResultWithMetadata, IResolveMetadataFileOptions, IStat, IFileStatWithPartialMetadata, IWatchOptions, IWriteFileOptions, NotModifiedSinceFileOperationError, toFileOperationResult, toFileSystemProviderErrorCode, hasFileCloneCapability, TooLargeFileOperationError, hasFileAtomicDeleteCapability, hasFileAtomicWriteCapability, IWatchOptionsWithCorrelation, IFileSystemWatcher, IWatchOptionsWithoutCorrelation, hasFileRealpathCapability } from './files.js';
22
>
import { readFileIntoStream } from './io.js';
23
>
import { ILogService } from '../../log/common/log.js';
24
>
import { ErrorNoTelemetry } from '../../../base/common/errors.js';
25
>
26
>
export class FileService extends Disposable implements IFileService {
27
>
28
>
declare readonly _serviceBrand: undefined;
29
>
30
>
// Choose a buffer size that is a balance between memory needs and
31
>
// manageable IPC overhead. The larger the buffer size, the less
32
>
// roundtrips we have to do for reading/writing data.
33
>
private readonly BUFFER_SIZE = 256 * 1024;
34
>
35
>
constructor(@ILogService private readonly logService: ILogService) {
36
super();
37
}