Skip to content

Commit 059185f

Browse files
authored
fix(db-*): findMigrationDir in projects without src folder (#14381)
Fixes #14379 Additionally, removes duplication of `findMigrationDir` between DB adapters, deprecates the export from `@payloadcms/drizzle` and adds unit testing to this function.
1 parent 2cc4e65 commit 059185f

File tree

9 files changed

+71
-63
lines changed

9 files changed

+71
-63
lines changed

packages/db-d1-sqlite/src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import {
2020
find,
2121
findGlobal,
2222
findGlobalVersions,
23-
findMigrationDir,
2423
findOne,
2524
findVersions,
2625
migrate,
@@ -52,7 +51,7 @@ import {
5251
requireDrizzleKit,
5352
} from '@payloadcms/drizzle/sqlite'
5453
import { like, notLike } from 'drizzle-orm'
55-
import { createDatabaseAdapter, defaultBeginTransaction } from 'payload'
54+
import { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload'
5655
import { fileURLToPath } from 'url'
5756

5857
import type { Args, SQLiteD1Adapter } from './types.js'

packages/db-mongodb/src/index.ts

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ import type {
2121
UpdateVersionArgs,
2222
} from 'payload'
2323

24-
import fs from 'fs'
2524
import mongoose from 'mongoose'
26-
import path from 'path'
27-
import { createDatabaseAdapter, defaultBeginTransaction } from 'payload'
25+
import { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload'
2826

2927
import type { CollectionModel, GlobalModel, MigrateDownArgs, MigrateUpArgs } from './types.js'
3028

@@ -332,44 +330,3 @@ export function mongooseAdapter({
332330
}
333331

334332
export { compatibilityOptions } from './utilities/compatibilityOptions.js'
335-
336-
/**
337-
* Attempt to find migrations directory.
338-
*
339-
* Checks for the following directories in order:
340-
* - `migrationDir` argument from Payload config
341-
* - `src/migrations`
342-
* - `dist/migrations`
343-
* - `migrations`
344-
*
345-
* Defaults to `src/migrations`
346-
*
347-
* @param migrationDir
348-
* @returns
349-
*/
350-
function findMigrationDir(migrationDir?: string): string {
351-
const cwd = process.cwd()
352-
const srcDir = path.resolve(cwd, 'src/migrations')
353-
const distDir = path.resolve(cwd, 'dist/migrations')
354-
const relativeMigrations = path.resolve(cwd, 'migrations')
355-
356-
// Use arg if provided
357-
if (migrationDir) {
358-
return migrationDir
359-
}
360-
361-
// Check other common locations
362-
if (fs.existsSync(srcDir)) {
363-
return srcDir
364-
}
365-
366-
if (fs.existsSync(distDir)) {
367-
return distDir
368-
}
369-
370-
if (fs.existsSync(relativeMigrations)) {
371-
return relativeMigrations
372-
}
373-
374-
return srcDir
375-
}

packages/db-postgres/src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import {
2020
findDistinct,
2121
findGlobal,
2222
findGlobalVersions,
23-
findMigrationDir,
2423
findOne,
2524
findVersions,
2625
migrate,
@@ -55,7 +54,7 @@ import {
5554
requireDrizzleKit,
5655
} from '@payloadcms/drizzle/postgres'
5756
import { pgEnum, pgSchema, pgTable } from 'drizzle-orm/pg-core'
58-
import { createDatabaseAdapter, defaultBeginTransaction } from 'payload'
57+
import { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload'
5958
import pgDependency from 'pg'
6059
import { fileURLToPath } from 'url'
6160

packages/db-sqlite/src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
findDistinct,
2222
findGlobal,
2323
findGlobalVersions,
24-
findMigrationDir,
2524
findOne,
2625
findVersions,
2726
migrate,
@@ -55,7 +54,7 @@ import {
5554
requireDrizzleKit,
5655
} from '@payloadcms/drizzle/sqlite'
5756
import { like, notLike } from 'drizzle-orm'
58-
import { createDatabaseAdapter, defaultBeginTransaction } from 'payload'
57+
import { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload'
5958
import { fileURLToPath } from 'url'
6059

6160
import type { Args, SQLiteAdapter } from './types.js'

packages/db-vercel-postgres/src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
findDistinct,
2222
findGlobal,
2323
findGlobalVersions,
24-
findMigrationDir,
2524
findOne,
2625
findVersions,
2726
migrate,
@@ -56,7 +55,7 @@ import {
5655
requireDrizzleKit,
5756
} from '@payloadcms/drizzle/postgres'
5857
import { pgEnum, pgSchema, pgTable } from 'drizzle-orm/pg-core'
59-
import { createDatabaseAdapter, defaultBeginTransaction } from 'payload'
58+
import { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload'
6059
import { fileURLToPath } from 'url'
6160

6261
import type { Args, VercelPostgresAdapter } from './types.js'

packages/drizzle/src/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export { chainMethods } from './find/chainMethods.js'
1515
export { findDistinct } from './findDistinct.js'
1616
export { findGlobal } from './findGlobal.js'
1717
export { findGlobalVersions } from './findGlobalVersions.js'
18-
export { findMigrationDir } from './findMigrationDir.js'
1918
export { findOne } from './findOne.js'
2019
export { findVersions } from './findVersions.js'
2120
export { migrate } from './migrate.js'
@@ -89,3 +88,13 @@ export { extendDrizzleTable } from './utilities/extendDrizzleTable.js'
8988
export { hasLocalesTable } from './utilities/hasLocalesTable.js'
9089
export { pushDevSchema } from './utilities/pushDevSchema.js'
9190
export { validateExistingBlockIsIdentical } from './utilities/validateExistingBlockIsIdentical.js'
91+
import { findMigrationDir as payloadFindMigrationDir } from 'payload'
92+
93+
/**
94+
* @deprecated remove in 4.0
95+
* use
96+
* ```ts
97+
* import { findMigrationDir } from 'payload'
98+
* ```
99+
*/
100+
export const findMigrationDir = payloadFindMigrationDir
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { findMigrationDir } from './findMigrationDir'
2+
import fs from 'fs'
3+
import path from 'path'
4+
5+
const workDir = path.resolve(import.meta.dirname, '_tmp')
6+
7+
describe('findMigrationDir', () => {
8+
beforeEach(() => {
9+
const cwdSpy = jest.spyOn(process, 'cwd')
10+
cwdSpy.mockReturnValue(workDir)
11+
fs.mkdirSync(workDir, { recursive: true })
12+
})
13+
14+
afterEach(() => {
15+
fs.rmSync(workDir, { force: true, recursive: true })
16+
})
17+
18+
it('should return the passed directory', () => {
19+
const dir = path.resolve(workDir, 'custom_migrations')
20+
expect(findMigrationDir(dir)).toBe(dir)
21+
})
22+
23+
it('should return src/migrations because that folder exists', () => {
24+
fs.mkdirSync(path.resolve(workDir, 'src/migrations'), { recursive: true })
25+
expect(findMigrationDir()).toBe(path.resolve(workDir, 'src/migrations'))
26+
})
27+
28+
it('should return dist/migrations because that folder exists', () => {
29+
fs.mkdirSync(path.resolve(workDir, 'dist/migrations'), { recursive: true })
30+
expect(findMigrationDir()).toBe(path.resolve(workDir, 'dist/migrations'))
31+
})
32+
33+
it('should return src/migrations because src exists', () => {
34+
fs.mkdirSync(path.resolve(workDir, 'src'), { recursive: true })
35+
expect(findMigrationDir()).toBe(path.resolve(workDir, 'src/migrations'))
36+
})
37+
38+
it('should return migrations because src does not exist', () => {
39+
expect(findMigrationDir()).toBe(path.resolve(workDir, 'migrations'))
40+
})
41+
})

packages/drizzle/src/findMigrationDir.ts renamed to packages/payload/src/database/migrations/findMigrationDir.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ import path from 'path'
1010
* - `dist/migrations`
1111
* - `migrations`
1212
*
13-
* Defaults to `src/migrations`
14-
*
1513
* @param migrationDir
14+
* @default src/migrations`, if the src folder does not exists - migrations.
1615
* @returns
1716
*/
18-
export function findMigrationDir(migrationDir?: string): string {
17+
export const findMigrationDir = (migrationDir?: string): string => {
1918
const cwd = process.cwd()
20-
const srcDir = path.resolve(cwd, 'src/migrations')
21-
const distDir = path.resolve(cwd, 'dist/migrations')
19+
20+
const srcMigrationsDir = path.resolve(cwd, 'src/migrations')
21+
const distMigrationsDir = path.resolve(cwd, 'dist/migrations')
2222
const relativeMigrations = path.resolve(cwd, 'migrations')
2323

2424
// Use arg if provided
@@ -27,17 +27,21 @@ export function findMigrationDir(migrationDir?: string): string {
2727
}
2828

2929
// Check other common locations
30-
if (fs.existsSync(srcDir)) {
31-
return srcDir
30+
if (fs.existsSync(srcMigrationsDir)) {
31+
return srcMigrationsDir
3232
}
3333

34-
if (fs.existsSync(distDir)) {
35-
return distDir
34+
if (fs.existsSync(distMigrationsDir)) {
35+
return distMigrationsDir
3636
}
3737

3838
if (fs.existsSync(relativeMigrations)) {
3939
return relativeMigrations
4040
}
4141

42-
return srcDir
42+
if (fs.existsSync(path.resolve(cwd, 'src'))) {
43+
return srcMigrationsDir
44+
}
45+
46+
return relativeMigrations
4347
}

packages/payload/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,6 +1299,7 @@ export { defaultBeginTransaction } from './database/defaultBeginTransaction.js'
12991299
export { flattenWhereToOperators } from './database/flattenWhereToOperators.js'
13001300
export { getLocalizedPaths } from './database/getLocalizedPaths.js'
13011301
export { createMigration } from './database/migrations/createMigration.js'
1302+
export { findMigrationDir } from './database/migrations/findMigrationDir.js'
13021303
export { getMigrations } from './database/migrations/getMigrations.js'
13031304
export { getPredefinedMigration } from './database/migrations/getPredefinedMigration.js'
13041305
export { migrate } from './database/migrations/migrate.js'

0 commit comments

Comments
 (0)