diff --git a/apps/bff/tsconfig.build.json b/apps/bff/tsconfig.build.json index caf99450..abd666b4 100644 --- a/apps/bff/tsconfig.build.json +++ b/apps/bff/tsconfig.build.json @@ -5,6 +5,7 @@ "incremental": true, "tsBuildInfoFile": "./tsconfig.build.tsbuildinfo", "outDir": "./dist", + "rootDir": "./src", "sourceMap": true, "declaration": false, "removeComments": true, diff --git a/packages/shared/src/logging/nest-logger.config.ts b/packages/shared/src/logging/nest-logger.config.ts index 2aacb33b..079a50f6 100644 --- a/packages/shared/src/logging/nest-logger.config.ts +++ b/packages/shared/src/logging/nest-logger.config.ts @@ -1,7 +1,19 @@ // Lightweight, framework-agnostic factory that returns an object compatible // with nestjs-pino's LoggerModule.forRoot({ pinoHttp: {...} }) shape without importing types. import { join } from "path"; -import { mkdir } from "fs/promises"; + +// Dynamic import for fs/promises - will be resolved at runtime +async function getMkdir() { + if (typeof window !== 'undefined' || typeof process === 'undefined') { + return null; + } + try { + const fs = await import("fs/promises"); + return fs.mkdir; + } catch { + return null; + } +} export async function createNestPinoConfig(configService: { get(key: string, defaultValue?: T): T; @@ -11,10 +23,13 @@ export async function createNestPinoConfig(configService: { const appName = configService.get("APP_NAME", "customer-portal-bff"); if (nodeEnv === "production") { - try { - await mkdir("logs", { recursive: true }); - } catch { - // ignore + const mkdir = await getMkdir(); + if (mkdir) { + try { + await mkdir("logs", { recursive: true }); + } catch { + // ignore + } } }