11import { fileURLToPath } from 'node:url'
22import { defu } from 'defu'
3- import { addServerHandler , addTemplate , createResolver , defineNuxtModule } from '@nuxt/kit'
3+ import { addServerHandler , createResolver , defineNuxtModule } from '@nuxt/kit'
44import type { Options } from 'http-proxy-middleware'
55import { hash , objectHash } from 'ohash'
66
@@ -25,44 +25,42 @@ export default defineNuxtModule<ModuleOptions>({
2525 options : options . options ,
2626 } )
2727
28- function createProxyMiddleware ( options : Options , filename : string , index ?: number ) {
29- addTemplate ( {
30- filename,
31- write : true ,
32- getContents ( ) {
33- return `
34- import { createProxyMiddleware } from ${ JSON . stringify ( resolve ( runtimeDir , './middleware' ) ) }
35- import { defu } from 'defu'
36- import { useRuntimeConfig } from '#imports'
37-
38- const buildtimeOptions = ${ JSON . stringify ( options ) }
39- const runtimeOptions = [].concat(useRuntimeConfig().proxy?.options)[${ JSON . stringify ( index ) } ?? 0]
40-
41- export default createProxyMiddleware(defu(runtimeOptions, buildtimeOptions))
42- `
43- } ,
44- } )
28+ function createProxyMiddleware ( options : Options , index ?: number ) {
29+ return `
30+ import { createProxyMiddleware } from ${ JSON . stringify ( resolve ( runtimeDir , './middleware.ts' ) ) }
31+ import { defu } from 'defu'
32+ import { useRuntimeConfig } from '#imports'
33+
34+ const buildtimeOptions = ${ JSON . stringify ( options ) }
35+ const runtimeOptions = [].concat(useRuntimeConfig().proxy?.options)[${ JSON . stringify ( index ) } ?? 0]
36+
37+ export default createProxyMiddleware(defu(runtimeOptions, buildtimeOptions))
38+ `
4539 }
4640
47- if ( Array . isArray ( finalConfig . options ) ) {
48- finalConfig . options . forEach ( ( options , index ) => {
49- const handler = `http-proxy/${ hash ( objectHash ( options ) ) } .ts`
50- createProxyMiddleware ( options , handler , index )
41+ nuxt . hook ( 'nitro:config' , ( nitroConfig ) => {
42+ nitroConfig . virtual = nitroConfig . virtual || { }
43+
44+ if ( Array . isArray ( finalConfig . options ) ) {
45+ finalConfig . options . forEach ( ( options , index ) => {
46+ const handler = `#http-proxy/${ hash ( objectHash ( options ) ) } .mjs`
47+ nitroConfig . virtual ! [ handler ] = createProxyMiddleware ( options , index )
48+
49+ addServerHandler ( {
50+ handler,
51+ middleware : true ,
52+ } )
53+ } )
54+ }
55+ else {
56+ const handler = `#http-proxy/${ hash ( objectHash ( finalConfig . options ) ) } .mjs`
57+ nitroConfig . virtual [ handler ] = createProxyMiddleware ( finalConfig . options )
5158
5259 addServerHandler ( {
53- handler : resolve ( nuxt . options . buildDir , handler ) ,
60+ handler,
5461 middleware : true ,
5562 } )
56- } )
57- }
58- else {
59- const handler = `http-proxy/${ hash ( objectHash ( finalConfig . options ) ) } .ts`
60- createProxyMiddleware ( finalConfig . options , handler )
61-
62- addServerHandler ( {
63- handler : resolve ( nuxt . options . buildDir , handler ) ,
64- middleware : true ,
65- } )
66- }
63+ }
64+ } )
6765 } ,
6866} )
0 commit comments