unplugin-https-reverse-proxy 0.0.1 → 0.0.3

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 CHANGED
@@ -73,4 +73,16 @@ module.exports = {
73
73
  }
74
74
  ```
75
75
 
76
- <br>
76
+ <br></details>
77
+
78
+ ## Usage
79
+
80
+ ```bash
81
+ # macOS
82
+ sudo -E npm run dev # your dev script
83
+ # ^ `-E` is important
84
+
85
+ # windows
86
+ # use powershell as administrator
87
+ npm run dev # your dev script
88
+ ```
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  unpluginFactory
3
- } from "./chunk-QYHKWM3K.js";
3
+ } from "./chunk-HSZFTLD3.js";
4
4
 
5
5
  // src/vite.ts
6
6
  import { createVitePlugin } from "unplugin";
@@ -8,7 +8,9 @@ import { platform } from "os";
8
8
  import process2 from "process";
9
9
  import { chmodSync, createWriteStream, existsSync, unlinkSync } from "fs";
10
10
  import { spawn } from "child_process";
11
- import got from "got";
11
+ import { got } from "got-cjs";
12
+ import { HttpProxyAgent } from "http-proxy-agent";
13
+ import { HttpsProxyAgent } from "https-proxy-agent";
12
14
  import * as hostile from "hostile";
13
15
  import kill from "kill-port";
14
16
 
@@ -16,7 +18,7 @@ import kill from "kill-port";
16
18
  import { join } from "path";
17
19
  import process from "process";
18
20
  var TEMP_DIR = process.env.TEMP || process.env.TMPDIR || "/tmp";
19
- var caddyPath = join(TEMP_DIR, "caddy");
21
+ var caddyPath = join(TEMP_DIR, `caddy${process.platform === "win32" ? ".exe" : ""}`);
20
22
  var caddyFilePath = join(TEMP_DIR, "CADDYFILE");
21
23
  var supportList = [
22
24
  {
@@ -129,6 +131,27 @@ var supportList = [
129
131
  }
130
132
  ];
131
133
 
134
+ // src/caddy/utils.ts
135
+ import { createServer } from "net";
136
+ function tryPort(port) {
137
+ return new Promise((resolve, reject) => {
138
+ try {
139
+ const server = createServer().listen(port);
140
+ server.on("listening", () => {
141
+ server.close();
142
+ resolve(false);
143
+ });
144
+ server.on("error", (err) => {
145
+ if (err.code === "EADDRINUSE")
146
+ resolve(true);
147
+ server.close();
148
+ });
149
+ } catch (e) {
150
+ resolve(true);
151
+ }
152
+ });
153
+ }
154
+
132
155
  // src/caddy/index.ts
133
156
  async function download() {
134
157
  if (await testCaddy())
@@ -144,7 +167,16 @@ async function download() {
144
167
  return reject(new Error("not support"));
145
168
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
146
169
  existsSync(caddyPath) && unlinkSync(caddyPath);
147
- got.stream(dowmloadLink).pipe(file).on("finish", () => {
170
+ const httpProxy = process2.env.HTTP_PROXY || process2.env.http_proxy;
171
+ const httpsProxy = process2.env.HTTPS_PROXY || process2.env.https_proxy;
172
+ const httpAgent = httpProxy ? new HttpProxyAgent(httpProxy) : void 0;
173
+ const httpsAgent = httpsProxy ? new HttpsProxyAgent(httpsProxy) : void 0;
174
+ got.stream(dowmloadLink, {
175
+ agent: {
176
+ http: httpAgent,
177
+ https: httpsAgent
178
+ }
179
+ }).pipe(file).on("finish", () => {
148
180
  if (process2.platform === "win32")
149
181
  return resolve(caddyPath);
150
182
  chmodSync(caddyPath, 493);
@@ -159,7 +191,7 @@ function testCaddy() {
159
191
  if (!existsSync(caddyPath))
160
192
  return resolve(false);
161
193
  chmodSync(caddyPath, 493);
162
- const child = spawn("sudo", [caddyPath]);
194
+ const child = process2.platform === "win32" ? spawn(caddyPath, []) : spawn("sudo", [caddyPath]);
163
195
  child.on("error", (err) => {
164
196
  reject(err);
165
197
  });
@@ -233,17 +265,21 @@ var CaddyInstant = class {
233
265
  * @returns
234
266
  */
235
267
  async run(source, target, options) {
268
+ source = source.replace("0.0.0.0", "127.0.0.1").replace("localhost", "127.0.0.1");
236
269
  const {
237
- restore = false,
270
+ restore = true,
238
271
  base = "/"
239
272
  } = options || {};
240
273
  if (!this.inited)
241
274
  await this.init();
242
275
  if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
243
276
  throw new Error("update host failed");
244
- await kill(443, "tcp");
277
+ if (await tryPort(443))
278
+ await kill(443, "tcp");
279
+ if (await tryPort(80))
280
+ await kill(80, "tcp");
245
281
  return new Promise((resolve, reject) => {
246
- const child = spawn("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
282
+ const child = process2.platform !== "win32" ? spawn("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]) : spawn(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
247
283
  child.on("error", (err) => {
248
284
  return reject(err);
249
285
  });
@@ -271,8 +307,10 @@ var CaddyInstant = class {
271
307
 
272
308
  // src/index.ts
273
309
  var config;
310
+ var caddy;
274
311
  var unpluginFactory = (options) => ({
275
312
  name: "unplugin-https-reverse-proxy",
313
+ enforce: "post",
276
314
  vite: {
277
315
  configResolved(_config) {
278
316
  config = _config;
@@ -295,8 +333,8 @@ var unpluginFactory = (options) => ({
295
333
  }
296
334
  const base = server.config.base || "/";
297
335
  try {
298
- const caddy = new CaddyInstant();
299
- caddy.run(source, target, {
336
+ const caddy2 = new CaddyInstant();
337
+ caddy2.run(source, target, {
300
338
  base
301
339
  }).then((stop) => {
302
340
  const colorUrl = (url2) => c.green(url2.replace(/:(\d+)\//, (_, port) => `:${c.bold(port)}/`));
@@ -314,7 +352,6 @@ var unpluginFactory = (options) => ({
314
352
  }
315
353
  },
316
354
  webpack(compiler) {
317
- var _a, _b;
318
355
  const {
319
356
  target = ""
320
357
  } = options;
@@ -322,16 +359,25 @@ var unpluginFactory = (options) => ({
322
359
  console.log("please provide target");
323
360
  return;
324
361
  }
325
- const source = `${((_a = compiler.options.devServer) == null ? void 0 : _a.host) || "127.0.0.1"}:${((_b = compiler.options.devServer) == null ? void 0 : _b.port) || "8080"}`;
326
362
  try {
327
- const caddy = new CaddyInstant();
363
+ const devServer = compiler.options.devServer || process3.VUE_CLI_SERVICE.projectOptions.devServer;
364
+ const source = `${(devServer == null ? void 0 : devServer.host) || "127.0.0.1"}:${(devServer == null ? void 0 : devServer.port) || "8080"}`;
365
+ if (caddy)
366
+ return;
367
+ caddy = new CaddyInstant();
328
368
  caddy.run(source, target).then((stop) => {
329
369
  const colorUrl = (url) => c.green(url.replace(/:(\d+)\//, (_, port) => `:${c.bold(port)}/`));
330
- console.log(` ${c.green("\u279C")} ${c.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
370
+ compiler.hooks.done.tap("unplugin-https-reverse-proxy", (stats) => {
371
+ if (stats.hasErrors())
372
+ return;
373
+ console.log(` ${c.green("\u279C")} ${c.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
374
+ });
331
375
  process3.on("SIGINT", async () => {
332
376
  await stop();
333
377
  process3.exit();
334
378
  });
379
+ }).catch((e) => {
380
+ throw e;
335
381
  });
336
382
  } catch (e) {
337
383
  console.error(e);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  unpluginFactory
3
- } from "./chunk-QYHKWM3K.js";
3
+ } from "./chunk-HSZFTLD3.js";
4
4
 
5
5
  // src/webpack.ts
6
6
  import { createWebpackPlugin } from "unplugin";
package/dist/esbuild.cjs CHANGED
@@ -45,7 +45,9 @@ var import_node_os = require("os");
45
45
  var import_node_process2 = __toESM(require("process"), 1);
46
46
  var import_node_fs = require("fs");
47
47
  var import_node_child_process = require("child_process");
48
- var import_got = __toESM(require("got"), 1);
48
+ var import_got_cjs = require("got-cjs");
49
+ var import_http_proxy_agent = require("http-proxy-agent");
50
+ var import_https_proxy_agent = require("https-proxy-agent");
49
51
  var hostile = __toESM(require("hostile"), 1);
50
52
  var import_kill_port = __toESM(require("kill-port"), 1);
51
53
 
@@ -53,7 +55,7 @@ var import_kill_port = __toESM(require("kill-port"), 1);
53
55
  var import_node_path = require("path");
54
56
  var import_node_process = __toESM(require("process"), 1);
55
57
  var TEMP_DIR = import_node_process.default.env.TEMP || import_node_process.default.env.TMPDIR || "/tmp";
56
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, "caddy");
58
+ var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process.default.platform === "win32" ? ".exe" : ""}`);
57
59
  var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
58
60
  var supportList = [
59
61
  {
@@ -166,6 +168,27 @@ var supportList = [
166
168
  }
167
169
  ];
168
170
 
171
+ // src/caddy/utils.ts
172
+ var import_node_net = require("net");
173
+ function tryPort(port) {
174
+ return new Promise((resolve, reject) => {
175
+ try {
176
+ const server = (0, import_node_net.createServer)().listen(port);
177
+ server.on("listening", () => {
178
+ server.close();
179
+ resolve(false);
180
+ });
181
+ server.on("error", (err) => {
182
+ if (err.code === "EADDRINUSE")
183
+ resolve(true);
184
+ server.close();
185
+ });
186
+ } catch (e) {
187
+ resolve(true);
188
+ }
189
+ });
190
+ }
191
+
169
192
  // src/caddy/index.ts
170
193
  async function download() {
171
194
  if (await testCaddy())
@@ -181,7 +204,16 @@ async function download() {
181
204
  return reject(new Error("not support"));
182
205
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
183
206
  (0, import_node_fs.existsSync)(caddyPath) && (0, import_node_fs.unlinkSync)(caddyPath);
184
- import_got.default.stream(dowmloadLink).pipe(file).on("finish", () => {
207
+ const httpProxy = import_node_process2.default.env.HTTP_PROXY || import_node_process2.default.env.http_proxy;
208
+ const httpsProxy = import_node_process2.default.env.HTTPS_PROXY || import_node_process2.default.env.https_proxy;
209
+ const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
210
+ const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
211
+ import_got_cjs.got.stream(dowmloadLink, {
212
+ agent: {
213
+ http: httpAgent,
214
+ https: httpsAgent
215
+ }
216
+ }).pipe(file).on("finish", () => {
185
217
  if (import_node_process2.default.platform === "win32")
186
218
  return resolve(caddyPath);
187
219
  (0, import_node_fs.chmodSync)(caddyPath, 493);
@@ -196,7 +228,7 @@ function testCaddy() {
196
228
  if (!(0, import_node_fs.existsSync)(caddyPath))
197
229
  return resolve(false);
198
230
  (0, import_node_fs.chmodSync)(caddyPath, 493);
199
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath]);
231
+ const child = import_node_process2.default.platform === "win32" ? (0, import_node_child_process.spawn)(caddyPath, []) : (0, import_node_child_process.spawn)("sudo", [caddyPath]);
200
232
  child.on("error", (err) => {
201
233
  reject(err);
202
234
  });
@@ -270,17 +302,21 @@ var CaddyInstant = class {
270
302
  * @returns
271
303
  */
272
304
  async run(source, target, options) {
305
+ source = source.replace("0.0.0.0", "127.0.0.1").replace("localhost", "127.0.0.1");
273
306
  const {
274
- restore = false,
307
+ restore = true,
275
308
  base = "/"
276
309
  } = options || {};
277
310
  if (!this.inited)
278
311
  await this.init();
279
312
  if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
280
313
  throw new Error("update host failed");
281
- await (0, import_kill_port.default)(443, "tcp");
314
+ if (await tryPort(443))
315
+ await (0, import_kill_port.default)(443, "tcp");
316
+ if (await tryPort(80))
317
+ await (0, import_kill_port.default)(80, "tcp");
282
318
  return new Promise((resolve, reject) => {
283
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
319
+ const child = import_node_process2.default.platform !== "win32" ? (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]) : (0, import_node_child_process.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
284
320
  child.on("error", (err) => {
285
321
  return reject(err);
286
322
  });
@@ -308,8 +344,10 @@ var CaddyInstant = class {
308
344
 
309
345
  // src/index.ts
310
346
  var config;
347
+ var caddy;
311
348
  var unpluginFactory = (options) => ({
312
349
  name: "unplugin-https-reverse-proxy",
350
+ enforce: "post",
313
351
  vite: {
314
352
  configResolved(_config) {
315
353
  config = _config;
@@ -332,8 +370,8 @@ var unpluginFactory = (options) => ({
332
370
  }
333
371
  const base = server.config.base || "/";
334
372
  try {
335
- const caddy = new CaddyInstant();
336
- caddy.run(source, target, {
373
+ const caddy2 = new CaddyInstant();
374
+ caddy2.run(source, target, {
337
375
  base
338
376
  }).then((stop) => {
339
377
  const colorUrl = (url2) => import_picocolors.default.green(url2.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
@@ -351,7 +389,6 @@ var unpluginFactory = (options) => ({
351
389
  }
352
390
  },
353
391
  webpack(compiler) {
354
- var _a, _b;
355
392
  const {
356
393
  target = ""
357
394
  } = options;
@@ -359,16 +396,25 @@ var unpluginFactory = (options) => ({
359
396
  console.log("please provide target");
360
397
  return;
361
398
  }
362
- const source = `${((_a = compiler.options.devServer) == null ? void 0 : _a.host) || "127.0.0.1"}:${((_b = compiler.options.devServer) == null ? void 0 : _b.port) || "8080"}`;
363
399
  try {
364
- const caddy = new CaddyInstant();
400
+ const devServer = compiler.options.devServer || import_node_process3.default.VUE_CLI_SERVICE.projectOptions.devServer;
401
+ const source = `${(devServer == null ? void 0 : devServer.host) || "127.0.0.1"}:${(devServer == null ? void 0 : devServer.port) || "8080"}`;
402
+ if (caddy)
403
+ return;
404
+ caddy = new CaddyInstant();
365
405
  caddy.run(source, target).then((stop) => {
366
406
  const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
367
- console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
407
+ compiler.hooks.done.tap("unplugin-https-reverse-proxy", (stats) => {
408
+ if (stats.hasErrors())
409
+ return;
410
+ console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
411
+ });
368
412
  import_node_process3.default.on("SIGINT", async () => {
369
413
  await stop();
370
414
  import_node_process3.default.exit();
371
415
  });
416
+ }).catch((e) => {
417
+ throw e;
372
418
  });
373
419
  } catch (e) {
374
420
  console.error(e);
package/dist/esbuild.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  unpluginFactory
3
- } from "./chunk-QYHKWM3K.js";
3
+ } from "./chunk-HSZFTLD3.js";
4
4
 
5
5
  // src/esbuild.ts
6
6
  import { createEsbuildPlugin } from "unplugin";
package/dist/index.cjs CHANGED
@@ -44,7 +44,9 @@ var import_node_os = require("os");
44
44
  var import_node_process2 = __toESM(require("process"), 1);
45
45
  var import_node_fs = require("fs");
46
46
  var import_node_child_process = require("child_process");
47
- var import_got = __toESM(require("got"), 1);
47
+ var import_got_cjs = require("got-cjs");
48
+ var import_http_proxy_agent = require("http-proxy-agent");
49
+ var import_https_proxy_agent = require("https-proxy-agent");
48
50
  var hostile = __toESM(require("hostile"), 1);
49
51
  var import_kill_port = __toESM(require("kill-port"), 1);
50
52
 
@@ -52,7 +54,7 @@ var import_kill_port = __toESM(require("kill-port"), 1);
52
54
  var import_node_path = require("path");
53
55
  var import_node_process = __toESM(require("process"), 1);
54
56
  var TEMP_DIR = import_node_process.default.env.TEMP || import_node_process.default.env.TMPDIR || "/tmp";
55
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, "caddy");
57
+ var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process.default.platform === "win32" ? ".exe" : ""}`);
56
58
  var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
57
59
  var supportList = [
58
60
  {
@@ -165,6 +167,27 @@ var supportList = [
165
167
  }
166
168
  ];
167
169
 
170
+ // src/caddy/utils.ts
171
+ var import_node_net = require("net");
172
+ function tryPort(port) {
173
+ return new Promise((resolve, reject) => {
174
+ try {
175
+ const server = (0, import_node_net.createServer)().listen(port);
176
+ server.on("listening", () => {
177
+ server.close();
178
+ resolve(false);
179
+ });
180
+ server.on("error", (err) => {
181
+ if (err.code === "EADDRINUSE")
182
+ resolve(true);
183
+ server.close();
184
+ });
185
+ } catch (e) {
186
+ resolve(true);
187
+ }
188
+ });
189
+ }
190
+
168
191
  // src/caddy/index.ts
169
192
  async function download() {
170
193
  if (await testCaddy())
@@ -180,7 +203,16 @@ async function download() {
180
203
  return reject(new Error("not support"));
181
204
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
182
205
  (0, import_node_fs.existsSync)(caddyPath) && (0, import_node_fs.unlinkSync)(caddyPath);
183
- import_got.default.stream(dowmloadLink).pipe(file).on("finish", () => {
206
+ const httpProxy = import_node_process2.default.env.HTTP_PROXY || import_node_process2.default.env.http_proxy;
207
+ const httpsProxy = import_node_process2.default.env.HTTPS_PROXY || import_node_process2.default.env.https_proxy;
208
+ const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
209
+ const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
210
+ import_got_cjs.got.stream(dowmloadLink, {
211
+ agent: {
212
+ http: httpAgent,
213
+ https: httpsAgent
214
+ }
215
+ }).pipe(file).on("finish", () => {
184
216
  if (import_node_process2.default.platform === "win32")
185
217
  return resolve(caddyPath);
186
218
  (0, import_node_fs.chmodSync)(caddyPath, 493);
@@ -195,7 +227,7 @@ function testCaddy() {
195
227
  if (!(0, import_node_fs.existsSync)(caddyPath))
196
228
  return resolve(false);
197
229
  (0, import_node_fs.chmodSync)(caddyPath, 493);
198
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath]);
230
+ const child = import_node_process2.default.platform === "win32" ? (0, import_node_child_process.spawn)(caddyPath, []) : (0, import_node_child_process.spawn)("sudo", [caddyPath]);
199
231
  child.on("error", (err) => {
200
232
  reject(err);
201
233
  });
@@ -269,17 +301,21 @@ var CaddyInstant = class {
269
301
  * @returns
270
302
  */
271
303
  async run(source, target, options) {
304
+ source = source.replace("0.0.0.0", "127.0.0.1").replace("localhost", "127.0.0.1");
272
305
  const {
273
- restore = false,
306
+ restore = true,
274
307
  base = "/"
275
308
  } = options || {};
276
309
  if (!this.inited)
277
310
  await this.init();
278
311
  if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
279
312
  throw new Error("update host failed");
280
- await (0, import_kill_port.default)(443, "tcp");
313
+ if (await tryPort(443))
314
+ await (0, import_kill_port.default)(443, "tcp");
315
+ if (await tryPort(80))
316
+ await (0, import_kill_port.default)(80, "tcp");
281
317
  return new Promise((resolve, reject) => {
282
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
318
+ const child = import_node_process2.default.platform !== "win32" ? (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]) : (0, import_node_child_process.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
283
319
  child.on("error", (err) => {
284
320
  return reject(err);
285
321
  });
@@ -307,8 +343,10 @@ var CaddyInstant = class {
307
343
 
308
344
  // src/index.ts
309
345
  var config;
346
+ var caddy;
310
347
  var unpluginFactory = (options) => ({
311
348
  name: "unplugin-https-reverse-proxy",
349
+ enforce: "post",
312
350
  vite: {
313
351
  configResolved(_config) {
314
352
  config = _config;
@@ -331,8 +369,8 @@ var unpluginFactory = (options) => ({
331
369
  }
332
370
  const base = server.config.base || "/";
333
371
  try {
334
- const caddy = new CaddyInstant();
335
- caddy.run(source, target, {
372
+ const caddy2 = new CaddyInstant();
373
+ caddy2.run(source, target, {
336
374
  base
337
375
  }).then((stop) => {
338
376
  const colorUrl = (url2) => import_picocolors.default.green(url2.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
@@ -350,7 +388,6 @@ var unpluginFactory = (options) => ({
350
388
  }
351
389
  },
352
390
  webpack(compiler) {
353
- var _a, _b;
354
391
  const {
355
392
  target = ""
356
393
  } = options;
@@ -358,16 +395,25 @@ var unpluginFactory = (options) => ({
358
395
  console.log("please provide target");
359
396
  return;
360
397
  }
361
- const source = `${((_a = compiler.options.devServer) == null ? void 0 : _a.host) || "127.0.0.1"}:${((_b = compiler.options.devServer) == null ? void 0 : _b.port) || "8080"}`;
362
398
  try {
363
- const caddy = new CaddyInstant();
399
+ const devServer = compiler.options.devServer || import_node_process3.default.VUE_CLI_SERVICE.projectOptions.devServer;
400
+ const source = `${(devServer == null ? void 0 : devServer.host) || "127.0.0.1"}:${(devServer == null ? void 0 : devServer.port) || "8080"}`;
401
+ if (caddy)
402
+ return;
403
+ caddy = new CaddyInstant();
364
404
  caddy.run(source, target).then((stop) => {
365
405
  const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
366
- console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
406
+ compiler.hooks.done.tap("unplugin-https-reverse-proxy", (stats) => {
407
+ if (stats.hasErrors())
408
+ return;
409
+ console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
410
+ });
367
411
  import_node_process3.default.on("SIGINT", async () => {
368
412
  await stop();
369
413
  import_node_process3.default.exit();
370
414
  });
415
+ }).catch((e) => {
416
+ throw e;
371
417
  });
372
418
  } catch (e) {
373
419
  console.error(e);
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  src_default,
3
3
  unplugin,
4
4
  unpluginFactory
5
- } from "./chunk-QYHKWM3K.js";
5
+ } from "./chunk-HSZFTLD3.js";
6
6
  export {
7
7
  src_default as default,
8
8
  unplugin,
package/dist/nuxt.cjs CHANGED
@@ -48,7 +48,9 @@ var import_node_os = require("os");
48
48
  var import_node_process2 = __toESM(require("process"), 1);
49
49
  var import_node_fs = require("fs");
50
50
  var import_node_child_process = require("child_process");
51
- var import_got = __toESM(require("got"), 1);
51
+ var import_got_cjs = require("got-cjs");
52
+ var import_http_proxy_agent = require("http-proxy-agent");
53
+ var import_https_proxy_agent = require("https-proxy-agent");
52
54
  var hostile = __toESM(require("hostile"), 1);
53
55
  var import_kill_port = __toESM(require("kill-port"), 1);
54
56
 
@@ -56,7 +58,7 @@ var import_kill_port = __toESM(require("kill-port"), 1);
56
58
  var import_node_path = require("path");
57
59
  var import_node_process = __toESM(require("process"), 1);
58
60
  var TEMP_DIR = import_node_process.default.env.TEMP || import_node_process.default.env.TMPDIR || "/tmp";
59
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, "caddy");
61
+ var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process.default.platform === "win32" ? ".exe" : ""}`);
60
62
  var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
61
63
  var supportList = [
62
64
  {
@@ -169,6 +171,27 @@ var supportList = [
169
171
  }
170
172
  ];
171
173
 
174
+ // src/caddy/utils.ts
175
+ var import_node_net = require("net");
176
+ function tryPort(port) {
177
+ return new Promise((resolve, reject) => {
178
+ try {
179
+ const server = (0, import_node_net.createServer)().listen(port);
180
+ server.on("listening", () => {
181
+ server.close();
182
+ resolve(false);
183
+ });
184
+ server.on("error", (err) => {
185
+ if (err.code === "EADDRINUSE")
186
+ resolve(true);
187
+ server.close();
188
+ });
189
+ } catch (e) {
190
+ resolve(true);
191
+ }
192
+ });
193
+ }
194
+
172
195
  // src/caddy/index.ts
173
196
  async function download() {
174
197
  if (await testCaddy())
@@ -184,7 +207,16 @@ async function download() {
184
207
  return reject(new Error("not support"));
185
208
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
186
209
  (0, import_node_fs.existsSync)(caddyPath) && (0, import_node_fs.unlinkSync)(caddyPath);
187
- import_got.default.stream(dowmloadLink).pipe(file).on("finish", () => {
210
+ const httpProxy = import_node_process2.default.env.HTTP_PROXY || import_node_process2.default.env.http_proxy;
211
+ const httpsProxy = import_node_process2.default.env.HTTPS_PROXY || import_node_process2.default.env.https_proxy;
212
+ const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
213
+ const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
214
+ import_got_cjs.got.stream(dowmloadLink, {
215
+ agent: {
216
+ http: httpAgent,
217
+ https: httpsAgent
218
+ }
219
+ }).pipe(file).on("finish", () => {
188
220
  if (import_node_process2.default.platform === "win32")
189
221
  return resolve(caddyPath);
190
222
  (0, import_node_fs.chmodSync)(caddyPath, 493);
@@ -199,7 +231,7 @@ function testCaddy() {
199
231
  if (!(0, import_node_fs.existsSync)(caddyPath))
200
232
  return resolve(false);
201
233
  (0, import_node_fs.chmodSync)(caddyPath, 493);
202
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath]);
234
+ const child = import_node_process2.default.platform === "win32" ? (0, import_node_child_process.spawn)(caddyPath, []) : (0, import_node_child_process.spawn)("sudo", [caddyPath]);
203
235
  child.on("error", (err) => {
204
236
  reject(err);
205
237
  });
@@ -273,17 +305,21 @@ var CaddyInstant = class {
273
305
  * @returns
274
306
  */
275
307
  async run(source, target, options) {
308
+ source = source.replace("0.0.0.0", "127.0.0.1").replace("localhost", "127.0.0.1");
276
309
  const {
277
- restore = false,
310
+ restore = true,
278
311
  base = "/"
279
312
  } = options || {};
280
313
  if (!this.inited)
281
314
  await this.init();
282
315
  if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
283
316
  throw new Error("update host failed");
284
- await (0, import_kill_port.default)(443, "tcp");
317
+ if (await tryPort(443))
318
+ await (0, import_kill_port.default)(443, "tcp");
319
+ if (await tryPort(80))
320
+ await (0, import_kill_port.default)(80, "tcp");
285
321
  return new Promise((resolve, reject) => {
286
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
322
+ const child = import_node_process2.default.platform !== "win32" ? (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]) : (0, import_node_child_process.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
287
323
  child.on("error", (err) => {
288
324
  return reject(err);
289
325
  });
@@ -311,8 +347,10 @@ var CaddyInstant = class {
311
347
 
312
348
  // src/index.ts
313
349
  var config;
350
+ var caddy;
314
351
  var unpluginFactory = (options) => ({
315
352
  name: "unplugin-https-reverse-proxy",
353
+ enforce: "post",
316
354
  vite: {
317
355
  configResolved(_config) {
318
356
  config = _config;
@@ -335,8 +373,8 @@ var unpluginFactory = (options) => ({
335
373
  }
336
374
  const base = server.config.base || "/";
337
375
  try {
338
- const caddy = new CaddyInstant();
339
- caddy.run(source, target, {
376
+ const caddy2 = new CaddyInstant();
377
+ caddy2.run(source, target, {
340
378
  base
341
379
  }).then((stop) => {
342
380
  const colorUrl = (url2) => import_picocolors.default.green(url2.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
@@ -354,7 +392,6 @@ var unpluginFactory = (options) => ({
354
392
  }
355
393
  },
356
394
  webpack(compiler) {
357
- var _a, _b;
358
395
  const {
359
396
  target = ""
360
397
  } = options;
@@ -362,16 +399,25 @@ var unpluginFactory = (options) => ({
362
399
  console.log("please provide target");
363
400
  return;
364
401
  }
365
- const source = `${((_a = compiler.options.devServer) == null ? void 0 : _a.host) || "127.0.0.1"}:${((_b = compiler.options.devServer) == null ? void 0 : _b.port) || "8080"}`;
366
402
  try {
367
- const caddy = new CaddyInstant();
403
+ const devServer = compiler.options.devServer || import_node_process3.default.VUE_CLI_SERVICE.projectOptions.devServer;
404
+ const source = `${(devServer == null ? void 0 : devServer.host) || "127.0.0.1"}:${(devServer == null ? void 0 : devServer.port) || "8080"}`;
405
+ if (caddy)
406
+ return;
407
+ caddy = new CaddyInstant();
368
408
  caddy.run(source, target).then((stop) => {
369
409
  const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
370
- console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
410
+ compiler.hooks.done.tap("unplugin-https-reverse-proxy", (stats) => {
411
+ if (stats.hasErrors())
412
+ return;
413
+ console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
414
+ });
371
415
  import_node_process3.default.on("SIGINT", async () => {
372
416
  await stop();
373
417
  import_node_process3.default.exit();
374
418
  });
419
+ }).catch((e) => {
420
+ throw e;
375
421
  });
376
422
  } catch (e) {
377
423
  console.error(e);
package/dist/nuxt.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  vite_default
3
- } from "./chunk-XWZYGFLS.js";
3
+ } from "./chunk-47EXOCHO.js";
4
4
  import {
5
5
  webpack_default
6
- } from "./chunk-TIR4PYKX.js";
7
- import "./chunk-QYHKWM3K.js";
6
+ } from "./chunk-Q7EG3ZFW.js";
7
+ import "./chunk-HSZFTLD3.js";
8
8
 
9
9
  // src/nuxt.ts
10
10
  import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from "@nuxt/kit";
package/dist/rollup.cjs CHANGED
@@ -45,7 +45,9 @@ var import_node_os = require("os");
45
45
  var import_node_process2 = __toESM(require("process"), 1);
46
46
  var import_node_fs = require("fs");
47
47
  var import_node_child_process = require("child_process");
48
- var import_got = __toESM(require("got"), 1);
48
+ var import_got_cjs = require("got-cjs");
49
+ var import_http_proxy_agent = require("http-proxy-agent");
50
+ var import_https_proxy_agent = require("https-proxy-agent");
49
51
  var hostile = __toESM(require("hostile"), 1);
50
52
  var import_kill_port = __toESM(require("kill-port"), 1);
51
53
 
@@ -53,7 +55,7 @@ var import_kill_port = __toESM(require("kill-port"), 1);
53
55
  var import_node_path = require("path");
54
56
  var import_node_process = __toESM(require("process"), 1);
55
57
  var TEMP_DIR = import_node_process.default.env.TEMP || import_node_process.default.env.TMPDIR || "/tmp";
56
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, "caddy");
58
+ var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process.default.platform === "win32" ? ".exe" : ""}`);
57
59
  var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
58
60
  var supportList = [
59
61
  {
@@ -166,6 +168,27 @@ var supportList = [
166
168
  }
167
169
  ];
168
170
 
171
+ // src/caddy/utils.ts
172
+ var import_node_net = require("net");
173
+ function tryPort(port) {
174
+ return new Promise((resolve, reject) => {
175
+ try {
176
+ const server = (0, import_node_net.createServer)().listen(port);
177
+ server.on("listening", () => {
178
+ server.close();
179
+ resolve(false);
180
+ });
181
+ server.on("error", (err) => {
182
+ if (err.code === "EADDRINUSE")
183
+ resolve(true);
184
+ server.close();
185
+ });
186
+ } catch (e) {
187
+ resolve(true);
188
+ }
189
+ });
190
+ }
191
+
169
192
  // src/caddy/index.ts
170
193
  async function download() {
171
194
  if (await testCaddy())
@@ -181,7 +204,16 @@ async function download() {
181
204
  return reject(new Error("not support"));
182
205
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
183
206
  (0, import_node_fs.existsSync)(caddyPath) && (0, import_node_fs.unlinkSync)(caddyPath);
184
- import_got.default.stream(dowmloadLink).pipe(file).on("finish", () => {
207
+ const httpProxy = import_node_process2.default.env.HTTP_PROXY || import_node_process2.default.env.http_proxy;
208
+ const httpsProxy = import_node_process2.default.env.HTTPS_PROXY || import_node_process2.default.env.https_proxy;
209
+ const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
210
+ const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
211
+ import_got_cjs.got.stream(dowmloadLink, {
212
+ agent: {
213
+ http: httpAgent,
214
+ https: httpsAgent
215
+ }
216
+ }).pipe(file).on("finish", () => {
185
217
  if (import_node_process2.default.platform === "win32")
186
218
  return resolve(caddyPath);
187
219
  (0, import_node_fs.chmodSync)(caddyPath, 493);
@@ -196,7 +228,7 @@ function testCaddy() {
196
228
  if (!(0, import_node_fs.existsSync)(caddyPath))
197
229
  return resolve(false);
198
230
  (0, import_node_fs.chmodSync)(caddyPath, 493);
199
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath]);
231
+ const child = import_node_process2.default.platform === "win32" ? (0, import_node_child_process.spawn)(caddyPath, []) : (0, import_node_child_process.spawn)("sudo", [caddyPath]);
200
232
  child.on("error", (err) => {
201
233
  reject(err);
202
234
  });
@@ -270,17 +302,21 @@ var CaddyInstant = class {
270
302
  * @returns
271
303
  */
272
304
  async run(source, target, options) {
305
+ source = source.replace("0.0.0.0", "127.0.0.1").replace("localhost", "127.0.0.1");
273
306
  const {
274
- restore = false,
307
+ restore = true,
275
308
  base = "/"
276
309
  } = options || {};
277
310
  if (!this.inited)
278
311
  await this.init();
279
312
  if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
280
313
  throw new Error("update host failed");
281
- await (0, import_kill_port.default)(443, "tcp");
314
+ if (await tryPort(443))
315
+ await (0, import_kill_port.default)(443, "tcp");
316
+ if (await tryPort(80))
317
+ await (0, import_kill_port.default)(80, "tcp");
282
318
  return new Promise((resolve, reject) => {
283
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
319
+ const child = import_node_process2.default.platform !== "win32" ? (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]) : (0, import_node_child_process.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
284
320
  child.on("error", (err) => {
285
321
  return reject(err);
286
322
  });
@@ -308,8 +344,10 @@ var CaddyInstant = class {
308
344
 
309
345
  // src/index.ts
310
346
  var config;
347
+ var caddy;
311
348
  var unpluginFactory = (options) => ({
312
349
  name: "unplugin-https-reverse-proxy",
350
+ enforce: "post",
313
351
  vite: {
314
352
  configResolved(_config) {
315
353
  config = _config;
@@ -332,8 +370,8 @@ var unpluginFactory = (options) => ({
332
370
  }
333
371
  const base = server.config.base || "/";
334
372
  try {
335
- const caddy = new CaddyInstant();
336
- caddy.run(source, target, {
373
+ const caddy2 = new CaddyInstant();
374
+ caddy2.run(source, target, {
337
375
  base
338
376
  }).then((stop) => {
339
377
  const colorUrl = (url2) => import_picocolors.default.green(url2.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
@@ -351,7 +389,6 @@ var unpluginFactory = (options) => ({
351
389
  }
352
390
  },
353
391
  webpack(compiler) {
354
- var _a, _b;
355
392
  const {
356
393
  target = ""
357
394
  } = options;
@@ -359,16 +396,25 @@ var unpluginFactory = (options) => ({
359
396
  console.log("please provide target");
360
397
  return;
361
398
  }
362
- const source = `${((_a = compiler.options.devServer) == null ? void 0 : _a.host) || "127.0.0.1"}:${((_b = compiler.options.devServer) == null ? void 0 : _b.port) || "8080"}`;
363
399
  try {
364
- const caddy = new CaddyInstant();
400
+ const devServer = compiler.options.devServer || import_node_process3.default.VUE_CLI_SERVICE.projectOptions.devServer;
401
+ const source = `${(devServer == null ? void 0 : devServer.host) || "127.0.0.1"}:${(devServer == null ? void 0 : devServer.port) || "8080"}`;
402
+ if (caddy)
403
+ return;
404
+ caddy = new CaddyInstant();
365
405
  caddy.run(source, target).then((stop) => {
366
406
  const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
367
- console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
407
+ compiler.hooks.done.tap("unplugin-https-reverse-proxy", (stats) => {
408
+ if (stats.hasErrors())
409
+ return;
410
+ console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
411
+ });
368
412
  import_node_process3.default.on("SIGINT", async () => {
369
413
  await stop();
370
414
  import_node_process3.default.exit();
371
415
  });
416
+ }).catch((e) => {
417
+ throw e;
372
418
  });
373
419
  } catch (e) {
374
420
  console.error(e);
package/dist/rollup.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  unpluginFactory
3
- } from "./chunk-QYHKWM3K.js";
3
+ } from "./chunk-HSZFTLD3.js";
4
4
 
5
5
  // src/rollup.ts
6
6
  import { createRollupPlugin } from "unplugin";
package/dist/vite.cjs CHANGED
@@ -45,7 +45,9 @@ var import_node_os = require("os");
45
45
  var import_node_process2 = __toESM(require("process"), 1);
46
46
  var import_node_fs = require("fs");
47
47
  var import_node_child_process = require("child_process");
48
- var import_got = __toESM(require("got"), 1);
48
+ var import_got_cjs = require("got-cjs");
49
+ var import_http_proxy_agent = require("http-proxy-agent");
50
+ var import_https_proxy_agent = require("https-proxy-agent");
49
51
  var hostile = __toESM(require("hostile"), 1);
50
52
  var import_kill_port = __toESM(require("kill-port"), 1);
51
53
 
@@ -53,7 +55,7 @@ var import_kill_port = __toESM(require("kill-port"), 1);
53
55
  var import_node_path = require("path");
54
56
  var import_node_process = __toESM(require("process"), 1);
55
57
  var TEMP_DIR = import_node_process.default.env.TEMP || import_node_process.default.env.TMPDIR || "/tmp";
56
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, "caddy");
58
+ var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process.default.platform === "win32" ? ".exe" : ""}`);
57
59
  var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
58
60
  var supportList = [
59
61
  {
@@ -166,6 +168,27 @@ var supportList = [
166
168
  }
167
169
  ];
168
170
 
171
+ // src/caddy/utils.ts
172
+ var import_node_net = require("net");
173
+ function tryPort(port) {
174
+ return new Promise((resolve, reject) => {
175
+ try {
176
+ const server = (0, import_node_net.createServer)().listen(port);
177
+ server.on("listening", () => {
178
+ server.close();
179
+ resolve(false);
180
+ });
181
+ server.on("error", (err) => {
182
+ if (err.code === "EADDRINUSE")
183
+ resolve(true);
184
+ server.close();
185
+ });
186
+ } catch (e) {
187
+ resolve(true);
188
+ }
189
+ });
190
+ }
191
+
169
192
  // src/caddy/index.ts
170
193
  async function download() {
171
194
  if (await testCaddy())
@@ -181,7 +204,16 @@ async function download() {
181
204
  return reject(new Error("not support"));
182
205
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
183
206
  (0, import_node_fs.existsSync)(caddyPath) && (0, import_node_fs.unlinkSync)(caddyPath);
184
- import_got.default.stream(dowmloadLink).pipe(file).on("finish", () => {
207
+ const httpProxy = import_node_process2.default.env.HTTP_PROXY || import_node_process2.default.env.http_proxy;
208
+ const httpsProxy = import_node_process2.default.env.HTTPS_PROXY || import_node_process2.default.env.https_proxy;
209
+ const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
210
+ const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
211
+ import_got_cjs.got.stream(dowmloadLink, {
212
+ agent: {
213
+ http: httpAgent,
214
+ https: httpsAgent
215
+ }
216
+ }).pipe(file).on("finish", () => {
185
217
  if (import_node_process2.default.platform === "win32")
186
218
  return resolve(caddyPath);
187
219
  (0, import_node_fs.chmodSync)(caddyPath, 493);
@@ -196,7 +228,7 @@ function testCaddy() {
196
228
  if (!(0, import_node_fs.existsSync)(caddyPath))
197
229
  return resolve(false);
198
230
  (0, import_node_fs.chmodSync)(caddyPath, 493);
199
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath]);
231
+ const child = import_node_process2.default.platform === "win32" ? (0, import_node_child_process.spawn)(caddyPath, []) : (0, import_node_child_process.spawn)("sudo", [caddyPath]);
200
232
  child.on("error", (err) => {
201
233
  reject(err);
202
234
  });
@@ -270,17 +302,21 @@ var CaddyInstant = class {
270
302
  * @returns
271
303
  */
272
304
  async run(source, target, options) {
305
+ source = source.replace("0.0.0.0", "127.0.0.1").replace("localhost", "127.0.0.1");
273
306
  const {
274
- restore = false,
307
+ restore = true,
275
308
  base = "/"
276
309
  } = options || {};
277
310
  if (!this.inited)
278
311
  await this.init();
279
312
  if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
280
313
  throw new Error("update host failed");
281
- await (0, import_kill_port.default)(443, "tcp");
314
+ if (await tryPort(443))
315
+ await (0, import_kill_port.default)(443, "tcp");
316
+ if (await tryPort(80))
317
+ await (0, import_kill_port.default)(80, "tcp");
282
318
  return new Promise((resolve, reject) => {
283
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
319
+ const child = import_node_process2.default.platform !== "win32" ? (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]) : (0, import_node_child_process.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
284
320
  child.on("error", (err) => {
285
321
  return reject(err);
286
322
  });
@@ -308,8 +344,10 @@ var CaddyInstant = class {
308
344
 
309
345
  // src/index.ts
310
346
  var config;
347
+ var caddy;
311
348
  var unpluginFactory = (options) => ({
312
349
  name: "unplugin-https-reverse-proxy",
350
+ enforce: "post",
313
351
  vite: {
314
352
  configResolved(_config) {
315
353
  config = _config;
@@ -332,8 +370,8 @@ var unpluginFactory = (options) => ({
332
370
  }
333
371
  const base = server.config.base || "/";
334
372
  try {
335
- const caddy = new CaddyInstant();
336
- caddy.run(source, target, {
373
+ const caddy2 = new CaddyInstant();
374
+ caddy2.run(source, target, {
337
375
  base
338
376
  }).then((stop) => {
339
377
  const colorUrl = (url2) => import_picocolors.default.green(url2.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
@@ -351,7 +389,6 @@ var unpluginFactory = (options) => ({
351
389
  }
352
390
  },
353
391
  webpack(compiler) {
354
- var _a, _b;
355
392
  const {
356
393
  target = ""
357
394
  } = options;
@@ -359,16 +396,25 @@ var unpluginFactory = (options) => ({
359
396
  console.log("please provide target");
360
397
  return;
361
398
  }
362
- const source = `${((_a = compiler.options.devServer) == null ? void 0 : _a.host) || "127.0.0.1"}:${((_b = compiler.options.devServer) == null ? void 0 : _b.port) || "8080"}`;
363
399
  try {
364
- const caddy = new CaddyInstant();
400
+ const devServer = compiler.options.devServer || import_node_process3.default.VUE_CLI_SERVICE.projectOptions.devServer;
401
+ const source = `${(devServer == null ? void 0 : devServer.host) || "127.0.0.1"}:${(devServer == null ? void 0 : devServer.port) || "8080"}`;
402
+ if (caddy)
403
+ return;
404
+ caddy = new CaddyInstant();
365
405
  caddy.run(source, target).then((stop) => {
366
406
  const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
367
- console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
407
+ compiler.hooks.done.tap("unplugin-https-reverse-proxy", (stats) => {
408
+ if (stats.hasErrors())
409
+ return;
410
+ console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
411
+ });
368
412
  import_node_process3.default.on("SIGINT", async () => {
369
413
  await stop();
370
414
  import_node_process3.default.exit();
371
415
  });
416
+ }).catch((e) => {
417
+ throw e;
372
418
  });
373
419
  } catch (e) {
374
420
  console.error(e);
package/dist/vite.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  vite_default
3
- } from "./chunk-XWZYGFLS.js";
4
- import "./chunk-QYHKWM3K.js";
3
+ } from "./chunk-47EXOCHO.js";
4
+ import "./chunk-HSZFTLD3.js";
5
5
  export {
6
6
  vite_default as default
7
7
  };
package/dist/webpack.cjs CHANGED
@@ -45,7 +45,9 @@ var import_node_os = require("os");
45
45
  var import_node_process2 = __toESM(require("process"), 1);
46
46
  var import_node_fs = require("fs");
47
47
  var import_node_child_process = require("child_process");
48
- var import_got = __toESM(require("got"), 1);
48
+ var import_got_cjs = require("got-cjs");
49
+ var import_http_proxy_agent = require("http-proxy-agent");
50
+ var import_https_proxy_agent = require("https-proxy-agent");
49
51
  var hostile = __toESM(require("hostile"), 1);
50
52
  var import_kill_port = __toESM(require("kill-port"), 1);
51
53
 
@@ -53,7 +55,7 @@ var import_kill_port = __toESM(require("kill-port"), 1);
53
55
  var import_node_path = require("path");
54
56
  var import_node_process = __toESM(require("process"), 1);
55
57
  var TEMP_DIR = import_node_process.default.env.TEMP || import_node_process.default.env.TMPDIR || "/tmp";
56
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, "caddy");
58
+ var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process.default.platform === "win32" ? ".exe" : ""}`);
57
59
  var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
58
60
  var supportList = [
59
61
  {
@@ -166,6 +168,27 @@ var supportList = [
166
168
  }
167
169
  ];
168
170
 
171
+ // src/caddy/utils.ts
172
+ var import_node_net = require("net");
173
+ function tryPort(port) {
174
+ return new Promise((resolve, reject) => {
175
+ try {
176
+ const server = (0, import_node_net.createServer)().listen(port);
177
+ server.on("listening", () => {
178
+ server.close();
179
+ resolve(false);
180
+ });
181
+ server.on("error", (err) => {
182
+ if (err.code === "EADDRINUSE")
183
+ resolve(true);
184
+ server.close();
185
+ });
186
+ } catch (e) {
187
+ resolve(true);
188
+ }
189
+ });
190
+ }
191
+
169
192
  // src/caddy/index.ts
170
193
  async function download() {
171
194
  if (await testCaddy())
@@ -181,7 +204,16 @@ async function download() {
181
204
  return reject(new Error("not support"));
182
205
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
183
206
  (0, import_node_fs.existsSync)(caddyPath) && (0, import_node_fs.unlinkSync)(caddyPath);
184
- import_got.default.stream(dowmloadLink).pipe(file).on("finish", () => {
207
+ const httpProxy = import_node_process2.default.env.HTTP_PROXY || import_node_process2.default.env.http_proxy;
208
+ const httpsProxy = import_node_process2.default.env.HTTPS_PROXY || import_node_process2.default.env.https_proxy;
209
+ const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
210
+ const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
211
+ import_got_cjs.got.stream(dowmloadLink, {
212
+ agent: {
213
+ http: httpAgent,
214
+ https: httpsAgent
215
+ }
216
+ }).pipe(file).on("finish", () => {
185
217
  if (import_node_process2.default.platform === "win32")
186
218
  return resolve(caddyPath);
187
219
  (0, import_node_fs.chmodSync)(caddyPath, 493);
@@ -196,7 +228,7 @@ function testCaddy() {
196
228
  if (!(0, import_node_fs.existsSync)(caddyPath))
197
229
  return resolve(false);
198
230
  (0, import_node_fs.chmodSync)(caddyPath, 493);
199
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath]);
231
+ const child = import_node_process2.default.platform === "win32" ? (0, import_node_child_process.spawn)(caddyPath, []) : (0, import_node_child_process.spawn)("sudo", [caddyPath]);
200
232
  child.on("error", (err) => {
201
233
  reject(err);
202
234
  });
@@ -270,17 +302,21 @@ var CaddyInstant = class {
270
302
  * @returns
271
303
  */
272
304
  async run(source, target, options) {
305
+ source = source.replace("0.0.0.0", "127.0.0.1").replace("localhost", "127.0.0.1");
273
306
  const {
274
- restore = false,
307
+ restore = true,
275
308
  base = "/"
276
309
  } = options || {};
277
310
  if (!this.inited)
278
311
  await this.init();
279
312
  if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
280
313
  throw new Error("update host failed");
281
- await (0, import_kill_port.default)(443, "tcp");
314
+ if (await tryPort(443))
315
+ await (0, import_kill_port.default)(443, "tcp");
316
+ if (await tryPort(80))
317
+ await (0, import_kill_port.default)(80, "tcp");
282
318
  return new Promise((resolve, reject) => {
283
- const child = (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
319
+ const child = import_node_process2.default.platform !== "win32" ? (0, import_node_child_process.spawn)("sudo", [caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]) : (0, import_node_child_process.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
284
320
  child.on("error", (err) => {
285
321
  return reject(err);
286
322
  });
@@ -308,8 +344,10 @@ var CaddyInstant = class {
308
344
 
309
345
  // src/index.ts
310
346
  var config;
347
+ var caddy;
311
348
  var unpluginFactory = (options) => ({
312
349
  name: "unplugin-https-reverse-proxy",
350
+ enforce: "post",
313
351
  vite: {
314
352
  configResolved(_config) {
315
353
  config = _config;
@@ -332,8 +370,8 @@ var unpluginFactory = (options) => ({
332
370
  }
333
371
  const base = server.config.base || "/";
334
372
  try {
335
- const caddy = new CaddyInstant();
336
- caddy.run(source, target, {
373
+ const caddy2 = new CaddyInstant();
374
+ caddy2.run(source, target, {
337
375
  base
338
376
  }).then((stop) => {
339
377
  const colorUrl = (url2) => import_picocolors.default.green(url2.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
@@ -351,7 +389,6 @@ var unpluginFactory = (options) => ({
351
389
  }
352
390
  },
353
391
  webpack(compiler) {
354
- var _a, _b;
355
392
  const {
356
393
  target = ""
357
394
  } = options;
@@ -359,16 +396,25 @@ var unpluginFactory = (options) => ({
359
396
  console.log("please provide target");
360
397
  return;
361
398
  }
362
- const source = `${((_a = compiler.options.devServer) == null ? void 0 : _a.host) || "127.0.0.1"}:${((_b = compiler.options.devServer) == null ? void 0 : _b.port) || "8080"}`;
363
399
  try {
364
- const caddy = new CaddyInstant();
400
+ const devServer = compiler.options.devServer || import_node_process3.default.VUE_CLI_SERVICE.projectOptions.devServer;
401
+ const source = `${(devServer == null ? void 0 : devServer.host) || "127.0.0.1"}:${(devServer == null ? void 0 : devServer.port) || "8080"}`;
402
+ if (caddy)
403
+ return;
404
+ caddy = new CaddyInstant();
365
405
  caddy.run(source, target).then((stop) => {
366
406
  const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
367
- console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
407
+ compiler.hooks.done.tap("unplugin-https-reverse-proxy", (stats) => {
408
+ if (stats.hasErrors())
409
+ return;
410
+ console.log(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`https://${target}`)}`);
411
+ });
368
412
  import_node_process3.default.on("SIGINT", async () => {
369
413
  await stop();
370
414
  import_node_process3.default.exit();
371
415
  });
416
+ }).catch((e) => {
417
+ throw e;
372
418
  });
373
419
  } catch (e) {
374
420
  console.error(e);
package/dist/webpack.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  webpack_default
3
- } from "./chunk-TIR4PYKX.js";
4
- import "./chunk-QYHKWM3K.js";
3
+ } from "./chunk-Q7EG3ZFW.js";
4
+ import "./chunk-HSZFTLD3.js";
5
5
  export {
6
6
  webpack_default as default
7
7
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "unplugin-https-reverse-proxy",
3
3
  "type": "module",
4
- "version": "0.0.1",
4
+ "version": "0.0.3",
5
5
  "packageManager": "pnpm@8.6.12",
6
6
  "description": "",
7
7
  "license": "MIT",
@@ -101,8 +101,11 @@
101
101
  }
102
102
  },
103
103
  "dependencies": {
104
- "got": "^13.0.0",
104
+ "esno": "^0.17.0",
105
+ "got-cjs": "^12.5.4",
105
106
  "hostile": "^1.3.3",
107
+ "http-proxy-agent": "^7.0.0",
108
+ "https-proxy-agent": "^7.0.2",
106
109
  "kill-port": "^2.0.1",
107
110
  "picocolors": "^1.0.0",
108
111
  "unplugin": "^1.4.0"
@@ -111,14 +114,12 @@
111
114
  "@antfu/eslint-config": "^0.40.2",
112
115
  "@nuxt/kit": "^3.6.5",
113
116
  "@nuxt/schema": "^3.6.5",
114
- "@types/got": "^9.6.12",
115
117
  "@types/hostile": "^1.3.3",
116
118
  "@types/kill-port": "^2.0.3",
117
119
  "@types/node": "^20.5.2",
118
120
  "bumpp": "^9.2.0",
119
121
  "chalk": "^5.3.0",
120
122
  "eslint": "^8.47.0",
121
- "esno": "^0.17.0",
122
123
  "fast-glob": "^3.3.1",
123
124
  "nodemon": "^3.0.1",
124
125
  "rimraf": "^5.0.1",