mirror of
https://github.com/zadam/trilium.git
synced 2025-10-26 15:56:29 +01:00
Compare commits
2 Commits
kev/share-
...
fix/try-to
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
055556891d | ||
|
|
a58cfbec05 |
@@ -3,31 +3,70 @@ 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 fs from "fs";
|
||||
import { RESOURCE_DIR } from "../services/resource_dir";
|
||||
import log from "../services/log";
|
||||
|
||||
// Cache the documents to avoid repeated file reads, especially important for ASAR archives
|
||||
let etapiDocument: JsonObject | null = null;
|
||||
let apiDocument: JsonObject | null = null;
|
||||
|
||||
function loadDocuments(): { etapi: JsonObject | null; api: JsonObject | null } {
|
||||
if (etapiDocument && apiDocument) {
|
||||
return { etapi: etapiDocument, api: apiDocument };
|
||||
}
|
||||
|
||||
try {
|
||||
const etapiPath = join(RESOURCE_DIR, "etapi.openapi.yaml");
|
||||
const apiPath = join(RESOURCE_DIR, "api-openapi.yaml");
|
||||
|
||||
// Load and cache the documents
|
||||
const etapiYaml = fs.readFileSync(etapiPath, "utf8");
|
||||
etapiDocument = yaml.load(etapiYaml) as JsonObject;
|
||||
|
||||
const apiYaml = fs.readFileSync(apiPath, "utf8");
|
||||
apiDocument = yaml.load(apiYaml) as JsonObject;
|
||||
|
||||
log.info("OpenAPI documents loaded successfully");
|
||||
return { etapi: etapiDocument, api: apiDocument };
|
||||
} catch (error) {
|
||||
log.error(`Failed to load OpenAPI documents from ${RESOURCE_DIR}: ${error}`);
|
||||
return { etapi: null, api: null };
|
||||
}
|
||||
}
|
||||
|
||||
export default function register(app: Application) {
|
||||
const etapiDocument = yaml.load(readFileSync(join(RESOURCE_DIR, "etapi.openapi.yaml"), "utf8")) as JsonObject;
|
||||
try {
|
||||
const docs = loadDocuments();
|
||||
|
||||
// Load the comprehensive API documentation from YAML
|
||||
const apiDocument = yaml.load(readFileSync(join(RESOURCE_DIR, "api-openapi.yaml"), "utf8")) as JsonObject;
|
||||
if (!docs.etapi || !docs.api) {
|
||||
log.error("OpenAPI documents could not be loaded, skipping API documentation setup");
|
||||
return;
|
||||
}
|
||||
|
||||
app.use(
|
||||
"/etapi/docs/",
|
||||
swaggerUi.serveFiles(etapiDocument),
|
||||
swaggerUi.setup(etapiDocument, {
|
||||
explorer: true,
|
||||
customSiteTitle: "TriliumNext ETAPI Documentation"
|
||||
})
|
||||
);
|
||||
// Use serveFiles for multiple Swagger instances
|
||||
// Note: serveFiles returns an array of middleware, so we need to spread it
|
||||
app.use(
|
||||
"/etapi/docs",
|
||||
...swaggerUi.serveFiles(docs.etapi),
|
||||
swaggerUi.setup(docs.etapi, {
|
||||
explorer: true,
|
||||
customSiteTitle: "TriliumNext ETAPI Documentation"
|
||||
})
|
||||
);
|
||||
|
||||
app.use(
|
||||
"/api/docs/",
|
||||
swaggerUi.serveFiles(apiDocument),
|
||||
swaggerUi.setup(apiDocument, {
|
||||
explorer: true,
|
||||
customSiteTitle: "TriliumNext Internal API Documentation",
|
||||
customCss: '.swagger-ui .topbar { display: none }'
|
||||
})
|
||||
);
|
||||
app.use(
|
||||
"/api/docs",
|
||||
...swaggerUi.serveFiles(docs.api),
|
||||
swaggerUi.setup(docs.api, {
|
||||
explorer: true,
|
||||
customSiteTitle: "TriliumNext Internal API Documentation",
|
||||
customCss: '.swagger-ui .topbar { display: none }'
|
||||
})
|
||||
);
|
||||
|
||||
log.info("Swagger UI endpoints registered at /etapi/docs and /api/docs");
|
||||
} catch (error) {
|
||||
log.error(`Failed to setup API documentation: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user