diff --git a/src/module.ts b/src/module.ts index 6f50b15e5..ff64cd9a6 100644 --- a/src/module.ts +++ b/src/module.ts @@ -217,7 +217,7 @@ export default defineNuxtModule({ nuxt.hook('modules:done', async () => { const preset = findPreset(nuxt) - await preset?.setup?.(options, nuxt) + await preset?.setup?.(options, nuxt, { resolver }) // Provide default database configuration here since nuxt is merging defaults and user options options.database ||= { type: 'sqlite', filename: './contents.sqlite' } await refineDatabaseConfig(options._localDatabase, { rootDir: nuxt.options.rootDir, updateSqliteFileName: true }) diff --git a/src/presets/cloudflare.ts b/src/presets/cloudflare.ts index beb43bb2a..c6389dd07 100644 --- a/src/presets/cloudflare.ts +++ b/src/presets/cloudflare.ts @@ -1,4 +1,4 @@ -import { addTemplate } from '@nuxt/kit' +import { addServerHandler, addTemplate } from '@nuxt/kit' import { join } from 'pathe' import { logger } from '../utils/dev' import { definePreset } from '../utils/preset' @@ -6,7 +6,13 @@ import { collectionDumpTemplate } from '../utils/templates' export default definePreset({ name: 'cloudflare', - async setupNitro(nitroConfig, { manifest, resolver }) { + setup(_options, _nuxt, { resolver }) { + addServerHandler({ + route: '/__nuxt_content/:collection/sql_dump.txt', + handler: resolver.resolve('./runtime/presets/cloudflare/database-handler'), + }) + }, + async setupNitro(nitroConfig, { manifest }) { if (nitroConfig.runtimeConfig?.content?.database?.type === 'sqlite') { logger.warn('Deploying to Cloudflare requires using D1 database, switching to D1 database with binding `DB`.') nitroConfig.runtimeConfig!.content!.database = { type: 'd1', bindingName: 'DB' } @@ -25,10 +31,6 @@ export default definePreset({ // Add raw content dump to public assets nitroConfig.publicAssets.push({ dir: join(nitroConfig.buildDir!, 'content', 'raw'), maxAge: 60 }) - nitroConfig.handlers.push({ - route: '/__nuxt_content/:collection/sql_dump.txt', - handler: resolver.resolve('./runtime/presets/cloudflare/database-handler'), - }) }, }) diff --git a/src/presets/node.ts b/src/presets/node.ts index 6e4a15d09..5dceff64d 100644 --- a/src/presets/node.ts +++ b/src/presets/node.ts @@ -1,18 +1,20 @@ -import { addTemplate } from '@nuxt/kit' +import { addServerHandler, addTemplate } from '@nuxt/kit' import { fullDatabaseCompressedDumpTemplate } from '../utils/templates' import { definePreset } from '../utils/preset' export default definePreset({ name: 'node', - setupNitro(nitroConfig, { manifest, resolver }) { + setup(_options, _nuxt, { resolver }) { + addServerHandler({ + route: '/__nuxt_content/:collection/sql_dump.txt', + handler: resolver.resolve('./runtime/presets/node/database-handler'), + }) + }, + setupNitro(nitroConfig, { manifest }) { nitroConfig.publicAssets ||= [] nitroConfig.alias = nitroConfig.alias || {} nitroConfig.handlers ||= [] nitroConfig.alias['#content/dump'] = addTemplate(fullDatabaseCompressedDumpTemplate(manifest)).dst - nitroConfig.handlers.push({ - route: '/__nuxt_content/:collection/sql_dump.txt', - handler: resolver.resolve('./runtime/presets/node/database-handler'), - }) }, }) diff --git a/src/utils/preset.ts b/src/utils/preset.ts index 7b2a6cc76..6f839a701 100644 --- a/src/utils/preset.ts +++ b/src/utils/preset.ts @@ -13,18 +13,18 @@ interface Options { export interface Preset { name: string parent?: Preset - setup?: (options: ModuleOptions, nuxt: Nuxt) => Promise | void + setup?: (options: ModuleOptions, nuxt: Nuxt, opts: { resolver: Resolver }) => Promise | void setupNitro: (nitroConfig: NitroConfig, opts: Options) => void | Promise } export function definePreset(preset: Preset) { const _preset: Preset = { ...preset, - setup: async (options, nuxt) => { + setup: async (options, nuxt, opts) => { if (preset.parent) { - await preset.parent.setup?.(options, nuxt) + await preset.parent.setup?.(options, nuxt, opts) } - await preset.setup?.(options, nuxt) + await preset.setup?.(options, nuxt, opts) }, setupNitro: async (nitroConfig, opts) => { if (preset.parent) {