From 9e931025b90217a8e449b31686d6485e99fb2863 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sun, 17 Nov 2019 19:21:54 +0100 Subject: [PATCH] fix naming strategy with relative path(#171) --- src/ModelCustomization.ts | 7 +++---- src/NamingStrategy.ts | 5 +---- src/Utils.ts | 14 ++++++++++++++ test/modelCustomization/modelCustomization.test.ts | 2 +- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/ModelCustomization.ts b/src/ModelCustomization.ts index 4c7dbb2..3833d70 100644 --- a/src/ModelCustomization.ts +++ b/src/ModelCustomization.ts @@ -35,10 +35,9 @@ export default function modelCustomizationPhase( generationOptions.customNamingStrategyPath !== "" ) { // TODO: change form of logging - // eslint-disable-next-line global-require, import/no-dynamic-require, @typescript-eslint/no-var-requires - const req = require(generationOptions.customNamingStrategyPath) as Partial< - NamingStrategy - >; + const req = TomgUtils.requireLocalFile( + generationOptions.customNamingStrategyPath + ) as Partial; if (req.columnName) { console.log( `[${new Date().toLocaleTimeString()}] Using custom naming strategy for column names.` diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index fd077a0..8ff4546 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -1,11 +1,8 @@ import { plural } from "pluralize"; +import * as changeCase from "change-case"; import { Relation } from "./models/Relation"; import { RelationId } from "./models/RelationId"; -import changeCase = require("change-case"); - -// TODO: Fix naming strategy relative path - export function relationIdName( relationId: RelationId, relation: Relation diff --git a/src/Utils.ts b/src/Utils.ts index af39d98..d121435 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1,4 +1,5 @@ import * as changeCase from "change-case"; +import * as path from "path"; import * as packagejson from "../package.json"; import { Entity } from "./models/Entity"; @@ -66,3 +67,16 @@ export function findNameForNewField( } return fieldName; } + +export function requireLocalFile(fileName: string): any { + try { + // eslint-disable-next-line global-require, import/no-dynamic-require, @typescript-eslint/no-var-requires + return require(fileName); + } catch (err) { + if (!path.isAbsolute(fileName)) { + // eslint-disable-next-line global-require, import/no-dynamic-require, @typescript-eslint/no-var-requires + return require(path.resolve(process.cwd(), fileName)); + } + throw err; + } +} diff --git a/test/modelCustomization/modelCustomization.test.ts b/test/modelCustomization/modelCustomization.test.ts index 00d5bbd..5ddb827 100644 --- a/test/modelCustomization/modelCustomization.test.ts +++ b/test/modelCustomization/modelCustomization.test.ts @@ -570,7 +570,7 @@ describe("Model customization phase", async () => { clearGenerationDir(); generationOptions.customNamingStrategyPath = - "../test/modelCustomization/testNamingStrategy.ts"; + "test/modelCustomization/testNamingStrategy.ts"; // TODO: relationId const customizedModel = modelCustomizationPhase(