@lark-apaas/coding-preset-vite-react 1.0.12 → 1.0.13-alpha.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.
Files changed (134) hide show
  1. package/lib/index.d.ts +1 -9
  2. package/lib/index.d.ts.map +1 -1
  3. package/lib/index.js +114 -153
  4. package/lib/index.js.map +1 -1
  5. package/lib/plugins/{basename.d.ts → basename-injection.d.ts} +4 -4
  6. package/lib/plugins/basename-injection.d.ts.map +1 -0
  7. package/lib/plugins/{basename.js → basename-injection.js} +15 -7
  8. package/lib/plugins/basename-injection.js.map +1 -0
  9. package/lib/plugins/capabilities.d.ts +6 -9
  10. package/lib/plugins/capabilities.d.ts.map +1 -1
  11. package/lib/plugins/capabilities.js +29 -27
  12. package/lib/plugins/capabilities.js.map +1 -1
  13. package/lib/plugins/fonts-mirror.d.ts.map +1 -1
  14. package/lib/plugins/fonts-mirror.js +0 -28
  15. package/lib/plugins/fonts-mirror.js.map +1 -1
  16. package/lib/plugins/view-context.d.ts +5 -0
  17. package/lib/plugins/view-context.d.ts.map +1 -1
  18. package/lib/plugins/view-context.js +3 -0
  19. package/lib/plugins/view-context.js.map +1 -1
  20. package/package.json +1 -3
  21. package/lib/plugins/basename.d.ts.map +0 -1
  22. package/lib/plugins/basename.js.map +0 -1
  23. package/lib/plugins/dev-proxy.d.ts +0 -41
  24. package/lib/plugins/dev-proxy.d.ts.map +0 -1
  25. package/lib/plugins/dev-proxy.js +0 -229
  26. package/lib/plugins/dev-proxy.js.map +0 -1
  27. package/lib/plugins/html-output.d.ts +0 -21
  28. package/lib/plugins/html-output.d.ts.map +0 -1
  29. package/lib/plugins/html-output.js +0 -171
  30. package/lib/plugins/html-output.js.map +0 -1
  31. package/lib/plugins/server-log.d.ts +0 -45
  32. package/lib/plugins/server-log.d.ts.map +0 -1
  33. package/lib/plugins/server-log.js +0 -60
  34. package/lib/plugins/server-log.js.map +0 -1
  35. package/lib/server-log/compat.d.ts +0 -36
  36. package/lib/server-log/compat.d.ts.map +0 -1
  37. package/lib/server-log/compat.js +0 -73
  38. package/lib/server-log/compat.js.map +0 -1
  39. package/lib/server-log/dev-logs/api-list-handler.d.ts +0 -6
  40. package/lib/server-log/dev-logs/api-list-handler.d.ts.map +0 -1
  41. package/lib/server-log/dev-logs/api-list-handler.js +0 -132
  42. package/lib/server-log/dev-logs/api-list-handler.js.map +0 -1
  43. package/lib/server-log/dev-logs/controller.d.ts +0 -45
  44. package/lib/server-log/dev-logs/controller.d.ts.map +0 -1
  45. package/lib/server-log/dev-logs/controller.js +0 -239
  46. package/lib/server-log/dev-logs/controller.js.map +0 -1
  47. package/lib/server-log/dev-logs/health.controller.d.ts +0 -15
  48. package/lib/server-log/dev-logs/health.controller.d.ts.map +0 -1
  49. package/lib/server-log/dev-logs/health.controller.js +0 -79
  50. package/lib/server-log/dev-logs/health.controller.js.map +0 -1
  51. package/lib/server-log/dev-logs/helper/path-matcher.d.ts +0 -117
  52. package/lib/server-log/dev-logs/helper/path-matcher.d.ts.map +0 -1
  53. package/lib/server-log/dev-logs/helper/path-matcher.js +0 -214
  54. package/lib/server-log/dev-logs/helper/path-matcher.js.map +0 -1
  55. package/lib/server-log/dev-logs/index.d.ts +0 -12
  56. package/lib/server-log/dev-logs/index.d.ts.map +0 -1
  57. package/lib/server-log/dev-logs/index.js +0 -61
  58. package/lib/server-log/dev-logs/index.js.map +0 -1
  59. package/lib/server-log/dev-logs/router.d.ts +0 -7
  60. package/lib/server-log/dev-logs/router.d.ts.map +0 -1
  61. package/lib/server-log/dev-logs/router.js +0 -40
  62. package/lib/server-log/dev-logs/router.js.map +0 -1
  63. package/lib/server-log/dev-logs/services/capability.service.d.ts +0 -33
  64. package/lib/server-log/dev-logs/services/capability.service.d.ts.map +0 -1
  65. package/lib/server-log/dev-logs/services/capability.service.js +0 -127
  66. package/lib/server-log/dev-logs/services/capability.service.js.map +0 -1
  67. package/lib/server-log/dev-logs/services/file-reader.d.ts +0 -10
  68. package/lib/server-log/dev-logs/services/file-reader.d.ts.map +0 -1
  69. package/lib/server-log/dev-logs/services/file-reader.js +0 -67
  70. package/lib/server-log/dev-logs/services/file-reader.js.map +0 -1
  71. package/lib/server-log/dev-logs/services/index.d.ts +0 -8
  72. package/lib/server-log/dev-logs/services/index.d.ts.map +0 -1
  73. package/lib/server-log/dev-logs/services/index.js +0 -30
  74. package/lib/server-log/dev-logs/services/index.js.map +0 -1
  75. package/lib/server-log/dev-logs/services/parsers.d.ts +0 -23
  76. package/lib/server-log/dev-logs/services/parsers.d.ts.map +0 -1
  77. package/lib/server-log/dev-logs/services/parsers.js +0 -157
  78. package/lib/server-log/dev-logs/services/parsers.js.map +0 -1
  79. package/lib/server-log/dev-logs/services/server-log.service.d.ts +0 -17
  80. package/lib/server-log/dev-logs/services/server-log.service.d.ts.map +0 -1
  81. package/lib/server-log/dev-logs/services/server-log.service.js +0 -119
  82. package/lib/server-log/dev-logs/services/server-log.service.js.map +0 -1
  83. package/lib/server-log/dev-logs/services/trace.service.d.ts +0 -14
  84. package/lib/server-log/dev-logs/services/trace.service.d.ts.map +0 -1
  85. package/lib/server-log/dev-logs/services/trace.service.js +0 -162
  86. package/lib/server-log/dev-logs/services/trace.service.js.map +0 -1
  87. package/lib/server-log/dev-logs/services/trigger.service.d.ts +0 -14
  88. package/lib/server-log/dev-logs/services/trigger.service.d.ts.map +0 -1
  89. package/lib/server-log/dev-logs/services/trigger.service.js +0 -153
  90. package/lib/server-log/dev-logs/services/trigger.service.js.map +0 -1
  91. package/lib/server-log/dev-logs/services.d.ts +0 -7
  92. package/lib/server-log/dev-logs/services.d.ts.map +0 -1
  93. package/lib/server-log/dev-logs/services.js +0 -20
  94. package/lib/server-log/dev-logs/services.js.map +0 -1
  95. package/lib/server-log/dev-logs/sse/client-manager.d.ts +0 -61
  96. package/lib/server-log/dev-logs/sse/client-manager.d.ts.map +0 -1
  97. package/lib/server-log/dev-logs/sse/client-manager.js +0 -140
  98. package/lib/server-log/dev-logs/sse/client-manager.js.map +0 -1
  99. package/lib/server-log/dev-logs/sse/index.d.ts +0 -5
  100. package/lib/server-log/dev-logs/sse/index.d.ts.map +0 -1
  101. package/lib/server-log/dev-logs/sse/index.js +0 -11
  102. package/lib/server-log/dev-logs/sse/index.js.map +0 -1
  103. package/lib/server-log/dev-logs/sse/log-watcher.d.ts +0 -51
  104. package/lib/server-log/dev-logs/sse/log-watcher.d.ts.map +0 -1
  105. package/lib/server-log/dev-logs/sse/log-watcher.js +0 -381
  106. package/lib/server-log/dev-logs/sse/log-watcher.js.map +0 -1
  107. package/lib/server-log/dev-logs/sse/sse.controller.d.ts +0 -25
  108. package/lib/server-log/dev-logs/sse/sse.controller.d.ts.map +0 -1
  109. package/lib/server-log/dev-logs/sse/sse.controller.js +0 -95
  110. package/lib/server-log/dev-logs/sse/sse.controller.js.map +0 -1
  111. package/lib/server-log/dev-logs/types.d.ts +0 -104
  112. package/lib/server-log/dev-logs/types.d.ts.map +0 -1
  113. package/lib/server-log/dev-logs/types.js +0 -3
  114. package/lib/server-log/dev-logs/types.js.map +0 -1
  115. package/lib/server-log/dev-logs/utils.d.ts +0 -68
  116. package/lib/server-log/dev-logs/utils.d.ts.map +0 -1
  117. package/lib/server-log/dev-logs/utils.js +0 -151
  118. package/lib/server-log/dev-logs/utils.js.map +0 -1
  119. package/lib/server-log/register.d.ts +0 -34
  120. package/lib/server-log/register.d.ts.map +0 -1
  121. package/lib/server-log/register.js +0 -196
  122. package/lib/server-log/register.js.map +0 -1
  123. package/lib/server-log/types.d.ts +0 -99
  124. package/lib/server-log/types.d.ts.map +0 -1
  125. package/lib/server-log/types.js +0 -3
  126. package/lib/server-log/types.js.map +0 -1
  127. package/lib/utils/local-dev.d.ts +0 -46
  128. package/lib/utils/local-dev.d.ts.map +0 -1
  129. package/lib/utils/local-dev.js +0 -96
  130. package/lib/utils/local-dev.js.map +0 -1
  131. package/lib/utils/proxy-error.d.ts +0 -29
  132. package/lib/utils/proxy-error.d.ts.map +0 -1
  133. package/lib/utils/proxy-error.js +0 -158
  134. package/lib/utils/proxy-error.js.map +0 -1
