unplugin-https-reverse-proxy 0.0.20 → 0.0.22

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/dist/webpack.cjs CHANGED
@@ -50,12 +50,14 @@ module.exports = __toCommonJS(webpack_exports);
50
50
  var import_unplugin2 = require("unplugin");
51
51
 
52
52
  // src/index.ts
53
- var import_node_process3 = __toESM(require("process"), 1);
53
+ var import_node_process4 = __toESM(require("process"), 1);
54
54
  var import_node_fs2 = require("fs");
55
55
  var import_unplugin = require("unplugin");
56
56
  var import_picocolors = __toESM(require("picocolors"), 1);
57
57
 
58
58
  // src/utils.ts
59
+ var import_node_process = __toESM(require("process"), 1);
60
+ var import_node_child_process = require("child_process");
59
61
  var import_consola = require("consola");
60
62
  var consola = (0, import_consola.createConsola)({
61
63
  level: 3
@@ -69,12 +71,24 @@ function once(fn) {
69
71
  return fn(...args);
70
72
  };
71
73
  }
74
+ function isAdmin() {
75
+ if (import_node_process.default.platform === "win32") {
76
+ try {
77
+ (0, import_node_child_process.execSync)("net session", { stdio: "ignore" });
78
+ return true;
79
+ } catch (e) {
80
+ return false;
81
+ }
82
+ } else {
83
+ return import_node_process.default.getuid && import_node_process.default.getuid() === 0;
84
+ }
85
+ }
72
86
 
73
87
  // src/caddy/index.ts
74
88
  var import_node_os = require("os");
75
- var import_node_process2 = __toESM(require("process"), 1);
89
+ var import_node_process3 = __toESM(require("process"), 1);
76
90
  var import_node_fs = require("fs");
77
- var import_node_child_process = require("child_process");
91
+ var import_node_child_process2 = require("child_process");
78
92
  var import_got_cjs = require("got-cjs");
79
93
  var import_http_proxy_agent = require("http-proxy-agent");
80
94
  var import_https_proxy_agent = require("https-proxy-agent");
@@ -83,9 +97,9 @@ var import_kill_port = __toESM(require("kill-port"), 1);
83
97
 
84
98
  // src/caddy/constants.ts
85
99
  var import_node_path = require("path");
86
- var import_node_process = __toESM(require("process"), 1);
87
- var TEMP_DIR = import_node_process.default.env.TEMP || import_node_process.default.env.TMPDIR || "/tmp";
88
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process.default.platform === "win32" ? ".exe" : ""}`);
100
+ var import_node_process2 = __toESM(require("process"), 1);
101
+ var TEMP_DIR = import_node_process2.default.env.TEMP || import_node_process2.default.env.TMPDIR || "/tmp";
102
+ var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process2.default.platform === "win32" ? ".exe" : ""}`);
89
103
  var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
