11import { fileURLToPath } from 'node:url'
22import { defu } from 'defu'
3- import { addServerHandler , createResolver , defineNuxtModule } from '@nuxt/kit'
3+ import { addServerHandler , addTemplate , createResolver , defineNuxtModule } from '@nuxt/kit'
44import type { Options } from 'http-proxy-middleware'
55import { hash , objectHash } from 'ohash'
66
@@ -25,42 +25,44 @@ export default defineNuxtModule<ModuleOptions>({
2525 options : options . options ,
2626 } )
2727
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- `
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+ } )
3945 }
4046
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 )
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 )
5851
5952 addServerHandler ( {
60- handler,
53+ handler : resolve ( nuxt . options . buildDir , handler ) ,
6154 middleware : true ,
6255 } )
63- }
64- } )
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+ }
6567 } ,
6668} )
0 commit comments