Path: blob/main/extensions/html-language-features/client/src/requests.ts
3320 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 { Uri, workspace, Disposable } from 'vscode';6import { RequestType, BaseLanguageClient } from 'vscode-languageclient';7import { Runtime } from './htmlClient';89export namespace FsStatRequest {10export const type: RequestType<string, FileStat, any> = new RequestType('fs/stat');11}1213export namespace FsReadDirRequest {14export const type: RequestType<string, [string, FileType][], any> = new RequestType('fs/readDir');15}1617export function serveFileSystemRequests(client: BaseLanguageClient, runtime: Runtime): Disposable {18const disposables = [];19disposables.push(client.onRequest(FsReadDirRequest.type, (uriString: string) => {20const uri = Uri.parse(uriString);21if (uri.scheme === 'file' && runtime.fileFs) {22return runtime.fileFs.readDirectory(uriString);23}24return workspace.fs.readDirectory(uri);25}));26disposables.push(client.onRequest(FsStatRequest.type, (uriString: string) => {27const uri = Uri.parse(uriString);28if (uri.scheme === 'file' && runtime.fileFs) {29return runtime.fileFs.stat(uriString);30}31return workspace.fs.stat(uri);32}));33return Disposable.from(...disposables);34}3536export enum FileType {37/**38* The file type is unknown.39*/40Unknown = 0,41/**42* A regular file.43*/44File = 1,45/**46* A directory.47*/48Directory = 2,49/**50* A symbolic link to a file.51*/52SymbolicLink = 6453}54export interface FileStat {55/**56* The type of the file, e.g. is a regular file, a directory, or symbolic link57* to a file.58*/59type: FileType;60/**61* The creation timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.62*/63ctime: number;64/**65* The modification timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.66*/67mtime: number;68/**69* The size in bytes.70*/71size: number;72}7374export interface FileSystemProvider {75stat(uri: string): Promise<FileStat>;76readDirectory(uri: string): Promise<[string, FileType][]>;77}787980