From cf3b868ca9891404da5270a26e4b58db58cf90f7 Mon Sep 17 00:00:00 2001 From: Kristiyan Tachev Date: Mon, 22 Apr 2024 21:10:58 +0300 Subject: [PATCH] feat(prepare): added prepare step --- package-lock.json | 13 +++++++++++++ package.json | 1 + src/helpers/typescript-builder.ts | 2 ++ src/injection.tokens.ts | 1 + src/services/migration/migration.service.ts | 4 +++- .../migrations-resolver.service.ts | 3 ++- tsconfig.json | 1 + 7 files changed, 23 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9e79c38..8b56a2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2341,6 +2341,14 @@ "@esbuild/win32-x64": "0.20.2" } }, + "esbuild-plugin-tsc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-tsc/-/esbuild-plugin-tsc-0.4.0.tgz", + "integrity": "sha512-q9gWIovt1nkwchMLc2zhyksaiHOv3kDK4b0AUol8lkMCRhJ1zavgfb2fad6BKp7FT9rh/OHmEBXVjczLoi/0yw==", + "requires": { + "strip-comments": "^2.0.1" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -6306,6 +6314,11 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", diff --git a/package.json b/package.json index 0cf5ef9..9dff13e 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@rxdi/core": "^0.7.37", "chalk": "2.4.2", "esbuild": "^0.20.2", + "esbuild-plugin-tsc": "^0.4.0", "esm": "3.2.25", "mongodb": "3.3.3", "mongoose": "5.7.6" diff --git a/src/helpers/typescript-builder.ts b/src/helpers/typescript-builder.ts index 38f58cb..77c74c8 100644 --- a/src/helpers/typescript-builder.ts +++ b/src/helpers/typescript-builder.ts @@ -26,6 +26,7 @@ export const TranspileTypescriptESBuild = async ( outdir: string, ) => { try { + const tscPlugin = await import('esbuild-plugin-tsc'); return (await import('esbuild')).build({ entryPoints, bundle: true, @@ -35,6 +36,7 @@ export const TranspileTypescriptESBuild = async ( format: 'cjs', outdir, logLevel: 'info', + plugins: [tscPlugin.default()], }); } catch (e) { console.error(e); diff --git a/src/injection.tokens.ts b/src/injection.tokens.ts index 0e2ae92..3dfeead 100644 --- a/src/injection.tokens.ts +++ b/src/injection.tokens.ts @@ -15,6 +15,7 @@ export const Config = new InjectionToken('migrations-config'); export type MigrationSchema = { down: (db: MongoClient) => unknown; up: (db: MongoClient) => unknown; + prepare: (db: MongoClient) => unknown; }; export interface LoggerConfig { diff --git a/src/services/migration/migration.service.ts b/src/services/migration/migration.service.ts index cd4afe9..24021ff 100644 --- a/src/services/migration/migration.service.ts +++ b/src/services/migration/migration.service.ts @@ -52,6 +52,7 @@ export class MigrationService { const migration = await this.migrationsResolver.loadMigration( item.fileName, ); + await migration.prepare(client); result = await migration.up(client); } catch (err) { const error = new ErrorMap(err.message); @@ -87,7 +88,7 @@ export class MigrationService { }; await logger.log(res); migrated.push(res); - return await true; + return true; }; for (const item of pendingItems) { await migrateItem(item); @@ -126,6 +127,7 @@ export class MigrationService { const migration = await this.migrationsResolver.loadMigration( lastAppliedItem.fileName, ); + await migration.prepare(client); result = await migration.down(client); } catch (err) { const error = new ErrorMap(err.message); diff --git a/src/services/migrations-resolver/migrations-resolver.service.ts b/src/services/migrations-resolver/migrations-resolver.service.ts index 9183b03..56d5674 100644 --- a/src/services/migrations-resolver/migrations-resolver.service.ts +++ b/src/services/migrations-resolver/migrations-resolver.service.ts @@ -42,6 +42,7 @@ export class MigrationsResolver { // eslint-disable-next-line @typescript-eslint/no-var-requires migration = require('esm')(module)(this.getFilePath(fileName)); } + migration.prepare = migration.prepare || (() => Promise.resolve()); return migration; } @@ -74,7 +75,7 @@ export class MigrationsResolver { } async loadTsCompiledMigration(fileName: string) { - return require(this.getTsCompiledFilePath(fileName)); + return import(this.getTsCompiledFilePath(fileName)); } async transpileMigrations( diff --git a/tsconfig.json b/tsconfig.json index 84e0566..efc4532 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,7 @@ "experimentalDecorators": true, "moduleResolution": "node", "noUnusedLocals": true, + "esModuleInterop": true, "outDir": "lib", "lib": [ "es2017",