@@ -1,96 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isLocalDev = isLocalDev;
4
- exports.composeSandboxOutboundAuth = composeSandboxOutboundAuth;
5
- exports.resolveSandboxOrigin = resolveSandboxOrigin;
6
- exports.parseSudaWebUserEnv = parseSudaWebUserEnv;
7
- /**
8
- * 本地开发总开关。
9
- *
10
- * 由 `dev-local.sh`(平台 CLI `miaoda app sync` 同步到项目)export `MIAODA_LOCAL_DEV=1`。
11
- * 沙箱 dev / 生产都不设此 env,所以本地专属逻辑(view-context 占位填充、__runtime__ 反代沙箱)
12
- * 只在用户本机 `npm run dev:local` 时启用,沙箱 / 生产行为完全不受影响。
13
- */
14
- function isLocalDev() {
15
- if (process.env.NODE_ENV === 'production')
16
- return false;
17
- const flag = process.env.MIAODA_LOCAL_DEV;
18
- return flag === '1' || flag === 'true';
19
- }
20
- /** 本地常量 csrf token —— sandbox 是 double-submit 模式(cookie===header 即放行),本地随便定一个一致值即可。 */
21
- const LOCAL_CSRF_TOKEN = 'local-dev-csrf';
22
- /**
23
- * 反代沙箱时的认证组装。两条入口:
24
- * - 新流(推荐):env `FORCE_AUTHN_PREVIEW_SESSION_ID` —— 后端下发的单值 session(实际是
25
- * X-Force-Runtime-Session 的值)。SDK 自动拼 cookie,suda-csrf-token 用本地常量。
26
- * - 老流(兼容):env `SANDBOX_COOKIE` —— 用户从浏览器手抠的完整 cookie 字符串(包含
27
- * X-Force-Runtime-Session / suda-csrf-token / suda_web_did 等)。原样透传,suda-csrf-token
28
- * 从其中正则提取作为出向 x-suda-csrf-token header。
29
- *
30
- * 两个都给的话 `SANDBOX_COOKIE` 优先("已显式拼好"信号更强)。两个都缺的话返回空字符串
31
- * (local dev 跑不通,但不抛错——交给上层 `localDev && sandboxBase` 条件兜底)。
32
- */
33
- function composeSandboxOutboundAuth() {
34
- const legacyCookie = process.env.SANDBOX_COOKIE;
35
- if (legacyCookie) {
36
- const m = legacyCookie.match(/(?:^|;\s*)suda-csrf-token=([^;]+)/i);
37
- return { cookie: legacyCookie, csrfToken: m ? m[1] : '' };
38
- }
39
- const sessionId = process.env.FORCE_AUTHN_PREVIEW_SESSION_ID;
40
- if (sessionId) {
41
- return {
42
- cookie: `X-Force-Runtime-Session=${sessionId}; suda-csrf-token=${LOCAL_CSRF_TOKEN}`,
43
- csrfToken: LOCAL_CSRF_TOKEN,
44
- };
45
- }
46
- return { cookie: '', csrfToken: '' };
47
- }
48
- /**
49
- * 解析沙箱反代的 target origin。两条入口:
50
- * - 新流(推荐):env `MIAODA_DEV_PLATFORM_BASE` —— 后端下发的完整 URL,**可能带路径前缀**
51
- * (例如 `https://ai-tenant-<app>-<sandbox>.aiforce-boe-preview.bytedance.net/app/<app>`)。
52
- * SDK 抽 `new URL(...).origin` 拿 host,扔掉路径——避免反代 target 双前缀。
53
- * - 老流(兼容):env `SANDBOX_COOKIE` 配套用的 `SANDBOX_PUBLIC_URL`(用户从沙箱信息手抠 host)。
54
- *
55
- * 两个都给的话 `MIAODA_DEV_PLATFORM_BASE` 优先。两个都缺的话返回空字符串
56
- * (local dev 跑不通,但不抛错——交给上层 `localDev && sandboxBase` 条件兜底)。
57
- */
58
- function resolveSandboxOrigin() {
59
- const platformBase = process.env.MIAODA_DEV_PLATFORM_BASE;
60
- if (platformBase) {
61
- try {
62
- return new URL(platformBase).origin;
63
- }
64
- catch {
65
- // 非合法 URL → 回落到 legacy
66
- }
67
- }
68
- return process.env.SANDBOX_PUBLIC_URL || '';
69
- }
70
- /**
71
- * 解析 `process.env.SUDA_WEBUSER`,容忍沙箱下发的 shell-quoted JSON。
72
- *
73
- * 沙箱 env pull 下发到 .env.local 的 SUDA_WEBUSER 是双引号包裹 + 内部 `\"` 转义;
74
- * dotenv@17 剥外层引号后**不还原**内部 `\"`,导致 `process.env.SUDA_WEBUSER` 是
75
- * `{\"user_id\":\"...\"}` 这种带反斜杠的字符串,直接 JSON.parse 会挂在
76
- * `Expected property name or '}' in JSON at position 1`。
77
- *
78
- * 容错:先直接 parse;失败再 unescape `\"` 后 parse;都失败返回 null。
79
- */
80
- function parseSudaWebUserEnv(raw) {
81
- if (!raw)
82
- return null;
83
- try {
84
- return JSON.parse(raw);
85
- }
86
- catch {
87
- // fall through to unescape attempt
88
- }
89
- try {
90
- return JSON.parse(raw.replace(/\\"/g, '"'));
91
- }
92
- catch {
93
- return null;
94
- }
95
- }
96
- //# sourceMappingURL=local-dev.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-dev.js","sourceRoot":"","sources":["../../src/utils/local-dev.ts"],"names":[],"mappings":";;AAOA,gCAIC;AAgBD,gEAcC;AAYD,oDAUC;AAYD,kDAYC;AAvFD;;;;;;GAMG;AACH,SAAgB,UAAU;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC1C,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC;AACzC,CAAC;AAED,uFAAuF;AACvF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,SAAgB,0BAA0B;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACnE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5D,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IAC7D,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,MAAM,EAAE,2BAA2B,SAAS,qBAAqB,gBAAgB,EAAE;YACnF,SAAS,EAAE,gBAAgB;SAC5B,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,oBAAoB;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC1D,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CAAc,GAAuB;IACtE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Dev server proxy 错误处理 —— nest hot reload 友好的等待 + 重试 + 重定向。
3
- *
4
- * 场景:fullstack 形态下 vite (8080) proxy 转发到 nest (3000)。user 改 server 代码
5
- * 时 nest --watch 重新编译 + 重启,1~3 秒窗口期内 nest 没在 listen,vite proxy 收到
6
- * ECONNREFUSED → 之前直接给浏览器抛 502 JSON("Backend service is not running"),
7
- * user 看到黑屏。
8
- *
9
- * 实现搬自 `@lark-apaas/fullstack-toolkits` 的 handleDevProxyError (内联避免新跨包
10
- * 依赖)。逻辑跟 fullstack-vite-preset 老版本保持一致。
11
- *
12
- * 处理策略:
13
- * 1. **连接错误**(ECONNREFUSED / ECONNRESET / ETIMEDOUT / ENOTFOUND / ENETUNREACH)
14
- * → 服务可能在热重启,轮询 nest / 最多等 retryTimeout 毫秒
15
- * → 恢复了 sendRedirect 302 让浏览器重发原请求(无感)
16
- * → 超时仍未恢复才回 502
17
- * 2. **其他错误**(socket hang up / 协议错等)→ 立即 502,没必要等
18
- */
19
- import type { IncomingMessage, ServerResponse } from 'node:http';
20
- export interface ProxyErrorOptions {
21
- /** 等待服务重启的超时时间(毫秒),默认 5000ms */
22
- retryTimeout?: number;
23
- /** 轮询检查服务的间隔时间(毫秒),默认 500ms */
24
- retryInterval?: number;
25
- /** 目标服务器地址,用于检查服务是否恢复,格式:http://localhost:3000 */
26
- target?: string;
27
- }
28
- export declare function handleDevProxyError(err: Error, req: IncomingMessage, res: ServerResponse, options?: ProxyErrorOptions): void;
29
- //# sourceMappingURL=proxy-error.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy-error.d.ts","sourceRoot":"","sources":["../../src/utils/proxy-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqFD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,IAAI,CAmCN"}
@@ -1,158 +0,0 @@
1
- "use strict";
2
- /**
3
- * Dev server proxy 错误处理 —— nest hot reload 友好的等待 + 重试 + 重定向。
4
- *
5
- * 场景:fullstack 形态下 vite (8080) proxy 转发到 nest (3000)。user 改 server 代码
6
- * 时 nest --watch 重新编译 + 重启,1~3 秒窗口期内 nest 没在 listen,vite proxy 收到
7
- * ECONNREFUSED → 之前直接给浏览器抛 502 JSON("Backend service is not running"),
8
- * user 看到黑屏。
9
- *
10
- * 实现搬自 `@lark-apaas/fullstack-toolkits` 的 handleDevProxyError (内联避免新跨包
11
- * 依赖)。逻辑跟 fullstack-vite-preset 老版本保持一致。
12
- *
13
- * 处理策略:
14
- * 1. **连接错误**(ECONNREFUSED / ECONNRESET / ETIMEDOUT / ENOTFOUND / ENETUNREACH)
15
- * → 服务可能在热重启,轮询 nest / 最多等 retryTimeout 毫秒
16
- * → 恢复了 sendRedirect 302 让浏览器重发原请求(无感)
17
- * → 超时仍未恢复才回 502
18
- * 2. **其他错误**(socket hang up / 协议错等)→ 立即 502,没必要等
19
- */
20
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- var desc = Object.getOwnPropertyDescriptor(m, k);
23
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
- desc = { enumerable: true, get: function() { return m[k]; } };
25
- }
26
- Object.defineProperty(o, k2, desc);
27
- }) : (function(o, m, k, k2) {
28
- if (k2 === undefined) k2 = k;
29
- o[k2] = m[k];
30
- }));
31
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
- Object.defineProperty(o, "default", { enumerable: true, value: v });
33
- }) : function(o, v) {
34
- o["default"] = v;
35
- });
36
- var __importStar = (this && this.__importStar) || (function () {
37
- var ownKeys = function(o) {
38
- ownKeys = Object.getOwnPropertyNames || function (o) {
39
- var ar = [];
40
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
- return ar;
42
- };
43
- return ownKeys(o);
44
- };
45
- return function (mod) {
46
- if (mod && mod.__esModule) return mod;
47
- var result = {};
48
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
- __setModuleDefault(result, mod);
50
- return result;
51
- };
52
- })();
53
- Object.defineProperty(exports, "__esModule", { value: true });
54
- exports.handleDevProxyError = handleDevProxyError;
55
- const http = __importStar(require("node:http"));
56
- const https = __importStar(require("node:https"));
57
- function isConnectionError(err) {
58
- const code = err.code;
59
- const connectionErrorCodes = [
60
- 'ECONNREFUSED',
61
- 'ECONNRESET',
62
- 'ETIMEDOUT',
63
- 'ENOTFOUND',
64
- 'ENETUNREACH',
65
- ];
66
- return connectionErrorCodes.includes(code || '');
67
- }
68
- function checkServiceAvailable(targetUrl, timeout = 2000) {
69
- return new Promise((resolve) => {
70
- try {
71
- const url = new URL(targetUrl);
72
- const isHttps = url.protocol === 'https:';
73
- const httpModule = isHttps ? https : http;
74
- const req = httpModule.request({
75
- hostname: url.hostname,
76
- port: url.port || (isHttps ? 443 : 80),
77
- path: '/',
78
- method: 'HEAD',
79
- timeout,
80
- }, (res) => {
81
- // 任何非 502 响应都表示服务可用
82
- resolve(res.statusCode !== 502);
83
- });
84
- req.on('timeout', () => {
85
- req.destroy();
86
- resolve(false);
87
- });
88
- req.on('error', () => resolve(false));
89
- req.end();
90
- }
91
- catch {
92
- resolve(false);
93
- }
94
- });
95
- }
96
- async function waitForServiceRecovery(targetUrl, timeout, interval) {
97
- const startTime = Date.now();
98
- while (Date.now() - startTime < timeout) {
99
- if (await checkServiceAvailable(targetUrl, 2000))
100
- return true;
101
- await new Promise((resolve) => setTimeout(resolve, interval));
102
- }
103
- return false;
104
- }
105
- function send502Json(res) {
106
- if (res.headersSent)
107
- return;
108
- res.writeHead(502, {
109
- 'Content-Type': 'application/json; charset=utf-8',
110
- 'Cache-Control': 'no-cache, no-store, must-revalidate',
111
- });
112
- res.end(JSON.stringify({
113
- error: 'Bad Gateway',
114
- message: 'Backend service is temporarily unavailable',
115
- }));
116
- }
117
- function sendRedirect(req, res) {
118
- if (res.headersSent)
119
- return;
120
- const originalUrl = req.url || '/';
121
- console.log('[Proxy] Service recovered, redirecting to', originalUrl);
122
- res.writeHead(302, {
123
- Location: originalUrl,
124
- 'Cache-Control': 'no-cache, no-store, must-revalidate',
125
- });
126
- res.end();
127
- }
128
- function handleDevProxyError(err, req, res, options) {
129
- const { retryTimeout = 5000, retryInterval = 500, target = `http://localhost:${process.env.SERVER_PORT || 3000}`, } = options || {};
130
- console.error('[Proxy] Error:', err.message);
131
- if (res.headersSent) {
132
- console.error('[Proxy] Headers already sent, cannot handle error');
133
- return;
134
- }
135
- if (!isConnectionError(err)) {
136
- console.log('[Proxy] Non-connection error, returning 502');
137
- send502Json(res);
138
- return;
139
- }
140
- console.log('[Proxy] Connection error, waiting for service recovery...');
141
- void (async () => {
142
- try {
143
- const recovered = await waitForServiceRecovery(target, retryTimeout, retryInterval);
144
- if (recovered) {
145
- sendRedirect(req, res);
146
- }
147
- else {
148
- console.log('[Proxy] Service did not recover within timeout, returning 502');
149
- send502Json(res);
150
- }
151
- }
152
- catch (error) {
153
- console.error('[Proxy] Error during recovery wait:', error);
154
- send502Json(res);
155
- }
156
- })();
157
- }
158
- //# sourceMappingURL=proxy-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy-error.js","sourceRoot":"","sources":["../../src/utils/proxy-error.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkGH,kDAwCC;AAxID,gDAAkC;AAClC,kDAAoC;AAYpC,SAAS,iBAAiB,CAAC,GAAU;IACnC,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;IACjD,MAAM,oBAAoB,GAAG;QAC3B,cAAc;QACd,YAAY;QACZ,WAAW;QACX,WAAW;QACX,aAAa;KACd,CAAC;IACF,OAAO,oBAAoB,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,OAAO,GAAG,IAAI;IAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;YAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAC5B;gBACE,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,IAAI,EAAE,GAAG;gBACT,MAAM,EAAE,MAAM;gBACd,OAAO;aACR,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,oBAAoB;gBACpB,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;YAClC,CAAC,CACF,CAAC;YAEF,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACrB,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,SAAiB,EACjB,OAAe,EACf,QAAgB;IAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;QACxC,IAAI,MAAM,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,GAAmB;IACtC,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO;IAC5B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,iCAAiC;QACjD,eAAe,EAAE,qCAAqC;KACvD,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CACL,IAAI,CAAC,SAAS,CAAC;QACb,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,4CAA4C;KACtD,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAoB,EAAE,GAAmB;IAC7D,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO;IAC5B,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,WAAW,CAAC,CAAC;IACtE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,qCAAqC;KACvD,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,mBAAmB,CACjC,GAAU,EACV,GAAoB,EACpB,GAAmB,EACnB,OAA2B;IAE3B,MAAM,EACJ,YAAY,GAAG,IAAI,EACnB,aAAa,GAAG,GAAG,EACnB,MAAM,GAAG,oBAAoB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,EAAE,GAC/D,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;YACpF,IAAI,SAAS,EAAE,CAAC;gBACd,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;gBAC7E,WAAW,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YAC5D,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC"}