Skip to content

Commit 48db817

Browse files
onmaxatinux
andauthored
fix(db): resolve Nuxt aliases in schema bundling (#802)
Co-authored-by: Sébastien Chopin <seb@nuxt.com>
1 parent eb46de5 commit 48db817

5 files changed

Lines changed: 27 additions & 7 deletions

File tree

cli/commands/db/generate.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { consola } from 'consola'
33
import { execa } from 'execa'
44
import { join, resolve } from 'pathe'
55
import { buildDatabaseSchema } from '@nuxthub/core/db'
6+
import { getTsconfigAliases } from '../../utils/db.mjs'
67

78
export default defineCommand({
89
meta: {
@@ -36,7 +37,8 @@ export default defineCommand({
3637
}
3738
consola.info('Ensuring database schema is generated...')
3839
await execa(options)`nuxt prepare`
39-
await buildDatabaseSchema(join(options.cwd, '.nuxt'), { relativeDir: cwd })
40+
const alias = await getTsconfigAliases(cwd)
41+
await buildDatabaseSchema(join(options.cwd, '.nuxt'), { relativeDir: cwd, alias })
4042
consola.info('Generating database migrations...')
4143
const { stderr } = await execa({
4244
...options,

cli/commands/db/squash.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { readFile, writeFile, rm } from 'node:fs/promises'
55
import { join, resolve } from 'pathe'
66
import { buildDatabaseSchema, createDrizzleClient } from '@nuxthub/core/db'
77
import { sql } from 'drizzle-orm'
8+
import { getTsconfigAliases } from '../../utils/db.mjs'
89

910
export default defineCommand({
1011
meta: {
@@ -171,7 +172,8 @@ export default defineCommand({
171172
consola.debug('Updated journal file')
172173

173174
// Build schema and generate fresh migration
174-
await buildDatabaseSchema(join(cwd, '.nuxt'), { relativeDir: cwd })
175+
const alias = await getTsconfigAliases(cwd)
176+
await buildDatabaseSchema(join(cwd, '.nuxt'), { relativeDir: cwd, alias })
175177
consola.info('Generating new migration...')
176178
const { stderr } = await execa({
177179
...execaOptions,

cli/utils/db.mjs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { join } from 'pathe'
1+
import { readFile } from 'node:fs/promises'
2+
import { join, resolve } from 'pathe'
23
import { createStorage } from 'unstorage'
34
import fsDriver from 'unstorage/drivers/fs'
45

@@ -32,3 +33,18 @@ export async function getNextMigrationNumber() {
3233

3334
return (lastSequentialMigrationNumber + 1).toString().padStart(4, '0')
3435
}
36+
37+
export async function getTsconfigAliases(cwd) {
38+
try {
39+
const tsconfig = JSON.parse(await readFile(join(cwd, '.nuxt/tsconfig.json'), 'utf-8'))
40+
const paths = tsconfig.compilerOptions?.paths || {}
41+
const alias = {}
42+
for (const [key, values] of Object.entries(paths)) {
43+
const resolvedPath = key.endsWith('/*') ? values[0].replace(/\/\*$/, '') : values[0]
44+
alias[key.replace(/\/\*$/, '')] = resolve(join(cwd, '.nuxt'), resolvedPath)
45+
}
46+
return alias
47+
} catch {
48+
return {}
49+
}
50+
}

src/db/lib/build.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export async function applyBuildTimeMigrations(nitro: Nitro, hub: ResolvedHubCon
8080
}
8181
}
8282

83-
export async function buildDatabaseSchema(buildDir: string, { relativeDir }: { relativeDir?: string } = {}) {
83+
export async function buildDatabaseSchema(buildDir: string, { relativeDir, alias }: { relativeDir?: string, alias?: Record<string, string> } = {}) {
8484
relativeDir = relativeDir || buildDir
8585
const entry = join(buildDir, 'hub/db/schema.entry.ts')
8686
await build({
@@ -93,6 +93,7 @@ export async function buildDatabaseSchema(buildDir: string, { relativeDir }: { r
9393
dts: '.d.mts'
9494
}),
9595
alias: {
96+
...alias,
9697
'hub:db:schema': entry
9798
},
9899
platform: 'neutral',

src/db/setup.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ async function generateDatabaseSchema(nuxt: Nuxt, hub: ResolvedHubConfig) {
253253
log.info('Make sure to run `npx nuxt db generate` to generate the database migrations.')
254254
schemaPaths = await getSchemaPaths()
255255
await updateTemplates({ filter: template => template.filename.includes('hub/db/schema.entry.ts') })
256-
await buildDatabaseSchema(nuxt.options.buildDir, { relativeDir: nuxt.options.rootDir })
256+
await buildDatabaseSchema(nuxt.options.buildDir, { relativeDir: nuxt.options.rootDir, alias: nuxt.options.alias })
257257

258258
// Also copy to node_modules/@nuxthub/db/ for workflow compatibility
259259
const physicalDbDir = join(nuxt.options.rootDir, 'node_modules', '@nuxthub', 'db')
@@ -276,8 +276,7 @@ async function generateDatabaseSchema(nuxt: Nuxt, hub: ResolvedHubConfig) {
276276

277277
// Build schema types during prepare/dev/build, then copy to node_modules
278278
nuxt.hooks.hookOnce('app:templatesGenerated', async () => {
279-
// Build first
280-
await buildDatabaseSchema(nuxt.options.buildDir, { relativeDir: nuxt.options.rootDir })
279+
await buildDatabaseSchema(nuxt.options.buildDir, { relativeDir: nuxt.options.rootDir, alias: nuxt.options.alias })
281280

282281
// Then copy to node_modules/@nuxthub/db/ for workflow compatibility
283282
const physicalDbDir = join(nuxt.options.rootDir, 'node_modules', '@nuxthub', 'db')

0 commit comments

Comments
 (0)