@lark-apaas/nestjs-capability 0.1.9 → 0.1.11

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.d.ts CHANGED
@@ -331,6 +331,7 @@ declare class TemplateEngineService {
331
331
  interface PluginManifest {
332
332
  name: string;
333
333
  version?: string;
334
+ displayName?: string;
334
335
  form?: {
335
336
  refType?: 'config' | 'action';
336
337
  schema?: unknown;
@@ -527,6 +528,8 @@ declare class CapabilityService implements OnModuleInit, OnModuleDestroy {
527
528
  /**
528
529
  * 从错误对象提取错误信息
529
530
  * 支持 PluginError 和 RateLimitError
531
+ * @param error - 捕获到的错误
532
+ * @param pluginKey - 插件 key,用于获取 displayName 格式化 PluginError 消息
530
533
  */
531
534
  private extractErrorInfo;
532
535
  private buildActionContext;
package/dist/index.js CHANGED
@@ -532,6 +532,100 @@ async function migrationAdaptor(promise) {
532
532
  }
533
533
  __name(migrationAdaptor, "migrationAdaptor");
534
534
 
535
+ // src/utils/plugin-error-format.ts
536
+ var PLUGIN_ERROR_CODES = /* @__PURE__ */ new Set([
537
+ "INVALID_INPUT",
538
+ "EXECUTION_ERROR",
539
+ "INVALID_OUTPUT",
540
+ "INVALID_CONFIG",
541
+ "ACTION_NOT_FOUND"
542
+ ]);
543
+ function isPluginError(error) {
544
+ if (!error || typeof error !== "object") return false;
545
+ const code = error.code;
546
+ return typeof code === "string" && PLUGIN_ERROR_CODES.has(code);
547
+ }
548
+ __name(isPluginError, "isPluginError");
549
+ function formatPluginError(error, displayName) {
550
+ if (!isPluginError(error)) return null;
551
+ const err = error;
552
+ const label = displayName ? `\u300C${displayName}\u300D` : "";
553
+ switch (err.code) {
554
+ case "INVALID_INPUT":
555
+ return `${label}\u63D2\u4EF6\u8F93\u5165\u6821\u9A8C\u5931\u8D25: ${formatZodIssuesChinese(err.details)}`;
556
+ case "INVALID_OUTPUT":
557
+ return `${label}\u63D2\u4EF6\u8F93\u51FA\u6821\u9A8C\u5931\u8D25: ${formatZodIssuesChinese(err.details)}`;
558
+ case "INVALID_CONFIG":
559
+ return `${label}\u63D2\u4EF6\u914D\u7F6E\u6821\u9A8C\u5931\u8D25: ${formatZodIssuesChinese(err.details)}`;
560
+ case "ACTION_NOT_FOUND":
561
+ return `${label}\u63D2\u4EF6\u64CD\u4F5C\u4E0D\u5B58\u5728`;
562
+ case "EXECUTION_ERROR": {
563
+ const inner = err.originalError instanceof Error ? err.originalError.message : "";
564
+ return inner ? `${label}\u63D2\u4EF6\u6267\u884C\u5931\u8D25: ${inner}` : `${label}\u63D2\u4EF6\u6267\u884C\u5931\u8D25`;
565
+ }
566
+ default:
567
+ return `${label}\u63D2\u4EF6\u6267\u884C\u5931\u8D25`;
568
+ }
569
+ }
570
+ __name(formatPluginError, "formatPluginError");
571
+ function formatZodIssuesChinese(details) {
572
+ if (!Array.isArray(details) || details.length === 0) return "\u53C2\u6570\u683C\u5F0F\u6821\u9A8C\u51FA\u9519";
573
+ return details.map(translateZodIssue).join("\uFF1B");
574
+ }
575
+ __name(formatZodIssuesChinese, "formatZodIssuesChinese");
576
+ function translateZodIssue(issue) {
577
+ const field = issue.path?.length > 0 ? `\u300C${issue.path.join(".")}\u300D` : "";
578
+ switch (issue.code) {
579
+ case "invalid_type": {
580
+ const received = issue.received;
581
+ if (received === "undefined" || received === "null") {
582
+ return `${field}\u5B57\u6BB5\u662F\u5FC5\u586B\u7684`;
583
+ }
584
+ return `${field}\u5B57\u6BB5\u7C7B\u578B\u9519\u8BEF\uFF0C\u671F\u671B${translateType(issue.expected)}`;
585
+ }
586
+ case "too_small": {
587
+ if (issue.type === "string") {
588
+ if (issue.minimum === 1) return `${field}\u5B57\u6BB5\u4E0D\u80FD\u4E3A\u7A7A`;
589
+ return `${field}\u5B57\u6BB5\u957F\u5EA6\u4E0D\u80FD\u5C11\u4E8E ${issue.minimum} \u4E2A\u5B57\u7B26`;
590
+ }
591
+ if (issue.type === "number") return `${field}\u5B57\u6BB5\u4E0D\u80FD\u5C0F\u4E8E ${issue.minimum}`;
592
+ if (issue.type === "array") return `${field}\u5B57\u6BB5\u81F3\u5C11\u9700\u8981 ${issue.minimum} \u9879`;
593
+ return `${field}\u5B57\u6BB5\u503C\u8FC7\u5C0F`;
594
+ }
595
+ case "too_big": {
596
+ if (issue.type === "string") return `${field}\u5B57\u6BB5\u957F\u5EA6\u4E0D\u80FD\u8D85\u8FC7 ${issue.maximum} \u4E2A\u5B57\u7B26`;
597
+ if (issue.type === "number") return `${field}\u5B57\u6BB5\u4E0D\u80FD\u5927\u4E8E ${issue.maximum}`;
598
+ if (issue.type === "array") return `${field}\u5B57\u6BB5\u6700\u591A ${issue.maximum} \u9879`;
599
+ return `${field}\u5B57\u6BB5\u503C\u8FC7\u5927`;
600
+ }
601
+ case "invalid_string": {
602
+ if (issue.validation === "email") return `${field}\u5B57\u6BB5\u4E0D\u662F\u6709\u6548\u7684\u90AE\u7BB1\u5730\u5740`;
603
+ if (issue.validation === "url") return `${field}\u5B57\u6BB5\u4E0D\u662F\u6709\u6548\u7684 URL`;
604
+ if (issue.validation === "regex") return `${field}\u5B57\u6BB5\u683C\u5F0F\u4E0D\u6B63\u786E`;
605
+ return `${field}\u5B57\u6BB5\u683C\u5F0F\u6821\u9A8C\u51FA\u9519`;
606
+ }
607
+ case "invalid_enum_value":
608
+ return `${field}\u5B57\u6BB5\u503C\u4E0D\u5728\u5141\u8BB8\u7684\u8303\u56F4\u5185`;
609
+ case "unrecognized_keys":
610
+ return `\u5305\u542B\u672A\u77E5\u5B57\u6BB5: ${issue.keys?.join(", ")}`;
611
+ default:
612
+ return field ? `${field}\u5B57\u6BB5\u683C\u5F0F\u6821\u9A8C\u51FA\u9519` : "\u8F93\u5165\u683C\u5F0F\u6821\u9A8C\u51FA\u9519";
613
+ }
614
+ }
615
+ __name(translateZodIssue, "translateZodIssue");
616
+ function translateType(type) {
617
+ const map = {
618
+ string: "\u6587\u672C",
619
+ number: "\u6570\u5B57",
620
+ boolean: "\u5E03\u5C14\u503C",
621
+ array: "\u6570\u7EC4",
622
+ object: "\u5BF9\u8C61",
623
+ integer: "\u6574\u6570"
624
+ };
625
+ return map[type] || type;
626
+ }
627
+ __name(translateType, "translateType");
628
+
535
629
  // src/services/capability.service.ts
536
630
  function _ts_decorate4(decorators, target, key, desc) {
537
631
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -867,6 +961,11 @@ var CapabilityService = class _CapabilityService {
867
961
  });
868
962
  const errorCode = String(error?.code ?? "EXECUTION_ERROR");
869
963
  this.reportCallEvent(config.pluginKey, false, durationMs, isStream, contextOverride, errorCode);
964
+ const displayName = this.pluginLoaderService.getManifest(config.pluginKey)?.displayName;
965
+ const formattedMessage = formatPluginError(error, displayName);
966
+ if (formattedMessage && error instanceof Error) {
967
+ error.message = formattedMessage;
968
+ }
870
969
  throw error;
871
970
  }
872
971
  }
@@ -922,6 +1021,11 @@ var CapabilityService = class _CapabilityService {
922
1021
  });
923
1022
  const errorCode = String(error?.code ?? "EXECUTION_ERROR");
924
1023
  this.reportCallEvent(config.pluginKey, false, durationMs, true, contextOverride, errorCode);
1024
+ const displayName = this.pluginLoaderService.getManifest(config.pluginKey)?.displayName;
1025
+ const formattedMessage = formatPluginError(error, displayName);
1026
+ if (formattedMessage && error instanceof Error) {
1027
+ error.message = formattedMessage;
1028
+ }
925
1029
  throw error;
926
1030
  }
