@boteteam/utils 0.0.30 → 0.0.32

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 (107) hide show
  1. package/dist/cjs/file.js +4 -4
  2. package/dist/cjs/file.js.map +2 -2
  3. package/dist/cjs/formatModule/formatModuleData.d.ts +3 -1
  4. package/dist/cjs/formatModule/formatModuleData.js +102 -17
  5. package/dist/cjs/formatModule/formatModuleData.js.map +3 -3
  6. package/dist/cjs/formatModule/helpers/checkDataSourceOfFn.d.ts +2 -0
  7. package/dist/cjs/formatModule/helpers/checkDataSourceOfFn.js +33 -0
  8. package/dist/cjs/formatModule/helpers/checkDataSourceOfFn.js.map +7 -0
  9. package/dist/cjs/formatModule/helpers/cssToJson.d.ts +22 -0
  10. package/dist/cjs/formatModule/helpers/cssToJson.js +78 -0
  11. package/dist/cjs/formatModule/helpers/cssToJson.js.map +7 -0
  12. package/dist/cjs/formatModule/helpers/formatDataProps.d.ts +19 -0
  13. package/dist/cjs/formatModule/helpers/formatDataProps.js +65 -0
  14. package/dist/cjs/formatModule/helpers/formatDataProps.js.map +7 -0
  15. package/dist/cjs/formatModule/helpers/formatFormProps.js +7 -0
  16. package/dist/cjs/formatModule/helpers/formatFormProps.js.map +3 -3
  17. package/dist/cjs/formatModule/helpers/formatListProps.js +25 -9
  18. package/dist/cjs/formatModule/helpers/formatListProps.js.map +3 -3
  19. package/dist/cjs/formatModule/helpers/formatLoopProps.d.ts +1 -4
  20. package/dist/cjs/formatModule/helpers/formatLoopProps.js +20 -8
  21. package/dist/cjs/formatModule/helpers/formatLoopProps.js.map +3 -3
  22. package/dist/cjs/formatModule/helpers/formatStepsProps.js +49 -32
  23. package/dist/cjs/formatModule/helpers/formatStepsProps.js.map +3 -3
  24. package/dist/cjs/formatModule/helpers/formatStyleProps.d.ts +16 -3
  25. package/dist/cjs/formatModule/helpers/formatStyleProps.js +100 -37
  26. package/dist/cjs/formatModule/helpers/formatStyleProps.js.map +3 -3
  27. package/dist/cjs/formatModule/helpers/formatTableProps.d.ts +7 -1
  28. package/dist/cjs/formatModule/helpers/formatTableProps.js +46 -11
  29. package/dist/cjs/formatModule/helpers/formatTableProps.js.map +3 -3
  30. package/dist/cjs/formatModule/helpers/formatTabsProps.d.ts +15 -0
  31. package/dist/cjs/formatModule/helpers/formatTabsProps.js +49 -0
  32. package/dist/cjs/formatModule/helpers/formatTabsProps.js.map +7 -0
  33. package/dist/cjs/formatModule/helpers/formatVideoProps.d.ts +12 -0
  34. package/dist/cjs/formatModule/helpers/formatVideoProps.js +45 -0
  35. package/dist/cjs/formatModule/helpers/formatVideoProps.js.map +7 -0
  36. package/dist/cjs/formatModule/helpers/index.d.ts +6 -1
  37. package/dist/cjs/formatModule/helpers/index.js +15 -0
  38. package/dist/cjs/formatModule/helpers/index.js.map +3 -3
  39. package/dist/cjs/formatModule/helpers/stringScriptExecution.js +1 -1
  40. package/dist/cjs/formatModule/helpers/stringScriptExecution.js.map +1 -1
  41. package/dist/cjs/http.d.ts +17 -0
  42. package/dist/cjs/http.js +123 -1
  43. package/dist/cjs/http.js.map +2 -2
  44. package/dist/cjs/index.d.ts +5 -4
  45. package/dist/cjs/index.js +19 -0
  46. package/dist/cjs/index.js.map +2 -2
  47. package/dist/cjs/treeUtils.d.ts +31 -3
  48. package/dist/cjs/treeUtils.js +53 -10
  49. package/dist/cjs/treeUtils.js.map +3 -3
  50. package/dist/cjs/watermark.d.ts +80 -0
  51. package/dist/cjs/watermark.js +350 -0
  52. package/dist/cjs/watermark.js.map +7 -0
  53. package/dist/esm/file.js +5 -4
  54. package/dist/esm/file.js.map +1 -1
  55. package/dist/esm/formatModule/formatModuleData.d.ts +3 -1
  56. package/dist/esm/formatModule/formatModuleData.js +121 -40
  57. package/dist/esm/formatModule/formatModuleData.js.map +1 -1
  58. package/dist/esm/formatModule/helpers/checkDataSourceOfFn.d.ts +2 -0
  59. package/dist/esm/formatModule/helpers/checkDataSourceOfFn.js +9 -0
  60. package/dist/esm/formatModule/helpers/checkDataSourceOfFn.js.map +1 -0
  61. package/dist/esm/formatModule/helpers/cssToJson.d.ts +22 -0
  62. package/dist/esm/formatModule/helpers/cssToJson.js +103 -0
  63. package/dist/esm/formatModule/helpers/cssToJson.js.map +1 -0
  64. package/dist/esm/formatModule/helpers/formatDataProps.d.ts +19 -0
  65. package/dist/esm/formatModule/helpers/formatDataProps.js +26 -0
  66. package/dist/esm/formatModule/helpers/formatDataProps.js.map +1 -0
  67. package/dist/esm/formatModule/helpers/formatFormProps.js +6 -0
  68. package/dist/esm/formatModule/helpers/formatFormProps.js.map +1 -1
  69. package/dist/esm/formatModule/helpers/formatListProps.js +26 -9
  70. package/dist/esm/formatModule/helpers/formatListProps.js.map +1 -1
  71. package/dist/esm/formatModule/helpers/formatLoopProps.d.ts +1 -4
  72. package/dist/esm/formatModule/helpers/formatLoopProps.js +13 -12
  73. package/dist/esm/formatModule/helpers/formatLoopProps.js.map +1 -1
  74. package/dist/esm/formatModule/helpers/formatStepsProps.js +38 -31
  75. package/dist/esm/formatModule/helpers/formatStepsProps.js.map +1 -1
  76. package/dist/esm/formatModule/helpers/formatStyleProps.d.ts +16 -3
  77. package/dist/esm/formatModule/helpers/formatStyleProps.js +90 -43
  78. package/dist/esm/formatModule/helpers/formatStyleProps.js.map +1 -1
  79. package/dist/esm/formatModule/helpers/formatTableProps.d.ts +7 -1
  80. package/dist/esm/formatModule/helpers/formatTableProps.js +57 -8
  81. package/dist/esm/formatModule/helpers/formatTableProps.js.map +1 -1
  82. package/dist/esm/formatModule/helpers/formatTabsProps.d.ts +15 -0
  83. package/dist/esm/formatModule/helpers/formatTabsProps.js +46 -0
  84. package/dist/esm/formatModule/helpers/formatTabsProps.js.map +1 -0
  85. package/dist/esm/formatModule/helpers/formatVideoProps.d.ts +12 -0
  86. package/dist/esm/formatModule/helpers/formatVideoProps.js +31 -0
  87. package/dist/esm/formatModule/helpers/formatVideoProps.js.map +1 -0
  88. package/dist/esm/formatModule/helpers/index.d.ts +6 -1
  89. package/dist/esm/formatModule/helpers/index.js +6 -1
  90. package/dist/esm/formatModule/helpers/index.js.map +1 -1
  91. package/dist/esm/formatModule/helpers/stringScriptExecution.js +1 -1
  92. package/dist/esm/formatModule/helpers/stringScriptExecution.js.map +1 -1
  93. package/dist/esm/http.d.ts +17 -0
  94. package/dist/esm/http.js +208 -43
  95. package/dist/esm/http.js.map +1 -1
  96. package/dist/esm/index.d.ts +5 -4
  97. package/dist/esm/index.js +4 -3
  98. package/dist/esm/index.js.map +1 -1
  99. package/dist/esm/treeUtils.d.ts +31 -3
  100. package/dist/esm/treeUtils.js +118 -15
  101. package/dist/esm/treeUtils.js.map +1 -1
  102. package/dist/esm/watermark.d.ts +80 -0
  103. package/dist/esm/watermark.js +487 -0
  104. package/dist/esm/watermark.js.map +1 -0
  105. package/dist/umd/index.min.js +1 -1
  106. package/dist/umd/index.min.js.map +1 -1
  107. package/package.json +4 -4
