From f28119a8271c3037053924d39816d74880687865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Tue, 11 Aug 2020 10:31:04 +0200 Subject: [PATCH] feat(ts-morph): add ORM version to cache invalidation logic Now we also use the ORM version when computing the cache invalidation hash, so when we upgrade the ORM, cache will be invalidated automatically. --- packages/cli/src/CLIHelper.ts | 15 ++------------- packages/core/src/cache/FileCacheAdapter.ts | 7 +++++-- packages/core/src/utils/Utils.ts | 13 +++++++++++++ 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/packages/cli/src/CLIHelper.ts b/packages/cli/src/CLIHelper.ts index 40e10680a5b9..f70c1ebab5b0 100644 --- a/packages/cli/src/CLIHelper.ts +++ b/packages/cli/src/CLIHelper.ts @@ -44,7 +44,7 @@ export class CLIHelper { // noinspection HtmlDeprecatedTag return yargs .scriptName('mikro-orm') - .version(CLIHelper.getORMVersion()) + .version(Utils.getORMVersion()) .usage('Usage: $0 [options]') .example('$0 schema:update --run', 'Runs schema synchronization') .alias('v', 'version') @@ -66,17 +66,6 @@ export class CLIHelper { .strict(); } - static getORMVersion(): string { - /* istanbul ignore next */ - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - return require('../package.json').version; - } catch { - // eslint-disable-next-line @typescript-eslint/no-var-requires - return require('./package.json').version; - } - } - static getNodeVersion(): string { return process.versions.node; } @@ -105,7 +94,7 @@ export class CLIHelper { static async dumpDependencies() { CLIHelper.dump(' - dependencies:'); - CLIHelper.dump(` - mikro-orm ${c.green(CLIHelper.getORMVersion())}`); + CLIHelper.dump(` - mikro-orm ${c.green(Utils.getORMVersion())}`); CLIHelper.dump(` - node ${c.green(CLIHelper.getNodeVersion())}`); if (await pathExists(process.cwd() + '/package.json')) { diff --git a/packages/core/src/cache/FileCacheAdapter.ts b/packages/core/src/cache/FileCacheAdapter.ts index 6f2f3d4aa3bb..697e4d2f7f01 100644 --- a/packages/core/src/cache/FileCacheAdapter.ts +++ b/packages/core/src/cache/FileCacheAdapter.ts @@ -6,6 +6,9 @@ import { Utils } from '../utils'; export class FileCacheAdapter implements CacheAdapter { + // eslint-disable-next-line @typescript-eslint/no-var-requires + private readonly VERSION = Utils.getORMVersion(); + constructor(private readonly options: { cacheDir: string }, private readonly baseDir: string, private readonly pretty = false) { } @@ -40,7 +43,7 @@ export class FileCacheAdapter implements CacheAdapter { ]); const opts = this.pretty ? { spaces: 2 } : {}; - await writeJSON(path!, { data, origin, hash }, opts); + await writeJSON(path!, { data, origin, hash, version: this.VERSION }, opts); } /** @@ -66,7 +69,7 @@ export class FileCacheAdapter implements CacheAdapter { const contents = await readFile(origin); - return Utils.hash(contents.toString()); + return Utils.hash(contents.toString() + this.VERSION); } } diff --git a/packages/core/src/utils/Utils.ts b/packages/core/src/utils/Utils.ts index eb70f67357e9..1bfa48c7cfe0 100644 --- a/packages/core/src/utils/Utils.ts +++ b/packages/core/src/utils/Utils.ts @@ -618,4 +618,17 @@ export class Utils { return (createRequire || createRequireFromPath)(resolve(from))(id); } + static getORMVersion(): string { + /* istanbul ignore next */ + try { + // this works with ts-node during development (where we have `src` folder) + // eslint-disable-next-line @typescript-eslint/no-var-requires + return require('../../package.json').version; + } catch { + // this works with node in production build (where we do not have the `src` folder) + // eslint-disable-next-line @typescript-eslint/no-var-requires + return require('../package.json').version; + } + } + }