Skip to content

Commit e294dfd

Browse files
committed
Add simple script for finding VS Code versions
1 parent 870874d commit e294dfd

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import { resolve } from "path";
2+
import { readJSON } from "fs-extra";
3+
import { minVersion } from "semver";
4+
5+
const extensionDirectory = resolve(__dirname, "..");
6+
7+
async function fetchJson<T>(url: string): Promise<T> {
8+
const response = await fetch(url);
9+
if (!response.ok) {
10+
throw new Error(
11+
`Could not fetch ${url}: ${response.status} ${response.statusText}`,
12+
);
13+
}
14+
15+
return (await response.json()) as T;
16+
}
17+
18+
type VsCodePackageJson = {
19+
devDependencies: {
20+
electron: string;
21+
};
22+
};
23+
24+
async function getVsCodePackageJson(
25+
version: string,
26+
): Promise<VsCodePackageJson> {
27+
return await fetchJson(
28+
`https://raw.githubusercontent.com/microsoft/vscode/${version}/package.json`,
29+
);
30+
}
31+
32+
export interface ElectronVersion {
33+
version: string;
34+
date: string;
35+
node: string;
36+
v8: string;
37+
uv: string;
38+
zlib: string;
39+
openssl: string;
40+
modules: string;
41+
chrome: string;
42+
files: string[];
43+
body?: string;
44+
apm?: string;
45+
}
46+
47+
async function getElectronReleases(): Promise<ElectronVersion[]> {
48+
return await fetchJson("https://releases.electronjs.org/releases.json");
49+
}
50+
51+
async function findVsCodeVersions() {
52+
const packageJson = await readJSON(
53+
resolve(extensionDirectory, "package.json"),
54+
);
55+
56+
const minimumVsCodeVersion = minVersion(packageJson.engines.vscode)?.version;
57+
if (!minimumVsCodeVersion) {
58+
throw new Error("Could not find minimum VS Code version");
59+
}
60+
61+
const vsCodePackageJson = await getVsCodePackageJson(minimumVsCodeVersion);
62+
const electronVersion = minVersion(vsCodePackageJson.devDependencies.electron)
63+
?.version;
64+
if (!electronVersion) {
65+
throw new Error("Could not find Electron version");
66+
}
67+
68+
console.log(
69+
`VS Code ${minimumVsCodeVersion} uses Electron ${electronVersion}`,
70+
);
71+
72+
const electronReleases = await getElectronReleases();
73+
74+
const electronRelease = electronReleases.find(
75+
(release) => release.version === electronVersion,
76+
);
77+
if (!electronRelease) {
78+
throw new Error(`Could not find Electron release ${electronVersion}`);
79+
}
80+
81+
console.log(
82+
`Electron ${electronRelease.version} uses Node ${electronRelease.node} and Chromium ${electronRelease.chrome}`,
83+
);
84+
}
85+
86+
findVsCodeVersions().catch((e: unknown) => {
87+
console.error(e);
88+
process.exit(2);
89+
});

0 commit comments

Comments
 (0)