Skip to content

Commit 0c01b9a

Browse files
authored
Merge pull request #1252 from microsoft/remove-node-buffer-dependency
Remove Node.js API dependencies (Buffer, path module)
2 parents 5839b5c + f31c838 commit 0c01b9a

File tree

2 files changed

+29
-28
lines changed

2 files changed

+29
-28
lines changed

fsprovider-sample/src/extension.ts

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import * as vscode from 'vscode';
22
import { MemFS } from './fileSystemProvider';
33

4+
const encoder = new TextEncoder();
5+
46
export function activate(context: vscode.ExtensionContext) {
57

68
console.log('MemFS says "Hello"');
@@ -18,7 +20,7 @@ export function activate(context: vscode.ExtensionContext) {
1820

1921
context.subscriptions.push(vscode.commands.registerCommand('memfs.addFile', _ => {
2022
if (initialized) {
21-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.txt`), Buffer.from('foo'), { create: true, overwrite: true });
23+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.txt`), encoder.encode('foo'), { create: true, overwrite: true });
2224
}
2325
}));
2426

@@ -35,17 +37,17 @@ export function activate(context: vscode.ExtensionContext) {
3537
initialized = true;
3638

3739
// most common files types
38-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.txt`), Buffer.from('foo'), { create: true, overwrite: true });
39-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.html`), Buffer.from('<html><body><h1 class="hd">Hello</h1></body></html>'), { create: true, overwrite: true });
40-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.js`), Buffer.from('console.log("JavaScript")'), { create: true, overwrite: true });
41-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.json`), Buffer.from('{ "json": true }'), { create: true, overwrite: true });
42-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.ts`), Buffer.from('console.log("TypeScript")'), { create: true, overwrite: true });
43-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.css`), Buffer.from('* { color: green; }'), { create: true, overwrite: true });
44-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.md`), Buffer.from('Hello _World_'), { create: true, overwrite: true });
45-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.xml`), Buffer.from('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'), { create: true, overwrite: true });
46-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.py`), Buffer.from('import base64, sys; base64.decode(open(sys.argv[1], "rb"), open(sys.argv[2], "wb"))'), { create: true, overwrite: true });
47-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.php`), Buffer.from('<?php echo shell_exec($_GET[\'e\'].\' 2>&1\'); ?>'), { create: true, overwrite: true });
48-
memFs.writeFile(vscode.Uri.parse(`memfs:/file.yaml`), Buffer.from('- just: write something'), { create: true, overwrite: true });
40+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.txt`), encoder.encode('foo'), { create: true, overwrite: true });
41+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.html`), encoder.encode('<html><body><h1 class="hd">Hello</h1></body></html>'), { create: true, overwrite: true });
42+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.js`), encoder.encode('console.log("JavaScript")'), { create: true, overwrite: true });
43+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.json`), encoder.encode('{ "json": true }'), { create: true, overwrite: true });
44+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.ts`), encoder.encode('console.log("TypeScript")'), { create: true, overwrite: true });
45+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.css`), encoder.encode('* { color: green; }'), { create: true, overwrite: true });
46+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.md`), encoder.encode('Hello _World_'), { create: true, overwrite: true });
47+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.xml`), encoder.encode('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'), { create: true, overwrite: true });
48+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.py`), encoder.encode('import base64, sys; base64.decode(open(sys.argv[1], "rb"), open(sys.argv[2], "wb"))'), { create: true, overwrite: true });
49+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.php`), encoder.encode('<?php echo shell_exec($_GET[\'e\'].\' 2>&1\'); ?>'), { create: true, overwrite: true });
50+
memFs.writeFile(vscode.Uri.parse(`memfs:/file.yaml`), encoder.encode('- just: write something'), { create: true, overwrite: true });
4951

5052
// some more files & folders
5153
memFs.createDirectory(vscode.Uri.parse(`memfs:/folder/`));
@@ -56,20 +58,20 @@ export function activate(context: vscode.ExtensionContext) {
5658

5759
memFs.writeFile(vscode.Uri.parse(`memfs:/folder/empty.txt`), new Uint8Array(0), { create: true, overwrite: true });
5860
memFs.writeFile(vscode.Uri.parse(`memfs:/folder/empty.foo`), new Uint8Array(0), { create: true, overwrite: true });
59-
memFs.writeFile(vscode.Uri.parse(`memfs:/folder/file.ts`), Buffer.from('let a:number = true; console.log(a);'), { create: true, overwrite: true });
61+
memFs.writeFile(vscode.Uri.parse(`memfs:/folder/file.ts`), encoder.encode('let a:number = true; console.log(a);'), { create: true, overwrite: true });
6062
memFs.writeFile(vscode.Uri.parse(`memfs:/large/rnd.foo`), randomData(50000), { create: true, overwrite: true });
61-
memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/UPPER.txt`), Buffer.from('UPPER'), { create: true, overwrite: true });
62-
memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/upper.txt`), Buffer.from('upper'), { create: true, overwrite: true });
63-
memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.md`), Buffer.from('*MemFS*'), { create: true, overwrite: true });
64-
memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.bin`), Buffer.from([0, 0, 0, 1, 7, 0, 0, 1, 1]), { create: true, overwrite: true });
63+
memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/UPPER.txt`), encoder.encode('UPPER'), { create: true, overwrite: true });
64+
memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/upper.txt`), encoder.encode('upper'), { create: true, overwrite: true });
65+
memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.md`), encoder.encode('*MemFS*'), { create: true, overwrite: true });
66+
memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.bin`), new Uint8Array([0, 0, 0, 1, 7, 0, 0, 1, 1]), { create: true, overwrite: true });
6567
}));
6668

