mirror of
https://github.com/Pandipipas/scoreko-electron-dev.git
synced 2026-06-06 05:32:06 +00:00
Refactor NodeCG runtime preparation and update handling
- Updated paths and configurations in doctor.mjs and prepare-nodecg-runtime.mjs to use new build-config.mjs imports. - Enhanced runtime installation checks and permissions validation. - Introduced new update configuration management in update-config.ts, including loading and validating update settings. - Implemented update service for managing update checks and downloads in update-service.ts. - Replaced update-utils.ts with update-schema.ts for better structure and clarity in update handling. - Added comprehensive tests for update download and settings management. - Ensured secure handling of download URLs and improved error handling in update processes.
This commit is contained in:
@@ -3,14 +3,29 @@ import { existsSync, mkdirSync, rmSync } from "node:fs";
|
||||
import path from "node:path";
|
||||
import { spawnSync } from "node:child_process";
|
||||
|
||||
const electronRoot = process.cwd();
|
||||
const bundleRoot = path.resolve(electronRoot, "..");
|
||||
const packageJsonPath = path.join(bundleRoot, "package.json");
|
||||
const pnpmLockPath = path.join(bundleRoot, "pnpm-lock.yaml");
|
||||
import {
|
||||
bundleRoot,
|
||||
bundleRootMarkers,
|
||||
electronRoot,
|
||||
generatedBundleEntries,
|
||||
getLocalBinPath,
|
||||
getPathInside,
|
||||
} from "./build-config.mjs";
|
||||
|
||||
const nodeModulesPath = path.join(bundleRoot, "node_modules");
|
||||
|
||||
if (!existsSync(packageJsonPath) || !existsSync(pnpmLockPath)) {
|
||||
console.error(`Scoreko bundle root was not found at: ${bundleRoot}`);
|
||||
const missingMarkers = bundleRootMarkers
|
||||
.map((entry) => path.join(bundleRoot, entry))
|
||||
.filter((candidatePath) => !existsSync(candidatePath));
|
||||
|
||||
if (missingMarkers.length > 0) {
|
||||
console.error(
|
||||
[
|
||||
`Scoreko bundle root was not found at: ${bundleRoot}`,
|
||||
"This Electron package expects to live inside the Scoreko repository with the bundle project as its parent.",
|
||||
...missingMarkers.map((candidatePath) => `Missing: ${candidatePath}`),
|
||||
].join("\n"),
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
@@ -25,7 +40,6 @@ if (!existsSync(nodeModulesPath)) {
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const generatedBundleEntries = ["extension", "node_modules/.vite", "shared/dist", "dashboard", "graphics"];
|
||||
const childEnv = {
|
||||
...process.env,
|
||||
COREPACK_HOME: process.env.COREPACK_HOME ?? path.join(electronRoot, ".corepack"),
|
||||
@@ -33,12 +47,7 @@ const childEnv = {
|
||||
};
|
||||
|
||||
function removeGeneratedOutput(relativePath) {
|
||||
const targetPath = path.resolve(bundleRoot, relativePath);
|
||||
|
||||
if (!targetPath.startsWith(`${bundleRoot}${path.sep}`)) {
|
||||
throw new Error(`Refusing to remove path outside the bundle root: ${targetPath}`);
|
||||
}
|
||||
|
||||
const targetPath = getPathInside(bundleRoot, relativePath);
|
||||
rmSync(targetPath, { recursive: true, force: true });
|
||||
}
|
||||
|
||||
@@ -60,11 +69,6 @@ function runCommand(command, args) {
|
||||
}
|
||||
}
|
||||
|
||||
function runLocalBin(commandName, args) {
|
||||
const extension = process.platform === "win32" ? ".CMD" : "";
|
||||
runCommand(path.join(bundleRoot, "node_modules", ".bin", `${commandName}${extension}`), args);
|
||||
}
|
||||
|
||||
for (const entry of generatedBundleEntries) {
|
||||
removeGeneratedOutput(entry);
|
||||
}
|
||||
@@ -73,5 +77,5 @@ for (const entry of ["shared/dist", "dashboard", "graphics", "extension"]) {
|
||||
mkdirSync(path.join(bundleRoot, entry), { recursive: true });
|
||||
}
|
||||
|
||||
runLocalBin("vite", ["build", "--configLoader", "runner"]);
|
||||
runLocalBin("tsc", ["-b", "tsconfig.extension.json"]);
|
||||
runCommand(getLocalBinPath("vite"), ["build", "--configLoader", "runner"]);
|
||||
runCommand(getLocalBinPath("tsc"), ["-b", "tsconfig.extension.json"]);
|
||||
|
||||
Reference in New Issue
Block a user