unplugin-https-reverse-proxy 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/dist/{chunk-5MC5SB7O.js → chunk-K7HSLE6X.js} +96 -34
- package/dist/esbuild.cjs +96 -34
- package/dist/esbuild.js +1 -1
- package/dist/index.cjs +96 -34
- package/dist/index.js +1 -1
- package/dist/nuxt.cjs +71 -29
- package/dist/nuxt.js +1 -1
- package/dist/rollup.cjs +96 -34
- package/dist/rollup.js +1 -1
- package/dist/rspack.cjs +96 -34
- package/dist/rspack.js +1 -1
- package/dist/vite.cjs +96 -34
- package/dist/vite.js +1 -1
- package/dist/webpack.cjs +96 -34
- package/dist/webpack.js +1 -1
- package/package.json +1 -1
- package/src/caddy/caddyfile.ts +58 -19
- package/src/caddy/config.ts +7 -2
- package/src/caddy/index.ts +17 -10
- package/src/index.ts +24 -2
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# unplugin-https-reverse-proxy
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/unplugin-https-reverse-proxy)
|
|
4
|
+
[](https://deepwiki.com/zcf0508/unplugin-https-reverse-proxy)
|
|
4
5
|
|
|
5
6
|
A plugin for https reverse proxy, support `vite`、`webpack` and `rspack`.
|
|
6
7
|
|
|
@@ -170,6 +171,7 @@ const reverseProxyOptions = {
|
|
|
170
171
|
enable: false,
|
|
171
172
|
target: 'xxx',
|
|
172
173
|
https: false,
|
|
174
|
+
healthCheck: true,
|
|
173
175
|
}
|
|
174
176
|
|
|
175
177
|
module.exports = {
|
|
@@ -209,7 +211,10 @@ module.exports = {
|
|
|
209
211
|
// nuxt.config.js
|
|
210
212
|
export default defineNuxtConfig({
|
|
211
213
|
modules: [
|
|
212
|
-
['unplugin-https-reverse-proxy/nuxt', {
|
|
214
|
+
['unplugin-https-reverse-proxy/nuxt', {
|
|
215
|
+
/* options */
|
|
216
|
+
healthCheck: false, // important for nuxt
|
|
217
|
+
}],
|
|
213
218
|
],
|
|
214
219
|
})
|
|
215
220
|
```
|
|
@@ -13391,33 +13391,63 @@ var caddyTemplate = `{
|
|
|
13391
13391
|
}
|
|
13392
13392
|
}
|
|
13393
13393
|
|
|
13394
|
-
{% for
|
|
13395
|
-
{{
|
|
13396
|
-
{{
|
|
13397
|
-
reverse_proxy http://{{ p.source }} {% if p.healthCheck %} {
|
|
13398
|
-
health_uri {{ p.base }}
|
|
13399
|
-
health_interval 2s
|
|
13400
|
-
health_timeout 5s
|
|
13401
|
-
fail_duration 2s
|
|
13402
|
-
unhealthy_status 502 503 504 404
|
|
13403
|
-
lb_try_duration 3s
|
|
13404
|
-
lb_try_interval 300ms
|
|
13394
|
+
{% for host in hosts %}
|
|
13395
|
+
{{ host.host }}{{ host.portSuffix }} {
|
|
13396
|
+
{{ host.tls }}
|
|
13405
13397
|
|
|
13406
|
-
|
|
13407
|
-
|
|
13408
|
-
|
|
13409
|
-
|
|
13410
|
-
|
|
13398
|
+
{% for route in host.routes %}
|
|
13399
|
+
handle {{ route.base }}* {
|
|
13400
|
+
reverse_proxy http://{{ route.source }} {% if route.healthCheck %} {
|
|
13401
|
+
health_uri {{ route.base }}
|
|
13402
|
+
health_interval 2s
|
|
13403
|
+
health_timeout 5s
|
|
13404
|
+
health_headers {
|
|
13405
|
+
User-Agent {http.request.header.User-Agent}
|
|
13406
|
+
Accept text/html,application/json,*/*
|
|
13407
|
+
}
|
|
13408
|
+
fail_duration 2s
|
|
13409
|
+
unhealthy_status 502 503 504 404
|
|
13410
|
+
lb_try_duration 3s
|
|
13411
|
+
lb_try_interval 300ms
|
|
13412
|
+
|
|
13413
|
+
@error status 502 503 504 404
|
|
13414
|
+
handle_response @error {
|
|
13415
|
+
respond * 503 {
|
|
13416
|
+
body "Service Unavailable"
|
|
13417
|
+
close
|
|
13418
|
+
}
|
|
13411
13419
|
}
|
|
13412
13420
|
}
|
|
13421
|
+
{% endif %}
|
|
13413
13422
|
}
|
|
13414
|
-
{%
|
|
13423
|
+
{% endfor %}
|
|
13415
13424
|
}
|
|
13416
13425
|
{% endfor %}
|
|
13417
13426
|
`;
|
|
13418
13427
|
var liquid = new Liquid();
|
|
13419
13428
|
async function genCaddyfile(ctx) {
|
|
13420
|
-
|
|
13429
|
+
const hostsMap = /* @__PURE__ */ new Map();
|
|
13430
|
+
for (const proxy of ctx.proxies) {
|
|
13431
|
+
const key = `${proxy.target}${proxy.portSuffix}`;
|
|
13432
|
+
if (!hostsMap.has(key)) {
|
|
13433
|
+
hostsMap.set(key, {
|
|
13434
|
+
host: proxy.target,
|
|
13435
|
+
portSuffix: proxy.portSuffix,
|
|
13436
|
+
tls: proxy.tls,
|
|
13437
|
+
routes: []
|
|
13438
|
+
});
|
|
13439
|
+
}
|
|
13440
|
+
let base = proxy.base || "/";
|
|
13441
|
+
if (!base.startsWith("/"))
|
|
13442
|
+
base = `/${base}`;
|
|
13443
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
13444
|
+
base = `${base}/`;
|
|
13445
|
+
hostsMap.get(key).routes.push({ ...proxy, base });
|
|
13446
|
+
}
|
|
13447
|
+
for (const host of hostsMap.values())
|
|
13448
|
+
host.routes.sort((a, b) => b.base.length - a.base.length);
|
|
13449
|
+
const hosts = Array.from(hostsMap.values());
|
|
13450
|
+
return await liquid.parseAndRender(caddyTemplate, { ...ctx, hosts });
|
|
13421
13451
|
}
|
|
13422
13452
|
|
|
13423
13453
|
// src/caddy/config.ts
|
|
@@ -13582,8 +13612,13 @@ function useCaddyConfig() {
|
|
|
13582
13612
|
function writeCaddyConfig(_proxies) {
|
|
13583
13613
|
const proxies = configJsonRef() || {};
|
|
13584
13614
|
_proxies.forEach((p) => {
|
|
13585
|
-
|
|
13586
|
-
|
|
13615
|
+
let base = p.base || "/";
|
|
13616
|
+
if (!base.startsWith("/"))
|
|
13617
|
+
base = `/${base}`;
|
|
13618
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
13619
|
+
base = `${base}/`;
|
|
13620
|
+
const index = `${p.target}${p.portSuffix}${base}`;
|
|
13621
|
+
proxies[index] = { ...p, base };
|
|
13587
13622
|
});
|
|
13588
13623
|
const content = JSON.stringify(proxies, null, 2);
|
|
13589
13624
|
configContentRef(content);
|
|
@@ -13801,13 +13836,22 @@ var CaddyInstant = class {
|
|
|
13801
13836
|
throw new Error("update host failed");
|
|
13802
13837
|
consola.success("update host success\n");
|
|
13803
13838
|
const targetHost = target.split(":")[0];
|
|
13839
|
+
const normalizeBase = (b) => {
|
|
13840
|
+
let out = b || "/";
|
|
13841
|
+
if (!out.startsWith("/"))
|
|
13842
|
+
out = `/${out}`;
|
|
13843
|
+
if (out !== "/" && !out.endsWith("/"))
|
|
13844
|
+
out = `${out}/`;
|
|
13845
|
+
return out;
|
|
13846
|
+
};
|
|
13847
|
+
const baseNormalized = normalizeBase(base);
|
|
13804
13848
|
const proxies = [
|
|
13805
13849
|
{
|
|
13806
13850
|
target: targetHost,
|
|
13807
13851
|
portSuffix: https ? "" : ":80",
|
|
13808
13852
|
tls: https ? "tls internal" : "",
|
|
13809
13853
|
source,
|
|
13810
|
-
base,
|
|
13854
|
+
base: baseNormalized,
|
|
13811
13855
|
healthCheck
|
|
13812
13856
|
}
|
|
13813
13857
|
];
|
|
@@ -13817,14 +13861,12 @@ var CaddyInstant = class {
|
|
|
13817
13861
|
effect(async () => {
|
|
13818
13862
|
const { configJsonRef } = getCaddyConfig();
|
|
13819
13863
|
const proxies2 = Object.values(configJsonRef() || {});
|
|
13820
|
-
|
|
13821
|
-
|
|
13822
|
-
|
|
13823
|
-
|
|
13824
|
-
|
|
13825
|
-
|
|
13826
|
-
await this.writeCaddyfile();
|
|
13827
|
-
}
|
|
13864
|
+
const ctx = validateTemplateContext({
|
|
13865
|
+
caddy_root: this.caddyRoot,
|
|
13866
|
+
proxies: proxies2
|
|
13867
|
+
});
|
|
13868
|
+
this.caddyfile = await genCaddyfile(ctx);
|
|
13869
|
+
await this.writeCaddyfile();
|
|
13828
13870
|
})
|
|
13829
13871
|
);
|
|
13830
13872
|
if (!existsSync3(caddyLockFilePath))
|
|
@@ -14052,7 +14094,7 @@ var unpluginFactory = (options) => ({
|
|
|
14052
14094
|
}
|
|
14053
14095
|
},
|
|
14054
14096
|
webpack(compiler) {
|
|
14055
|
-
var _a4, _b3;
|
|
14097
|
+
var _a4, _b3, _c2;
|
|
14056
14098
|
if (process5.env.NODE_ENV !== "development")
|
|
14057
14099
|
return;
|
|
14058
14100
|
const {
|
|
@@ -14083,7 +14125,16 @@ var unpluginFactory = (options) => ({
|
|
|
14083
14125
|
const source = `${devServer.host}:${devServer.port}`;
|
|
14084
14126
|
if (caddy)
|
|
14085
14127
|
return;
|
|
14086
|
-
|
|
14128
|
+
let base = "/";
|
|
14129
|
+
const publicPath = (_b3 = compiler.options.output) == null ? void 0 : _b3.publicPath;
|
|
14130
|
+
if (typeof publicPath === "string" && publicPath) {
|
|
14131
|
+
base = publicPath;
|
|
14132
|
+
}
|
|
14133
|
+
if (!base.startsWith("/"))
|
|
14134
|
+
base = `/${base}`;
|
|
14135
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
14136
|
+
base = `${base}/`;
|
|
14137
|
+
const _close = (_c2 = compiler.close) == null ? void 0 : _c2.bind(compiler);
|
|
14087
14138
|
if (_close) {
|
|
14088
14139
|
compiler.close = async (callback) => {
|
|
14089
14140
|
process5.on("exit", () => {
|
|
@@ -14095,18 +14146,19 @@ var unpluginFactory = (options) => ({
|
|
|
14095
14146
|
}
|
|
14096
14147
|
caddy = new CaddyInstant();
|
|
14097
14148
|
caddy.run(source, target, {
|
|
14149
|
+
base,
|
|
14098
14150
|
...options
|
|
14099
14151
|
}).then(() => {
|
|
14100
14152
|
compiler.hooks.done.tap("unplugin-https-reverse-proxy", async () => {
|
|
14101
14153
|
await printForwardProxy();
|
|
14102
|
-
consola.success(` ${c.green("\u279C")} ${c.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}`)}`);
|
|
14154
|
+
consola.success(` ${c.green("\u279C")} ${c.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
|
|
14103
14155
|
});
|
|
14104
14156
|
}).catch((e) => {
|
|
14105
14157
|
throw e;
|
|
14106
14158
|
});
|
|
14107
14159
|
},
|
|
14108
14160
|
async rspack(compiler) {
|
|
14109
|
-
var _a4, _b3, _c2;
|
|
14161
|
+
var _a4, _b3, _c2, _d2;
|
|
14110
14162
|
if (process5.env.NODE_ENV !== "development")
|
|
14111
14163
|
return;
|
|
14112
14164
|
const {
|
|
@@ -14139,11 +14191,21 @@ var unpluginFactory = (options) => ({
|
|
|
14139
14191
|
if (caddy)
|
|
14140
14192
|
return;
|
|
14141
14193
|
caddy = new CaddyInstant();
|
|
14194
|
+
let base = "/";
|
|
14195
|
+
const publicPath = (_d2 = compiler.options.output) == null ? void 0 : _d2.publicPath;
|
|
14196
|
+
if (typeof publicPath === "string" && publicPath) {
|
|
14197
|
+
base = publicPath;
|
|
14198
|
+
}
|
|
14199
|
+
if (!base.startsWith("/"))
|
|
14200
|
+
base = `/${base}`;
|
|
14201
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
14202
|
+
base = `${base}/`;
|
|
14142
14203
|
caddy.run(source, target, {
|
|
14204
|
+
base,
|
|
14143
14205
|
...options
|
|
14144
14206
|
}).then(async () => {
|
|
14145
14207
|
await printForwardProxy();
|
|
14146
|
-
consola.success(` ${c.green("\u279C")} ${c.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}`)}`);
|
|
14208
|
+
consola.success(` ${c.green("\u279C")} ${c.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
|
|
14147
14209
|
}).catch((e) => {
|
|
14148
14210
|
throw e;
|
|
14149
14211
|
});
|
package/dist/esbuild.cjs
CHANGED
|
@@ -13476,33 +13476,63 @@ var caddyTemplate = `{
|
|
|
13476
13476
|
}
|
|
13477
13477
|
}
|
|
13478
13478
|
|
|
13479
|
-
{% for
|
|
13480
|
-
{{
|
|
13481
|
-
{{
|
|
13482
|
-
reverse_proxy http://{{ p.source }} {% if p.healthCheck %} {
|
|
13483
|
-
health_uri {{ p.base }}
|
|
13484
|
-
health_interval 2s
|
|
13485
|
-
health_timeout 5s
|
|
13486
|
-
fail_duration 2s
|
|
13487
|
-
unhealthy_status 502 503 504 404
|
|
13488
|
-
lb_try_duration 3s
|
|
13489
|
-
lb_try_interval 300ms
|
|
13479
|
+
{% for host in hosts %}
|
|
13480
|
+
{{ host.host }}{{ host.portSuffix }} {
|
|
13481
|
+
{{ host.tls }}
|
|
13490
13482
|
|
|
13491
|
-
|
|
13492
|
-
|
|
13493
|
-
|
|
13494
|
-
|
|
13495
|
-
|
|
13483
|
+
{% for route in host.routes %}
|
|
13484
|
+
handle {{ route.base }}* {
|
|
13485
|
+
reverse_proxy http://{{ route.source }} {% if route.healthCheck %} {
|
|
13486
|
+
health_uri {{ route.base }}
|
|
13487
|
+
health_interval 2s
|
|
13488
|
+
health_timeout 5s
|
|
13489
|
+
health_headers {
|
|
13490
|
+
User-Agent {http.request.header.User-Agent}
|
|
13491
|
+
Accept text/html,application/json,*/*
|
|
13492
|
+
}
|
|
13493
|
+
fail_duration 2s
|
|
13494
|
+
unhealthy_status 502 503 504 404
|
|
13495
|
+
lb_try_duration 3s
|
|
13496
|
+
lb_try_interval 300ms
|
|
13497
|
+
|
|
13498
|
+
@error status 502 503 504 404
|
|
13499
|
+
handle_response @error {
|
|
13500
|
+
respond * 503 {
|
|
13501
|
+
body "Service Unavailable"
|
|
13502
|
+
close
|
|
13503
|
+
}
|
|
13496
13504
|
}
|
|
13497
13505
|
}
|
|
13506
|
+
{% endif %}
|
|
13498
13507
|
}
|
|
13499
|
-
{%
|
|
13508
|
+
{% endfor %}
|
|
13500
13509
|
}
|
|
13501
13510
|
{% endfor %}
|
|
13502
13511
|
`;
|
|
13503
13512
|
var liquid = new Liquid();
|
|
13504
13513
|
async function genCaddyfile(ctx) {
|
|
13505
|
-
|
|
13514
|
+
const hostsMap = /* @__PURE__ */ new Map();
|
|
13515
|
+
for (const proxy of ctx.proxies) {
|
|
13516
|
+
const key = `${proxy.target}${proxy.portSuffix}`;
|
|
13517
|
+
if (!hostsMap.has(key)) {
|
|
13518
|
+
hostsMap.set(key, {
|
|
13519
|
+
host: proxy.target,
|
|
13520
|
+
portSuffix: proxy.portSuffix,
|
|
13521
|
+
tls: proxy.tls,
|
|
13522
|
+
routes: []
|
|
13523
|
+
});
|
|
13524
|
+
}
|
|
13525
|
+
let base = proxy.base || "/";
|
|
13526
|
+
if (!base.startsWith("/"))
|
|
13527
|
+
base = `/${base}`;
|
|
13528
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
13529
|
+
base = `${base}/`;
|
|
13530
|
+
hostsMap.get(key).routes.push({ ...proxy, base });
|
|
13531
|
+
}
|
|
13532
|
+
for (const host of hostsMap.values())
|
|
13533
|
+
host.routes.sort((a, b) => b.base.length - a.base.length);
|
|
13534
|
+
const hosts = Array.from(hostsMap.values());
|
|
13535
|
+
return await liquid.parseAndRender(caddyTemplate, { ...ctx, hosts });
|
|
13506
13536
|
}
|
|
13507
13537
|
|
|
13508
13538
|
// src/caddy/config.ts
|
|
@@ -13667,8 +13697,13 @@ function useCaddyConfig() {
|
|
|
13667
13697
|
function writeCaddyConfig(_proxies) {
|
|
13668
13698
|
const proxies = configJsonRef() || {};
|
|
13669
13699
|
_proxies.forEach((p) => {
|
|
13670
|
-
|
|
13671
|
-
|
|
13700
|
+
let base = p.base || "/";
|
|
13701
|
+
if (!base.startsWith("/"))
|
|
13702
|
+
base = `/${base}`;
|
|
13703
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
13704
|
+
base = `${base}/`;
|
|
13705
|
+
const index = `${p.target}${p.portSuffix}${base}`;
|
|
13706
|
+
proxies[index] = { ...p, base };
|
|
13672
13707
|
});
|
|
13673
13708
|
const content = JSON.stringify(proxies, null, 2);
|
|
13674
13709
|
configContentRef(content);
|
|
@@ -13886,13 +13921,22 @@ var CaddyInstant = class {
|
|
|
13886
13921
|
throw new Error("update host failed");
|
|
13887
13922
|
consola.success("update host success\n");
|
|
13888
13923
|
const targetHost = target.split(":")[0];
|
|
13924
|
+
const normalizeBase = (b) => {
|
|
13925
|
+
let out = b || "/";
|
|
13926
|
+
if (!out.startsWith("/"))
|
|
13927
|
+
out = `/${out}`;
|
|
13928
|
+
if (out !== "/" && !out.endsWith("/"))
|
|
13929
|
+
out = `${out}/`;
|
|
13930
|
+
return out;
|
|
13931
|
+
};
|
|
13932
|
+
const baseNormalized = normalizeBase(base);
|
|
13889
13933
|
const proxies = [
|
|
13890
13934
|
{
|
|
13891
13935
|
target: targetHost,
|
|
13892
13936
|
portSuffix: https ? "" : ":80",
|
|
13893
13937
|
tls: https ? "tls internal" : "",
|
|
13894
13938
|
source,
|
|
13895
|
-
base,
|
|
13939
|
+
base: baseNormalized,
|
|
13896
13940
|
healthCheck
|
|
13897
13941
|
}
|
|
13898
13942
|
];
|
|
@@ -13902,14 +13946,12 @@ var CaddyInstant = class {
|
|
|
13902
13946
|
effect(async () => {
|
|
13903
13947
|
const { configJsonRef } = getCaddyConfig();
|
|
13904
13948
|
const proxies2 = Object.values(configJsonRef() || {});
|
|
13905
|
-
|
|
13906
|
-
|
|
13907
|
-
|
|
13908
|
-
|
|
13909
|
-
|
|
13910
|
-
|
|
13911
|
-
await this.writeCaddyfile();
|
|
13912
|
-
}
|
|
13949
|
+
const ctx = validateTemplateContext({
|
|
13950
|
+
caddy_root: this.caddyRoot,
|
|
13951
|
+
proxies: proxies2
|
|
13952
|
+
});
|
|
13953
|
+
this.caddyfile = await genCaddyfile(ctx);
|
|
13954
|
+
await this.writeCaddyfile();
|
|
13913
13955
|
})
|
|
13914
13956
|
);
|
|
13915
13957
|
if (!(0, import_node_fs3.existsSync)(caddyLockFilePath))
|
|
@@ -14137,7 +14179,7 @@ var unpluginFactory = (options) => ({
|
|
|
14137
14179
|
}
|
|
14138
14180
|
},
|
|
14139
14181
|
webpack(compiler) {
|
|
14140
|
-
var _a4, _b3;
|
|
14182
|
+
var _a4, _b3, _c2;
|
|
14141
14183
|
if (import_node_process5.default.env.NODE_ENV !== "development")
|
|
14142
14184
|
return;
|
|
14143
14185
|
const {
|
|
@@ -14168,7 +14210,16 @@ var unpluginFactory = (options) => ({
|
|
|
14168
14210
|
const source = `${devServer.host}:${devServer.port}`;
|
|
14169
14211
|
if (caddy)
|
|
14170
14212
|
return;
|
|
14171
|
-
|
|
14213
|
+
let base = "/";
|
|
14214
|
+
const publicPath = (_b3 = compiler.options.output) == null ? void 0 : _b3.publicPath;
|
|
14215
|
+
if (typeof publicPath === "string" && publicPath) {
|
|
14216
|
+
base = publicPath;
|
|
14217
|
+
}
|
|
14218
|
+
if (!base.startsWith("/"))
|
|
14219
|
+
base = `/${base}`;
|
|
14220
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
14221
|
+
base = `${base}/`;
|
|
14222
|
+
const _close = (_c2 = compiler.close) == null ? void 0 : _c2.bind(compiler);
|
|
14172
14223
|
if (_close) {
|
|
14173
14224
|
compiler.close = async (callback) => {
|
|
14174
14225
|
import_node_process5.default.on("exit", () => {
|
|
@@ -14180,18 +14231,19 @@ var unpluginFactory = (options) => ({
|
|
|
14180
14231
|
}
|
|
14181
14232
|
caddy = new CaddyInstant();
|
|
14182
14233
|
caddy.run(source, target, {
|
|
14234
|
+
base,
|
|
14183
14235
|
...options
|
|
14184
14236
|
}).then(() => {
|
|
14185
14237
|
compiler.hooks.done.tap("unplugin-https-reverse-proxy", async () => {
|
|
14186
14238
|
await printForwardProxy();
|
|
14187
|
-
consola.success(` ${import_picocolors2.default.green("\u279C")} ${import_picocolors2.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}`)}`);
|
|
14239
|
+
consola.success(` ${import_picocolors2.default.green("\u279C")} ${import_picocolors2.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
|
|
14188
14240
|
});
|
|
14189
14241
|
}).catch((e) => {
|
|
14190
14242
|
throw e;
|
|
14191
14243
|
});
|
|
14192
14244
|
},
|
|
14193
14245
|
async rspack(compiler) {
|
|
14194
|
-
var _a4, _b3, _c2;
|
|
14246
|
+
var _a4, _b3, _c2, _d2;
|
|
14195
14247
|
if (import_node_process5.default.env.NODE_ENV !== "development")
|
|
14196
14248
|
return;
|
|
14197
14249
|
const {
|
|
@@ -14224,11 +14276,21 @@ var unpluginFactory = (options) => ({
|
|
|
14224
14276
|
if (caddy)
|
|
14225
14277
|
return;
|
|
14226
14278
|
caddy = new CaddyInstant();
|
|
14279
|
+
let base = "/";
|
|
14280
|
+
const publicPath = (_d2 = compiler.options.output) == null ? void 0 : _d2.publicPath;
|
|
14281
|
+
if (typeof publicPath === "string" && publicPath) {
|
|
14282
|
+
base = publicPath;
|
|
14283
|
+
}
|
|
14284
|
+
if (!base.startsWith("/"))
|
|
14285
|
+
base = `/${base}`;
|
|
14286
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
14287
|
+
base = `${base}/`;
|
|
14227
14288
|
caddy.run(source, target, {
|
|
14289
|
+
base,
|
|
14228
14290
|
...options
|
|
14229
14291
|
}).then(async () => {
|
|
14230
14292
|
await printForwardProxy();
|
|
14231
|
-
consola.success(` ${import_picocolors2.default.green("\u279C")} ${import_picocolors2.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}`)}`);
|
|
14293
|
+
consola.success(` ${import_picocolors2.default.green("\u279C")} ${import_picocolors2.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
|
|
14232
14294
|
}).catch((e) => {
|
|
14233
14295
|
throw e;
|
|
14234
14296
|
});
|
package/dist/esbuild.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -13476,33 +13476,63 @@ var caddyTemplate = `{
|
|
|
13476
13476
|
}
|
|
13477
13477
|
}
|
|
13478
13478
|
|
|
13479
|
-
{% for
|
|
13480
|
-
{{
|
|
13481
|
-
{{
|
|
13482
|
-
reverse_proxy http://{{ p.source }} {% if p.healthCheck %} {
|
|
13483
|
-
health_uri {{ p.base }}
|
|
13484
|
-
health_interval 2s
|
|
13485
|
-
health_timeout 5s
|
|
13486
|
-
fail_duration 2s
|
|
13487
|
-
unhealthy_status 502 503 504 404
|
|
13488
|
-
lb_try_duration 3s
|
|
13489
|
-
lb_try_interval 300ms
|
|
13479
|
+
{% for host in hosts %}
|
|
13480
|
+
{{ host.host }}{{ host.portSuffix }} {
|
|
13481
|
+
{{ host.tls }}
|
|
13490
13482
|
|
|
13491
|
-
|
|
13492
|
-
|
|
13493
|
-
|
|
13494
|
-
|
|
13495
|
-
|
|
13483
|
+
{% for route in host.routes %}
|
|
13484
|
+
handle {{ route.base }}* {
|
|
13485
|
+
reverse_proxy http://{{ route.source }} {% if route.healthCheck %} {
|
|
13486
|
+
health_uri {{ route.base }}
|
|
13487
|
+
health_interval 2s
|
|
13488
|
+
health_timeout 5s
|
|
13489
|
+
health_headers {
|
|
13490
|
+
User-Agent {http.request.header.User-Agent}
|
|
13491
|
+
Accept text/html,application/json,*/*
|
|
13492
|
+
}
|
|
13493
|
+
fail_duration 2s
|
|
13494
|
+
unhealthy_status 502 503 504 404
|
|
13495
|
+
lb_try_duration 3s
|
|
13496
|
+
lb_try_interval 300ms
|
|
13497
|
+
|
|
13498
|
+
@error status 502 503 504 404
|
|
13499
|
+
handle_response @error {
|
|
13500
|
+
respond * 503 {
|
|
13501
|
+
body "Service Unavailable"
|
|
13502
|
+
close
|
|
13503
|
+
}
|
|
13496
13504
|
}
|
|
13497
13505
|
}
|
|
13506
|
+
{% endif %}
|
|
13498
13507
|
}
|
|
13499
|
-
{%
|
|
13508
|
+
{% endfor %}
|
|
13500
13509
|
}
|
|
13501
13510
|
{% endfor %}
|
|
13502
13511
|
`;
|
|
13503
13512
|
var liquid = new Liquid();
|
|
13504
13513
|
async function genCaddyfile(ctx) {
|
|
13505
|
-
|
|
13514
|
+
const hostsMap = /* @__PURE__ */ new Map();
|
|
13515
|
+
for (const proxy of ctx.proxies) {
|
|
13516
|
+
const key = `${proxy.target}${proxy.portSuffix}`;
|
|
13517
|
+
if (!hostsMap.has(key)) {
|
|
13518
|
+
hostsMap.set(key, {
|
|
13519
|
+
host: proxy.target,
|
|
13520
|
+
portSuffix: proxy.portSuffix,
|
|
13521
|
+
tls: proxy.tls,
|
|
13522
|
+
routes: []
|
|
13523
|
+
});
|
|
13524
|
+
}
|
|
13525
|
+
let base = proxy.base || "/";
|
|
13526
|
+
if (!base.startsWith("/"))
|
|
13527
|
+
base = `/${base}`;
|
|
13528
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
13529
|
+
base = `${base}/`;
|
|
13530
|
+
hostsMap.get(key).routes.push({ ...proxy, base });
|
|
13531
|
+
}
|
|
13532
|
+
for (const host of hostsMap.values())
|
|
13533
|
+
host.routes.sort((a, b) => b.base.length - a.base.length);
|
|
13534
|
+
const hosts = Array.from(hostsMap.values());
|
|
13535
|
+
return await liquid.parseAndRender(caddyTemplate, { ...ctx, hosts });
|
|
13506
13536
|
}
|
|
13507
13537
|
|
|
13508
13538
|
// src/caddy/config.ts
|
|
@@ -13667,8 +13697,13 @@ function useCaddyConfig() {
|
|
|
13667
13697
|
function writeCaddyConfig(_proxies) {
|
|
13668
13698
|
const proxies = configJsonRef() || {};
|
|
13669
13699
|
_proxies.forEach((p) => {
|
|
13670
|
-
|
|
13671
|
-
|
|
13700
|
+
let base = p.base || "/";
|
|
13701
|
+
if (!base.startsWith("/"))
|
|
13702
|
+
base = `/${base}`;
|
|
13703
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
13704
|
+
base = `${base}/`;
|
|
13705
|
+
const index = `${p.target}${p.portSuffix}${base}`;
|
|
13706
|
+
proxies[index] = { ...p, base };
|
|
13672
13707
|
});
|
|
13673
13708
|
const content = JSON.stringify(proxies, null, 2);
|
|
13674
13709
|
configContentRef(content);
|
|
@@ -13886,13 +13921,22 @@ var CaddyInstant = class {
|
|
|
13886
13921
|
throw new Error("update host failed");
|
|
13887
13922
|
consola.success("update host success\n");
|
|
13888
13923
|
const targetHost = target.split(":")[0];
|
|
13924
|
+
const normalizeBase = (b) => {
|
|
13925
|
+
let out = b || "/";
|
|
13926
|
+
if (!out.startsWith("/"))
|
|
13927
|
+
out = `/${out}`;
|
|
13928
|
+
if (out !== "/" && !out.endsWith("/"))
|
|
13929
|
+
out = `${out}/`;
|
|
13930
|
+
return out;
|
|
13931
|
+
};
|
|
13932
|
+
const baseNormalized = normalizeBase(base);
|
|
13889
13933
|
const proxies = [
|
|
13890
13934
|
{
|
|
13891
13935
|
target: targetHost,
|
|
13892
13936
|
portSuffix: https ? "" : ":80",
|
|
13893
13937
|
tls: https ? "tls internal" : "",
|
|
13894
13938
|
source,
|
|
13895
|
-
base,
|
|
13939
|
+
base: baseNormalized,
|
|
13896
13940
|
healthCheck
|
|
13897
13941
|
}
|
|
13898
13942
|
];
|
|
@@ -13902,14 +13946,12 @@ var CaddyInstant = class {
|
|
|
13902
13946
|
effect(async () => {
|
|
13903
13947
|
const { configJsonRef } = getCaddyConfig();
|
|
13904
13948
|
const proxies2 = Object.values(configJsonRef() || {});
|
|
13905
|
-
|
|
13906
|
-
|
|
13907
|
-
|
|
13908
|
-
|
|
13909
|
-
|
|
13910
|
-
|
|
13911
|
-
await this.writeCaddyfile();
|
|
13912
|
-
}
|
|
13949
|
+
const ctx = validateTemplateContext({
|
|
13950
|
+
caddy_root: this.caddyRoot,
|
|
13951
|
+
proxies: proxies2
|
|
13952
|
+
});
|
|
13953
|
+
this.caddyfile = await genCaddyfile(ctx);
|
|
13954
|
+
await this.writeCaddyfile();
|
|
13913
13955
|
})
|
|
13914
13956
|
);
|
|
13915
13957
|
if (!(0, import_node_fs3.existsSync)(caddyLockFilePath))
|
|
@@ -14137,7 +14179,7 @@ var unpluginFactory = (options) => ({
|
|
|
14137
14179
|
}
|
|
14138
14180
|
},
|
|
14139
14181
|
webpack(compiler) {
|
|
14140
|
-
var _a4, _b3;
|
|
14182
|
+
var _a4, _b3, _c2;
|
|
14141
14183
|
if (import_node_process5.default.env.NODE_ENV !== "development")
|
|
14142
14184
|
return;
|
|
14143
14185
|
const {
|
|
@@ -14168,7 +14210,16 @@ var unpluginFactory = (options) => ({
|
|
|
14168
14210
|
const source = `${devServer.host}:${devServer.port}`;
|
|
14169
14211
|
if (caddy)
|
|
14170
14212
|
return;
|
|
14171
|
-
|
|
14213
|
+
let base = "/";
|
|
14214
|
+
const publicPath = (_b3 = compiler.options.output) == null ? void 0 : _b3.publicPath;
|
|
14215
|
+
if (typeof publicPath === "string" && publicPath) {
|
|
14216
|
+
base = publicPath;
|
|
14217
|
+
}
|
|
14218
|
+
if (!base.startsWith("/"))
|
|
14219
|
+
base = `/${base}`;
|
|
14220
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
14221
|
+
base = `${base}/`;
|
|
14222
|
+
const _close = (_c2 = compiler.close) == null ? void 0 : _c2.bind(compiler);
|
|
14172
14223
|
if (_close) {
|
|
14173
14224
|
compiler.close = async (callback) => {
|
|
14174
14225
|
import_node_process5.default.on("exit", () => {
|
|
@@ -14180,18 +14231,19 @@ var unpluginFactory = (options) => ({
|
|
|
14180
14231
|
}
|
|
14181
14232
|
caddy = new CaddyInstant();
|
|
14182
14233
|
caddy.run(source, target, {
|
|
14234
|
+
base,
|
|
14183
14235
|
...options
|
|
14184
14236
|
}).then(() => {
|
|
14185
14237
|
compiler.hooks.done.tap("unplugin-https-reverse-proxy", async () => {
|
|
14186
14238
|
await printForwardProxy();
|
|
14187
|
-
consola.success(` ${import_picocolors2.default.green("\u279C")} ${import_picocolors2.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}`)}`);
|
|
14239
|
+
consola.success(` ${import_picocolors2.default.green("\u279C")} ${import_picocolors2.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
|
|
14188
14240
|
});
|
|
14189
14241
|
}).catch((e) => {
|
|
14190
14242
|
throw e;
|
|
14191
14243
|
});
|
|
14192
14244
|
},
|
|
14193
14245
|
async rspack(compiler) {
|
|
14194
|
-
var _a4, _b3, _c2;
|
|
14246
|
+
var _a4, _b3, _c2, _d2;
|
|
14195
14247
|
if (import_node_process5.default.env.NODE_ENV !== "development")
|
|
14196
14248
|
return;
|
|
14197
14249
|
const {
|
|
@@ -14224,11 +14276,21 @@ var unpluginFactory = (options) => ({
|
|
|
14224
14276
|
if (caddy)
|
|
14225
14277
|
return;
|
|
14226
14278
|
caddy = new CaddyInstant();
|
|
14279
|
+
let base = "/";
|
|
14280
|
+
const publicPath = (_d2 = compiler.options.output) == null ? void 0 : _d2.publicPath;
|
|
14281
|
+
if (typeof publicPath === "string" && publicPath) {
|
|
14282
|
+
base = publicPath;
|
|
14283
|
+
}
|
|
14284
|
+
if (!base.startsWith("/"))
|
|
14285
|
+
base = `/${base}`;
|
|
14286
|
+
if (base !== "/" && !base.endsWith("/"))
|
|
14287
|
+
base = `${base}/`;
|
|
14227
14288
|
caddy.run(source, target, {
|
|
14289
|
+
base,
|
|
14228
14290
|
...options
|
|
14229
14291
|
}).then(async () => {
|
|
14230
14292
|
await printForwardProxy();
|
|
14231
|
-
consola.success(` ${import_picocolors2.default.green("\u279C")} ${import_picocolors2.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}`)}`);
|
|
14293
|
+
consola.success(` ${import_picocolors2.default.green("\u279C")} ${import_picocolors2.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
|
|
14232
14294
|
}).catch((e) => {
|
|
14233
14295
|
throw e;
|
|
14234
14296
|
});
|