Skip to content

Commit 3b97b58

Browse files
authored
fix: VSCode now uses iconv-lite-umd (#975)
1 parent 537808d commit 3b97b58

File tree

5 files changed

+52
-9
lines changed

5 files changed

+52
-9
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
"eslint-config-prettier": "^6.11.0",
7575
"eslint-plugin-prettier": "^3.1.4",
7676
"glob": "^7.1.4",
77+
"iconv-lite-umd": "0.6.3",
7778
"milligram": "^1.4.1",
7879
"mocha": "^8.0.1",
7980
"node-sass": "^4.14.1",

src/temp_svn_fs.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ class TempSvnFs implements FileSystemProvider, Disposable {
203203
let contentBuffer: Buffer;
204204

205205
if (encoding) {
206-
contentBuffer = iconv.encode(content, encoding);
206+
contentBuffer = Buffer.from(iconv.encode(content, encoding));
207207
} else {
208208
contentBuffer = Buffer.from(content);
209209
}

src/types/iconv-lite.d.ts

+19-4
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,35 @@
66
/// <reference types='node'/>
77

88
declare module "iconv-lite" {
9-
export function decode(buffer: Buffer, encoding: string): string;
9+
export function decode(buffer: Buffer | Uint8Array, encoding: string): string;
1010

1111
export function encode(
1212
content: string | Buffer,
1313
encoding: string,
1414
options?: { addBOM?: boolean }
15-
): Buffer;
15+
): Buffer | Uint8Array;
1616

1717
export function encodingExists(encoding: string): boolean;
1818

19-
export function decodeStream(encoding: string): NodeJS.ReadWriteStream;
19+
// Stream API
20+
export function decodeStream(
21+
encoding: string,
22+
options?: Options
23+
): NodeJS.ReadWriteStream;
2024

2125
export function encodeStream(
2226
encoding: string,
23-
options?: { addBOM?: boolean }
27+
options?: Options
2428
): NodeJS.ReadWriteStream;
29+
30+
// Low-level stream APIs
31+
export function getEncoder(
32+
encoding: string,
33+
options?: Options
34+
): EncoderStream;
35+
36+
export function getDecoder(
37+
encoding: string,
38+
options?: Options
39+
): DecoderStream;
2540
}

src/vscodeModules.ts

+25-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,31 @@ function loadVSCodeModule(id: string) {
2424
}
2525
}
2626

27-
export const iconv = loadVSCodeModule(
28-
"iconv-lite"
29-
) as typeof import("iconv-lite");
27+
function getNodeModule(moduleName: string) {
28+
try {
29+
return require(`${appRoot}/node_modules.asar/${moduleName}`);
30+
} catch (error) {
31+
//Ignore
32+
}
33+
34+
const baseDir = path.dirname(process.execPath);
35+
36+
try {
37+
module.paths.unshift(`${baseDir}/node_modules`);
38+
return require(moduleName);
39+
} catch (error) {}
40+
41+
return undefined;
42+
}
43+
44+
let iconv_lite = getNodeModule(
45+
"iconv-lite-umd"
46+
) as typeof import("iconv-lite-umd");
47+
if (!iconv_lite) {
48+
iconv_lite = loadVSCodeModule("iconv-lite") as typeof import("iconv-lite");
49+
}
50+
51+
export const iconv = iconv_lite;
3052
export const jschardet = loadVSCodeModule(
3153
"jschardet"
3254
) as typeof import("jschardet");

yarn.lock

+6-1
Original file line numberDiff line numberDiff line change
@@ -2523,7 +2523,12 @@ humanize-ms@^1.2.1:
25232523
dependencies:
25242524
ms "^2.0.0"
25252525

2526-
iconv-lite@~0.4.13:
2526+
2527+
version "0.6.3"
2528+
resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.3.tgz#61307cab8ac29939992d0724d3ab8799467f0e97"
2529+
integrity sha512-fQ/8XE8reiCZ6t+SX4tX6/tQdV4tThJZv5qtMe5Sk+IWsExz0S2Zd+GiBS5IEPgDxnsmiJSpH67+qzN3FT4lKw==
2530+
2531+
iconv-lite@^0.4.24, iconv-lite@~0.4.13:
25272532
version "0.4.24"
25282533
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
25292534
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==

0 commit comments

Comments
 (0)