From 83ea06137bf42dbdc103c756f2797b92631e25e8 Mon Sep 17 00:00:00 2001 From: Romain Lenzotti Date: Wed, 24 Apr 2024 20:31:39 +0200 Subject: [PATCH] fix(swagger): avoid swagger-ui-dist import to resolve swagger-ui assets path --- packages/specs/swagger/scripts/constants.js | 7 +++++++ packages/specs/swagger/src/SwaggerModule.ts | 16 ++++++---------- packages/specs/swagger/src/constants.ts | 4 ++++ packages/specs/swagger/src/index.ts | 1 + 4 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 packages/specs/swagger/scripts/constants.js create mode 100644 packages/specs/swagger/src/constants.ts diff --git a/packages/specs/swagger/scripts/constants.js b/packages/specs/swagger/scripts/constants.js new file mode 100644 index 00000000000..01970f2321e --- /dev/null +++ b/packages/specs/swagger/scripts/constants.js @@ -0,0 +1,7 @@ +import {dirname} from "node:path"; +import {fileURLToPath} from "node:url"; + +// @ts-ignore +export const SWAGGER_UI_DIST = dirname(import.meta.resolve("swagger-ui-dist")); +// @ts-expect-error +export const ROOT_DIR = dirname(fileURLToPath(import.meta.url)); diff --git a/packages/specs/swagger/src/SwaggerModule.ts b/packages/specs/swagger/src/SwaggerModule.ts index 2190a26f757..d234fba2115 100644 --- a/packages/specs/swagger/src/SwaggerModule.ts +++ b/packages/specs/swagger/src/SwaggerModule.ts @@ -1,21 +1,20 @@ import { - OnRoutesInit, Configuration, Constant, Inject, InjectorService, Module, OnReady, + OnRoutesInit, PlatformApplication, PlatformContext } from "@tsed/common"; +import {Env} from "@tsed/core"; +import {normalizePath} from "@tsed/normalize-path"; import {PlatformRouter, useContextHandler} from "@tsed/platform-router"; import Fs from "fs"; import {join} from "path"; -import {Env} from "@tsed/core"; -import {normalizePath} from "@tsed/normalize-path"; -import filedirname from "filedirname"; -import {absolutePath} from "swagger-ui-dist"; +import {ROOT_DIR, SWAGGER_UI_DIST} from "./constants"; import {SwaggerSettings} from "./interfaces/SwaggerSettings"; import {cssMiddleware} from "./middlewares/cssMiddleware"; import {indexMiddleware} from "./middlewares/indexMiddleware"; @@ -23,9 +22,6 @@ import {jsMiddleware} from "./middlewares/jsMiddleware"; import {redirectMiddleware} from "./middlewares/redirectMiddleware"; import {SwaggerService} from "./services/SwaggerService"; -// FIXME remove when esm is ready -const [, rootDir] = filedirname(); - /** * @ignore */ @@ -130,7 +126,7 @@ export class SwaggerModule implements OnRoutesInit, OnReady { * @param urls */ private createRouter(conf: SwaggerSettings, urls: string[]) { - const {disableSpec = false, fileName = "swagger.json", cssPath, jsPath, viewPath = join(rootDir, "../views/index.ejs")} = conf; + const {disableSpec = false, fileName = "swagger.json", cssPath, jsPath, viewPath = join(ROOT_DIR, "../views/index.ejs")} = conf; const router = new PlatformRouter(this.injector); if (!disableSpec) { @@ -147,7 +143,7 @@ export class SwaggerModule implements OnRoutesInit, OnReady { } router.get("/", useContextHandler(indexMiddleware(viewPath, {urls, ...conf}))); - router.statics("/", {root: absolutePath()}); + router.statics("/", {root: SWAGGER_UI_DIST}); } return router; diff --git a/packages/specs/swagger/src/constants.ts b/packages/specs/swagger/src/constants.ts new file mode 100644 index 00000000000..8cb249b948a --- /dev/null +++ b/packages/specs/swagger/src/constants.ts @@ -0,0 +1,4 @@ +import {dirname} from "path"; + +export const SWAGGER_UI_DIST = dirname(require.resolve("swagger-ui-dist")); +export const ROOT_DIR = __dirname; diff --git a/packages/specs/swagger/src/index.ts b/packages/specs/swagger/src/index.ts index bf8d4c12f61..4e274100da4 100644 --- a/packages/specs/swagger/src/index.ts +++ b/packages/specs/swagger/src/index.ts @@ -3,6 +3,7 @@ */ export * from "./SwaggerModule"; +export * from "./constants"; export * from "./decorators/docs"; export * from "./decorators/hidden"; export * from "./interfaces/SwaggerSettings";