Skip to content

Commit

Permalink
Remove sys.bufferFrom, duplicate Buffer declarations, etc (#57916)
Browse files Browse the repository at this point in the history
  • Loading branch information
jakebailey authored Mar 25, 2024
1 parent 3c63740 commit 3c0a802
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 101 deletions.
97 changes: 2 additions & 95 deletions src/compiler/sys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1323,85 +1323,6 @@ export function patchWriteFileEnsuringDirectory(sys: System) {

export type BufferEncoding = "ascii" | "utf8" | "utf-8" | "utf16le" | "ucs2" | "ucs-2" | "base64" | "latin1" | "binary" | "hex";

/** @internal */
export interface NodeBuffer extends Uint8Array {
constructor: any;
write(str: string, encoding?: BufferEncoding): number;
write(str: string, offset: number, encoding?: BufferEncoding): number;
write(str: string, offset: number, length: number, encoding?: BufferEncoding): number;
toString(encoding?: string, start?: number, end?: number): string;
toJSON(): { type: "Buffer"; data: number[]; };
equals(otherBuffer: Uint8Array): boolean;
compare(
otherBuffer: Uint8Array,
targetStart?: number,
targetEnd?: number,
sourceStart?: number,
sourceEnd?: number,
): number;
copy(targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;
slice(begin?: number, end?: number): Buffer;
subarray(begin?: number, end?: number): Buffer;
writeUIntLE(value: number, offset: number, byteLength: number): number;
writeUIntBE(value: number, offset: number, byteLength: number): number;
writeIntLE(value: number, offset: number, byteLength: number): number;
writeIntBE(value: number, offset: number, byteLength: number): number;
readUIntLE(offset: number, byteLength: number): number;
readUIntBE(offset: number, byteLength: number): number;
readIntLE(offset: number, byteLength: number): number;
readIntBE(offset: number, byteLength: number): number;
readUInt8(offset: number): number;
readUInt16LE(offset: number): number;
readUInt16BE(offset: number): number;
readUInt32LE(offset: number): number;
readUInt32BE(offset: number): number;
readInt8(offset: number): number;
readInt16LE(offset: number): number;
readInt16BE(offset: number): number;
readInt32LE(offset: number): number;
readInt32BE(offset: number): number;
readFloatLE(offset: number): number;
readFloatBE(offset: number): number;
readDoubleLE(offset: number): number;
readDoubleBE(offset: number): number;
reverse(): this;
swap16(): Buffer;
swap32(): Buffer;
swap64(): Buffer;
writeUInt8(value: number, offset: number): number;
writeUInt16LE(value: number, offset: number): number;
writeUInt16BE(value: number, offset: number): number;
writeUInt32LE(value: number, offset: number): number;
writeUInt32BE(value: number, offset: number): number;
writeInt8(value: number, offset: number): number;
writeInt16LE(value: number, offset: number): number;
writeInt16BE(value: number, offset: number): number;
writeInt32LE(value: number, offset: number): number;
writeInt32BE(value: number, offset: number): number;
writeFloatLE(value: number, offset: number): number;
writeFloatBE(value: number, offset: number): number;
writeDoubleLE(value: number, offset: number): number;
writeDoubleBE(value: number, offset: number): number;
readBigUInt64BE?(offset?: number): bigint;
readBigUInt64LE?(offset?: number): bigint;
readBigInt64BE?(offset?: number): bigint;
readBigInt64LE?(offset?: number): bigint;
writeBigInt64BE?(value: bigint, offset?: number): number;
writeBigInt64LE?(value: bigint, offset?: number): number;
writeBigUInt64BE?(value: bigint, offset?: number): number;
writeBigUInt64LE?(value: bigint, offset?: number): number;
fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this;
indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number;
entries(): IterableIterator<[number, number]>;
includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean;
keys(): IterableIterator<number>;
values(): IterableIterator<number>;
}

/** @internal */
export interface Buffer extends NodeBuffer {}

// TODO: GH#18217 Methods on System are often used as if they are certainly defined
export interface System {
args: string[];
Expand Down Expand Up @@ -1453,7 +1374,6 @@ export interface System {
/** @internal */ setBlocking?(): void;
base64decode?(input: string): string;
base64encode?(input: string): string;
/** @internal */ bufferFrom?(input: string, encoding?: string): Buffer;
/** @internal */ require?(baseDir: string, moduleName: string): ModuleImportResult;

// For testing
Expand Down Expand Up @@ -1492,11 +1412,6 @@ export let sys: System = (() => {
let activeSession: import("inspector").Session | "stopping" | undefined;
let profilePath = "./profile.cpuprofile";

const Buffer: {
new (input: string, encoding?: string): any;
from?(input: string, encoding?: string): any;
} = require("buffer").Buffer;

const isMacOs = process.platform === "darwin";
const isLinuxOrMacOs = process.platform === "linux" || isMacOs;

Expand Down Expand Up @@ -1627,9 +1542,8 @@ export let sys: System = (() => {
handle.setBlocking(true);
}
},
bufferFrom,
base64decode: input => bufferFrom(input, "base64").toString("utf8"),
base64encode: input => bufferFrom(input).toString("base64"),
base64decode: input => Buffer.from(input, "base64").toString("utf8"),
base64encode: input => Buffer.from(input).toString("base64"),
require: (baseDir, moduleName) => {
try {
const modulePath = resolveJSModule(moduleName, baseDir, nodeSystem);
Expand Down Expand Up @@ -1738,13 +1652,6 @@ export let sys: System = (() => {
}
}

function bufferFrom(input: string, encoding?: string): Buffer {
// See https://github.com/Microsoft/TypeScript/issues/25652
return Buffer.from && Buffer.from !== Int8Array.from
? Buffer.from(input, encoding)
: new Buffer(input, encoding);
}

function isFileSystemCaseSensitive(): boolean {
// win32\win64 are case insensitive platforms
if (platform === "win32" || platform === "win64") {
Expand Down
2 changes: 1 addition & 1 deletion src/harness/harnessUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as Harness from "./_namespaces/Harness";
import * as ts from "./_namespaces/ts";

export function encodeString(s: string): string {
return ts.sys.bufferFrom!(s).toString("utf8");
return Buffer.from(s).toString("utf8");
}

export function evalFile(fileContents: string, fileName: string, nodeContext?: any) {
Expand Down
4 changes: 2 additions & 2 deletions src/harness/vfsUtil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1459,10 +1459,10 @@ type FileDataBuffer = { encoding?: undefined; data: Buffer; } | { encoding: Buff
function ensureBufferEncoding(fileBuffer: FileDataBuffer, encoding: BufferEncoding | undefined) {
if (fileBuffer.encoding === encoding) return;

const buffer = !fileBuffer.encoding ? fileBuffer.data : ts.sys.bufferFrom!(fileBuffer.data, fileBuffer.encoding);
const buffer = !fileBuffer.encoding ? fileBuffer.data : Buffer.from(fileBuffer.data, fileBuffer.encoding);

fileBuffer.encoding = encoding;
fileBuffer.data = !encoding ? buffer as Buffer : buffer.toString(encoding);
fileBuffer.data = !encoding ? buffer : buffer.toString(encoding);
}

interface FileInode {
Expand Down
6 changes: 3 additions & 3 deletions src/tsserver/nodeServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,9 @@ export function initializeNodeSystem(): StartInput {
}
protected write(s: string, _type: ts.server.Msg) {
if (this.fd >= 0) {
const buf = sys.bufferFrom!(s);
const buf = Buffer.from(s);
// eslint-disable-next-line no-null/no-null
fs.writeSync(this.fd, buf as globalThis.Buffer, 0, buf.length, /*position*/ null!); // TODO: GH#18217
fs.writeSync(this.fd, buf, 0, buf.length, /*position*/ null!); // TODO: GH#18217
}
if (this.traceToConsole) {
console.warn(s);
Expand Down Expand Up @@ -324,7 +324,7 @@ export function initializeNodeSystem(): StartInput {
}

// Override sys.write because fs.writeSync is not reliable on Node 4
sys.write = (s: string) => writeMessage(sys.bufferFrom!(s, "utf8") as globalThis.Buffer);
sys.write = (s: string) => writeMessage(Buffer.from(s, "utf8"));

/* eslint-disable no-restricted-globals */
sys.setTimeout = setTimeout;
Expand Down

0 comments on commit 3c0a802

Please sign in to comment.