From ddaf99b3552ecc262fe1631157fa7c11c0035c76 Mon Sep 17 00:00:00 2001 From: Dan Pickett Date: Sat, 20 Jun 2020 11:47:59 -0400 Subject: [PATCH 1/3] support cjs extension for ormconfig --- src/connection/ConnectionOptionsReader.ts | 4 ++-- test/github-issues/6284/issue-6284.ts | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 test/github-issues/6284/issue-6284.ts diff --git a/src/connection/ConnectionOptionsReader.ts b/src/connection/ConnectionOptionsReader.ts index f5dc6a8d72..03f00f9957 100644 --- a/src/connection/ConnectionOptionsReader.ts +++ b/src/connection/ConnectionOptionsReader.ts @@ -80,7 +80,7 @@ export class ConnectionOptionsReader { protected async load(): Promise { let connectionOptions: ConnectionOptions|ConnectionOptions[]|undefined = undefined; - const fileFormats = ["env", "js", "ts", "json", "yml", "yaml", "xml"]; + const fileFormats = ["env", "js", "cjs", "ts", "json", "yml", "yaml", "xml"]; // Detect if baseFilePath contains file extension const possibleExtension = this.baseFilePath.substr(this.baseFilePath.lastIndexOf(".")); @@ -107,7 +107,7 @@ export class ConnectionOptionsReader { if (PlatformTools.getEnvVariable("TYPEORM_CONNECTION") || PlatformTools.getEnvVariable("TYPEORM_URL")) { connectionOptions = new ConnectionOptionsEnvReader().read(); - } else if (foundFileFormat === "js") { + } else if (foundFileFormat === "js" || foundFileFormat === "cjs") { connectionOptions = await PlatformTools.load(configFile); } else if (foundFileFormat === "ts") { diff --git a/test/github-issues/6284/issue-6284.ts b/test/github-issues/6284/issue-6284.ts new file mode 100644 index 0000000000..f6f6b11de1 --- /dev/null +++ b/test/github-issues/6284/issue-6284.ts @@ -0,0 +1,21 @@ +import {expect} from "chai"; +import { writeFileSync, unlinkSync } from "fs"; +import { ConnectionOptionsReader } from "../../../src/connection/ConnectionOptionsReader"; + +describe("cli support for cjs extension", () => { + it("will load a cjs file", async () => { + const databaseType = "postgres"; + const config = `module.exports = {"type": "${databaseType}"};`; + const cjsConfigPath = [__dirname, "ormconfig.cjs"].join("/") + writeFileSync(cjsConfigPath, config) + + const reader = new ConnectionOptionsReader({root: __dirname }); + + const results = await reader.all(); + expect(results).to.be.an("Array"); + expect(results[0]).to.be.an("Object"); + expect(results[0].type).to.equal(databaseType); + + unlinkSync(cjsConfigPath); + }); +}); From 5f0be7eca60a643c78143cbf72ad5e5fac1554c0 Mon Sep 17 00:00:00 2001 From: Dan Pickett Date: Sat, 20 Jun 2020 12:22:46 -0400 Subject: [PATCH 2/3] fix linting errors --- test/github-issues/6284/issue-6284.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/github-issues/6284/issue-6284.ts b/test/github-issues/6284/issue-6284.ts index f6f6b11de1..f320ac9734 100644 --- a/test/github-issues/6284/issue-6284.ts +++ b/test/github-issues/6284/issue-6284.ts @@ -6,8 +6,8 @@ describe("cli support for cjs extension", () => { it("will load a cjs file", async () => { const databaseType = "postgres"; const config = `module.exports = {"type": "${databaseType}"};`; - const cjsConfigPath = [__dirname, "ormconfig.cjs"].join("/") - writeFileSync(cjsConfigPath, config) + const cjsConfigPath = [__dirname, "ormconfig.cjs"].join("/"); + writeFileSync(cjsConfigPath, config); const reader = new ConnectionOptionsReader({root: __dirname }); From c28aca0a1198ea45b85196633f6c3911cda433ca Mon Sep 17 00:00:00 2001 From: Dan Pickett Date: Sun, 21 Jun 2020 15:12:29 -0400 Subject: [PATCH 3/3] handle cjs extensions in class loader --- src/util/DirectoryExportedClassesLoader.ts | 4 ++-- test/github-issues/6284/issue-6284.ts | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/util/DirectoryExportedClassesLoader.ts b/src/util/DirectoryExportedClassesLoader.ts index 9aea39c571..321937a198 100644 --- a/src/util/DirectoryExportedClassesLoader.ts +++ b/src/util/DirectoryExportedClassesLoader.ts @@ -4,7 +4,7 @@ import {Logger} from "../logger/Logger"; /** * Loads all exported classes from the given directory. */ -export function importClassesFromDirectories(logger: Logger, directories: string[], formats = [".js", ".ts"]): Function[] { +export function importClassesFromDirectories(logger: Logger, directories: string[], formats = [".js", ".cjs", ".ts"]): Function[] { const logLevel = "info"; const classesNotFoundMessage = "No classes were found using the provided glob pattern: "; @@ -54,4 +54,4 @@ export function importJsonsFromDirectories(directories: string[], format = ".jso return allFiles .filter(file => PlatformTools.pathExtname(file) === format) .map(file => PlatformTools.load(PlatformTools.pathResolve(file))); -} \ No newline at end of file +} diff --git a/test/github-issues/6284/issue-6284.ts b/test/github-issues/6284/issue-6284.ts index f320ac9734..ff686e3cd9 100644 --- a/test/github-issues/6284/issue-6284.ts +++ b/test/github-issues/6284/issue-6284.ts @@ -1,14 +1,16 @@ import {expect} from "chai"; import { writeFileSync, unlinkSync } from "fs"; import { ConnectionOptionsReader } from "../../../src/connection/ConnectionOptionsReader"; +import { importClassesFromDirectories } from "../../../src/util/DirectoryExportedClassesLoader"; +import { LoggerFactory } from "../../../src/logger/LoggerFactory"; describe("cli support for cjs extension", () => { it("will load a cjs file", async () => { + const cjsConfigPath = [__dirname, "ormconfig.cjs"].join("/"); const databaseType = "postgres"; const config = `module.exports = {"type": "${databaseType}"};`; - const cjsConfigPath = [__dirname, "ormconfig.cjs"].join("/"); - writeFileSync(cjsConfigPath, config); + writeFileSync(cjsConfigPath, config); const reader = new ConnectionOptionsReader({root: __dirname }); const results = await reader.all(); @@ -16,6 +18,19 @@ describe("cli support for cjs extension", () => { expect(results[0]).to.be.an("Object"); expect(results[0].type).to.equal(databaseType); + unlinkSync(cjsConfigPath); }); + + it("loads cjs files via DirectoryExportedClassesloader", () => { + const klassPath = [__dirname, "klass.cjs"].join("/"); + const klass = `module.exports.Widget = class Widget {};`; + writeFileSync(klassPath, klass); + + const classes = importClassesFromDirectories(new LoggerFactory().create(), [`${__dirname}/*.cjs`]); + expect(classes).to.be.an("Array"); + expect(classes.length).to.eq(1); + + unlinkSync(klassPath); + }); });