unplugin-https-reverse-proxy 1.0.0-beta.0 → 1.0.0-beta.10

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/nuxt.cjs CHANGED
@@ -47,24 +47,36 @@ __export(nuxt_exports, {
47
47
  default: () => nuxt_default
48
48
  });
49
49
  module.exports = __toCommonJS(nuxt_exports);
50
+ var import_node_process6 = __toESM(require("process"), 1);
50
51
  var import_kit = require("@nuxt/kit");
51
-
52
- // src/vite.ts
53
- var import_unplugin2 = require("unplugin");
54
-
55
- // src/index.ts
56
- var import_node_process5 = __toESM(require("process"), 1);
57
- var import_node_fs3 = require("fs");
58
- var import_unplugin = require("unplugin");
59
- var import_picocolors = __toESM(require("picocolors"), 1);
52
+ var import_schema = require("@nuxt/schema");
60
53
 
61
54
  // src/utils.ts
62
55
  var import_node_process = __toESM(require("process"), 1);
56
+ var import_node_path = __toESM(require("path"), 1);
57
+ var import_promises = require("fs/promises");
63
58
  var import_node_child_process = require("child_process");
64
59
  var import_consola = require("consola");
65
60
  var consola = (0, import_consola.createConsola)({
66
61
  level: 3
67
62
  }).withTag("reverse-proxy");