90
104
  var supportList = [
91
105
  {
@@ -262,15 +276,15 @@ async function download() {
262
276
  const file = (0, import_node_fs.createWriteStream)(caddyPath);
263
277
  let _platform = (0, import_node_os.platform)().toString();
264
278
  _platform === "win32" && (_platform = "windows");
265
- let _arch = import_node_process2.default.arch.toString();
279
+ let _arch = import_node_process3.default.arch.toString();
266
280
  _arch === "x64" && (_arch = "amd64");
267
281
  const support = supportList.find((item) => item.platform === _platform && item.arch === _arch);
268
282
  if (!support)
269
283
  return reject(new Error("not support"));
270
284
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
271
285
  (0, import_node_fs.existsSync)(caddyPath) && (0, import_node_fs.unlinkSync)(caddyPath);
272
- const httpProxy = import_node_process2.default.env.HTTP_PROXY || import_node_process2.default.env.http_proxy;
273
- const httpsProxy = import_node_process2.default.env.HTTPS_PROXY || import_node_process2.default.env.https_proxy;
286
+ const httpProxy = import_node_process3.default.env.HTTP_PROXY || import_node_process3.default.env.http_proxy;
287
+ const httpsProxy = import_node_process3.default.env.HTTPS_PROXY || import_node_process3.default.env.https_proxy;
274
288
  const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
275
289
  const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
276
290
  import_got_cjs.got.stream(dowmloadLink, {
@@ -282,7 +296,7 @@ async function download() {
282
296
  logProgress(progress.percent);
283
297
  }).pipe(file).on("finish", () => {
284
298
  logProgressOver();
285
- if (import_node_process2.default.platform === "win32")
299
+ if (import_node_process3.default.platform === "win32")
286
300
  return resolve(caddyPath);
287
301
  (0, import_node_fs.chmodSync)(caddyPath, 493);
288
302
  resolve(caddyPath);
@@ -296,7 +310,7 @@ function testCaddy() {
296
310
  if (!(0, import_node_fs.existsSync)(caddyPath))
297
311
  return resolve(false);
298
312
  (0, import_node_fs.chmodSync)(caddyPath, 493);
299
- const child = import_node_process2.default.platform === "win32" ? (0, import_node_child_process.spawn)(caddyPath, []) : (0, import_node_child_process.spawn)("sudo", ["-E", caddyPath]);
313
+ const child = import_node_process3.default.platform === "win32" ? (0, import_node_child_process2.spawn)(caddyPath, []) : (0, import_node_child_process2.spawn)("sudo", ["-E", caddyPath]);
300
314
  child.on("close", () => {
301
315
  return resolve(false);
302
316
  });
@@ -327,15 +341,15 @@ var CaddyInstant = class {
327
341
  this.host.add(ip, host);
328
342
  await this.host.updateFinish();
329
343
  return new Promise((resolve, reject) => {
330
- if (import_node_process2.default.platform === "win32") {
331
- (0, import_node_child_process.spawn)("ipconfig", ["/flushdns"]).on("error", (err) => {
344
+ if (import_node_process3.default.platform === "win32") {
345
+ (0, import_node_child_process2.spawn)("ipconfig", ["/flushdns"]).on("error", (err) => {
332
346
  consola.error(err);
333
347
  return resolve(false);
334
348
  }).on("close", () => {
335
349
  resolve(true);
336
350
  });
337
351
  } else {
338
- (0, import_node_child_process.spawn)("sudo", ["-E", "killall", "-HUP", "mDNSResponder"]).on("error", (err) => {
352
+ (0, import_node_child_process2.spawn)("sudo", ["-E", "killall", "-HUP", "mDNSResponder"]).on("error", (err) => {
339
353
  consola.error(err);
340
354
  return resolve(false);
341
355
  }).on("close", () => {
@@ -349,15 +363,15 @@ var CaddyInstant = class {
349
363
  this.host.remove(ip, host);
350
364
  await this.host.updateFinish();
351
365
  return new Promise((resolve, reject) => {
352
- if (import_node_process2.default.platform === "win32") {
353
- (0, import_node_child_process.spawn)("ipconfig", ["/flushdns"]).on("error", (err) => {
366
+ if (import_node_process3.default.platform === "win32") {
367
+ (0, import_node_child_process2.spawn)("ipconfig", ["/flushdns"]).on("error", (err) => {
354
368
  consola.error(err);
355
369
  return resolve(false);
356
370
  }).on("close", () => {
357
371
  resolve(true);
358
372
  });
359
373
  } else {
360
- (0, import_node_child_process.spawn)("sudo", ["-E", "killall", "-HUP", "mDNSResponder"]).on("error", (err) => {
374
+ (0, import_node_child_process2.spawn)("sudo", ["-E", "killall", "-HUP", "mDNSResponder"]).on("error", (err) => {
361
375
  consola.error(err);
362
376
  return resolve(false);
363
377
  }).on("close", () => {
@@ -383,13 +397,13 @@ var CaddyInstant = class {
383
397
  await this.init();
384
398
  if (https && await tryPort(443))
385
399
  await (0, import_kill_port.default)(443, "tcp");
386
- if ((import_node_process2.default.platform === "win32" || !https) && await tryPort(80))
400
+ if ((import_node_process3.default.platform === "win32" || !https) && await tryPort(80))
387
401
  await (0, import_kill_port.default)(80, "tcp");
388
402
  if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
389
403
  throw new Error("update host failed");
390
404
  consola.success("update host success\n");
391
405
  return new Promise((resolve, reject) => {
392
- const child = import_node_process2.default.platform !== "win32" ? (0, import_node_child_process.spawn)("sudo", ["-E", caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}${https ? "" : ":80"}`, "--to", `${source}`, "--internal-certs", "--insecure", "--disable-redirects"]) : (0, import_node_child_process.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
406
+ const child = import_node_process3.default.platform !== "win32" ? (0, import_node_child_process2.spawn)("sudo", ["-E", caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}${https ? "" : ":80"}`, "--to", `${source}`, "--internal-certs", "--insecure", "--disable-redirects"]) : (0, import_node_child_process2.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
393
407
  child.on("error", (err) => {
394
408
  return reject(err);
395
409
  });
@@ -432,30 +446,30 @@ var caddy;
432
446
  var _stop;
433
447
  var _servce;
434
448
  function registerExit(clear) {
435
- import_node_process3.default.on("beforeExit", async (_code) => {
449
+ import_node_process4.default.on("beforeExit", async (_code) => {
436
450
  await clear();
437
451
  });
438
- import_node_process3.default.on("uncaughtException", async (err) => {
452
+ import_node_process4.default.on("uncaughtException", async (err) => {
439
453
  console.error("An uncaught error occurred!", err.stack);
440
454
  await clear();
441
- import_node_process3.default.nextTick(() => {
442
- import_node_process3.default.exit(1);
455
+ import_node_process4.default.nextTick(() => {
456
+ import_node_process4.default.exit(1);
443
457
  });
444
458
  });
445
- import_node_process3.default.on("unhandledRejection", async (reason, promise) => {
459
+ import_node_process4.default.on("unhandledRejection", async (reason, promise) => {
446
460
  console.error("Unhandled Rejection at:", promise, "reason:", reason);
447
461
  await clear();
448
- import_node_process3.default.nextTick(() => {
449
- import_node_process3.default.exit(1);
462
+ import_node_process4.default.nextTick(() => {
463
+ import_node_process4.default.exit(1);
450
464
  });
451
465
  });
452
- import_node_process3.default.once("SIGINT", async () => {
466
+ import_node_process4.default.once("SIGINT", async () => {
453
467
  await clear();
454
- import_node_process3.default.exit(0);
468
+ import_node_process4.default.exit(0);
455
469
  });
456
- import_node_process3.default.once("SIGTERM", async () => {
470
+ import_node_process4.default.once("SIGTERM", async () => {
457
471
  await clear();
458
- import_node_process3.default.exit(0);
472
+ import_node_process4.default.exit(0);
459
473
  });
460
474
  }
461
475
  var unpluginFactory = (options) => ({
@@ -480,6 +494,10 @@ var unpluginFactory = (options) => ({
480
494
  });
481
495
  },
482
496
  configureServer(server) {
497
+ if (!isAdmin()) {
498
+ consola.warn("please run as administrator");
499
+ return;
500
+ }
483
501
  if (config.command === "build")
484
502
  return;
485
503
  const {
@@ -497,9 +515,10 @@ var unpluginFactory = (options) => ({
497
515
  server.printUrls = () => {
498
516
  var _a;
499
517
  _printUrls();
500
- const pwd = import_node_process3.default.cwd();
518
+ const pwd = import_node_process4.default.cwd();
501
519
  const vireCacheDir = `${pwd}/node_modules/.vite`;
502
- (0, import_node_fs2.chmodSync)(vireCacheDir, 511);
520
+ if ((0, import_node_fs2.existsSync)(vireCacheDir))
521
+ (0, import_node_fs2.chmodSync)(vireCacheDir, 511);
503
522
  let source = `localhost:${config.server.port}`;
504
523
  const url = (_a = server.resolvedUrls) == null ? void 0 : _a.local[0];
505
524
  if (url) {
@@ -527,7 +546,12 @@ var unpluginFactory = (options) => ({
527
546
  }
528
547
  },
529
548
  webpack(compiler) {
530
- if (import_node_process3.default.env.NODE_ENV !== "development")
549
+ var _a;
550
+ if (!isAdmin()) {
551
+ consola.warn("please run as administrator");
552
+ return;
553
+ }
554
+ if (import_node_process4.default.env.NODE_ENV !== "development")
531
555
  return;
532
556
  const {
533
557
  enable = true,
@@ -543,21 +567,31 @@ var unpluginFactory = (options) => ({
543
567
  const devServer = __spreadValues(__spreadValues({
544
568
  host: "localhost",
545
569
  port: 8080
546
- }, compiler.options.devServer), import_node_process3.default.VUE_CLI_SERVICE.projectOptions.devServer);
570
+ }, compiler.options.devServer), import_node_process4.default.VUE_CLI_SERVICE.projectOptions.devServer);
547
571
  const source = `${devServer.host}:${devServer.port}`;
548
572
  if (caddy)
549
573
  return;
550
- const _close = compiler.close.bind(compiler);
551
- compiler.close = async (callback) => {
552
- try {
553
- _stop && await _stop(() => {
554
- _close && _close(callback);
555
- });
556
- } catch (e) {
557
- consola.error(e);
558
- import_node_process3.default.exit(1);
559
- }
560
- };
574
+ const _close = (_a = compiler.close) == null ? void 0 : _a.bind(compiler);
575
+ if (_close) {
576
+ compiler.close = async (callback) => {
577
+ try {
578
+ _stop && await _stop(() => {
579
+ _close && _close(callback);
580
+ });
581
+ } catch (e) {
582
+ consola.error(e);
583
+ import_node_process4.default.exit(1);
584
+ }
585
+ };
586
+ } else {
587
+ registerExit(async () => {
588
+ try {
589
+ _stop && await _stop();
590
+ } catch (e) {
591
+ consola.error(e);
592
+ }
593
+ });
594
+ }
561
595
  caddy = new CaddyInstant();
562
596
  caddy.run(source, target, __spreadValues({}, options)).then((stop) => {
563
597
  const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
package/dist/webpack.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  webpack_default
3
- } from "./chunk-VXVYW4ZE.js";
4
- import "./chunk-KYPQLMHO.js";
5
- import "./chunk-CQC5SSJR.js";
3
+ } from "./chunk-Q7NSASV3.js";
4
+ import "./chunk-BTWCTT26.js";
5
+ import "./chunk-NNO3ZUSU.js";
6
6
  export {
7
7
  webpack_default as default
8
8
  };
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.20",
4
+ "version": "0.0.22",
5
5
  "packageManager": "pnpm@8.6.12",
6
6
  "description": "",
7
7
  "license": "MIT",
@@ -142,6 +142,7 @@
142
142
  "lint": "eslint .",
143
143
  "play": "npm -C examples/vite run dev",
144
144
  "play:vuecli": "npm -C examples/vuecli run serve",
145
+ "play:vuecli4": "npm -C examples/vuecli4 run serve",
145
146
  "release": "bumpp",
146
147
  "start": "esno src/index.ts",
147
148
  "test": "vitest"
package/src/index.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import process from 'node:process'
2
- import { chmodSync } from 'node:fs'
2
+ import { chmodSync, existsSync } from 'node:fs'
3
3
  import type { UnpluginFactory } from 'unplugin'
4
4
  import { createUnplugin } from 'unplugin'
5
5
  import type { ResolvedConfig, ViteDevServer } from 'vite'
6
6
  import c from 'picocolors'
7
- import { consola, once } from './utils'
7
+ import { consola, isAdmin, once } from './utils'
8
8
  import type { Options } from './types'
9
9
  import { CaddyInstant } from './caddy'
10
10
 
@@ -69,6 +69,11 @@ export const unpluginFactory: UnpluginFactory<Options> = options => ({
69
69
  })
70
70
  },
71
71
  configureServer(server) {
72
+ if (!isAdmin()) {
73
+ consola.warn('please run as administrator')
74
+ return
75
+ }
76
+
72
77
  if (config.command === 'build')
73
78
  return
74
79
 
@@ -92,7 +97,8 @@ export const unpluginFactory: UnpluginFactory<Options> = options => ({
92
97
  // fix `Error: EPERM: operation not permitted`
93
98
  const pwd = process.cwd()
94
99
  const vireCacheDir = `${pwd}/node_modules/.vite`
95
- chmodSync(vireCacheDir, 0o777)
100
+ if (existsSync(vireCacheDir))
101
+ chmodSync(vireCacheDir, 0o777)
96
102
 
97
103
  let source = `localhost:${config.server.port}`
98
104
  const url = server.resolvedUrls?.local[0]
@@ -123,6 +129,11 @@ export const unpluginFactory: UnpluginFactory<Options> = options => ({
123
129
  },
124
130
  },
125
131
  webpack(compiler) {
132
+ if (!isAdmin()) {
133
+ consola.warn('please run as administrator')
134
+ return
135
+ }
136
+
126
137
  if (process.env.NODE_ENV !== 'development')
127
138
  return
128
139
 
@@ -138,15 +149,6 @@ export const unpluginFactory: UnpluginFactory<Options> = options => ({
138
149
  }
139
150
 
140
151
  try {
141
- // registerExit(async () => {
142
- // try {
143
- // _stop && await _stop()
144
- // }
145
- // catch (e) {
146
- // consola.error(e)
147
- // }
148
- // })
149
-
150
152
  const devServer = {
151
153
  host: 'localhost',
152
154
  port: 8080,
@@ -160,18 +162,30 @@ export const unpluginFactory: UnpluginFactory<Options> = options => ({
160
162
  return
161
163
 
162
164
  // https://github.com/webpack/webpack-dev-server/blob/master/lib/Server.js#L1913
163
- const _close = compiler.close.bind(compiler)
164
- compiler.close = async (callback: Parameters<typeof _close>[0]) => {
165
- try {
166
- _stop && await _stop(() => {
167
- _close && _close(callback)
168
- })
169
- }
170
- catch (e) {
171
- consola.error(e)
172
- process.exit(1)
165
+ const _close = compiler.close?.bind(compiler)
166
+ if (_close) {
167
+ compiler.close = async (callback: Parameters<typeof _close>[0]) => {
168
+ try {
169
+ _stop && await _stop(() => {
170
+ _close && _close(callback)
171
+ })
172
+ }
173
+ catch (e) {
174
+ consola.error(e)
175
+ process.exit(1)
176
+ }
173
177
  }
174
178
  }
179
+ else {
180
+ registerExit(async () => {
181
+ try {
182
+ _stop && await _stop()
183
+ }
184
+ catch (e) {
185
+ consola.error(e)
186
+ }
187
+ })
188
+ }
175
189
 
176
190
  caddy = new CaddyInstant()
177
191
 
package/src/utils.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import process from 'node:process'
2
+ import { execSync } from 'node:child_process'
1
3
  import { createConsola } from 'consola'
2
4
 
3
5
  export const consola = createConsola({
@@ -13,3 +15,18 @@ export function once<T extends (...args: any[]) => any>(fn: T): (...args: Parame
13
15
  return fn(...args)
14
16
  }
15
17
  }
18
+
19
+ export function isAdmin() {
20
+ if (process.platform === 'win32') {
21
+ try {
22
+ execSync('net session', { stdio: 'ignore' })
23
+ return true
24
+ }
25
+ catch {
26
+ return false
27
+ }
28
+ }
29
+ else {
30
+ return process.getuid && process.getuid() === 0
31
+ }
32
+ }