927
1031
  }
@@ -1016,7 +1120,7 @@ var CapabilityService = class _CapabilityService {
1016
1120
  this.reportCallEvent(config.pluginKey, false, durationMs, true, contextOverride, errorCode);
1017
1121
  yield {
1018
1122
  type: "error",
1019
- error: this.extractErrorInfo(error)
1123
+ error: this.extractErrorInfo(error, config.pluginKey)
1020
1124
  };
1021
1125
  }
1022
1126
  }
@@ -1039,8 +1143,10 @@ var CapabilityService = class _CapabilityService {
1039
1143
  /**
1040
1144
  * 从错误对象提取错误信息
1041
1145
  * 支持 PluginError 和 RateLimitError
1146
+ * @param error - 捕获到的错误
1147
+ * @param pluginKey - 插件 key,用于获取 displayName 格式化 PluginError 消息
1042
1148
  */
1043
- extractErrorInfo(error) {
1149
+ extractErrorInfo(error, pluginKey) {
1044
1150
  const err = error;
1045
1151
  const code = err?.code ?? "EXECUTION_ERROR";
1046
1152
  const message = err instanceof Error ? err.message : String(err);
@@ -1052,6 +1158,16 @@ var CapabilityService = class _CapabilityService {
1052
1158
  rateLimitMessage: err.rateLimitMessage
1053
1159
  };
1054
1160
  }
1161
+ if (pluginKey) {
1162
+ const displayName = this.pluginLoaderService.getManifest(pluginKey)?.displayName;
1163
+ const formattedMessage = formatPluginError(error, displayName);
1164
+ if (formattedMessage) {
1165
+ return {
1166
+ code,
1167
+ message: formattedMessage
1168
+ };
1169
+ }
1170
+ }
1055
1171
  return {
1056
1172
  code,
1057
1173
  message