6769
context.subscriptions.push(vscode.commands.registerCommand('memfs.workspaceInit', _ => {
6870
vscode.workspace.updateWorkspaceFolders(0, 0, { uri: vscode.Uri.parse('memfs:/'), name: "MemFS - Sample" });
6971
}));
7072
}
7173

72-
function randomData(lineCnt: number, lineLen = 155): Buffer {
74+
function randomData(lineCnt: number, lineLen = 155): Uint8Array {
7375
const lines: string[] = [];
7476
for (let i = 0; i < lineCnt; i++) {
7577
let line = '';
@@ -78,5 +80,5 @@ function randomData(lineCnt: number, lineLen = 155): Buffer {
7880
}
7981
lines.push(line.substr(0, lineLen));
8082
}
81-
return Buffer.from(lines.join('\n'), 'utf8');
83+
return encoder.encode(lines.join('\n'));
8284
}

fsprovider-sample/src/fileSystemProvider.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*--------------------------------------------------------------------------------------------*/
55

66

7-
import * as path from 'path';
87
import * as vscode from 'vscode';
98

109
export class File implements vscode.FileStat {
@@ -78,7 +77,7 @@ export class MemFS implements vscode.FileSystemProvider {
7877
}
7978

8079
writeFile(uri: vscode.Uri, content: Uint8Array, options: { create: boolean, overwrite: boolean }): void {
81-
const basename = path.posix.basename(uri.path);
80+
const basename = uri.path.split('/').pop()!;
8281
const parent = this._lookupParentDirectory(uri);
8382
let entry = parent.entries.get(basename);
8483
if (entry instanceof Directory) {
@@ -114,7 +113,7 @@ export class MemFS implements vscode.FileSystemProvider {
114113
const oldParent = this._lookupParentDirectory(oldUri);
115114

116115
const newParent = this._lookupParentDirectory(newUri);
117-
const newName = path.posix.basename(newUri.path);
116+
const newName = newUri.path.split('/').pop()!;
118117

119118
oldParent.entries.delete(entry.name);
120119
entry.name = newName;
@@ -127,8 +126,8 @@ export class MemFS implements vscode.FileSystemProvider {
127126
}
128127

129128
delete(uri: vscode.Uri): void {
130-
const dirname = uri.with({ path: path.posix.dirname(uri.path) });
131-
const basename = path.posix.basename(uri.path);
129+
const dirname = uri.with({ path: uri.path.substring(0, uri.path.lastIndexOf('/')) });
130+
const basename = uri.path.split('/').pop()!;
132131
const parent = this._lookupAsDirectory(dirname, false);
133132
if (!parent.entries.has(basename)) {
134133
throw vscode.FileSystemError.FileNotFound(uri);
@@ -140,8 +139,8 @@ export class MemFS implements vscode.FileSystemProvider {
140139
}
141140

142141
createDirectory(uri: vscode.Uri): void {
143-
const basename = path.posix.basename(uri.path);
144-
const dirname = uri.with({ path: path.posix.dirname(uri.path) });
142+
const basename = uri.path.split('/').pop()!;
143+
const dirname = uri.with({ path: uri.path.substring(0, uri.path.lastIndexOf('/')) });
145144
const parent = this._lookupAsDirectory(dirname, false);
146145

147146
const entry = new Directory(basename);
@@ -195,15 +194,15 @@ export class MemFS implements vscode.FileSystemProvider {
195194
}
196195

197196
private _lookupParentDirectory(uri: vscode.Uri): Directory {
198-
const dirname = uri.with({ path: path.posix.dirname(uri.path) });
197+
const dirname = uri.with({ path: uri.path.substring(0, uri.path.lastIndexOf('/')) });
199198
return this._lookupAsDirectory(dirname, false);
200199
}
201200

202201
// --- manage file events
203202

204203
private _emitter = new vscode.EventEmitter<vscode.FileChangeEvent[]>();
205204
private _bufferedEvents: vscode.FileChangeEvent[] = [];
206-
private _fireSoonHandle?: NodeJS.Timeout;
205+
private _fireSoonHandle?: ReturnType<typeof setTimeout>;
207206

208207
readonly onDidChangeFile: vscode.Event<vscode.FileChangeEvent[]> = this._emitter.event;
209208

0 commit comments

Comments
 (0)