1
1
import { fileURLToPath } from 'node:url'
2
2
import { defu } from 'defu'
3
- import { addServerHandler , addTemplate , createResolver , defineNuxtModule } from '@nuxt/kit'
3
+ import { addServerHandler , createResolver , defineNuxtModule } from '@nuxt/kit'
4
4
import type { Options } from 'http-proxy-middleware'
5
5
import { hash , objectHash } from 'ohash'
6
6
@@ -25,44 +25,42 @@ export default defineNuxtModule<ModuleOptions>({
25
25
options : options . options ,
26
26
} )
27
27
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
+ `
45
39
}
46
40
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 )
51
58
52
59
addServerHandler ( {
53
- handler : resolve ( nuxt . options . buildDir , handler ) ,
60
+ handler,
54
61
middleware : true ,
55
62
} )
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
+ } )
67
65
} ,
68
66
} )
0 commit comments