From 75d379eb86b62b280df7438808c21bfc292697d2 Mon Sep 17 00:00:00 2001 From: an-lee Date: Thu, 20 Jun 2024 22:41:39 +0800 Subject: [PATCH] fix migration resolver in win32 (#696) --- enjoy/src/main/db/index.ts | 42 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/enjoy/src/main/db/index.ts b/enjoy/src/main/db/index.ts index 83d9312f..581acffa 100644 --- a/enjoy/src/main/db/index.ts +++ b/enjoy/src/main/db/index.ts @@ -1,7 +1,7 @@ import { ipcMain } from "electron"; import settings from "@main/settings"; import { Sequelize } from "sequelize-typescript"; -import { Umzug, SequelizeStorage } from "umzug"; +import { Umzug, SequelizeStorage, Resolver, RunnableMigration } from "umzug"; import { Audio, Recording, @@ -28,6 +28,7 @@ import { transcriptionsHandler, videosHandler, } from "./handlers"; +import os from "os"; import path from "path"; import url from "url"; @@ -64,8 +65,45 @@ db.connect = async () => { db.connection = sequelize; + const migrationResolver: Resolver = ({ + name, + path: filepath, + context, + }) => { + if (!filepath) { + throw new Error( + `Can't use default resolver for non-filesystem migrations` + ); + } + + const loadModule: () => Promise> = async () => { + if (os.platform() === "win32") { + return import(`file://${filepath}`) as Promise< + RunnableMigration + >; + } else { + return import(filepath) as Promise>; + } + }; + + const getModule = async () => { + return await loadModule(); + }; + + return { + name, + path: filepath, + up: async () => (await getModule()).up({ path: filepath, name, context }), + down: async () => + (await getModule()).down?.({ path: filepath, name, context }), + }; + }; + const umzug = new Umzug({ - migrations: { glob: __dirname + "/migrations/*.js" }, + migrations: { + glob: ["migrations/*.js", { cwd: __dirname }], + resolve: migrationResolver, + }, context: sequelize.getQueryInterface(), storage: new SequelizeStorage({ sequelize }), logger: console,