UNPKG

nuxt-proxy

Version:
58 lines (53 loc) 2.05 kB
import { fileURLToPath } from 'node:url'; import { defu } from 'defu'; import { defineNuxtModule, createResolver, addServerHandler } from '@nuxt/kit'; import { hash, objectHash } from 'ohash'; const module = defineNuxtModule({ meta: { name: "nuxt-proxy", configKey: "proxy", version: "^3.1.0" }, defaults: { options: [] }, setup(options, nuxt) { const { resolve } = createResolver(import.meta.url); const runtimeDir = fileURLToPath(new URL("./runtime", import.meta.url)); nuxt.options.build.transpile.push(runtimeDir, /#http-proxy/); const finalConfig = nuxt.options.runtimeConfig.proxy = defu(nuxt.options.runtimeConfig.proxy, { options: options.options }); function createProxyMiddleware(options2, index) { return ` import { createProxyMiddleware } from ${JSON.stringify(resolve(runtimeDir, "./middleware.mjs"))} import { defu } from 'defu' import { useRuntimeConfig } from '#imports' const buildtimeOptions = ${JSON.stringify(options2)} const runtimeOptions = [].concat(useRuntimeConfig().proxy?.options)[${JSON.stringify(index)} ?? 0] export default createProxyMiddleware(defu(runtimeOptions, buildtimeOptions)) `; } nuxt.hook("nitro:config", (nitroConfig) => { nitroConfig.virtual = nitroConfig.virtual || {}; if (Array.isArray(finalConfig.options)) { finalConfig.options.forEach((options2, index) => { const handler = `#http-proxy/${hash(objectHash(options2))}.mjs`; nitroConfig.virtual[handler] = createProxyMiddleware(options2, index); addServerHandler({ handler, middleware: true }); }); } else { const handler = `#http-proxy/${hash(objectHash(finalConfig.options))}.mjs`; nitroConfig.virtual[handler] = createProxyMiddleware(finalConfig.options); addServerHandler({ handler, middleware: true }); } }); } }); export { module as default };