From 180fbd415da80ce383b426f6d38486aa3826296d Mon Sep 17 00:00:00 2001 From: James Ward Date: Fri, 25 Sep 2020 23:03:30 -0400 Subject: [PATCH] fix: add dummy for FileLogger, ConnectionOptionsReaders, and update gulpfile (#6763) --- gulpfile.ts | 32 ++--------- package.json | 5 ++ src/connection/ConnectionOptionsReader.ts | 8 +-- .../ConnectionOptionsEnvReader.ts | 6 +- .../ConnectionOptionsYmlReader.ts | 2 +- ...owserConnectionOptionsReaderDummy.template | 55 +++++++++++++++++++ src/platform/BrowserFileLoggerDummy.template | 50 +++++++++++++++++ 7 files changed, 124 insertions(+), 34 deletions(-) create mode 100644 src/platform/BrowserConnectionOptionsReaderDummy.template create mode 100644 src/platform/BrowserFileLoggerDummy.template diff --git a/gulpfile.ts b/gulpfile.ts index 7d0fbeb05d..18edf52cb9 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -64,38 +64,18 @@ export class Gulpfile { "!./src/commands/*.ts", "!./src/cli.ts", "!./src/typeorm.ts", - "!./src/typeorm-model-shim.ts", - "!./src/platform/PlatformTools.ts" + "!./src/typeorm-model-shim.ts" ]) .pipe(gulp.dest("./build/browser/src")); } /** - * Replaces PlatformTools with browser-specific implementation called BrowserPlatformTools. + * Copies templates for compilation */ @Task() - browserCopyDirectoryExportedClassesLoader() { - return gulp.src("./src/platform/BrowserDirectoryExportedClassesLoader.template") - .pipe(rename("BrowserDirectoryExportedClassesLoader.ts")) - .pipe(gulp.dest("./build/browser/src/platform")); - } - /** - * Replaces PlatformTools with browser-specific implementation called BrowserPlatformTools. - */ - @Task() - browserCopyPlatformTools() { - return gulp.src("./src/platform/BrowserPlatformTools.template") - .pipe(rename("PlatformTools.ts")) - .pipe(gulp.dest("./build/browser/src/platform")); - } - - /** - * Adds dummy classes for disabled drivers (replacement is done via browser entry point in package.json) - */ - @Task() - browserCopyDisabledDriversDummy() { - return gulp.src("./src/platform/BrowserDisabledDriversDummy.template") - .pipe(rename("BrowserDisabledDriversDummy.ts")) + browserCopyTemplates() { + return gulp.src("./src/platform/*.template") + .pipe(rename((p: any) => { p.extname = '.ts'; })) .pipe(gulp.dest("./build/browser/src/platform")); } @@ -242,7 +222,7 @@ export class Gulpfile { package() { return [ "clean", - ["browserCopySources", "browserCopyPlatformTools", "browserCopyDisabledDriversDummy", "browserCopyDirectoryExportedClassesLoader"], + ["browserCopySources", "browserCopyTemplates"], ["packageCompile", "browserCompile"], "packageMoveCompiledFiles", [ diff --git a/package.json b/package.json index 60b1a0fe02..3404d7b2b8 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,11 @@ "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", + "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", + "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", + "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", + "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", + "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./index.js": "./browser/index.js" }, "repository": { diff --git a/src/connection/ConnectionOptionsReader.ts b/src/connection/ConnectionOptionsReader.ts index 997c240554..af66a4d566 100644 --- a/src/connection/ConnectionOptionsReader.ts +++ b/src/connection/ConnectionOptionsReader.ts @@ -103,8 +103,8 @@ export class ConnectionOptionsReader { const configFile = fileExtension ? this.baseFilePath : this.baseFilePath + "." + foundFileFormat; // try to find connection options from any of available sources of configuration - if (PlatformTools.getEnvVariable("TYPEORM_CONNECTION") || PlatformTools.getEnvVariable("TYPEORM_URL")) { - connectionOptions = new ConnectionOptionsEnvReader().read(); + if (PlatformTools.getEnvVariable("TYPEORM_CONNECTION") || PlatformTools.getEnvVariable("TYPEORM_URL")) { + connectionOptions = await new ConnectionOptionsEnvReader().read(); } else if (foundFileFormat === "js" || foundFileFormat === "cjs") { connectionOptions = await require(configFile); @@ -116,10 +116,10 @@ export class ConnectionOptionsReader { connectionOptions = require(configFile); } else if (foundFileFormat === "yml") { - connectionOptions = new ConnectionOptionsYmlReader().read(configFile); + connectionOptions = await new ConnectionOptionsYmlReader().read(configFile); } else if (foundFileFormat === "yaml") { - connectionOptions = new ConnectionOptionsYmlReader().read(configFile); + connectionOptions = await new ConnectionOptionsYmlReader().read(configFile); } else if (foundFileFormat === "xml") { connectionOptions = await new ConnectionOptionsXmlReader().read(configFile); diff --git a/src/connection/options-reader/ConnectionOptionsEnvReader.ts b/src/connection/options-reader/ConnectionOptionsEnvReader.ts index 866b612655..9ad1291004 100644 --- a/src/connection/options-reader/ConnectionOptionsEnvReader.ts +++ b/src/connection/options-reader/ConnectionOptionsEnvReader.ts @@ -16,8 +16,8 @@ export class ConnectionOptionsEnvReader { /** * Reads connection options from environment variables. */ - read(): ConnectionOptions { - return { + async read(): Promise { + return [{ type: PlatformTools.getEnvVariable("TYPEORM_CONNECTION") || (PlatformTools.getEnvVariable("TYPEORM_URL") ? PlatformTools.getEnvVariable("TYPEORM_URL").split("://")[0] : undefined), url: PlatformTools.getEnvVariable("TYPEORM_URL"), host: PlatformTools.getEnvVariable("TYPEORM_HOST"), @@ -47,7 +47,7 @@ export class ConnectionOptionsEnvReader { }, cache: this.transformCaching(), uuidExtension: PlatformTools.getEnvVariable("TYPEORM_UUID_EXTENSION") - }; + }]; } // ------------------------------------------------------------------------- diff --git a/src/connection/options-reader/ConnectionOptionsYmlReader.ts b/src/connection/options-reader/ConnectionOptionsYmlReader.ts index 7c14a4d28f..f43dd8867e 100644 --- a/src/connection/options-reader/ConnectionOptionsYmlReader.ts +++ b/src/connection/options-reader/ConnectionOptionsYmlReader.ts @@ -14,7 +14,7 @@ export class ConnectionOptionsYmlReader { /** * Reads connection options from given yml file. */ - read(path: string): ConnectionOptions[] { + async read(path: string): Promise { const contentsBuffer = PlatformTools.readFileSync(path); const contents = contentsBuffer.toString(); diff --git a/src/platform/BrowserConnectionOptionsReaderDummy.template b/src/platform/BrowserConnectionOptionsReaderDummy.template new file mode 100644 index 0000000000..c3343dc50a --- /dev/null +++ b/src/platform/BrowserConnectionOptionsReaderDummy.template @@ -0,0 +1,55 @@ +/** + * Dummy class for replacement via `package.json` in browser builds. + * + * If we don't include these functions typeorm will throw an error on runtime + * as well as during webpack builds. + */ +export class ConnectionOptionsEnvReader { + async read() { + throw new Error(`Cannot read connection options in a browser context.`); + } +} + +/** + * Dummy class for replacement via `package.json` in browser builds. + * + * If we don't include these functions typeorm will throw an error on runtime + * as well as during webpack builds. + */ +export class ConnectionOptionsXmlReader { + async read(path: string) { + throw new Error(`Cannot read connection options in a browser context.`); + } +} + +/** + * Dummy class for replacement via `package.json` in browser builds. + * + * If we don't include these functions typeorm will throw an error on runtime + * as well as during webpack builds. + */ +export class ConnectionOptionsYmlReader { + async read(path: string) { + throw new Error(`Cannot read connection options in a browser context.`); + } +} + +/** + * Dummy class for replacement via `package.json` in browser builds. + * + * If we don't include these functions typeorm will throw an error on runtime + * as well as during webpack builds. + */ +export class ConnectionOptionsReader { + async all() { + throw new Error(`Cannot read connection options in a browser context.`); + } + + async get() { + throw new Error(`Cannot read connection options in a browser context.`); + } + + async has() { + throw new Error(`Cannot read connection options in a browser context.`); + } +} diff --git a/src/platform/BrowserFileLoggerDummy.template b/src/platform/BrowserFileLoggerDummy.template new file mode 100644 index 0000000000..7277fe47ad --- /dev/null +++ b/src/platform/BrowserFileLoggerDummy.template @@ -0,0 +1,50 @@ +/** + * Performs logging of the events in TypeORM. + * This version of logger logs everything into ormlogs.log file. + */ +export class DummyLogger { + /** + * Logs query and parameters used in it. + */ + logQuery() { + throw new Error('This logger is not applicable in a browser context'); + } + + /** + * Logs query that is failed. + */ + logQueryError() { + throw new Error('This logger is not applicable in a browser context'); + } + + /** + * Logs query that is slow. + */ + logQuerySlow() { + throw new Error('This logger is not applicable in a browser context'); + } + + /** + * Logs events from the schema build process. + */ + logSchemaBuild() { + throw new Error('This logger is not applicable in a browser context'); + } + + /** + * Logs events from the migrations run process. + */ + logMigration() { + throw new Error('This logger is not applicable in a browser context'); + } + + /** + * Perform logging using given logger, or by default to the console. + * Log has its own level and message. + */ + log() { + throw new Error('This logger is not applicable in a browser context'); + } +} + +export class FileLogger extends DummyLogger {}