From bb09da08c2dbed416d7e25853dbcadce4de0e36a Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Mon, 19 Aug 2024 15:46:40 -0400 Subject: [PATCH] fix: migrate error on windows (#7759) handle windows compatible file names when reading migrations --------- Co-authored-by: Alessio Gravili --- .../src/database/migrations/readMigrationFiles.ts | 8 +++++--- test/database/int.spec.ts | 9 +++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/payload/src/database/migrations/readMigrationFiles.ts b/packages/payload/src/database/migrations/readMigrationFiles.ts index 806f4d391..480f29960 100644 --- a/packages/payload/src/database/migrations/readMigrationFiles.ts +++ b/packages/payload/src/database/migrations/readMigrationFiles.ts @@ -1,4 +1,5 @@ import fs from 'fs' +import { pathToFileURL } from 'node:url' import path from 'path' import type { Payload } from '../../index.js' @@ -36,9 +37,10 @@ export const readMigrationFiles = async ({ return Promise.all( files.map(async (filePath) => { // eval used to circumvent errors bundling - let migration = await eval( - `${typeof require === 'function' ? 'require' : 'import'}('${filePath.replaceAll('\\', '/')}')`, - ) + let migration = + typeof require === 'function' + ? await eval(`require('${filePath.replaceAll('\\', '/')}')`) + : await eval(`import('${pathToFileURL(filePath).href}')`) if ('default' in migration) migration = migration.default const result: Migration = { diff --git a/test/database/int.spec.ts b/test/database/int.spec.ts index dfed3a710..513d0a263 100644 --- a/test/database/int.spec.ts +++ b/test/database/int.spec.ts @@ -121,24 +121,21 @@ describe('database', () => { }) describe('migrations', () => { - beforeAll(async () => { + beforeEach(async () => { if (process.env.PAYLOAD_DROP_DATABASE === 'true' && 'drizzle' in payload.db) { const db = payload.db as unknown as PostgresAdapter await db.dropDatabase({ adapter: db }) } - }) - - afterAll(() => { removeFiles(path.join(dirname, './migrations')) - }) - it('should run migrate:create', async () => { await payload.db.createMigration({ forceAcceptWarning: true, migrationName: 'test', payload, }) + }) + it('should run migrate:create', () => { // read files names in migrationsDir const migrationFile = path.normalize(fs.readdirSync(payload.db.migrationDir)[0]) expect(migrationFile).toContain('_test')