63
+ async function chmodRecursive(_path, mode) {
64
+ await (0, import_promises.chmod)(_path, mode);
65
+ if ((await (0, import_promises.stat)(_path)).isDirectory()) {
66
+ const children = await (0, import_promises.readdir)(_path);
67
+ for (const child of children)
68
+ await chmodRecursive(import_node_path.default.join(_path, child), mode);
69
+ }
70
+ }
71
+ function once(fn) {
72
+ let called = false;
73
+ return (...args) => {
74
+ if (called)
75
+ return;
76
+ called = true;
77
+ return fn(...args);
78
+ };
79
+ }
68
80
  function isAdmin() {
69
81
  if (import_node_process.default.platform === "win32") {
70
82
  try {
@@ -78,8 +90,13 @@ function isAdmin() {
78
90
  }
79
91
  }
80
92
 
93
+ // src/index.ts
94
+ var import_node_process5 = __toESM(require("process"), 1);
95
+ var import_unplugin = require("unplugin");
96
+ var import_picocolors = __toESM(require("picocolors"), 1);
97
+
81
98
  // src/caddy/index.ts
82
- var import_node_os = require("os");
99
+ var import_node_os2 = require("os");
83
100
  var import_node_process4 = __toESM(require("process"), 1);
84
101
  var import_node_fs2 = require("fs");
85
102
  var import_node_child_process3 = require("child_process");
@@ -107,7 +124,7 @@ async function syncHost() {
107
124
  import_node_process2.default.platform === "win32" ? "ipconfig /flushdns" : "sudo -E killall -HUP mDNSResponder",
108
125
  (error, stdout, stderr) => {
109
126
  if (error) {
110
- console.error(`exec error: ${error}`);
127
+ consola.error(`exec error: ${error}`);
111
128
  return resolve(false);
112
129
  }
113
130
  return resolve(true);
@@ -120,6 +137,8 @@ async function addHost(ip, host) {
120
137
  (0, import_node_fs.chmodSync)(getPathOfSystemHostsPath(), 511);
121
138
  hostInstance.add("127.0.0.1", "localhost");
122
139
  hostInstance.add(ip, host);
140
+ if (ip === "localhost")
141
+ hostInstance.add("127.0.0.1", host);
123
142
  await hostInstance.updateFinish();
124
143
  return await syncHost();
125
144
  }
@@ -134,11 +153,21 @@ async function removeHost(ip, host) {
134
153
  }
135
154
 
136
155
  // src/caddy/constants.ts
137
- var import_node_path = require("path");
156
+ var import_node_path2 = require("path");
157
+ var import_node_os = __toESM(require("os"), 1);
138
158
  var import_node_process3 = __toESM(require("process"), 1);
139
- var TEMP_DIR = import_node_process3.default.env.TEMP || import_node_process3.default.env.TMPDIR || "/tmp";
140
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process3.default.platform === "win32" ? ".exe" : ""}`);
141
- var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
159
+ var import_dotenv_flow = __toESM(require("dotenv-flow"), 1);
160
+ import_dotenv_flow.default.config({
161
+ silent: true
162
+ });
163
+ function resolvePath(path2) {
164
+ if (path2.startsWith("~"))
165
+ return (0, import_node_path2.join)(import_node_os.default.homedir() || "", path2.slice(1));
166
+ return path2;
167
+ }
168
+ var TEMP_DIR = resolvePath(import_node_process3.default.env.UHRP_CADDY_PATH || import_node_process3.default.env.TEMP || import_node_process3.default.env.TMPDIR || "/tmp");
169
+ var caddyPath = (0, import_node_path2.join)(TEMP_DIR, `caddy${import_node_process3.default.platform === "win32" ? ".exe" : ""}`);
170
+ var caddyFilePath = (0, import_node_path2.join)(TEMP_DIR, "CADDYFILE");
142
171
  var supportList = [
143
172
  {
144
173
  platform: "dragonfly",
@@ -310,8 +339,12 @@ async function download() {
310
339
  if (await testCaddy())
311
340
  return caddyPath;
312
341
  return new Promise((resolve, reject) => {
342
+ if (!(0, import_node_fs2.existsSync)(TEMP_DIR)) {
343
+ (0, import_node_fs2.mkdirSync)(TEMP_DIR, { recursive: true });
344
+ (0, import_node_fs2.chmodSync)(TEMP_DIR, 511);
345
+ }
313
346
  const file = (0, import_node_fs2.createWriteStream)(caddyPath);
314
- let _platform = (0, import_node_os.platform)().toString();
347
+ let _platform = (0, import_node_os2.platform)().toString();
315
348
  _platform === "win32" && (_platform = "windows");
316
349
  let _arch = import_node_process4.default.arch.toString();
317
350
  _arch === "x64" && (_arch = "amd64");
@@ -324,6 +357,9 @@ async function download() {
324
357
  const httpsProxy = import_node_process4.default.env.HTTPS_PROXY || import_node_process4.default.env.https_proxy;
325
358
  const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
326
359
  const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
360
+ const chmodCaddyOnce = once(() => {
361
+ (0, import_node_fs2.chmodSync)(caddyPath, 511);
362
+ });
327
363
  import_got_cjs.got.stream(dowmloadLink, {
328
364
  agent: {
329
365
  http: httpAgent,
@@ -331,11 +367,12 @@ async function download() {
331
367
  }
332
368
  }).on("downloadProgress", (progress) => {
333
369
  logProgress(progress.percent);
370
+ chmodCaddyOnce();
334
371
  }).pipe(file).on("finish", () => {
335
372
  logProgressOver();
336
373
  if (import_node_process4.default.platform === "win32")
337
374
  return resolve(caddyPath);
338
- (0, import_node_fs2.chmodSync)(caddyPath, 493);
375
+ (0, import_node_fs2.chmodSync)(caddyPath, 511);
339
376
  resolve(caddyPath);
340
377
  }).on("error", (err) => {
341
378
  reject(err);
@@ -346,7 +383,7 @@ function testCaddy() {
346
383
  return new Promise((resolve, reject) => {
347
384
  if (!(0, import_node_fs2.existsSync)(caddyPath))
348
385
  return resolve(false);
349
- (0, import_node_fs2.chmodSync)(caddyPath, 493);
386
+ (0, import_node_fs2.chmodSync)(caddyPath, 511);
350
387
  const child = import_node_process4.default.platform === "win32" ? (0, import_node_child_process3.spawn)(caddyPath, []) : (0, import_node_child_process3.spawn)("sudo", ["-E", caddyPath]);
351
388
  child.on("close", () => {
352
389
  return resolve(false);
@@ -418,6 +455,19 @@ var CaddyInstant = class {
418
455
  });
419
456
  const originalExit = import_node_process4.default.exit.bind(import_node_process4.default);
420
457
  import_node_process4.default.exit = async (code) => {
458
+ const port = Number(source.split(":")[1]);
459
+ if (!Number.isNaN(port) && await tryPort(port))
460
+ await (0, import_kill_port.default)(port, "tcp");
461
+ const pwd = import_node_process4.default.cwd();
462
+ const viteCacheDir = `${pwd}/node_modules/.vite`;
463
+ if ((0, import_node_fs2.existsSync)(viteCacheDir))
464
+ chmodRecursive(viteCacheDir, 511);
465
+ const nuxtCacheDir = `${pwd}/.nuxt`;
466
+ if ((0, import_node_fs2.existsSync)(nuxtCacheDir))
467
+ await chmodRecursive(nuxtCacheDir, 511);
468
+ const webpackCacheDir = `${pwd}/node_modules/.cache`;
469
+ if ((0, import_node_fs2.existsSync)(webpackCacheDir))
470
+ chmodRecursive(webpackCacheDir, 511);
421
471
  if (!restore || this.stoped)
422
472
  return originalExit(code);
423
473
  try {
@@ -454,74 +504,31 @@ var CaddyInstant = class {
454
504
  };
455
505
 
456
506
  // src/index.ts
457
- var config;
458
507
  var caddy;
459
- var _servce;
460
- var unpluginFactory = (options) => ({
461
- name: "unplugin-https-reverse-proxy",
462
- enforce: "pre",
463
- vite: {
464
- configResolved(_config) {
465
- config = _config;
466
- },
467
- configureServer(server) {
468
- if (!isAdmin()) {
469
- consola.warn("please run as administrator");
470
- return;
471
- }
472
- if (config.command === "build")
473
- return;
474
- const {
475
- enable = true,
476
- target = ""
477
- } = options;
478
- if (!enable)
479
- return;
480
- if (!target) {
481
- consola.fail("please provide target");
482
- return;
483
- }
484
- _servce = server;
485
- const _printUrls = server.printUrls;
486
- server.printUrls = () => {
487
- var _a;
488
- _printUrls();
489
- const pwd = import_node_process5.default.cwd();
490
- const vireCacheDir = `${pwd}/node_modules/.vite`;
491
- if ((0, import_node_fs3.existsSync)(vireCacheDir))
492
- (0, import_node_fs3.chmodSync)(vireCacheDir, 511);
493
- let source = `localhost:${config.server.port}`;
494
- const url = (_a = server.resolvedUrls) == null ? void 0 : _a.local[0];
495
- if (url) {
496
- const u = new URL(url);
497
- source = u.host;
498
- }
499
- const base = server.config.base || "/";
500
- try {
501
- if (caddy)
502
- return;
503
- caddy = new CaddyInstant();
504
- caddy.run(source, target, __spreadValues({
505
- base
506
- }, options)).then(() => {
507
- const colorUrl = (url2) => import_picocolors.default.green(url2.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
508
- consola.success(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
509
- }).catch((e) => {
510
- throw e;
511
- });
512
- } catch (e) {
513
- consola.error(e);
514
- }
515
- };
516
- }
508
+ var cwd = import_node_process5.default.cwd();
509
+ var vitePrintUrls = once((options, source, target, base = "/", _printUrls) => {
510
+ _printUrls == null ? void 0 : _printUrls();
511
+ if (caddy)
512
+ return;
513
+ caddy = new CaddyInstant();
514
+ caddy.run(source, target, __spreadValues({
515
+ base
516
+ }, options)).then(() => {
517
+ const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
518
+ consola.success(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
519
+ }).catch((e) => {
520
+ throw e;
521
+ });
522
+ });
523
+
524
+ // src/nuxt.ts
525
+ var nuxt_default = (0, import_kit.defineNuxtModule)({
526
+ meta: {
527
+ name: "nuxt-unplugin-https-reverse-proxy",
528
+ configKey: "unpluginHttpsReverseProxy"
517
529
  },
518
- webpack(compiler) {
519
- var _a;
520
- if (!isAdmin()) {
521
- consola.warn("please run as administrator");
522
- return;
523
- }
524
- if (import_node_process5.default.env.NODE_ENV !== "development")
530
+ setup(options, _nuxt) {
531
+ if (import_node_process6.default.env.NODE_ENV !== "development")
525
532
  return;
526
533
  const {
527
534
  enable = true,
@@ -529,60 +536,20 @@ var unpluginFactory = (options) => ({
529
536
  } = options;
530
537
  if (!enable)
531
538
  return;
539
+ if (!isAdmin()) {
540
+ consola.warn("please run as administrator");
541
+ return;
542
+ }
532
543
  if (!target) {
533
544
  consola.fail("please provide target");
534
545
  return;
535
546
  }
536
- try {
537
- const devServer = __spreadValues(__spreadValues({
538
- host: "localhost",
539
- port: 8080
540
- }, compiler.options.devServer), import_node_process5.default.VUE_CLI_SERVICE.projectOptions.devServer);
541
- const source = `${devServer.host}:${devServer.port}`;
542
- if (caddy)
543
- return;
544
- const _close = (_a = compiler.close) == null ? void 0 : _a.bind(compiler);
545
- if (_close) {
546
- compiler.close = async (callback) => {
547
- import_node_process5.default.on("exit", () => {
548
- _close && _close(callback);
549
- });
550
- };
551
- } else {
552
- options.https = false;
553
- }
554
- caddy = new CaddyInstant();
555
- caddy.run(source, target, __spreadValues({}, options)).then(() => {
556
- const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
557
- compiler.hooks.done.tap("unplugin-https-reverse-proxy", () => {
558
- consola.success(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}`)}`);
559
- });
560
- }).catch((e) => {
561
- throw e;
562
- });
563
- } catch (e) {
564
- consola.error(e);
565
- }
566
- }
567
- });
568
-
569
- // src/vite.ts
570
- var vite_default = (0, import_unplugin2.createVitePlugin)(unpluginFactory);
571
-
572
- // src/webpack.ts
573
- var import_unplugin3 = require("unplugin");
574
- var webpack_default = (0, import_unplugin3.createWebpackPlugin)(unpluginFactory);
575
-
576
- // src/nuxt.ts
577
- var import_schema = require("@nuxt/schema");
578
- var nuxt_default = (0, import_kit.defineNuxtModule)({
579
- meta: {
580
- name: "nuxt-unplugin-https-reverse-proxy",
581
- configKey: "unpluginHttpsReverseProxy"
582
- },
583
- setup(options, _nuxt) {
584
- (0, import_kit.addVitePlugin)(() => vite_default(options));
585
- (0, import_kit.addWebpackPlugin)(() => webpack_default(options));
547
+ _nuxt.hook("listen", (_, listener) => {
548
+ const url = listener.url;
549
+ const source = new URL(url).host;
550
+ const base = _nuxt.options.app.baseURL || "/";
551
+ vitePrintUrls(options, source, options.target, base);
552
+ });
586
553
  }
587
554
  });
588
555
  exports.default = module.exports;
package/dist/nuxt.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import {
2
- vite_default
3
- } from "./chunk-MDJOTQRD.js";
2
+ vitePrintUrls
3
+ } from "./chunk-XLSIGDFU.js";
4
4
  import {
5
- webpack_default
6
- } from "./chunk-AXBUFN6T.js";
7
- import "./chunk-KYMRDRAJ.js";
8
- import "./chunk-3RTK3FSZ.js";
5
+ consola,
6
+ isAdmin
7
+ } from "./chunk-RUJE3YFB.js";
9
8
 
10
9
  // src/nuxt.ts
11
- import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from "@nuxt/kit";
10
+ import process from "process";
11
+ import { defineNuxtModule } from "@nuxt/kit";
12
12
  import "@nuxt/schema";
13
13
  var nuxt_default = defineNuxtModule({
14
14
  meta: {
@@ -16,8 +16,28 @@ var nuxt_default = defineNuxtModule({
16
16
  configKey: "unpluginHttpsReverseProxy"
17
17
  },
18
18
  setup(options, _nuxt) {
19
- addVitePlugin(() => vite_default(options));
20
- addWebpackPlugin(() => webpack_default(options));
19
+ if (process.env.NODE_ENV !== "development")
20
+ return;
21
+ const {
22
+ enable = true,
23
+ target = ""
24
+ } = options;
25
+ if (!enable)
26
+ return;
27
+ if (!isAdmin()) {
28
+ consola.warn("please run as administrator");
29
+ return;
30
+ }
31
+ if (!target) {
32
+ consola.fail("please provide target");
33
+ return;
34
+ }
35
+ _nuxt.hook("listen", (_, listener) => {
36
+ const url = listener.url;
37
+ const source = new URL(url).host;
38
+ const base = _nuxt.options.app.baseURL || "/";
39
+ vitePrintUrls(options, source, options.target, base);
40
+ });
21
41
  }
22
42
  });
23
43
  export {