Path: blob/main/extensions/html-language-features/client/src/node/nodeFs.ts
3323 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 * as fs from 'fs';6import { Uri } from 'vscode';7import { FileSystemProvider, FileType } from '../requests';89export function getNodeFileFS(): FileSystemProvider {10function ensureFileUri(location: string) {11if (!location.startsWith('file:')) {12throw new Error('fileRequestService can only handle file URLs');13}14}15return {16stat(location: string) {17ensureFileUri(location);18return new Promise((c, e) => {19const uri = Uri.parse(location);20fs.stat(uri.fsPath, (err, stats) => {21if (err) {22if (err.code === 'ENOENT') {23return c({ type: FileType.Unknown, ctime: -1, mtime: -1, size: -1 });24} else {25return e(err);26}27}2829let type = FileType.Unknown;30if (stats.isFile()) {31type = FileType.File;32} else if (stats.isDirectory()) {33type = FileType.Directory;34} else if (stats.isSymbolicLink()) {35type = FileType.SymbolicLink;36}3738c({39type,40ctime: stats.ctime.getTime(),41mtime: stats.mtime.getTime(),42size: stats.size43});44});45});46},47readDirectory(location: string) {48ensureFileUri(location);49return new Promise((c, e) => {50const path = Uri.parse(location).fsPath;5152fs.readdir(path, { withFileTypes: true }, (err, children) => {53if (err) {54return e(err);55}56c(children.map(stat => {57if (stat.isSymbolicLink()) {58return [stat.name, FileType.SymbolicLink];59} else if (stat.isDirectory()) {60return [stat.name, FileType.Directory];61} else if (stat.isFile()) {62return [stat.name, FileType.File];63} else {64return [stat.name, FileType.Unknown];65}66}));67});68});69}70};71}727374