Skip to content

Commit 0be60f3

Browse files
committed
Extract functions to separate file
1 parent e294dfd commit 0be60f3

File tree

2 files changed

+82
-65
lines changed

2 files changed

+82
-65
lines changed

extensions/ql-vscode/scripts/find-vscode-versions.ts

Lines changed: 3 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,10 @@
11
import { resolve } from "path";
22
import { readJSON } from "fs-extra";
33
import { minVersion } from "semver";
4+
import { getVersionInformation } from "./util/vscode-versions";
45

56
const extensionDirectory = resolve(__dirname, "..");
67

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-
518
async function findVsCodeVersions() {
529
const packageJson = await readJSON(
5310
resolve(extensionDirectory, "package.json"),
@@ -58,28 +15,9 @@ async function findVsCodeVersions() {
5815
throw new Error("Could not find minimum VS Code version");
5916
}
6017

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-
18+
const versionInformation = await getVersionInformation(minimumVsCodeVersion);
8119
console.log(
82-
`Electron ${electronRelease.version} uses Node ${electronRelease.node} and Chromium ${electronRelease.chrome}`,
20+
`VS Code ${versionInformation.vscodeVersion} uses Electron ${versionInformation.electronVersion}, Node ${versionInformation.nodeVersion} and Chromium ${versionInformation.chromiumVersion}`,
8321
);
8422
}
8523

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

0 commit comments

Comments
 (0)