line_push/node_modules/@nuxtjs/proxy/lib/module.js
2022-07-17 13:16:16 +08:00

71 lines
1.8 KiB
JavaScript

const { createProxyMiddleware } = require('http-proxy-middleware')
const logger = require('./logger')
// Redirect info ~> debug
logger.info = logger.debug
function proxyModule (options) {
if (!this.options.proxy) {
// No proxy defined
logger.warn('No proxy defined on top level.')
return
}
if (this.options.mode !== 'spa') {
this.nuxt.hook('generate:before', () => {
logger.warn('The module `@nuxtjs/proxy` does not work in generated mode.')
})
}
// Defaults
const defaults = Object.assign(
{
// Required for virtual hosted sites
changeOrigin: true,
// Proxy webSockets
ws: true,
// Use consola as default logger
logProvider: () => logger
},
options
)
delete defaults.src
// Normalize options.proxy to middleware arguments
const applyDefaults = o => Object.assign({}, defaults, o)
const normalizeTarget = o => (typeof o === 'object' ? o : { target: o })
const proxy = []
if (Array.isArray(this.options.proxy)) {
// Array mode
this.options.proxy.forEach((p) => {
if (Array.isArray(p)) {
proxy.push([p[0], applyDefaults(normalizeTarget(p[1]))])
} else {
proxy.push([p, applyDefaults()])
}
})
} else {
// Object mode
Object.keys(this.options.proxy).forEach((context) => {
proxy.push([
context,
applyDefaults(normalizeTarget(this.options.proxy[context]))
])
})
}
// Register middleware
proxy.forEach((args) => {
// https://github.com/chimurai/http-proxy-middleware
this.addServerMiddleware({
prefix: false, // http-proxy-middleware uses req.originalUrl
handler: createProxyMiddleware(...args)
})
})
}
module.exports = proxyModule
module.exports.meta = require('../package.json')