@@ -1,11 +1,39 @@
1
+ /** 把${xxx.xxx.xxx} 转换为 [xxx,xxx,xxx] */
2
+ export declare const getParamsArr: (content: string) => string[];
3
+ /** 把${xxx.xxx.xxx} 转换为 [xxx,xxx,xxx],并过滤掉第一个root,pageParams */
1
4
  export declare const getDataArr: (content: string) => string[];
2
5
  export declare const getParamsContentByParamKeys: (paramNames: string, data?: {
3
6
  [key: string]: any;
4
7
  }) => any;
8
+ /**
9
+ * 替换循环体内的参数值
10
+ * 用于在循环体模板中替换 ${...} 格式的参数占位符为实际值
11
+ *
12
+ * @param contentStr - 包含参数占位符的字符串模板,例如: "${item.name} - ${item.price}"
13
+ * @param options - 配置选项
14
+ * @param options.loopParams - 循环体参数对象,包含当前循环项的字段值
15
+ * @param options.loopSourceArr - 循环体数据源的键名数组,用于标识哪些参数属于循环体本身
16
+ * @param options.loopData - 循环数据源的完整数据数组
17
+ * @param options.parameters - 全量参数对象(可选),当循环体内找不到值时,会从这里查找
18
+ * @param options.staticCodeMap - 静态数据映射(可选),当前未使用
19
+ * @returns 替换后的字符串
20
+ *
21
+ * @example
22
+ * // 示例:替换循环体内的参数
23
+ * const result = replaceLoopBodyParamsValue(
24
+ * "${item.name} - ${item.price}",
25
+ * {
26
+ * loopParams: { name: "商品A", price: 100 },
27
+ * loopSourceArr: ["item"],
28
+ * loopData: [{ name: "商品A", price: 100 }],
29
+ * parameters: { globalVar: "全局变量" }
30
+ * }
31
+ * );
32
+ * // 返回: "商品A - 100"
33
+ */
5
34
  export declare const replaceLoopBodyParamsValue: (contentStr: string, options: {
6
- loopParams: {
7
- [key: string]: any;
8
- };
35
+ loopIndex: number;
36
+ loopParams: any;
9
37
  loopSourceArr: string[];
10
38
  loopData: {
11
39
  [key: string]: any;
@@ -4,10 +4,12 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
4
4
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
5
  import { get, cloneDeep } from 'lodash';
6
6
  import escapeString from "./markdownEscape";
7
- export var getDataArr = function getDataArr(content) {
7
+
8
+ /** 把${xxx.xxx.xxx} 转换为 [xxx,xxx,xxx] */
9
+ export var getParamsArr = function getParamsArr(content) {
8
10
  var matchArr = [];
9
11
  if (content && typeof content === 'string') {
10
- var _matchs, _matchArr;
12
+ var _matchs;
11
13
  var escapeRegex = /\$\{\{([^}]+)\}\}/gi; // 变量正则表达式,${{xxx}}
12
14
  var regex = /\$\{(.+?)\}/gi; // 变量正则表达式,${xxx}
13
15
  var matchs = escapeRegex.exec(content);
@@ -20,12 +22,20 @@ export var getDataArr = function getDataArr(content) {
20
22
  matchArr = matchs[1].split('.');
21
23
  }
22
24
  }
23
- return (_matchArr = matchArr) === null || _matchArr === void 0 ? void 0 : _matchArr.filter(function (item, idx) {
24
- return !(idx === 0 && ['root', 'pageParams'].includes(item)) && !(idx === 1 && ['pageParams'].includes(item));
25
- }); // 过滤掉第一个root,pageParams
25
+ return matchArr;
26
26
  }
27
27
  return matchArr;
28
28
  };
29
+
30
+ /** 把${xxx.xxx.xxx} 转换为 [xxx,xxx,xxx],并过滤掉第一个root,pageParams */
31
+ export var getDataArr = function getDataArr(content) {
32
+ var matchArr = getParamsArr(content);
33
+ return matchArr === null || matchArr === void 0 ? void 0 : matchArr.filter(function (item, idx) {
34
+ return !(idx === 0 && ['root', 'pageParams'].includes(item)) && !(idx === 1 && ['pageParams'].includes(item));
35
+ }); // 过滤掉第一个root,pageParams
36
+ };
37
+
38
+ /** 根据参数路径,逐级获取数据 */
29
39
  var loopNodeByParamsPath = function loopNodeByParamsPath(paramsArr, data) {
30
40
  var escape = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
31
41
  if (Array.isArray(paramsArr) && paramsArr.length > 0) {
@@ -105,9 +115,36 @@ export var getParamsContentByParamKeys = function getParamsContentByParamKeys(pa
105
115
  return loopNodeByParamsPath(paramNameList, data, escapeRegex.test(paramNames));
106
116
  };
107
117
 
108
- // 获取替换循环体内的参数值
118
+ /**
119
+ * 替换循环体内的参数值
120
+ * 用于在循环体模板中替换 ${...} 格式的参数占位符为实际值
121
+ *
122
+ * @param contentStr - 包含参数占位符的字符串模板,例如: "${item.name} - ${item.price}"
123
+ * @param options - 配置选项
124
+ * @param options.loopParams - 循环体参数对象,包含当前循环项的字段值
125
+ * @param options.loopSourceArr - 循环体数据源的键名数组,用于标识哪些参数属于循环体本身
126
+ * @param options.loopData - 循环数据源的完整数据数组
127
+ * @param options.parameters - 全量参数对象(可选),当循环体内找不到值时,会从这里查找
128
+ * @param options.staticCodeMap - 静态数据映射(可选),当前未使用
129
+ * @returns 替换后的字符串
130
+ *
131
+ * @example
132
+ * // 示例:替换循环体内的参数
133
+ * const result = replaceLoopBodyParamsValue(
134
+ * "${item.name} - ${item.price}",
135
+ * {
136
+ * loopParams: { name: "商品A", price: 100 },
137
+ * loopSourceArr: ["item"],
138
+ * loopData: [{ name: "商品A", price: 100 }],
139
+ * parameters: { globalVar: "全局变量" }
140
+ * }
141
+ * );
142
+ * // 返回: "商品A - 100"
143
+ */
109
144
  export var replaceLoopBodyParamsValue = function replaceLoopBodyParamsValue(contentStr, options) {
110
145
  var _ref = options || {},
146
+ _ref$loopIndex = _ref.loopIndex,
147
+ loopIndex = _ref$loopIndex === void 0 ? 0 : _ref$loopIndex,
111
148
  _ref$loopParams = _ref.loopParams,
112
149
  loopParams = _ref$loopParams === void 0 ? {} : _ref$loopParams,
113
150
  _ref$loopSourceArr = _ref.loopSourceArr,
@@ -117,37 +154,86 @@ export var replaceLoopBodyParamsValue = function replaceLoopBodyParamsValue(cont
117
154
  _ref$parameters = _ref.parameters,
118
155
  parameters = _ref$parameters === void 0 ? {} : _ref$parameters;
119
156
  var nowTemp = '';
157
+
158
+ // 只有当输入是有效字符串且存在循环体参数时才进行处理
120
159
  if (typeof contentStr === 'string' && contentStr && loopParams) {
160
+ // 使用正则表达式匹配所有 ${...} 格式的参数占位符
121
161
  nowTemp = contentStr.replace(/\$\{(.+?)\}/gi, function (match) {
162
+ // eslint-disable-next-line no-template-curly-in-string
163
+ if (match === '${rowIndex}') {
164
+ return String(loopIndex);
165
+ }
166
+ // 解析参数路径,并过滤掉循环源数组中的键(避免循环引用)
122
167
  var paramsPath = getDataArr(match).filter(function (itemKey) {
123
168
  return !loopSourceArr.includes(itemKey);
124
169
  });
125
170
  var filedVal = '';
171
+
172
+ // 判断第一个参数是否为数组索引(如 [0] 或 0)
126
173
  // 如果当前节点是数组,且下一个节点是数字,则取下标对应的值
127
174
  var idxRegex = /^\[.*\]$|^\d+$/;
128
175
  if (idxRegex.test(paramsPath === null || paramsPath === void 0 ? void 0 : paramsPath[0])) {
176
+ // 从数组索引中提取数字
129
177
  var idxNum = paramsPath === null || paramsPath === void 0 ? void 0 : paramsPath[0].replace(/\[|\]/g, '');
130
- if ((loopData === null || loopData === void 0 ? void 0 : loopData[Number(idxNum)]) instanceof Object) {
131
- filedVal = loopNodeByParamsPath(paramsPath.slice(1), loopData === null || loopData === void 0 ? void 0 : loopData[Number(idxNum)]);
178
+ var idx = Number(idxNum);
179
+ // 验证索引是否为有效数字(非 NaN 且非负数)
180
+ if (!isNaN(idx) && idx >= 0 && Number.isInteger(idx)) {
181
+ // 如果对应索引的数据是对象,则继续递归查找子属性
182
+ if ((loopData === null || loopData === void 0 ? void 0 : loopData[idx]) instanceof Object) {
183
+ filedVal = loopNodeByParamsPath(paramsPath.slice(1), loopData[idx]);
184
+ } else {
185
+ // 否则直接返回该索引的值(可能为 undefined,会被后续逻辑处理)
186
+ filedVal = loopData === null || loopData === void 0 ? void 0 : loopData[idx];
187
+ }
132
188
  } else {
133
- filedVal = (loopData === null || loopData === void 0 ? void 0 : loopData[Number(idxNum)]) || '';
189
+ // 无效索引(如 [abc] 或负数),返回空字符串
190
+ filedVal = '';
134
191
  }
135
192
  } else {
136
- filedVal = loopNodeByParamsPath(paramsPath.slice(1), loopParams);
193
+ // 非数组索引情况,从循环体参数中查找值
194
+ // 兼容 loopParams 是非对象类型的情况(如字符串、数字、布尔值等)
195
+ var remainingPath = paramsPath.slice(1);
196
+ if (loopParams instanceof Object && !Array.isArray(loopParams)) {
197
+ // loopParams 是对象类型,使用原有逻辑
198
+ filedVal = loopNodeByParamsPath(remainingPath, loopParams);
199
+ } else if (remainingPath.length === 0) {
200
+ // loopParams 是非对象类型,且没有子路径,直接返回 loopParams 的值
201
+ filedVal = loopParams;
202
+ } else {
203
+ // loopParams 是非对象类型,但有子路径,无法访问属性,返回空字符串
204
+ // 后续会尝试从全局参数中查找
205
+ filedVal = '';
206
+ }
137
207
 
138
- // 循环体内查找不到,则从参数中取值,但忽略循环体本身
208
+ // 如果循环体内查找不到值,则从全量参数中查找,但需要排除循环体本身的数据源
209
+ // 这样可以避免循环引用,同时允许访问循环体外的全局参数
210
+ // 注意:!filedVal 会将 0、false、'' 等假值也视为未找到,这是当前的设计逻辑
139
211
  if (!filedVal && parameters) {
140
212
  var _parameters = cloneDeep(parameters);
213
+ // 从全量参数中删除循环体数据源,避免循环引用
141
214
  if (Array.isArray(loopSourceArr) && loopSourceArr.length > 0) {
142
215
  loopSourceArr.forEach(function (sourceKey) {
143
216
  delete _parameters[sourceKey];
144
217
  });
145
218
  }
219
+ // 使用完整的参数路径(不过滤循环源)从全量参数中查找
146
220
  var paramNameList = getDataArr(match);
147
- filedVal = loopNodeByParamsPath(paramNameList, _parameters);
221
+ var globalVal = loopNodeByParamsPath(paramNameList, _parameters);
222
+ // 如果从全量参数中找到的值是数组,则返回空字符串,避免返回整个数组
223
+ // 只返回对象的值,不返回数组数据
224
+ if (Array.isArray(globalVal)) {
225
+ filedVal = '';
226
+ } else {
227
+ filedVal = globalVal;
228
+ }
148
229
  }
149
230
  }
150
- return filedVal || '';
231
+ // 返回找到的值,如果找不到则返回空字符串
232
+ // 修复:当值为 0 时,应该正常返回 '0',而不是空字符串
233
+ if (filedVal === null || filedVal === undefined) {
234
+ return '';
235
+ }
236
+ return String(filedVal);
151
237
  });
152
238
  }
153
239
  return nowTemp;
@@ -162,7 +248,11 @@ export var replaceParamsValue = function replaceParamsValue(contentStr) {
162
248
  if (isObject2String && _typeof(filedVal) === 'object') {
163
249
  return JSON.stringify(filedVal);
164
250
  }
165
- return filedVal || '';
251
+ // 修复:当值为 0 时,应该正常返回 '0',而不是空字符串
252
+ if (filedVal === null || filedVal === undefined) {
253
+ return '';
254
+ }
255
+ return String(filedVal);
166
256
  });
167
257
  }
168
258
  return nowContent;
@@ -204,9 +294,22 @@ var getParamsContentByParamKeysForEvent = function getParamsContentByParamKeysFo
204
294
  paramNameList = matchs === null || matchs === void 0 || (_matchs$ = matchs[1]) === null || _matchs$ === void 0 ? void 0 : _matchs$.split('.');
205
295
  }
206
296
  }
297
+ if (paramNameList.length === 0) {
298
+ return paramNames;
299
+ }
300
+
301
+ // 如果参数路径中没有 pageParams,先尝试在 data.pageParams 中查找
302
+ // 因为根据注释,这个方法不能去掉 pageParams 那一层
303
+ if (paramNameList[0] !== 'pageParams' && data !== null && data !== void 0 && data.pageParams) {
304
+ var _result = loopNodeByParamsPath(paramNameList, data.pageParams);
305
+ if (_result !== '' && _result !== undefined) {
306
+ return _result;
307
+ }
308
+ }
207
309
 
208
310
  // 如果替换不成功,需要返回字符串原始的值
209
- return paramNameList.length > 0 ? loopNodeByParamsPath(paramNameList, data) || '' : paramNames;
311
+ var result = loopNodeByParamsPath(paramNameList, data);
312
+ return result !== '' && result !== undefined ? result : paramNames;
210
313
  };
211
314
 
212
315
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["get","cloneDeep","escapeString","getDataArr","content","matchArr","_matchs","_matchArr","escapeRegex","regex","matchs","exec","split","_matchs2","filter","item","idx","includes","loopNodeByParamsPath","paramsArr","data","escape","arguments","length","undefined","Array","isArray","_iterator","_createForOfIteratorHelper","_step","_loop","_nextParamsArr5","keyword","value","dataNode","nextParamsArr","slice","_nextParamsArr","_nextParamsArr3","idxRegex","test","_nextParamsArr2","idxNum","replace","Number","Object","v","map","_nextParamsArr4","_ret","s","n","done","err","e","f","getParamsContentByParamKeys","paramNames","_Object$keys","keys","paramNameList","replaceLoopBodyParamsValue","contentStr","options","_ref","_ref$loopParams","loopParams","_ref$loopSourceArr","loopSourceArr","_ref$loopData","loopData","_ref$parameters","parameters","nowTemp","match","paramsPath","itemKey","filedVal","_parameters","forEach","sourceKey","replaceParamsValue","pararms","isObject2String","nowContent","_typeof","JSON","stringify","splitStringWithTemplateLiteral","input","templateRegex","matches","result","Boolean","index","splice","getParamsContentByParamKeysForEvent","_matchs$","replaceParamsValueForEvent","_Object$keys2","valueArr","_unused"],"sources":["../../src/treeUtils.ts"],"sourcesContent":["import { get, cloneDeep } from 'lodash';\nimport escapeString from './markdownEscape';\n\nexport const getDataArr = (content: string) => {\n let matchArr:string[] = [];\n if (content && typeof content === 'string') {\n const escapeRegex = /\\$\\{\\{([^}]+)\\}\\}/gi; // 变量正则表达式,${{xxx}}\n const regex = /\\$\\{(.+?)\\}/gi; // 变量正则表达式,${xxx}\n let matchs = escapeRegex.exec(content);\n if (matchs?.[1]) {\n matchArr = matchs[1].split('.');\n } else {\n matchs = regex.exec(content);\n if (matchs?.[1]) {\n matchArr = matchs[1].split('.');\n }\n }\n return matchArr?.filter((item, idx) => !(idx === 0 && ['root', 'pageParams'].includes(item)) && !(idx === 1 && ['pageParams'].includes(item))); // 过滤掉第一个root,pageParams\n }\n return matchArr;\n};\n\nconst loopNodeByParamsPath:any = (\n paramsArr:string[],\n data: {[key:string]: any},\n escape:boolean = false\n) => {\n if (Array.isArray(paramsArr) && paramsArr.length > 0) {\n for (const keyword of paramsArr) {\n const dataNode = get(data, keyword);\n let nextParamsArr = paramsArr.slice(1); // 取下一个节点字段\n if (Array.isArray(dataNode)) {\n // 如果当前节点是数组,且下一个节点是数字,则取下标对应的值\n const idxRegex = /^\\[.*\\]$|^\\d+$/;\n if (idxRegex.test(nextParamsArr?.[0])) {\n const idxNum = nextParamsArr?.[0].replace(/\\[|\\]/g, '');\n if (dataNode?.[Number(idxNum)] instanceof Object) {\n return loopNodeByParamsPath(nextParamsArr.slice(1), dataNode?.[Number(idxNum)], escape);\n }\n return escape ? escapeString(dataNode?.[Number(idxNum)]) : dataNode?.[Number(idxNum)];\n }\n // 否则或缺中间节点,直接往下取值\n nextParamsArr = nextParamsArr.slice(1);\n if (nextParamsArr?.length >= 1) {\n return dataNode.map((item:any) => {\n // 如果数组节点是对象,则继续递归取值\n if (item instanceof Object && nextParamsArr?.length >= 1) {\n return loopNodeByParamsPath(nextParamsArr, item, escape);\n }\n // 否则直接返回数组值\n return escape ? escapeString(item) : item;\n });\n }\n return dataNode;\n } if (nextParamsArr?.length >= 1) {\n return loopNodeByParamsPath(nextParamsArr, dataNode, escape);\n }\n return escape ? escapeString(dataNode) : dataNode;\n }\n }\n return '';\n};\n\n\nexport const getParamsContentByParamKeys = (paramNames: string, data: {[key:string]: any} = {}) => {\n if (!paramNames || !data || Object.keys(data)?.length <= 0) {\n return undefined;\n }\n const escapeRegex = /\\$\\{\\{([^}]+)\\}\\}/gi; // 匹配${{}}格式的参数,属于需转义内容\n const paramNameList = getDataArr(paramNames);\n return loopNodeByParamsPath(paramNameList, data, escapeRegex.test(paramNames));\n};\n\n// 获取替换循环体内的参数值\nexport const replaceLoopBodyParamsValue = (\n contentStr: string,\n options: {\n loopParams: { [key: string]: any } // 循环体参数\n loopSourceArr: string[], // 循环体数据源\n loopData: {[key: string]: any}[], // 循环数据源数据\n parameters?: {[key: string]: any}, // 全量参数\n staticCodeMap?: {[key: string]: any}, // 静态数据\n },\n) => {\n const {\n loopParams = {},\n loopSourceArr = [],\n loopData = [],\n parameters = {},\n } = options || {};\n let nowTemp = '';\n if (typeof contentStr === 'string' && contentStr && loopParams) {\n nowTemp = contentStr.replace(/\\$\\{(.+?)\\}/gi, (match) => {\n const paramsPath = getDataArr(match).filter((itemKey) => !loopSourceArr.includes(itemKey));\n let filedVal:any = '';\n // 如果当前节点是数组,且下一个节点是数字,则取下标对应的值\n const idxRegex = /^\\[.*\\]$|^\\d+$/;\n if (idxRegex.test(paramsPath?.[0])) {\n const idxNum = paramsPath?.[0].replace(/\\[|\\]/g, '');\n if (loopData?.[Number(idxNum)] instanceof Object) {\n filedVal = loopNodeByParamsPath(paramsPath.slice(1), loopData?.[Number(idxNum)]);\n } else {\n filedVal = loopData?.[Number(idxNum)] || '';\n }\n } else {\n filedVal = loopNodeByParamsPath(paramsPath.slice(1), loopParams);\n\n // 循环体内查找不到,则从参数中取值,但忽略循环体本身\n if (!filedVal && parameters) {\n const _parameters = cloneDeep(parameters);\n if (Array.isArray(loopSourceArr) && loopSourceArr.length > 0) {\n loopSourceArr.forEach((sourceKey:string) => {\n delete _parameters[sourceKey];\n });\n }\n const paramNameList = getDataArr(match);\n filedVal = loopNodeByParamsPath(paramNameList, _parameters);\n }\n }\n return filedVal || '';\n });\n }\n return nowTemp;\n};\n\nexport const replaceParamsValue = (\n contentStr: string,\n pararms: { [key: string]: any } = {},\n isObject2String: boolean = false,\n) => {\n let nowContent:string = '';\n if (typeof contentStr === 'string' && contentStr && pararms) {\n nowContent = contentStr.replace(/\\$\\{\\{?[^{}]+}?\\}/g, (match) => {\n const filedVal = getParamsContentByParamKeys(match, pararms);\n if (isObject2String && typeof filedVal === 'object') {\n return JSON.stringify(filedVal);\n }\n return filedVal || '';\n });\n }\n return nowContent;\n};\n\n\n/** ======下面几个方法主要提供给事件参数使用 勿共用 ===== */\nconst splitStringWithTemplateLiteral = (input: string) => {\n // 正则表达式:匹配 ${...} 模式\n const templateRegex = /\\$\\{[^}]*\\}/;\n\n // 检查字符串是否包含 ${...}\n if (!templateRegex.test(input)) {\n return [input]; // 返回原始字符串\n }\n\n // 匹配所有 ${...} 模式\n const matches = input.match(templateRegex);\n\n if (!matches || matches.length === 0) {\n return [input]; // 返回原始字符串\n }\n\n // 分割字符串,同时保留 ${...} 模式\n const result = input.split(templateRegex).filter(Boolean); // 去掉空字符串\n\n // 将匹配到的 ${...} 模式重新插入到结果数组中\n matches.forEach((match, index) => {\n result.splice(index * 2 + 1, 0, match); // 插入到对应位置\n });\n\n return result;\n};\n\nconst getParamsContentByParamKeysForEvent = (\n paramNames: string,\n data: { [key: string]: any } = {},\n) => {\n let paramNameList: string[] = [];\n const regex = /\\$\\{(.+?)\\}/gi; // 变量正则表达式,${xxx}\n if (paramNames && typeof paramNames === 'string') {\n const matchs = regex.exec(paramNames);\n if (matchs?.[1]) {\n paramNameList = matchs?.[1]?.split('.');\n }\n }\n\n // 如果替换不成功,需要返回字符串原始的值\n return paramNameList.length > 0\n ? loopNodeByParamsPath(paramNameList, data) || ''\n : paramNames;\n};\n\n\n/**\n * 提供给事件参数转换那边的方法\n * 和replaceParamsValue 区别,\n * 1、不能去掉pageParams那一层\n * 2、字符串拼对象,需要把对象做JSON.stringify转换\n * 3、如果替换不成功,需要返回字符串原始的值\n * @param contentStr \"你好\" ,\"你$好, ${pageParams.userName}\" , \"${pageData}, ${pageParams.userList[0]}\"\n * @param data 数据\n */\nexport const replaceParamsValueForEvent = (\n contentStr: string,\n data: { [key: string]: any } = {},\n) => {\n if (!contentStr || !data || Object.keys(data)?.length <= 0) {\n return undefined;\n }\n\n const valueArr = splitStringWithTemplateLiteral(contentStr);\n // 单个字符串, 没有拼接\n if (valueArr.length === 1) {\n return getParamsContentByParamKeysForEvent(valueArr[0], data);\n }\n\n\n let nowTemp = '';\n if (typeof contentStr === 'string' && contentStr && data) {\n nowTemp = contentStr.replace(/\\$\\{(.+?)\\}/g, (match) => {\n const filedVal = getParamsContentByParamKeysForEvent(match, data);\n if (typeof filedVal === 'string') {\n return filedVal;\n }\n // 字符串拼对象,需要把对象做JSON.stringify转换\n try {\n return JSON.stringify(filedVal);\n } catch {\n return '';\n }\n });\n }\n return nowTemp;\n};\n\n/** ======上面几个方法主要提供给事件参数使用 勿共用 ===== */\n"],"mappings":"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"}
1
+ {"version":3,"names":["get","cloneDeep","escapeString","getParamsArr","content","matchArr","_matchs","escapeRegex","regex","matchs","exec","split","_matchs2","getDataArr","filter","item","idx","includes","loopNodeByParamsPath","paramsArr","data","escape","arguments","length","undefined","Array","isArray","_iterator","_createForOfIteratorHelper","_step","_loop","_nextParamsArr5","keyword","value","dataNode","nextParamsArr","slice","_nextParamsArr","_nextParamsArr3","idxRegex","test","_nextParamsArr2","idxNum","replace","Number","Object","v","map","_nextParamsArr4","_ret","s","n","done","err","e","f","getParamsContentByParamKeys","paramNames","_Object$keys","keys","paramNameList","replaceLoopBodyParamsValue","contentStr","options","_ref","_ref$loopIndex","loopIndex","_ref$loopParams","loopParams","_ref$loopSourceArr","loopSourceArr","_ref$loopData","loopData","_ref$parameters","parameters","nowTemp","match","String","paramsPath","itemKey","filedVal","isNaN","isInteger","remainingPath","_parameters","forEach","sourceKey","globalVal","replaceParamsValue","pararms","isObject2String","nowContent","_typeof","JSON","stringify","splitStringWithTemplateLiteral","input","templateRegex","matches","result","Boolean","index","splice","getParamsContentByParamKeysForEvent","_matchs$","pageParams","replaceParamsValueForEvent","_Object$keys2","valueArr","_unused"],"sources":["../../src/treeUtils.ts"],"sourcesContent":["import { get, cloneDeep } from 'lodash';\nimport escapeString from './markdownEscape';\n\n/** 把${xxx.xxx.xxx} 转换为 [xxx,xxx,xxx] */\nexport const getParamsArr = (content: string) => {\n let matchArr:string[] = [];\n if (content && typeof content === 'string') {\n const escapeRegex = /\\$\\{\\{([^}]+)\\}\\}/gi; // 变量正则表达式,${{xxx}}\n const regex = /\\$\\{(.+?)\\}/gi; // 变量正则表达式,${xxx}\n let matchs = escapeRegex.exec(content);\n if (matchs?.[1]) {\n matchArr = matchs[1].split('.');\n } else {\n matchs = regex.exec(content);\n if (matchs?.[1]) {\n matchArr = matchs[1].split('.');\n }\n }\n return matchArr;\n }\n return matchArr;\n};\n\n/** 把${xxx.xxx.xxx} 转换为 [xxx,xxx,xxx],并过滤掉第一个root,pageParams */\nexport const getDataArr = (content: string) => {\n const matchArr:string[] = getParamsArr(content);\n return matchArr?.filter((item, idx) => !(idx === 0 && ['root', 'pageParams'].includes(item)) && !(idx === 1 && ['pageParams'].includes(item))); // 过滤掉第一个root,pageParams\n};\n\n/** 根据参数路径,逐级获取数据 */\nconst loopNodeByParamsPath:any = (\n paramsArr:string[],\n data: {[key:string]: any},\n escape:boolean = false\n) => {\n if (Array.isArray(paramsArr) && paramsArr.length > 0) {\n for (const keyword of paramsArr) {\n const dataNode = get(data, keyword);\n let nextParamsArr = paramsArr.slice(1); // 取下一个节点字段\n if (Array.isArray(dataNode)) {\n // 如果当前节点是数组,且下一个节点是数字,则取下标对应的值\n const idxRegex = /^\\[.*\\]$|^\\d+$/;\n if (idxRegex.test(nextParamsArr?.[0])) {\n const idxNum = nextParamsArr?.[0].replace(/\\[|\\]/g, '');\n if (dataNode?.[Number(idxNum)] instanceof Object) {\n return loopNodeByParamsPath(nextParamsArr.slice(1), dataNode?.[Number(idxNum)], escape);\n }\n return escape ? escapeString(dataNode?.[Number(idxNum)]) : dataNode?.[Number(idxNum)];\n }\n // 否则或缺中间节点,直接往下取值\n nextParamsArr = nextParamsArr.slice(1);\n if (nextParamsArr?.length >= 1) {\n return dataNode.map((item:any) => {\n // 如果数组节点是对象,则继续递归取值\n if (item instanceof Object && nextParamsArr?.length >= 1) {\n return loopNodeByParamsPath(nextParamsArr, item, escape);\n }\n // 否则直接返回数组值\n return escape ? escapeString(item) : item;\n });\n }\n return dataNode;\n } if (nextParamsArr?.length >= 1) {\n return loopNodeByParamsPath(nextParamsArr, dataNode, escape);\n }\n return escape ? escapeString(dataNode) : dataNode;\n }\n }\n return '';\n};\n\n\nexport const getParamsContentByParamKeys = (paramNames: string, data: {[key:string]: any} = {}) => {\n if (!paramNames || !data || Object.keys(data)?.length <= 0) {\n return undefined;\n }\n const escapeRegex = /\\$\\{\\{([^}]+)\\}\\}/gi; // 匹配${{}}格式的参数,属于需转义内容\n const paramNameList = getDataArr(paramNames);\n return loopNodeByParamsPath(paramNameList, data, escapeRegex.test(paramNames));\n};\n\n/**\n * 替换循环体内的参数值\n * 用于在循环体模板中替换 ${...} 格式的参数占位符为实际值\n *\n * @param contentStr - 包含参数占位符的字符串模板,例如: \"${item.name} - ${item.price}\"\n * @param options - 配置选项\n * @param options.loopParams - 循环体参数对象,包含当前循环项的字段值\n * @param options.loopSourceArr - 循环体数据源的键名数组,用于标识哪些参数属于循环体本身\n * @param options.loopData - 循环数据源的完整数据数组\n * @param options.parameters - 全量参数对象(可选),当循环体内找不到值时,会从这里查找\n * @param options.staticCodeMap - 静态数据映射(可选),当前未使用\n * @returns 替换后的字符串\n *\n * @example\n * // 示例:替换循环体内的参数\n * const result = replaceLoopBodyParamsValue(\n * \"${item.name} - ${item.price}\",\n * {\n * loopParams: { name: \"商品A\", price: 100 },\n * loopSourceArr: [\"item\"],\n * loopData: [{ name: \"商品A\", price: 100 }],\n * parameters: { globalVar: \"全局变量\" }\n * }\n * );\n * // 返回: \"商品A - 100\"\n */\nexport const replaceLoopBodyParamsValue = (\n contentStr: string,\n options: {\n loopIndex: number, // 循环索引\n loopParams: any // 循环体参数\n loopSourceArr: string[], // 循环体数据源\n loopData: {[key: string]: any}[], // 循环数据源数据\n parameters?: {[key: string]: any}, // 全量参数\n staticCodeMap?: {[key: string]: any}, // 静态数据\n },\n) => {\n const {\n loopIndex = 0,\n loopParams = {},\n loopSourceArr = [],\n loopData = [],\n parameters = {},\n } = options || {};\n let nowTemp = '';\n \n // 只有当输入是有效字符串且存在循环体参数时才进行处理\n if (typeof contentStr === 'string' && contentStr && loopParams) {\n // 使用正则表达式匹配所有 ${...} 格式的参数占位符\n nowTemp = contentStr.replace(/\\$\\{(.+?)\\}/gi, (match) => {\n // eslint-disable-next-line no-template-curly-in-string\n if (match === '${rowIndex}') {\n return String(loopIndex);\n }\n // 解析参数路径,并过滤掉循环源数组中的键(避免循环引用)\n const paramsPath = getDataArr(match).filter((itemKey) => !loopSourceArr.includes(itemKey));\n let filedVal:any = '';\n \n // 判断第一个参数是否为数组索引(如 [0] 或 0)\n // 如果当前节点是数组,且下一个节点是数字,则取下标对应的值\n const idxRegex = /^\\[.*\\]$|^\\d+$/;\n if (idxRegex.test(paramsPath?.[0])) {\n // 从数组索引中提取数字\n const idxNum = paramsPath?.[0].replace(/\\[|\\]/g, '');\n const idx = Number(idxNum);\n // 验证索引是否为有效数字(非 NaN 且非负数)\n if (!isNaN(idx) && idx >= 0 && Number.isInteger(idx)) {\n // 如果对应索引的数据是对象,则继续递归查找子属性\n if (loopData?.[idx] instanceof Object) {\n filedVal = loopNodeByParamsPath(paramsPath.slice(1), loopData[idx]);\n } else {\n // 否则直接返回该索引的值(可能为 undefined,会被后续逻辑处理)\n filedVal = loopData?.[idx];\n }\n } else {\n // 无效索引(如 [abc] 或负数),返回空字符串\n filedVal = '';\n }\n } else {\n // 非数组索引情况,从循环体参数中查找值\n // 兼容 loopParams 是非对象类型的情况(如字符串、数字、布尔值等)\n const remainingPath = paramsPath.slice(1);\n if (loopParams instanceof Object && !Array.isArray(loopParams)) {\n // loopParams 是对象类型,使用原有逻辑\n filedVal = loopNodeByParamsPath(remainingPath, loopParams);\n } else if (remainingPath.length === 0) {\n // loopParams 是非对象类型,且没有子路径,直接返回 loopParams 的值\n filedVal = loopParams;\n } else {\n // loopParams 是非对象类型,但有子路径,无法访问属性,返回空字符串\n // 后续会尝试从全局参数中查找\n filedVal = '';\n }\n\n // 如果循环体内查找不到值,则从全量参数中查找,但需要排除循环体本身的数据源\n // 这样可以避免循环引用,同时允许访问循环体外的全局参数\n // 注意:!filedVal 会将 0、false、'' 等假值也视为未找到,这是当前的设计逻辑\n if (!filedVal && parameters) {\n const _parameters = cloneDeep(parameters);\n // 从全量参数中删除循环体数据源,避免循环引用\n if (Array.isArray(loopSourceArr) && loopSourceArr.length > 0) {\n loopSourceArr.forEach((sourceKey:string) => {\n delete _parameters[sourceKey];\n });\n }\n // 使用完整的参数路径(不过滤循环源)从全量参数中查找\n const paramNameList = getDataArr(match);\n const globalVal = loopNodeByParamsPath(paramNameList, _parameters);\n // 如果从全量参数中找到的值是数组,则返回空字符串,避免返回整个数组\n // 只返回对象的值,不返回数组数据\n if (Array.isArray(globalVal)) {\n filedVal = '';\n } else {\n filedVal = globalVal;\n }\n }\n }\n // 返回找到的值,如果找不到则返回空字符串\n // 修复:当值为 0 时,应该正常返回 '0',而不是空字符串\n if (filedVal === null || filedVal === undefined) {\n return '';\n }\n return String(filedVal);\n });\n }\n return nowTemp;\n};\n\nexport const replaceParamsValue = (\n contentStr: string,\n pararms: { [key: string]: any } = {},\n isObject2String: boolean = false,\n) => {\n let nowContent:string = '';\n if (typeof contentStr === 'string' && contentStr && pararms) {\n nowContent = contentStr.replace(/\\$\\{\\{?[^{}]+}?\\}/g, (match) => {\n const filedVal = getParamsContentByParamKeys(match, pararms);\n if (isObject2String && typeof filedVal === 'object') {\n return JSON.stringify(filedVal);\n }\n // 修复:当值为 0 时,应该正常返回 '0',而不是空字符串\n if (filedVal === null || filedVal === undefined) {\n return '';\n }\n return String(filedVal);\n });\n }\n return nowContent;\n};\n\n\n/** ======下面几个方法主要提供给事件参数使用 勿共用 ===== */\nconst splitStringWithTemplateLiteral = (input: string) => {\n // 正则表达式:匹配 ${...} 模式\n const templateRegex = /\\$\\{[^}]*\\}/;\n\n // 检查字符串是否包含 ${...}\n if (!templateRegex.test(input)) {\n return [input]; // 返回原始字符串\n }\n\n // 匹配所有 ${...} 模式\n const matches = input.match(templateRegex);\n\n if (!matches || matches.length === 0) {\n return [input]; // 返回原始字符串\n }\n\n // 分割字符串,同时保留 ${...} 模式\n const result = input.split(templateRegex).filter(Boolean); // 去掉空字符串\n\n // 将匹配到的 ${...} 模式重新插入到结果数组中\n matches.forEach((match, index) => {\n result.splice(index * 2 + 1, 0, match); // 插入到对应位置\n });\n\n return result;\n};\n\nconst getParamsContentByParamKeysForEvent = (\n paramNames: string,\n data: { [key: string]: any } = {},\n) => {\n let paramNameList: string[] = [];\n const regex = /\\$\\{(.+?)\\}/gi; // 变量正则表达式,${xxx}\n if (paramNames && typeof paramNames === 'string') {\n const matchs = regex.exec(paramNames);\n if (matchs?.[1]) {\n paramNameList = matchs?.[1]?.split('.');\n }\n }\n\n if (paramNameList.length === 0) {\n return paramNames;\n }\n\n // 如果参数路径中没有 pageParams,先尝试在 data.pageParams 中查找\n // 因为根据注释,这个方法不能去掉 pageParams 那一层\n if (paramNameList[0] !== 'pageParams' && data?.pageParams) {\n const result = loopNodeByParamsPath(paramNameList, data.pageParams);\n if (result !== '' && result !== undefined) {\n return result;\n }\n }\n\n // 如果替换不成功,需要返回字符串原始的值\n const result = loopNodeByParamsPath(paramNameList, data);\n return result !== '' && result !== undefined ? result : paramNames;\n};\n\n\n/**\n * 提供给事件参数转换那边的方法\n * 和replaceParamsValue 区别,\n * 1、不能去掉pageParams那一层\n * 2、字符串拼对象,需要把对象做JSON.stringify转换\n * 3、如果替换不成功,需要返回字符串原始的值\n * @param contentStr \"你好\" ,\"你$好, ${pageParams.userName}\" , \"${pageData}, ${pageParams.userList[0]}\"\n * @param data 数据\n */\nexport const replaceParamsValueForEvent = (\n contentStr: string,\n data: { [key: string]: any } = {},\n) => {\n if (!contentStr || !data || Object.keys(data)?.length <= 0) {\n return undefined;\n }\n const valueArr = splitStringWithTemplateLiteral(contentStr);\n // 单个字符串, 没有拼接\n if (valueArr.length === 1) {\n return getParamsContentByParamKeysForEvent(valueArr[0], data);\n }\n\n\n let nowTemp = '';\n if (typeof contentStr === 'string' && contentStr && data) {\n nowTemp = contentStr.replace(/\\$\\{(.+?)\\}/g, (match) => {\n const filedVal = getParamsContentByParamKeysForEvent(match, data);\n if (typeof filedVal === 'string') {\n return filedVal;\n }\n // 字符串拼对象,需要把对象做JSON.stringify转换\n try {\n return JSON.stringify(filedVal);\n } catch {\n return '';\n }\n });\n }\n return nowTemp;\n};\n\n/** ======上面几个方法主要提供给事件参数使用 勿共用 ===== */\n"],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * 水印工具函数
3
+ */
4
+ import type { CSSProperties } from 'react';
5
+ export interface WatermarkStyles {
6
+ color: string;
7
+ opacity: number;
8
+ fontSize: number;
9
+ angle: number;
10
+ }
11
+ export interface WatermarkLayout {
12
+ density: string;
13
+ horizontalSpacing: number;
14
+ verticalSpacing: number;
15
+ arrangement: string;
16
+ }
17
+ /**
18
+ * 水印行配置
19
+ */
20
+ export interface WatermarkRow {
21
+ enabled: boolean;
22
+ variable?: string;
23
+ text?: string;
24
+ }
25
+ export interface WatermarkConfig {
26
+ content: string;
27
+ styles: WatermarkStyles;
28
+ layout: WatermarkLayout;
29
+ rows?: WatermarkRow[];
30
+ }
31
+ /**
32
+ * 上下文变量类型
33
+ */
34
+ export interface ContextVariable {
35
+ code: string;
36
+ name: string;
37
+ }
38
+ /**
39
+ * 会话信息类型
40
+ */
41
+ export interface SessionInfo {
42
+ userId?: string;
43
+ userName?: string;
44
+ realName?: string;
45
+ }
46
+ /**
47
+ * XML 转义
48
+ */
49
+ export declare function escapeXml(str: string): string;
50
+ /**
51
+ * 根据 key 获取变量的真实值
52
+ * @param key 变量 key,支持格式:${system.now}、${system.today}、${system.ip}、${session.userId}、${session.userName}、${session.realName}、${contextParams.xxx}
53
+ */
54
+ export declare function getVariableRealValue(key: string): string;
55
+ /**
56
+ * 生成水印样式对象
57
+ * @param styles 样式配置
58
+ */
59
+ export declare function generateWatermarkStyle(styles: WatermarkStyles): CSSProperties;
60
+ /**
61
+ * 异步获取客户端 IP(通过第三方 API)
62
+ * @returns Promise<string> 返回客户端 IP 地址
63
+ */
64
+ export declare function fetchClientIp(): Promise<string>;
65
+ /**
66
+ * 获取客户端 IP(同步方法,从缓存读取)
67
+ * @returns string 返回客户端 IP 地址,如果缓存中没有则返回默认值 '127.0.0.1'
68
+ */
69
+ export declare function getClientIp(): string;
70
+ /**
71
+ * 解析 content 中的所有变量并替换为真实值
72
+ * @param content 原始内容,可能包含变量如 ${system.now}、${session.userId}、${contextParams.userName} 等
73
+ */
74
+ export declare function parseContentVariables(content: string): string;
75
+ /**
76
+ * 生成水印的 base64 数据 URL
77
+ * 当前环境localStore中存有数据 :key=userStores value={"state":{"userInfo":{"token":"16fe343c-78ae-4fd8-93eb-410256dd483b","userId":"1","userName":"admin","phoneNo":"13800138002","email":"admin@localhost.com","realName":"admin2","defaultTenantId":"0","avatar":"./images/avatar/img-user-avatar-10.png","userIcon":"./images/avatar/img-user-avatar-10.png"},"currentTenantId":"1273556018761138176","userSelectedBotOrder":["1211941633166168064","1212229286675095552"],"activeSession":null},"version":0}
78
+ * config参考: {"enabled":true,"content":"测试水印 ${session.userId}","styles":{"color":"#999999","opacity":20,"fontSize":16,"angle":-15},"layout":{"density":"medium","horizontalSpacing":100,"verticalSpacing":100,"arrangement":"tile"}}
79
+ */
80
+ export declare function generateWatermarkBase64(config: WatermarkConfig): string;