Skip to content

Commit 61d0d15

Browse files
committed
fix: add polyfill for getDefaultHighWaterMark to support VS Code 1.85.x
- VS Code 1.85.x bundles Node.js 16.14.2 which lacks getDefaultHighWaterMark - Added polyfill at the start of extension.ts before any imports - Added comprehensive tests for the polyfill functionality - Fixes #6240
1 parent 6216075 commit 61d0d15

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { describe, it, expect, vi } from "vitest"
2+
3+
describe("getDefaultHighWaterMark polyfill", () => {
4+
it("should add getDefaultHighWaterMark if it doesn't exist", () => {
5+
// Mock the stream module without getDefaultHighWaterMark
6+
const mockStream: any = {}
7+
8+
// Execute the polyfill code
9+
if (!mockStream.getDefaultHighWaterMark) {
10+
mockStream.getDefaultHighWaterMark = function (objectMode: boolean): number {
11+
return objectMode ? 16 : 16 * 1024
12+
}
13+
}
14+
15+
// Verify the function was added
16+
expect(mockStream.getDefaultHighWaterMark).toBeDefined()
17+
expect(typeof mockStream.getDefaultHighWaterMark).toBe("function")
18+
})
19+
20+
it("should return correct values for objectMode", () => {
21+
const mockStream: any = {}
22+
mockStream.getDefaultHighWaterMark = function (objectMode: boolean): number {
23+
return objectMode ? 16 : 16 * 1024
24+
}
25+
26+
// Test objectMode = true
27+
expect(mockStream.getDefaultHighWaterMark(true)).toBe(16)
28+
29+
// Test objectMode = false
30+
expect(mockStream.getDefaultHighWaterMark(false)).toBe(16 * 1024)
31+
})
32+
33+
it("should not override existing getDefaultHighWaterMark", () => {
34+
// Mock stream with existing getDefaultHighWaterMark
35+
const originalFunction = vi.fn((objectMode: boolean) => (objectMode ? 32 : 32 * 1024))
36+
const mockStream: any = {
37+
getDefaultHighWaterMark: originalFunction,
38+
}
39+
40+
// Execute polyfill check
41+
if (!mockStream.getDefaultHighWaterMark) {
42+
mockStream.getDefaultHighWaterMark = function (objectMode: boolean): number {
43+
return objectMode ? 16 : 16 * 1024
44+
}
45+
}
46+
47+
// Verify original function is preserved
48+
expect(mockStream.getDefaultHighWaterMark).toBe(originalFunction)
49+
expect(mockStream.getDefaultHighWaterMark(true)).toBe(32)
50+
expect(mockStream.getDefaultHighWaterMark(false)).toBe(32 * 1024)
51+
})
52+
})

src/extension.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
// Polyfill for getDefaultHighWaterMark to support older VS Code versions
2+
// VS Code 1.85.x uses Node.js 16.14.2 which doesn't have getDefaultHighWaterMark
3+
// (introduced in Node.js 16.7.0). This polyfill ensures compatibility.
4+
// This must be added before any imports that might use the stream module.
5+
// See: https://github.com/RooCodeInc/Roo-Code/issues/6240
6+
if (!require("stream").getDefaultHighWaterMark) {
7+
const stream = require("stream")
8+
stream.getDefaultHighWaterMark = function (objectMode: boolean): number {
9+
// Default values from Node.js source
10+
return objectMode ? 16 : 16 * 1024
11+
}
12+
}
13+
114
import * as vscode from "vscode"
215
import * as dotenvx from "@dotenvx/dotenvx"
316
import * as path from "path"

0 commit comments

Comments
 (0)