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
@@ -26,44 +26,42 @@ export default defineNuxtModule<ModuleOptions>({
26
26
options : options . options ,
27
27
} )
28
28
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
+ `
46
40
}
47
41
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 )
52
59
53
60
addServerHandler ( {
54
- handler : resolve ( nuxt . options . buildDir , handler ) ,
61
+ handler,
55
62
middleware : true ,
56
63
} )
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
+ } )
68
66
} ,
69
67
} )
0 commit comments