Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions src/__tests__/extension-polyfill.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { describe, it, expect, vi } from "vitest"

describe("getDefaultHighWaterMark polyfill", () => {
it("should add getDefaultHighWaterMark if it doesn't exist", () => {
// Mock the stream module without getDefaultHighWaterMark
const mockStream: any = {}

// Execute the polyfill code
if (!mockStream.getDefaultHighWaterMark) {
mockStream.getDefaultHighWaterMark = function (objectMode: boolean): number {
return objectMode ? 16 : 16 * 1024
}
}

// Verify the function was added
expect(mockStream.getDefaultHighWaterMark).toBeDefined()
expect(typeof mockStream.getDefaultHighWaterMark).toBe("function")
})

it("should return correct values for objectMode", () => {
const mockStream: any = {}
mockStream.getDefaultHighWaterMark = function (objectMode: boolean): number {
return objectMode ? 16 : 16 * 1024
}

// Test objectMode = true
expect(mockStream.getDefaultHighWaterMark(true)).toBe(16)

// Test objectMode = false
expect(mockStream.getDefaultHighWaterMark(false)).toBe(16 * 1024)
})

it("should not override existing getDefaultHighWaterMark", () => {
// Mock stream with existing getDefaultHighWaterMark
const originalFunction = vi.fn((objectMode: boolean) => (objectMode ? 32 : 32 * 1024))
const mockStream: any = {
getDefaultHighWaterMark: originalFunction,
}

// Execute polyfill check
if (!mockStream.getDefaultHighWaterMark) {
mockStream.getDefaultHighWaterMark = function (objectMode: boolean): number {
return objectMode ? 16 : 16 * 1024
}
}

// Verify original function is preserved
expect(mockStream.getDefaultHighWaterMark).toBe(originalFunction)
expect(mockStream.getDefaultHighWaterMark(true)).toBe(32)
expect(mockStream.getDefaultHighWaterMark(false)).toBe(32 * 1024)
})
})
13 changes: 13 additions & 0 deletions src/extension.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
// Polyfill for getDefaultHighWaterMark to support older VS Code versions
// VS Code 1.85.x uses Node.js 16.14.2 which doesn't have getDefaultHighWaterMark
// (introduced in Node.js 16.7.0). This polyfill ensures compatibility.
// This must be added before any imports that might use the stream module.
// See: https://github.com/RooCodeInc/Roo-Code/issues/6240
if (!require("stream").getDefaultHighWaterMark) {
const stream = require("stream")
stream.getDefaultHighWaterMark = function (objectMode: boolean): number {
// Default values from Node.js source
return objectMode ? 16 : 16 * 1024
}
}

import * as vscode from "vscode"
import * as dotenvx from "@dotenvx/dotenvx"
import * as path from "path"
Expand Down