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