fix(docs): unpack the OpenAPI spec files, and have Swagger UI read from the unpacked files

This commit is contained in:
perf3ct
2025-07-11 21:11:05 +00:00
parent b6f50b6af0
commit adfaa8b12c
2 changed files with 16 additions and 4 deletions

View File

@@ -37,7 +37,9 @@ const config: ForgeConfig = {
executableName: EXECUTABLE_NAME,
name: PRODUCT_NAME,
overwrite: true,
asar: true,
asar: {
unpack: "{**/node_modules/swagger-ui-dist/**,**/assets/*.yaml,**/assets/*.json}"
},
icon: path.join(APP_ICON_PATH, "icon"),
...macosSignConfiguration,
windowsSign: windowsSignConfiguration,

View File

@@ -3,12 +3,22 @@ import swaggerUi from "swagger-ui-express";
import { join } from "path";
import yaml from "js-yaml";
import type { JsonObject } from "swagger-ui-express";
import { readFileSync } from "fs";
import { readFileSync, existsSync } from "fs";
import { RESOURCE_DIR } from "../services/resource_dir";
export default function register(app: Application) {
const etapiDocument = yaml.load(readFileSync(join(RESOURCE_DIR, "etapi.openapi.yaml"), "utf8")) as JsonObject;
const apiDocument = JSON.parse(readFileSync(join(RESOURCE_DIR, "openapi.json"), "utf-8"));
// In packaged Electron apps, check if we need to read from the unpacked directory
let resourceDir = RESOURCE_DIR;
if (resourceDir.includes('app.asar')) {
const unpackedDir = RESOURCE_DIR.replace('app.asar', 'app.asar.unpacked');
// Check if the unpacked directory has our files
if (existsSync(join(unpackedDir, "etapi.openapi.yaml"))) {
resourceDir = unpackedDir;
}
}
const etapiDocument = yaml.load(readFileSync(join(resourceDir, "etapi.openapi.yaml"), "utf8")) as JsonObject;
const apiDocument = JSON.parse(readFileSync(join(resourceDir, "openapi.json"), "utf-8"));
app.use(
"/etapi/docs/",