Merge pull request #2756 from niieani/bb/fix-null

fix: return an empty object if yaml file is empty
This commit is contained in:
Mauricio Siu
2025-10-05 12:10:55 -06:00
committed by GitHub

View File

@@ -100,7 +100,7 @@ export const loadRemoteMiddlewares = async (serverId: string) => {
throw new Error(`File not found: ${configPath}`); throw new Error(`File not found: ${configPath}`);
} }
}; };
export const writeMiddleware = <T>(config: T) => { export const writeMiddleware = (config: FileConfig) => {
const { DYNAMIC_TRAEFIK_PATH } = paths(); const { DYNAMIC_TRAEFIK_PATH } = paths();
const configPath = join(DYNAMIC_TRAEFIK_PATH, "middlewares.yml"); const configPath = join(DYNAMIC_TRAEFIK_PATH, "middlewares.yml");
const newYamlContent = stringify(config); const newYamlContent = stringify(config);
@@ -111,6 +111,18 @@ export const createPathMiddlewares = async (
app: ApplicationNested, app: ApplicationNested,
domain: Domain, domain: Domain,
) => { ) => {
const { appName } = app;
const { uniqueConfigKey, internalPath, stripPath, path } = domain;
// Early return if there's no path middleware to create
const needsInternalPathMiddleware =
internalPath && internalPath !== "/" && internalPath !== path;
const needsStripPathMiddleware = stripPath && path && path !== "/";
if (!needsInternalPathMiddleware && !needsStripPathMiddleware) {
return;
}
let config: FileConfig; let config: FileConfig;
if (app.serverId) { if (app.serverId) {
@@ -127,20 +139,19 @@ export const createPathMiddlewares = async (
} }
} }
const { appName } = app; if (!config) {
const { uniqueConfigKey, internalPath, stripPath, path } = domain; config = { http: { middlewares: {} } };
} else if (!config.http) {
if (!config.http) {
config.http = { middlewares: {} }; config.http = { middlewares: {} };
} }
if (!config.http.middlewares) { if (!config.http?.middlewares) {
config.http.middlewares = {}; config.http!.middlewares = {};
} }
// Add internal path prefix middleware // Add internal path prefix middleware
if (internalPath && internalPath !== "/" && internalPath !== path) { if (internalPath && internalPath !== "/" && internalPath !== path) {
const middlewareName = `addprefix-${appName}-${uniqueConfigKey}`; const middlewareName = `addprefix-${appName}-${uniqueConfigKey}`;
config.http.middlewares[middlewareName] = { config.http!.middlewares[middlewareName] = {
addPrefix: { addPrefix: {
prefix: internalPath, prefix: internalPath,
}, },
@@ -150,7 +161,7 @@ export const createPathMiddlewares = async (
// Strip external path middleware if needed // Strip external path middleware if needed
if (stripPath && path && path !== "/") { if (stripPath && path && path !== "/") {
const middlewareName = `stripprefix-${appName}-${uniqueConfigKey}`; const middlewareName = `stripprefix-${appName}-${uniqueConfigKey}`;
config.http.middlewares[middlewareName] = { config.http!.middlewares[middlewareName] = {
stripPrefix: { stripPrefix: {
prefixes: [path], prefixes: [path],
}, },
@@ -184,6 +195,10 @@ export const removePathMiddlewares = async (
} }
} }
if (!config) {
return;
}
const { appName } = app; const { appName } = app;
if (config.http?.middlewares) { if (config.http?.middlewares) {
@@ -194,6 +209,23 @@ export const removePathMiddlewares = async (
delete config.http.middlewares[stripPrefixMiddleware]; delete config.http.middlewares[stripPrefixMiddleware];
} }
if (
config?.http?.middlewares &&
Object.keys(config.http.middlewares).length === 0
) {
// if there aren't any middlewares, remove the whole section
delete config.http.middlewares;
}
// // If http section is empty, remove it completely
if (config?.http && Object.keys(config?.http).length === 0) {
delete config.http;
}
if (config && Object.keys(config || {}).length === 0) {
config = {};
}
if (app.serverId) { if (app.serverId) {
await writeTraefikConfigRemote(config, "middlewares", app.serverId); await writeTraefikConfigRemote(config, "middlewares", app.serverId);
} else { } else {