-
Notifications
You must be signed in to change notification settings - Fork 51
/
module.js
executable file
·161 lines (132 loc) · 4.74 KB
/
module.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
const path = require('path')
const consola = require('consola')
const logger = consola.withScope('nuxt:http')
function httpModule (_moduleOptions) {
const { nuxt, addPlugin, requireModule } = this
// Combine options
const moduleOptions = { ...nuxt.options.http, ..._moduleOptions }
// Default port
const defaultPort =
process.env.API_PORT ||
moduleOptions.port ||
process.env.PORT ||
process.env.npm_package_config_nuxt_port ||
(nuxt.options.server && nuxt.options.server.port) ||
3000
// Default host
let defaultHost =
process.env.API_HOST ||
moduleOptions.host ||
process.env.HOST ||
process.env.npm_package_config_nuxt_host ||
(nuxt.options.server && nuxt.options.server.host) ||
'localhost'
/* istanbul ignore if */
if (defaultHost === '0.0.0.0') {
defaultHost = 'localhost'
}
// Support baseUrl
if (moduleOptions.baseUrl && !moduleOptions.baseURL) {
moduleOptions.baseURL = moduleOptions.baseUrl
delete moduleOptions.baseUrl
}
// Default prefix
const prefix = process.env.API_PREFIX || moduleOptions.prefix || '/'
// HTTPS
const https = Boolean(nuxt.options.server && nuxt.options.server.https)
// Apply defaults
const options = {
baseURL: undefined,
browserBaseURL: undefined,
debug: false,
proxyHeaders: true,
proxyHeadersIgnore: ['accept', 'host', 'cf-ray', 'cf-connecting-ip', 'content-length', 'content-md5', 'content-type'],
proxy: false,
retry: false,
serverTimeout: false,
clientTimeout: false,
https,
headers: {},
...moduleOptions
}
const toHttps = s => options.https ? s.replace('http://', 'https://') : s
// ENV overrides
/* istanbul ignore if */
if (process.env.API_URL) {
options.baseURL = process.env.API_URL
}
/* istanbul ignore if */
if (process.env.API_URL_BROWSER) {
options.browserBaseURL = process.env.API_URL_BROWSER
}
// If no baseURL defined, get it from Nuxt server
if (!options.baseURL) {
options.baseURL = `http://${defaultHost}:${defaultPort}${prefix}`
// Update auto generated baseURL after listen for static target as we use random port
const publicRuntimeConfig = nuxt.options.publicRuntimeConfig = nuxt.options.publicRuntimeConfig || {}
publicRuntimeConfig.http = publicRuntimeConfig.http || {}
const privateRuntimeConfig = nuxt.options.privateRuntimeConfig = nuxt.options.privateRuntimeConfig || {}
privateRuntimeConfig.http = privateRuntimeConfig.http || {}
// For static exporting
if (nuxt.options.target === 'static') {
nuxt.hook('listen', (_, { host = 'localhost', port }) => {
publicRuntimeConfig.http.browserBaseURL = toHttps(publicRuntimeConfig.http.browserBaseURL || prefix || '/')
privateRuntimeConfig.http.baseURL = toHttps(privateRuntimeConfig.http.baseURL || `http://${host}:${port}${prefix}`)
})
}
}
// Normalize options
if (options.retry === true) {
options.retry = 2
} else if (!options.retry) {
options.retry = 0
} else if (!isNaN(options.retry)) {
options.retry = parseInt(options.retry)
} else if (typeof options.retry === 'object') {
options.retry = JSON.stringify(options.retry)
}
// Default browserBaseURL
if (typeof options.browserBaseURL === 'undefined') {
options.browserBaseURL = options.proxy ? prefix : options.baseURL
}
// Remove port 443 when https
if (options.baseURL.includes('https://')) {
options.baseURL = options.baseURL.replace(':443', '')
}
// Remove port 80 when http
if (options.baseURL.includes('http://')) {
options.baseURL = options.baseURL.replace(':80', '')
}
// Convert http:// to https:// if https option is on
options.baseURL = toHttps(options.baseURL)
options.browserBaseURL = toHttps(options.browserBaseURL)
// Register plugin
addPlugin({
src: path.resolve(__dirname, 'plugin.js'),
fileName: 'http.js',
options
})
// Proxy integration
if (options.proxy) {
requireModule([
'@nuxtjs/proxy',
typeof options.proxy === 'object' ? options.proxy : {}
])
}
// Alias ky-universal
nuxt.options.alias['ky-universal'] = path.resolve(__dirname, '../ky-universal')
// Transpile ky and ky-universal
nuxt.options.build.transpile = nuxt.options.build.transpile || []
nuxt.options.build.transpile.push('ky')
nuxt.options.build.transpile.push('@nuxt/http')
// Set _HTTP_BASE_URL_ for dynamic SSR baseURL
process.env._HTTP_BASE_URL_ = options.baseURL
logger.debug(`baseURL: ${options.baseURL}`)
logger.debug(`browserBaseURL: ${options.browserBaseURL}`)
}
module.exports = httpModule
module.exports.meta = require('../package.json')
module.exports = httpModule
module.exports.meta = require('../package.json')
module.exports = httpModule
module.exports.meta = require('../package.json')