@lark-apaas/fullstack-nestjs-core 1.1.33-alpha.8 → 1.1.33

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/index.cjs CHANGED
@@ -1371,8 +1371,8 @@ var require_node = __commonJS({
1371
1371
  }
1372
1372
  break;
1373
1373
  case "FILE":
1374
- var fs3 = require("fs");
1375
- stream2 = new fs3.SyncWriteStream(fd2, {
1374
+ var fs2 = require("fs");
1375
+ stream2 = new fs2.SyncWriteStream(fd2, {
1376
1376
  autoClose: false
1377
1377
  });
1378
1378
  stream2._type = "fs";
@@ -18069,8 +18069,8 @@ var require_node2 = __commonJS({
18069
18069
  }
18070
18070
  break;
18071
18071
  case "FILE":
18072
- var fs3 = require("fs");
18073
- stream2 = new fs3.SyncWriteStream(fd2, {
18072
+ var fs2 = require("fs");
18073
+ stream2 = new fs2.SyncWriteStream(fd2, {
18074
18074
  autoClose: false
18075
18075
  });
18076
18076
  stream2._type = "fs";
@@ -18839,8 +18839,8 @@ var require_node3 = __commonJS({
18839
18839
  }
18840
18840
  break;
18841
18841
  case "FILE":
18842
- var fs3 = require("fs");
18843
- stream2 = new fs3.SyncWriteStream(fd2, {
18842
+ var fs2 = require("fs");
18843
+ stream2 = new fs2.SyncWriteStream(fd2, {
18844
18844
  autoClose: false
18845
18845
  });
18846
18846
  stream2._type = "fs";
@@ -20634,11 +20634,11 @@ var require_view = __commonJS({
20634
20634
  "use strict";
20635
20635
  var debug = require_src3()("express:view");
20636
20636
  var path2 = require("path");
20637
- var fs3 = require("fs");
20638
- var dirname2 = path2.dirname;
20637
+ var fs2 = require("fs");
20638
+ var dirname = path2.dirname;
20639
20639
  var basename = path2.basename;
20640
20640
  var extname2 = path2.extname;
20641
- var join4 = path2.join;
20641
+ var join2 = path2.join;
20642
20642
  var resolve2 = path2.resolve;
20643
20643
  module2.exports = View;
20644
20644
  function View(name, options) {
@@ -20675,7 +20675,7 @@ var require_view = __commonJS({
20675
20675
  for (var i = 0; i < roots.length && !path3; i++) {
20676
20676
  var root = roots[i];
20677
20677
  var loc = resolve2(root, name);
20678
- var dir = dirname2(loc);
20678
+ var dir = dirname(loc);
20679
20679
  var file = basename(loc);
20680
20680
  path3 = this.resolve(dir, file);
20681
20681
  }
@@ -20687,12 +20687,12 @@ var require_view = __commonJS({
20687
20687
  }, "render");
20688
20688
  View.prototype.resolve = /* @__PURE__ */ __name(function resolve3(dir, file) {
20689
20689
  var ext = this.ext;
20690
- var path3 = join4(dir, file);
20690
+ var path3 = join2(dir, file);
20691
20691
  var stat = tryStat(path3);
20692
20692
  if (stat && stat.isFile()) {
20693
20693
  return path3;
20694
20694
  }
20695
- path3 = join4(dir, basename(file, ext), "index" + ext);
20695
+ path3 = join2(dir, basename(file, ext), "index" + ext);
20696
20696
  stat = tryStat(path3);
20697
20697
  if (stat && stat.isFile()) {
20698
20698
  return path3;
@@ -20701,7 +20701,7 @@ var require_view = __commonJS({
20701
20701
  function tryStat(path3) {
20702
20702
  debug('stat "%s"', path3);
20703
20703
  try {
20704
- return fs3.statSync(path3);
20704
+ return fs2.statSync(path3);
20705
20705
  } catch (e) {
20706
20706
  return void 0;
20707
20707
  }
@@ -21350,8 +21350,8 @@ var require_node4 = __commonJS({
21350
21350
  }
21351
21351
  break;
21352
21352
  case "FILE":
21353
- var fs3 = require("fs");
21354
- stream2 = new fs3.SyncWriteStream(fd2, {
21353
+ var fs2 = require("fs");
21354
+ stream2 = new fs2.SyncWriteStream(fd2, {
21355
21355
  autoClose: false
21356
21356
  });
21357
21357
  stream2._type = "fs";
@@ -21537,7 +21537,7 @@ var require_mime = __commonJS({
21537
21537
  "../../../node_modules/mime/mime.js"(exports2, module2) {
21538
21538
  "use strict";
21539
21539
  var path2 = require("path");
21540
- var fs3 = require("fs");
21540
+ var fs2 = require("fs");
21541
21541
  function Mime() {
21542
21542
  this.types = /* @__PURE__ */ Object.create(null);
21543
21543
  this.extensions = /* @__PURE__ */ Object.create(null);
@@ -21559,7 +21559,7 @@ var require_mime = __commonJS({
21559
21559
  };
21560
21560
  Mime.prototype.load = function(file) {
21561
21561
  this._loading = file;
21562
- var map = {}, content = fs3.readFileSync(file, "ascii"), lines = content.split(/[\r\n]+/);
21562
+ var map = {}, content = fs2.readFileSync(file, "ascii"), lines = content.split(/[\r\n]+/);
21563
21563
  lines.forEach(function(line) {
21564
21564
  var fields = line.replace(/\s*#.*|^\s*|\s*$/g, "").split(/\s+/);
21565
21565
  map[fields.shift()] = fields;
@@ -21804,7 +21804,7 @@ var require_send = __commonJS({
21804
21804
  var escapeHtml = require_escape_html();
21805
21805
  var etag = require_etag();
21806
21806
  var fresh = require_fresh();
21807
- var fs3 = require("fs");
21807
+ var fs2 = require("fs");
21808
21808
  var mime = require_mime();
21809
21809
  var ms = require_ms5();
21810
21810
  var onFinished = require_on_finished();
@@ -21814,7 +21814,7 @@ var require_send = __commonJS({
21814
21814
  var Stream = require("stream");
21815
21815
  var util = require("util");
21816
21816
  var extname2 = path2.extname;
21817
- var join4 = path2.join;
21817
+ var join2 = path2.join;
21818
21818
  var normalize2 = path2.normalize;
21819
21819
  var resolve2 = path2.resolve;
21820
21820
  var sep = path2.sep;
@@ -22031,7 +22031,7 @@ var require_send = __commonJS({
22031
22031
  return res;
22032
22032
  }
22033
22033
  parts = path3.split(sep);
22034
- path3 = normalize2(join4(root, path3));
22034
+ path3 = normalize2(join2(root, path3));
22035
22035
  } else {
22036
22036
  if (UP_PATH_REGEXP.test(path3)) {
22037
22037
  debug('malicious path "%s"', path3);
@@ -22137,7 +22137,7 @@ var require_send = __commonJS({
22137
22137
  var i = 0;
22138
22138
  var self = this;
22139
22139
  debug('stat "%s"', path3);
22140
- fs3.stat(path3, /* @__PURE__ */ __name(function onstat(err, stat) {
22140
+ fs2.stat(path3, /* @__PURE__ */ __name(function onstat(err, stat) {
22141
22141
  if (err && err.code === "ENOENT" && !extname2(path3) && path3[path3.length - 1] !== sep) {
22142
22142
  return next(err);
22143
22143
  }
@@ -22152,7 +22152,7 @@ var require_send = __commonJS({
22152
22152
  }
22153
22153
  var p = path3 + "." + self._extensions[i++];
22154
22154
  debug('stat "%s"', p);
22155
- fs3.stat(p, function(err2, stat) {
22155
+ fs2.stat(p, function(err2, stat) {
22156
22156
  if (err2) return next(err2);
22157
22157
  if (stat.isDirectory()) return next();
22158
22158
  self.emit("file", p, stat);
@@ -22169,9 +22169,9 @@ var require_send = __commonJS({
22169
22169
  if (err) return self.onStatError(err);
22170
22170
  return self.error(404);
22171
22171
  }
22172
- var p = join4(path3, self._index[i]);
22172
+ var p = join2(path3, self._index[i]);
22173
22173
  debug('stat "%s"', p);
22174
- fs3.stat(p, function(err2, stat) {
22174
+ fs2.stat(p, function(err2, stat) {
22175
22175
  if (err2) return next(err2);
22176
22176
  if (stat.isDirectory()) return next();
22177
22177
  self.emit("file", p, stat);
@@ -22184,7 +22184,7 @@ var require_send = __commonJS({
22184
22184
  SendStream.prototype.stream = /* @__PURE__ */ __name(function stream(path3, options) {
22185
22185
  var self = this;
22186
22186
  var res = this.res;
22187
- var stream2 = fs3.createReadStream(path3, options);
22187
+ var stream2 = fs2.createReadStream(path3, options);
22188
22188
  this.emit("stream", stream2);
22189
22189
  stream2.pipe(res);
22190
22190
  function cleanup() {
@@ -34404,15 +34404,13 @@ var require_express2 = __commonJS({
34404
34404
  // src/index.ts
34405
34405
  var index_exports = {};
34406
34406
  __export(index_exports, {
34407
- AutoTrace: () => import_nestjs_common8.AutoTrace,
34407
+ AutoTrace: () => import_nestjs_common7.AutoTrace,
34408
34408
  CanRole: () => import_nestjs_authzpaas2.CanRole,
34409
34409
  CsrfMiddleware: () => CsrfMiddleware,
34410
34410
  CsrfTokenMiddleware: () => CsrfTokenMiddleware,
34411
34411
  DevToolsModule: () => import_nestjs_openapi_devtools2.DevToolsModule,
34412
34412
  DevToolsV2Module: () => import_nestjs_openapi_devtools2.DevToolsV2Module,
34413
34413
  FileService: () => FileService,
34414
- HtmlHotUpdateModule: () => HtmlHotUpdateModule,
34415
- HtmlHotUpdateService: () => HtmlHotUpdateService,
34416
34414
  PlatformHttpClientService: () => PlatformHttpClientService,
34417
34415
  PlatformModule: () => PlatformModule,
34418
34416
  StaticModule: () => StaticModule,
@@ -34424,9 +34422,9 @@ __export(index_exports, {
34424
34422
  module.exports = __toCommonJS(index_exports);
34425
34423
 
34426
34424
  // src/modules/platform/module.ts
34427
- var import_common16 = require("@nestjs/common");
34425
+ var import_common12 = require("@nestjs/common");
34428
34426
  var import_core2 = require("@nestjs/core");
34429
- var import_nestjs_common6 = require("@lark-apaas/nestjs-common");
34427
+ var import_nestjs_common5 = require("@lark-apaas/nestjs-common");
34430
34428
  var import_config2 = require("@nestjs/config");
34431
34429
  var import_nestjs_observable = require("@lark-apaas/nestjs-observable");
34432
34430
  var import_axios2 = require("@nestjs/axios");
@@ -34434,7 +34432,7 @@ var import_nestjs_logger2 = require("@lark-apaas/nestjs-logger");
34434
34432
  var import_nestjs_datapaas = require("@lark-apaas/nestjs-datapaas");
34435
34433
  var import_nestjs_authnpaas = require("@lark-apaas/nestjs-authnpaas");
34436
34434
  var import_nestjs_trigger = require("@lark-apaas/nestjs-trigger");
34437
- var import_nestjs_common7 = require("@lark-apaas/nestjs-common");
34435
+ var import_nestjs_common6 = require("@lark-apaas/nestjs-common");
34438
34436
  var import_nestjs_capability = require("@lark-apaas/nestjs-capability");
34439
34437
 
34440
34438
  // src/middlewares/user-context/index.ts
@@ -35821,19 +35819,7 @@ StaticModule = _ts_decorate11([
35821
35819
  })
35822
35820
  ], StaticModule);
35823
35821
 
35824
- // src/modules/html-hot-update/html-hot-update.module.ts
35825
- var import_common14 = require("@nestjs/common");
35826
-
35827
- // src/modules/html-hot-update/html-hot-update.controller.ts
35828
- var import_common13 = require("@nestjs/common");
35829
- var import_swagger2 = require("@nestjs/swagger");
35830
-
35831
- // src/modules/html-hot-update/html-hot-update.service.ts
35832
- var import_common12 = require("@nestjs/common");
35833
- var import_node_fs = require("fs");
35834
- var import_node_fs2 = require("fs");
35835
- var import_node_path = require("path");
35836
- var import_nestjs_common5 = require("@lark-apaas/nestjs-common");
35822
+ // src/modules/platform/module.ts
35837
35823
  function _ts_decorate12(decorators, target, key, desc) {
35838
35824
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
35839
35825
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -35841,420 +35827,6 @@ function _ts_decorate12(decorators, target, key, desc) {
35841
35827
  return c > 3 && r && Object.defineProperty(target, key, r), r;
35842
35828
  }
35843
35829
  __name(_ts_decorate12, "_ts_decorate");
35844
- function _ts_metadata8(k, v) {
35845
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
35846
- }
35847
- __name(_ts_metadata8, "_ts_metadata");
35848
- function _ts_param4(paramIndex, decorator) {
35849
- return function(target, key) {
35850
- decorator(target, key, paramIndex);
35851
- };
35852
- }
35853
- __name(_ts_param4, "_ts_param");
35854
- var Mutex = class Mutex2 {
35855
- static {
35856
- __name(this, "Mutex");
35857
- }
35858
- locked = false;
35859
- waiting = [];
35860
- async acquire() {
35861
- if (!this.locked) {
35862
- this.locked = true;
35863
- return;
35864
- }
35865
- return new Promise((resolve2) => {
35866
- this.waiting.push(() => {
35867
- this.locked = true;
35868
- resolve2();
35869
- });
35870
- });
35871
- }
35872
- release() {
35873
- if (this.waiting.length > 0) {
35874
- const next = this.waiting.shift();
35875
- next();
35876
- } else {
35877
- this.locked = false;
35878
- }
35879
- }
35880
- };
35881
- var HOT_UPDATE_HTML_DIR = "/tmp/html-hot-update";
35882
- var HtmlHotUpdateService = class _HtmlHotUpdateService {
35883
- static {
35884
- __name(this, "HtmlHotUpdateService");
35885
- }
35886
- httpClient;
35887
- logger = new import_common12.Logger(_HtmlHotUpdateService.name);
35888
- /** 文件锁:冷启动更新和 innerapi 主动更新共用 */
35889
- fileLock = new Mutex();
35890
- /** 热更新 HTML 目录(可写) */
35891
- hotUpdateDir = HOT_UPDATE_HTML_DIR;
35892
- /** 原始 HTML 产物目录(只读,部署时打包的) */
35893
- originalHtmlDir = (0, import_node_path.join)(process.cwd(), "dist", "client");
35894
- constructor(httpClient) {
35895
- this.httpClient = httpClient;
35896
- }
35897
- /**
35898
- * 任务一:冷启动时尝试更新 HTML 文件列表
35899
- *
35900
- * - 生产环境默认启用(模块仅在生产环境加载)
35901
- * - 失败则降级,使用部署时打包的 HTML 正常启动
35902
- * - 超时 3s,避免拉长冷启动耗时
35903
- */
35904
- async onModuleInit() {
35905
- const appID = this.getAppID();
35906
- this.logger.log(`[DEBUG] onModuleInit env: CLIENT_BASE_PATH=${process.env.CLIENT_BASE_PATH || "(empty)"}, NODE_ENV=${process.env.NODE_ENV || "(empty)"}, cwd=${process.cwd()}, hotUpdateDir=${this.hotUpdateDir}, originalHtmlDir=${this.originalHtmlDir}, appID=${appID || "(empty)"}`);
35907
- if (!appID) {
35908
- this.logger.warn("Skip HTML hot update on startup: appID not found");
35909
- return;
35910
- }
35911
- try {
35912
- this.logger.log(`Startup HTML update: appID=${appID}`);
35913
- const result = await this.updateFromRemote(appID);
35914
- this.logger.log(`Startup HTML update complete: ${result.updatedFiles.length} updated, ${result.failedFiles.length} failed`);
35915
- if (result.updatedFiles.length > 0) {
35916
- this.logger.log(`[DEBUG] updatedFiles: ${result.updatedFiles.join(", ")}`);
35917
- }
35918
- if (result.failedFiles.length > 0) {
35919
- this.logger.warn(`[DEBUG] failedFiles: ${JSON.stringify(result.failedFiles)}`);
35920
- }
35921
- } catch (error) {
35922
- this.logger.warn(`Startup HTML update failed (degraded to bundled HTML): ${error instanceof Error ? error.stack || error.message : String(error)}, appID=${appID}`);
35923
- }
35924
- }
35925
- /**
35926
- * 解析 HTML 文件路径(带 fallback)
35927
- *
35928
- * 优先返回热更新目录中的文件,不存在则 fallback 到原始产物目录。
35929
- * 供 NestJS 视图渲染使用。
35930
- *
35931
- * @example
35932
- * const htmlPath = htmlHotUpdateService.resolveHtmlPath('index.html');
35933
- * // 热更新存在: /tmp/html-hot-update/index.html
35934
- * // 热更新不存在: /opt/bytefaas/dist/client/index.html(原始产物)
35935
- */
35936
- resolveHtmlPath(fileName) {
35937
- const hotPath = (0, import_node_path.join)(this.hotUpdateDir, fileName);
35938
- if ((0, import_node_fs2.existsSync)(hotPath)) {
35939
- return hotPath;
35940
- }
35941
- return (0, import_node_path.join)(this.originalHtmlDir, fileName);
35942
- }
35943
- /**
35944
- * 获取 HTML views 目录列表(热更新目录优先)
35945
- *
35946
- * 供 NestJS setBaseViewsDir 使用:
35947
- * app.setBaseViewsDir(htmlHotUpdateService.getViewsDirs());
35948
- */
35949
- getViewsDirs() {
35950
- return [
35951
- this.hotUpdateDir,
35952
- this.originalHtmlDir
35953
- ];
35954
- }
35955
- /**
35956
- * 从远端获取最新 HTML 文件并更新本地
35957
- *
35958
- * 调用方:
35959
- * 1) 冷启动更新(onModuleInit)
35960
- * 2) innerapi 主动更新(controller 调用)
35961
- */
35962
- async updateFromRemote(appID, commitID) {
35963
- this.logger.log(`[DEBUG] updateFromRemote called: appID=${appID}, commitID=${commitID || "(empty)"}`);
35964
- const fileMap = await this.fetchLatestHtmlFiles(appID, commitID);
35965
- const fileNames = Object.keys(fileMap);
35966
- const fileSizes = fileNames.map((name) => `${name}(${fileMap[name].length}bytes)`);
35967
- this.logger.log(`[DEBUG] fetched fileMap: ${fileSizes.join(", ")}`);
35968
- return this.writeHtmlFiles(fileMap);
35969
- }
35970
- /**
35971
- * 将文件内容写入热更新目录(带文件锁)
35972
- */
35973
- async writeHtmlFiles(fileMap) {
35974
- const result = {
35975
- updatedFiles: [],
35976
- failedFiles: []
35977
- };
35978
- const entries = Object.entries(fileMap);
35979
- if (entries.length === 0) {
35980
- return result;
35981
- }
35982
- this.logger.log(`[DEBUG] writeHtmlFiles: acquiring lock, ${entries.length} files to write, dir=${this.hotUpdateDir}`);
35983
- await this.fileLock.acquire();
35984
- try {
35985
- for (const [filePath, content] of entries) {
35986
- try {
35987
- const localPath = (0, import_node_path.join)(this.hotUpdateDir, filePath);
35988
- await import_node_fs.promises.mkdir((0, import_node_path.dirname)(localPath), {
35989
- recursive: true
35990
- });
35991
- await import_node_fs.promises.writeFile(localPath, content, "utf-8");
35992
- result.updatedFiles.push(filePath);
35993
- this.logger.log(`[DEBUG] wrote ${localPath} (${content.length} bytes)`);
35994
- } catch (error) {
35995
- const reason = error instanceof Error ? error.message : String(error);
35996
- result.failedFiles.push({
35997
- filePath,
35998
- reason
35999
- });
36000
- this.logger.warn(`Failed to write HTML file ${filePath}: ${reason}`);
36001
- }
36002
- }
36003
- } finally {
36004
- this.fileLock.release();
36005
- this.logger.log(`[DEBUG] writeHtmlFiles: lock released`);
36006
- }
36007
- return result;
36008
- }
36009
- /**
36010
- * 调用后端 GetLatestArtifactHtmlFiles 接口
36011
- */
36012
- async fetchLatestHtmlFiles(appID, commitID) {
36013
- const url = `/v1/app/${appID}/pipeline/frontend/latest_artifact/html_files`;
36014
- const body = {};
36015
- if (commitID) {
36016
- body.commitID = commitID;
36017
- }
36018
- this.logger.log(`[DEBUG] fetchLatestHtmlFiles: POST ${url}, body=${JSON.stringify(body)}`);
36019
- const response = await this.httpClient.post(url, body, {
36020
- timeout: 3e3
36021
- });
36022
- this.logger.log(`[DEBUG] fetchLatestHtmlFiles: response status=${response.status}`);
36023
- if (!response.ok) {
36024
- let errorBody = "";
36025
- try {
36026
- errorBody = await response.text();
36027
- } catch {
36028
- }
36029
- this.logger.error(`[DEBUG] fetchLatestHtmlFiles failed: status=${response.status}, body=${errorBody}`);
36030
- throw new Error(`GetLatestArtifactHtmlFiles failed: ${response.status} ${response.statusText}`);
36031
- }
36032
- const rawText = await response.text();
36033
- const truncated = rawText.length > 500 ? rawText.slice(0, 500) + `...(${rawText.length} chars total)` : rawText;
36034
- this.logger.log(`[DEBUG] fetchLatestHtmlFiles: rawResponse=${truncated}`);
36035
- let resp;
36036
- try {
36037
- resp = JSON.parse(rawText);
36038
- } catch (parseError) {
36039
- this.logger.error(`[DEBUG] JSON parse failed: ${rawText.slice(0, 200)}`);
36040
- throw new Error(`GetLatestArtifactHtmlFiles: invalid JSON response`);
36041
- }
36042
- if (resp.status_code !== "0") {
36043
- this.logger.error(`[DEBUG] bad status_code: ${JSON.stringify(resp).slice(0, 300)}`);
36044
- throw new Error(`GetLatestArtifactHtmlFiles error: status_code=${resp.status_code}`);
36045
- }
36046
- const fileMap = resp.data?.fileMap;
36047
- if (!fileMap || Object.keys(fileMap).length === 0) {
36048
- this.logger.error(`[DEBUG] empty fileMap, full resp keys: ${JSON.stringify({
36049
- hasData: !!resp.data,
36050
- dataKeys: resp.data ? Object.keys(resp.data) : [],
36051
- status_code: resp.status_code
36052
- })}`);
36053
- throw new Error("GetLatestArtifactHtmlFiles returned empty fileMap");
36054
- }
36055
- return fileMap;
36056
- }
36057
- /**
36058
- * 从 CLIENT_BASE_PATH 提取 appID
36059
- * CLIENT_BASE_PATH 格式: /app/{appId}
36060
- */
36061
- getAppID() {
36062
- const basePath = process.env.CLIENT_BASE_PATH || "";
36063
- const match = basePath.match(/\/app\/([^/]+)/);
36064
- return match?.[1] ?? "";
36065
- }
36066
- };
36067
- HtmlHotUpdateService = _ts_decorate12([
36068
- (0, import_common12.Injectable)(),
36069
- _ts_param4(0, (0, import_common12.Inject)(import_nestjs_common5.PLATFORM_HTTP_CLIENT)),
36070
- _ts_metadata8("design:type", Function),
36071
- _ts_metadata8("design:paramtypes", [
36072
- typeof PlatformHttpClient === "undefined" ? Object : PlatformHttpClient
36073
- ])
36074
- ], HtmlHotUpdateService);
36075
-
36076
- // src/modules/html-hot-update/html-hot-update.controller.ts
36077
- function _ts_decorate13(decorators, target, key, desc) {
36078
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
36079
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
36080
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
36081
- return c > 3 && r && Object.defineProperty(target, key, r), r;
36082
- }
36083
- __name(_ts_decorate13, "_ts_decorate");
36084
- function _ts_metadata9(k, v) {
36085
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
36086
- }
36087
- __name(_ts_metadata9, "_ts_metadata");
36088
- function _ts_param5(paramIndex, decorator) {
36089
- return function(target, key) {
36090
- decorator(target, key, paramIndex);
36091
- };
36092
- }
36093
- __name(_ts_param5, "_ts_param");
36094
- var UpdateHtmlFilesDto = class UpdateHtmlFilesDto2 {
36095
- static {
36096
- __name(this, "UpdateHtmlFilesDto");
36097
- }
36098
- commitID;
36099
- appID;
36100
- };
36101
- var HtmlHotUpdateController = class _HtmlHotUpdateController {
36102
- static {
36103
- __name(this, "HtmlHotUpdateController");
36104
- }
36105
- htmlHotUpdateService;
36106
- logger = new import_common13.Logger(_HtmlHotUpdateController.name);
36107
- constructor(htmlHotUpdateService) {
36108
- this.htmlHotUpdateService = htmlHotUpdateService;
36109
- }
36110
- /**
36111
- * POST /__innerapi__/update_html_files
36112
- *
36113
- * 请求体: { commitID: string, appID: string }
36114
- * 响应:
36115
- * 成功: { code: 0, msg: "success" }
36116
- * 失败: { code: -1, msg: "update html failed: <error>" }
36117
- */
36118
- async updateHtmlFiles(body) {
36119
- this.logger.log(`[DEBUG] received request: ${JSON.stringify(body)}`);
36120
- const { commitID, appID } = body;
36121
- if (!commitID || !appID) {
36122
- this.logger.warn(`[DEBUG] missing params: commitID=${commitID}, appID=${appID}`);
36123
- return {
36124
- code: -1,
36125
- msg: "commitID and appID are required"
36126
- };
36127
- }
36128
- try {
36129
- const startTime = Date.now();
36130
- const result = await this.htmlHotUpdateService.updateFromRemote(appID, commitID);
36131
- const elapsed = Date.now() - startTime;
36132
- this.logger.log(`[DEBUG] update complete in ${elapsed}ms: updated=${result.updatedFiles.length}, failed=${result.failedFiles.length}`);
36133
- if (result.updatedFiles.length === 0 && result.failedFiles.length > 0) {
36134
- const resp = {
36135
- code: -1,
36136
- msg: `update html failed: all ${result.failedFiles.length} files failed to write`
36137
- };
36138
- this.logger.error(`[DEBUG] response: ${JSON.stringify(resp)}`);
36139
- return resp;
36140
- }
36141
- return {
36142
- code: 0,
36143
- msg: "success"
36144
- };
36145
- } catch (error) {
36146
- const errorMsg = error instanceof Error ? error.message : String(error);
36147
- this.logger.error(`[DEBUG] update failed: ${error instanceof Error ? error.stack || error.message : String(error)}`);
36148
- return {
36149
- code: -1,
36150
- msg: `update html failed: ${errorMsg}`
36151
- };
36152
- }
36153
- }
36154
- };
36155
- _ts_decorate13([
36156
- (0, import_common13.Post)("update_html_files"),
36157
- (0, import_common13.HttpCode)(import_common13.HttpStatus.OK),
36158
- _ts_param5(0, (0, import_common13.Body)()),
36159
- _ts_metadata9("design:type", Function),
36160
- _ts_metadata9("design:paramtypes", [
36161
- typeof UpdateHtmlFilesDto === "undefined" ? Object : UpdateHtmlFilesDto
36162
- ]),
36163
- _ts_metadata9("design:returntype", Promise)
36164
- ], HtmlHotUpdateController.prototype, "updateHtmlFiles", null);
36165
- HtmlHotUpdateController = _ts_decorate13([
36166
- (0, import_swagger2.ApiExcludeController)(),
36167
- (0, import_common13.Controller)("__innerapi__"),
36168
- _ts_metadata9("design:type", Function),
36169
- _ts_metadata9("design:paramtypes", [
36170
- typeof HtmlHotUpdateService === "undefined" ? Object : HtmlHotUpdateService
36171
- ])
36172
- ], HtmlHotUpdateController);
36173
-
36174
- // src/modules/html-hot-update/html-hot-update.module.ts
36175
- function _ts_decorate14(decorators, target, key, desc) {
36176
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
36177
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
36178
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
36179
- return c > 3 && r && Object.defineProperty(target, key, r), r;
36180
- }
36181
- __name(_ts_decorate14, "_ts_decorate");
36182
- var HtmlHotUpdateModule = class {
36183
- static {
36184
- __name(this, "HtmlHotUpdateModule");
36185
- }
36186
- };
36187
- HtmlHotUpdateModule = _ts_decorate14([
36188
- (0, import_common14.Module)({
36189
- controllers: [
36190
- HtmlHotUpdateController
36191
- ],
36192
- providers: [
36193
- HtmlHotUpdateService
36194
- ],
36195
- exports: [
36196
- HtmlHotUpdateService
36197
- ]
36198
- })
36199
- ], HtmlHotUpdateModule);
36200
-
36201
- // src/middlewares/html-hot-update-view/index.ts
36202
- var import_common15 = require("@nestjs/common");
36203
- var import_node_fs3 = require("fs");
36204
- var import_node_path2 = require("path");
36205
- function _ts_decorate15(decorators, target, key, desc) {
36206
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
36207
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
36208
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
36209
- return c > 3 && r && Object.defineProperty(target, key, r), r;
36210
- }
36211
- __name(_ts_decorate15, "_ts_decorate");
36212
- var HOT_UPDATE_DIR = "/tmp/html-hot-update";
36213
- var HtmlHotUpdateViewMiddleware = class _HtmlHotUpdateViewMiddleware {
36214
- static {
36215
- __name(this, "HtmlHotUpdateViewMiddleware");
36216
- }
36217
- logger = new import_common15.Logger(_HtmlHotUpdateViewMiddleware.name);
36218
- use(req, res, next) {
36219
- if (process.env.NODE_ENV !== "production") {
36220
- return next();
36221
- }
36222
- const originalRender = res.render.bind(res);
36223
- res.render = (view, options, callback) => {
36224
- let renderOptions = options;
36225
- let renderCallback = callback;
36226
- if (typeof renderOptions === "function") {
36227
- renderCallback = renderOptions;
36228
- renderOptions = void 0;
36229
- }
36230
- const hotPath = (0, import_node_path2.join)(HOT_UPDATE_DIR, `${view}.html`);
36231
- if ((0, import_node_fs3.existsSync)(hotPath)) {
36232
- this.logger.log(`Render hot-updated HTML: ${hotPath}`);
36233
- if (res.app?.cache) {
36234
- delete res.app.cache[hotPath];
36235
- }
36236
- return originalRender(hotPath, {
36237
- ...renderOptions ?? {},
36238
- cache: false
36239
- }, renderCallback);
36240
- }
36241
- return originalRender(view, renderOptions, renderCallback);
36242
- };
36243
- next();
36244
- }
36245
- };
36246
- HtmlHotUpdateViewMiddleware = _ts_decorate15([
36247
- (0, import_common15.Injectable)()
36248
- ], HtmlHotUpdateViewMiddleware);
36249
-
36250
- // src/modules/platform/module.ts
36251
- function _ts_decorate16(decorators, target, key, desc) {
36252
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
36253
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
36254
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
36255
- return c > 3 && r && Object.defineProperty(target, key, r), r;
36256
- }
36257
- __name(_ts_decorate16, "_ts_decorate");
36258
35830
  var PLATFORM_MODULE_OPTIONS = /* @__PURE__ */ Symbol("PLATFORM_MODULE_OPTIONS");
36259
35831
  var PlatformModule = class _PlatformModule {
36260
35832
  static {
@@ -36276,7 +35848,7 @@ var PlatformModule = class _PlatformModule {
36276
35848
  app_config_default
36277
35849
  ]
36278
35850
  }),
36279
- import_nestjs_common6.CommonModule,
35851
+ import_nestjs_common5.CommonModule,
36280
35852
  import_nestjs_observable.NestjsObservableModule,
36281
35853
  import_nestjs_logger2.LoggerModule,
36282
35854
  import_axios2.HttpModule.register({
@@ -36325,11 +35897,6 @@ var PlatformModule = class _PlatformModule {
36325
35897
  // 开发环境由 Vite/Rspack dev server 的中间件处理 /static/* 请求
36326
35898
  ...process.env.NODE_ENV === "development" ? [] : [
36327
35899
  StaticModule
36328
- ],
36329
- // HTML 热更新模块(仅生产环境启用)
36330
- // 提供 innerapi 供 tce 服务触发 HTML 热更新,冷启动时也会尝试拉取最新 HTML
36331
- ...process.env.NODE_ENV === "development" ? [] : [
36332
- HtmlHotUpdateModule
36333
35900
  ]
36334
35901
  ],
36335
35902
  providers: [
@@ -36339,7 +35906,7 @@ var PlatformModule = class _PlatformModule {
36339
35906
  },
36340
35907
  {
36341
35908
  provide: import_core2.APP_PIPE,
36342
- useValue: new import_common16.ValidationPipe({
35909
+ useValue: new import_common12.ValidationPipe({
36343
35910
  transform: true,
36344
35911
  transformOptions: {
36345
35912
  enableImplicitConversion: true
@@ -36347,19 +35914,19 @@ var PlatformModule = class _PlatformModule {
36347
35914
  })
36348
35915
  },
36349
35916
  {
36350
- provide: import_nestjs_common6.OBSERVABLE_SERVICE,
35917
+ provide: import_nestjs_common5.OBSERVABLE_SERVICE,
36351
35918
  useClass: import_nestjs_observable.Observable
36352
35919
  },
36353
35920
  PlatformHttpClientService,
36354
35921
  {
36355
- provide: import_nestjs_common7.PLATFORM_HTTP_CLIENT,
35922
+ provide: import_nestjs_common6.PLATFORM_HTTP_CLIENT,
36356
35923
  useFactory: /* @__PURE__ */ __name((svc) => svc.instance, "useFactory"),
36357
35924
  inject: [
36358
35925
  PlatformHttpClientService
36359
35926
  ]
36360
35927
  },
36361
35928
  {
36362
- provide: import_nestjs_common6.HTTP_CLIENT_FACTORY,
35929
+ provide: import_nestjs_common5.HTTP_CLIENT_FACTORY,
36363
35930
  useFactory: /* @__PURE__ */ __name((svc) => ({
36364
35931
  create: /* @__PURE__ */ __name((options2) => svc.createWithGlobalInterceptors(options2), "create")
36365
35932
  }), "useFactory"),
@@ -36377,10 +35944,10 @@ var PlatformModule = class _PlatformModule {
36377
35944
  exports: [
36378
35945
  import_config2.ConfigModule,
36379
35946
  import_nestjs_logger2.LoggerModule,
36380
- import_nestjs_common6.CommonModule,
36381
- import_nestjs_common6.OBSERVABLE_SERVICE,
36382
- import_nestjs_common7.PLATFORM_HTTP_CLIENT,
36383
- import_nestjs_common6.HTTP_CLIENT_FACTORY,
35947
+ import_nestjs_common5.CommonModule,
35948
+ import_nestjs_common5.OBSERVABLE_SERVICE,
35949
+ import_nestjs_common6.PLATFORM_HTTP_CLIENT,
35950
+ import_nestjs_common5.HTTP_CLIENT_FACTORY,
36384
35951
  PlatformHttpClientService,
36385
35952
  import_nestjs_capability.CapabilityModule,
36386
35953
  FileService
@@ -36399,7 +35966,7 @@ var PlatformModule = class _PlatformModule {
36399
35966
  consumer.apply(UserContextMiddleware, RequestContextMiddleware, import_nestjs_logger2.LoggerContextMiddleware, import_nestjs_observable.ObservableTraceMiddleware, ...DISABLE_DATAPASS ? [] : [
36400
35967
  import_nestjs_datapaas.SqlExecutionContextMiddleware
36401
35968
  ]).forRoutes("/*");
36402
- consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware, HtmlHotUpdateViewMiddleware).exclude("/api/(.*)", "/static/(.*)").forRoutes("*");
35969
+ consumer.apply(CsrfTokenMiddleware, ViewContextMiddleware).exclude("/api/(.*)", "/static/(.*)").forRoutes("*");
36403
35970
  if (options.enableCsrf !== false) {
36404
35971
  const csrfRoutes = options.csrfRoutes || "/api/*";
36405
35972
  if (Array.isArray(csrfRoutes)) {
@@ -36412,9 +35979,9 @@ var PlatformModule = class _PlatformModule {
36412
35979
  }
36413
35980
  }
36414
35981
  };
36415
- PlatformModule = _ts_decorate16([
36416
- (0, import_common16.Global)(),
36417
- (0, import_common16.Module)({})
35982
+ PlatformModule = _ts_decorate12([
35983
+ (0, import_common12.Global)(),
35984
+ (0, import_common12.Module)({})
36418
35985
  ], PlatformModule);
36419
35986
 
36420
35987
  // src/setup.ts
@@ -36502,7 +36069,7 @@ __reExport(index_exports, require("@lark-apaas/nestjs-datapaas"), module.exports
36502
36069
  __reExport(index_exports, require("@lark-apaas/nestjs-observable"), module.exports);
36503
36070
  __reExport(index_exports, require("@lark-apaas/nestjs-trigger"), module.exports);
36504
36071
  __reExport(index_exports, require("@lark-apaas/file-service"), module.exports);
36505
- var import_nestjs_common8 = require("@lark-apaas/nestjs-common");
36072
+ var import_nestjs_common7 = require("@lark-apaas/nestjs-common");
36506
36073
  var import_nestjs_authzpaas2 = require("@lark-apaas/nestjs-authzpaas");
36507
36074
  // Annotate the CommonJS export names for ESM import in node:
36508
36075
  0 && (module.exports = {
@@ -36513,8 +36080,6 @@ var import_nestjs_authzpaas2 = require("@lark-apaas/nestjs-authzpaas");
36513
36080
  DevToolsModule,
36514
36081
  DevToolsV2Module,
36515
36082
  FileService,
36516
- HtmlHotUpdateModule,
36517
- HtmlHotUpdateService,
36518
36083
  PlatformHttpClientService,
36519
36084
  PlatformModule,
36520
36085
  StaticModule,