Extract functions to separate file
This commit is contained in:
@@ -1,53 +1,10 @@
|
||||
import { resolve } from "path";
|
||||
import { readJSON } from "fs-extra";
|
||||
import { minVersion } from "semver";
|
||||
import { getVersionInformation } from "./util/vscode-versions";
|
||||
|
||||
const extensionDirectory = resolve(__dirname, "..");
|
||||
|
||||
async function fetchJson<T>(url: string): Promise<T> {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Could not fetch ${url}: ${response.status} ${response.statusText}`,
|
||||
);
|
||||
}
|
||||
|
||||
return (await response.json()) as T;
|
||||
}
|
||||
|
||||
type VsCodePackageJson = {
|
||||
devDependencies: {
|
||||
electron: string;
|
||||
};
|
||||
};
|
||||
|
||||
async function getVsCodePackageJson(
|
||||
version: string,
|
||||
): Promise<VsCodePackageJson> {
|
||||
return await fetchJson(
|
||||
`https://raw.githubusercontent.com/microsoft/vscode/${version}/package.json`,
|
||||
);
|
||||
}
|
||||
|
||||
export interface ElectronVersion {
|
||||
version: string;
|
||||
date: string;
|
||||
node: string;
|
||||
v8: string;
|
||||
uv: string;
|
||||
zlib: string;
|
||||
openssl: string;
|
||||
modules: string;
|
||||
chrome: string;
|
||||
files: string[];
|
||||
body?: string;
|
||||
apm?: string;
|
||||
}
|
||||
|
||||
async function getElectronReleases(): Promise<ElectronVersion[]> {
|
||||
return await fetchJson("https://releases.electronjs.org/releases.json");
|
||||
}
|
||||
|
||||
async function findVsCodeVersions() {
|
||||
const packageJson = await readJSON(
|
||||
resolve(extensionDirectory, "package.json"),
|
||||
@@ -58,28 +15,9 @@ async function findVsCodeVersions() {
|
||||
throw new Error("Could not find minimum VS Code version");
|
||||
}
|
||||
|
||||
const vsCodePackageJson = await getVsCodePackageJson(minimumVsCodeVersion);
|
||||
const electronVersion = minVersion(vsCodePackageJson.devDependencies.electron)
|
||||
?.version;
|
||||
if (!electronVersion) {
|
||||
throw new Error("Could not find Electron version");
|
||||
}
|
||||
|
||||
const versionInformation = await getVersionInformation(minimumVsCodeVersion);
|
||||
console.log(
|
||||
`VS Code ${minimumVsCodeVersion} uses Electron ${electronVersion}`,
|
||||
);
|
||||
|
||||
const electronReleases = await getElectronReleases();
|
||||
|
||||
const electronRelease = electronReleases.find(
|
||||
(release) => release.version === electronVersion,
|
||||
);
|
||||
if (!electronRelease) {
|
||||
throw new Error(`Could not find Electron release ${electronVersion}`);
|
||||
}
|
||||
|
||||
console.log(
|
||||
`Electron ${electronRelease.version} uses Node ${electronRelease.node} and Chromium ${electronRelease.chrome}`,
|
||||
`VS Code ${versionInformation.vscodeVersion} uses Electron ${versionInformation.electronVersion}, Node ${versionInformation.nodeVersion} and Chromium ${versionInformation.chromiumVersion}`,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
79
extensions/ql-vscode/scripts/util/vscode-versions.ts
Normal file
79
extensions/ql-vscode/scripts/util/vscode-versions.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import { minVersion } from "semver";
|
||||
|
||||
async function fetchJson<T>(url: string): Promise<T> {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Could not fetch ${url}: ${response.status} ${response.statusText}`,
|
||||
);
|
||||
}
|
||||
|
||||
return (await response.json()) as T;
|
||||
}
|
||||
|
||||
type VsCodePackageJson = {
|
||||
devDependencies: {
|
||||
electron: string;
|
||||
};
|
||||
};
|
||||
|
||||
async function getVsCodePackageJson(
|
||||
version: string,
|
||||
): Promise<VsCodePackageJson> {
|
||||
return await fetchJson(
|
||||
`https://raw.githubusercontent.com/microsoft/vscode/${version}/package.json`,
|
||||
);
|
||||
}
|
||||
|
||||
interface ElectronVersion {
|
||||
version: string;
|
||||
date: string;
|
||||
node: string;
|
||||
v8: string;
|
||||
uv: string;
|
||||
zlib: string;
|
||||
openssl: string;
|
||||
modules: string;
|
||||
chrome: string;
|
||||
files: string[];
|
||||
body?: string;
|
||||
apm?: string;
|
||||
}
|
||||
|
||||
async function getElectronReleases(): Promise<ElectronVersion[]> {
|
||||
return await fetchJson("https://releases.electronjs.org/releases.json");
|
||||
}
|
||||
|
||||
type VersionInformation = {
|
||||
vscodeVersion: string;
|
||||
electronVersion: string;
|
||||
nodeVersion: string;
|
||||
chromiumVersion: string;
|
||||
};
|
||||
|
||||
export async function getVersionInformation(
|
||||
vscodeVersion: string,
|
||||
): Promise<VersionInformation> {
|
||||
const vsCodePackageJson = await getVsCodePackageJson(vscodeVersion);
|
||||
const electronVersion = minVersion(vsCodePackageJson.devDependencies.electron)
|
||||
?.version;
|
||||
if (!electronVersion) {
|
||||
throw new Error("Could not find Electron version");
|
||||
}
|
||||
|
||||
const electronReleases = await getElectronReleases();
|
||||
|
||||
const electronRelease = electronReleases.find(
|
||||
(release) => release.version === electronVersion,
|
||||
);
|
||||
if (!electronRelease) {
|
||||
throw new Error(`Could not find Electron release ${electronVersion}`);
|
||||
}
|
||||
|
||||
return {
|
||||
vscodeVersion,
|
||||
electronVersion,
|
||||
nodeVersion: electronRelease.node,
|
||||
chromiumVersion: electronRelease.chrome,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user