@boteteam/utils 0.0.21 → 0.0.22
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/README.md +23 -23
- package/dist/cjs/CookieUtils.js.map +1 -1
- package/dist/cjs/asyncStorage.js.map +1 -1
- package/dist/cjs/environment.d.ts +1 -0
- package/dist/cjs/environment.js +6 -0
- package/dist/cjs/environment.js.map +2 -2
- package/dist/cjs/file.js +1 -1
- package/dist/cjs/file.js.map +2 -2
- package/dist/cjs/fileToBase64.js.map +1 -1
- package/dist/cjs/formatModule/formatModuleData.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formRulsRegMap.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatCarouselProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatChartsProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatDescriptionsProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatEchartCommonProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatEchartLineProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatEchartPieProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatFormProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatHighCodeProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatImageProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatListProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatLoopProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatStepsProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatStyleProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/formatTableProps.js.map +1 -1
- package/dist/cjs/formatModule/helpers/index.js.map +1 -1
- package/dist/cjs/formatModule/helpers/patternTransitionRegExp.js.map +1 -1
- package/dist/cjs/formatModule/helpers/staticCodeAssemble.js.map +1 -1
- package/dist/cjs/formatModule/helpers/stringPramarsValTransition.js.map +1 -1
- package/dist/cjs/formatModule/helpers/stringScriptExecution.js.map +1 -1
- package/dist/cjs/formatModule/helpers/urlPrefix.js.map +1 -1
- package/dist/cjs/http.d.ts +9 -2
- package/dist/cjs/http.js +34 -6
- package/dist/cjs/http.js.map +2 -2
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/loopPageStaticCodeMap.js.map +1 -1
- package/dist/cjs/markdownEscape.js.map +1 -1
- package/dist/cjs/pathArgsUtils.js.map +1 -1
- package/dist/cjs/scriptExecution.js.map +1 -1
- package/dist/cjs/securityUtils.js.map +1 -1
- package/dist/cjs/stringUtils.js.map +1 -1
- package/dist/cjs/treeUtils.js.map +1 -1
- package/dist/esm/CookieUtils.js.map +1 -1
- package/dist/esm/asyncStorage.js +4 -4
- package/dist/esm/asyncStorage.js.map +1 -1
- package/dist/esm/environment.d.ts +1 -0
- package/dist/esm/environment.js +10 -3
- package/dist/esm/environment.js.map +1 -1
- package/dist/esm/file.js +25 -25
- package/dist/esm/file.js.map +1 -1
- package/dist/esm/fileToBase64.js +4 -4
- package/dist/esm/fileToBase64.js.map +1 -1
- package/dist/esm/formatModule/formatModuleData.js.map +1 -1
- package/dist/esm/formatModule/helpers/formRulsRegMap.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatCarouselProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatChartsProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatDescriptionsProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatEchartCommonProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatEchartLineProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatEchartPieProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatFormProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatHighCodeProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatImageProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatListProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatLoopProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatStepsProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatStyleProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/formatTableProps.js.map +1 -1
- package/dist/esm/formatModule/helpers/index.js.map +1 -1
- package/dist/esm/formatModule/helpers/patternTransitionRegExp.js.map +1 -1
- package/dist/esm/formatModule/helpers/staticCodeAssemble.js +4 -4
- package/dist/esm/formatModule/helpers/staticCodeAssemble.js.map +1 -1
- package/dist/esm/formatModule/helpers/stringPramarsValTransition.js.map +1 -1
- package/dist/esm/formatModule/helpers/stringScriptExecution.js.map +1 -1
- package/dist/esm/formatModule/helpers/urlPrefix.js.map +1 -1
- package/dist/esm/http.d.ts +9 -2
- package/dist/esm/http.js +88 -57
- package/dist/esm/http.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loopPageStaticCodeMap.js.map +1 -1
- package/dist/esm/markdownEscape.js.map +1 -1
- package/dist/esm/pathArgsUtils.js +8 -8
- package/dist/esm/pathArgsUtils.js.map +1 -1
- package/dist/esm/scriptExecution.js.map +1 -1
- package/dist/esm/securityUtils.js +19 -19
- package/dist/esm/securityUtils.js.map +1 -1
- package/dist/esm/stringUtils.js.map +1 -1
- package/dist/esm/treeUtils.js +8 -8
- package/dist/esm/treeUtils.js.map +1 -1
- package/dist/umd/index.min.js +1 -1
- package/dist/umd/index.min.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 安全工具函数,用于防止XSS等安全漏洞
|
|
1
|
+
/**
|
|
2
|
+
* 安全工具函数,用于防止XSS等安全漏洞
|
|
3
3
|
*/
|
|
4
4
|
import { getLocation, isReactNative } from "./environment";
|
|
5
5
|
|
|
6
|
-
/**
|
|
7
|
-
* 验证URL是否安全,防止XSS攻击
|
|
8
|
-
* @param url 待验证的URL
|
|
9
|
-
* @returns 是否为安全的URL
|
|
6
|
+
/**
|
|
7
|
+
* 验证URL是否安全,防止XSS攻击
|
|
8
|
+
* @param url 待验证的URL
|
|
9
|
+
* @returns 是否为安全的URL
|
|
10
10
|
*/
|
|
11
11
|
export var isValidUrl = function isValidUrl(url) {
|
|
12
12
|
if (!url || typeof url !== 'string') {
|
|
@@ -38,11 +38,11 @@ export var isValidUrl = function isValidUrl(url) {
|
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
40
|
|
|
41
|
-
/**
|
|
42
|
-
* 清理和验证重定向URL,确保安全
|
|
43
|
-
* @param url 待清理的URL
|
|
44
|
-
* @param allowedDomains 允许的域名列表,为空时允许同源URL
|
|
45
|
-
* @returns 清理后的安全URL,如果不安全则返回默认URL
|
|
41
|
+
/**
|
|
42
|
+
* 清理和验证重定向URL,确保安全
|
|
43
|
+
* @param url 待清理的URL
|
|
44
|
+
* @param allowedDomains 允许的域名列表,为空时允许同源URL
|
|
45
|
+
* @returns 清理后的安全URL,如果不安全则返回默认URL
|
|
46
46
|
*/
|
|
47
47
|
export var sanitizeRedirectUrl = function sanitizeRedirectUrl(url) {
|
|
48
48
|
var allowedDomains = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
@@ -92,10 +92,10 @@ export var sanitizeRedirectUrl = function sanitizeRedirectUrl(url) {
|
|
|
92
92
|
}
|
|
93
93
|
};
|
|
94
94
|
|
|
95
|
-
/**
|
|
96
|
-
* 安全地设置window.location.href,防止XSS攻击
|
|
97
|
-
* @param url 目标URL
|
|
98
|
-
* @param allowedDomains 允许的域名列表
|
|
95
|
+
/**
|
|
96
|
+
* 安全地设置window.location.href,防止XSS攻击
|
|
97
|
+
* @param url 目标URL
|
|
98
|
+
* @param allowedDomains 允许的域名列表
|
|
99
99
|
*/
|
|
100
100
|
export var safeRedirect = function safeRedirect(url) {
|
|
101
101
|
var allowedDomains = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
@@ -111,10 +111,10 @@ export var safeRedirect = function safeRedirect(url) {
|
|
|
111
111
|
}
|
|
112
112
|
};
|
|
113
113
|
|
|
114
|
-
/**
|
|
115
|
-
* 验证和清理事件处理器,防止恶意代码注入
|
|
116
|
-
* @param handler 事件处理函数
|
|
117
|
-
* @returns 安全的事件处理函数
|
|
114
|
+
/**
|
|
115
|
+
* 验证和清理事件处理器,防止恶意代码注入
|
|
116
|
+
* @param handler 事件处理函数
|
|
117
|
+
* @returns 安全的事件处理函数
|
|
118
118
|
*/
|
|
119
119
|
export var sanitizeEventHandler = function sanitizeEventHandler(handler) {
|
|
120
120
|
if (typeof handler !== 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getLocation","isReactNative","isValidUrl","url","baseUrl","location","origin","urlObj","URL","includes","protocol","dangerousPatterns","some","pattern","test","_unused","sanitizeRedirectUrl","allowedDomains","arguments","length","undefined","defaultUrl","currentHost","hostname","isAllowedDomain","domain","endsWith","concat","pathname","search","_unused2","safeRedirect","safeUrl","console","warn","win","window","href","sanitizeEventHandler","handler","apply","error"],"sources":["../../src/securityUtils.ts"],"sourcesContent":["/**\n * 安全工具函数,用于防止XSS等安全漏洞\n */\nimport { getLocation, isReactNative } from './environment';\n\n/**\n * 验证URL是否安全,防止XSS攻击\n * @param url 待验证的URL\n * @returns 是否为安全的URL\n */\nexport const isValidUrl = (url: string): boolean => {\n if (!url || typeof url !== 'string') {\n return false;\n }\n\n try {\n let baseUrl: string;\n if (isReactNative()) {\n // React Native 环境中使用默认的 base URL\n baseUrl = 'http://localhost';\n } else {\n const location = getLocation();\n baseUrl = location ? location.origin : 'http://localhost';\n }\n \n const urlObj = new URL(url, baseUrl);\n \n // 只允许http和https协议,防止javascript:等危险协议\n if (!['http:', 'https:'].includes(urlObj.protocol)) {\n return false;\n }\n\n // 检查是否包含危险字符\n const dangerousPatterns = [\n /javascript:/i,\n /vbscript:/i,\n /data:/i,\n /file:/i,\n /<script/i,\n /onload=/i,\n /onerror=/i,\n /onclick=/i,\n ];\n\n return !dangerousPatterns.some(pattern => pattern.test(url));\n } catch {\n return false;\n }\n};\n\n/**\n * 清理和验证重定向URL,确保安全\n * @param url 待清理的URL\n * @param allowedDomains 允许的域名列表,为空时允许同源URL\n * @returns 清理后的安全URL,如果不安全则返回默认URL\n */\nexport const sanitizeRedirectUrl = (\n url: string,\n allowedDomains: string[] = [],\n defaultUrl: string = '/'\n): string => {\n if (!url || typeof url !== 'string') {\n return defaultUrl;\n }\n\n // 基本URL验证\n if (!isValidUrl(url)) {\n return defaultUrl;\n }\n\n try {\n let baseUrl: string;\n let currentHost: string;\n \n if (isReactNative()) {\n // React Native 环境中使用默认值\n baseUrl = 'http://localhost';\n currentHost = 'localhost';\n } else {\n const location = getLocation();\n if (!location) {\n return defaultUrl;\n }\n baseUrl = location.origin;\n currentHost = location.hostname;\n }\n\n const urlObj = new URL(url, baseUrl);\n\n // 如果没有指定允许的域名,只允许同源URL\n if (allowedDomains.length === 0) {\n if (urlObj.hostname !== currentHost) {\n return defaultUrl;\n }\n } else {\n // 检查是否在允许的域名列表中\n const isAllowedDomain = allowedDomains.some(domain =>\n urlObj.hostname === domain || urlObj.hostname.endsWith(`.${domain}`)\n );\n \n if (!isAllowedDomain && urlObj.hostname !== currentHost) {\n return defaultUrl;\n }\n }\n\n return urlObj.pathname + urlObj.search;\n } catch {\n return defaultUrl;\n }\n};\n\n/**\n * 安全地设置window.location.href,防止XSS攻击\n * @param url 目标URL\n * @param allowedDomains 允许的域名列表\n */\nexport const safeRedirect = (url: string, allowedDomains: string[] = []): void => {\n const safeUrl = sanitizeRedirectUrl(url, allowedDomains);\n \n if (isReactNative()) {\n // React Native 环境中无法直接跳转,可以通过其他方式处理\n console.warn('safeRedirect is not supported in React Native environment');\n return;\n }\n \n const win = typeof window !== 'undefined' ? window : null;\n if (win) {\n win.location.href = safeUrl;\n }\n};\n\n/**\n * 验证和清理事件处理器,防止恶意代码注入\n * @param handler 事件处理函数\n * @returns 安全的事件处理函数\n */\nexport const sanitizeEventHandler = (handler: Function): Function => {\n if (typeof handler !== 'function') {\n return () => {};\n }\n \n return (...args: any[]) => {\n try {\n handler(...args);\n } catch (error) {\n console.error('Event handler error:', error);\n }\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["getLocation","isReactNative","isValidUrl","url","baseUrl","location","origin","urlObj","URL","includes","protocol","dangerousPatterns","some","pattern","test","_unused","sanitizeRedirectUrl","allowedDomains","arguments","length","undefined","defaultUrl","currentHost","hostname","isAllowedDomain","domain","endsWith","concat","pathname","search","_unused2","safeRedirect","safeUrl","console","warn","win","window","href","sanitizeEventHandler","handler","apply","error"],"sources":["../../src/securityUtils.ts"],"sourcesContent":["/**\r\n * 安全工具函数,用于防止XSS等安全漏洞\r\n */\r\nimport { getLocation, isReactNative } from './environment';\r\n\r\n/**\r\n * 验证URL是否安全,防止XSS攻击\r\n * @param url 待验证的URL\r\n * @returns 是否为安全的URL\r\n */\r\nexport const isValidUrl = (url: string): boolean => {\r\n if (!url || typeof url !== 'string') {\r\n return false;\r\n }\r\n\r\n try {\r\n let baseUrl: string;\r\n if (isReactNative()) {\r\n // React Native 环境中使用默认的 base URL\r\n baseUrl = 'http://localhost';\r\n } else {\r\n const location = getLocation();\r\n baseUrl = location ? location.origin : 'http://localhost';\r\n }\r\n \r\n const urlObj = new URL(url, baseUrl);\r\n \r\n // 只允许http和https协议,防止javascript:等危险协议\r\n if (!['http:', 'https:'].includes(urlObj.protocol)) {\r\n return false;\r\n }\r\n\r\n // 检查是否包含危险字符\r\n const dangerousPatterns = [\r\n /javascript:/i,\r\n /vbscript:/i,\r\n /data:/i,\r\n /file:/i,\r\n /<script/i,\r\n /onload=/i,\r\n /onerror=/i,\r\n /onclick=/i,\r\n ];\r\n\r\n return !dangerousPatterns.some(pattern => pattern.test(url));\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 清理和验证重定向URL,确保安全\r\n * @param url 待清理的URL\r\n * @param allowedDomains 允许的域名列表,为空时允许同源URL\r\n * @returns 清理后的安全URL,如果不安全则返回默认URL\r\n */\r\nexport const sanitizeRedirectUrl = (\r\n url: string,\r\n allowedDomains: string[] = [],\r\n defaultUrl: string = '/'\r\n): string => {\r\n if (!url || typeof url !== 'string') {\r\n return defaultUrl;\r\n }\r\n\r\n // 基本URL验证\r\n if (!isValidUrl(url)) {\r\n return defaultUrl;\r\n }\r\n\r\n try {\r\n let baseUrl: string;\r\n let currentHost: string;\r\n \r\n if (isReactNative()) {\r\n // React Native 环境中使用默认值\r\n baseUrl = 'http://localhost';\r\n currentHost = 'localhost';\r\n } else {\r\n const location = getLocation();\r\n if (!location) {\r\n return defaultUrl;\r\n }\r\n baseUrl = location.origin;\r\n currentHost = location.hostname;\r\n }\r\n\r\n const urlObj = new URL(url, baseUrl);\r\n\r\n // 如果没有指定允许的域名,只允许同源URL\r\n if (allowedDomains.length === 0) {\r\n if (urlObj.hostname !== currentHost) {\r\n return defaultUrl;\r\n }\r\n } else {\r\n // 检查是否在允许的域名列表中\r\n const isAllowedDomain = allowedDomains.some(domain =>\r\n urlObj.hostname === domain || urlObj.hostname.endsWith(`.${domain}`)\r\n );\r\n \r\n if (!isAllowedDomain && urlObj.hostname !== currentHost) {\r\n return defaultUrl;\r\n }\r\n }\r\n\r\n return urlObj.pathname + urlObj.search;\r\n } catch {\r\n return defaultUrl;\r\n }\r\n};\r\n\r\n/**\r\n * 安全地设置window.location.href,防止XSS攻击\r\n * @param url 目标URL\r\n * @param allowedDomains 允许的域名列表\r\n */\r\nexport const safeRedirect = (url: string, allowedDomains: string[] = []): void => {\r\n const safeUrl = sanitizeRedirectUrl(url, allowedDomains);\r\n \r\n if (isReactNative()) {\r\n // React Native 环境中无法直接跳转,可以通过其他方式处理\r\n console.warn('safeRedirect is not supported in React Native environment');\r\n return;\r\n }\r\n \r\n const win = typeof window !== 'undefined' ? window : null;\r\n if (win) {\r\n win.location.href = safeUrl;\r\n }\r\n};\r\n\r\n/**\r\n * 验证和清理事件处理器,防止恶意代码注入\r\n * @param handler 事件处理函数\r\n * @returns 安全的事件处理函数\r\n */\r\nexport const sanitizeEventHandler = (handler: Function): Function => {\r\n if (typeof handler !== 'function') {\r\n return () => {};\r\n }\r\n \r\n return (...args: any[]) => {\r\n try {\r\n handler(...args);\r\n } catch (error) {\r\n console.error('Event handler error:', error);\r\n }\r\n };\r\n};\r\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,aAAa;;AAEnC;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,GAAW,EAAc;EAClD,IAAI,CAACA,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IACnC,OAAO,KAAK;EACd;EAEA,IAAI;IACF,IAAIC,OAAe;IACnB,IAAIH,aAAa,CAAC,CAAC,EAAE;MACnB;MACAG,OAAO,GAAG,kBAAkB;IAC9B,CAAC,MAAM;MACL,IAAMC,QAAQ,GAAGL,WAAW,CAAC,CAAC;MAC9BI,OAAO,GAAGC,QAAQ,GAAGA,QAAQ,CAACC,MAAM,GAAG,kBAAkB;IAC3D;IAEA,IAAMC,MAAM,GAAG,IAAIC,GAAG,CAACL,GAAG,EAAEC,OAAO,CAAC;;IAEpC;IACA,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAACK,QAAQ,CAACF,MAAM,CAACG,QAAQ,CAAC,EAAE;MAClD,OAAO,KAAK;IACd;;IAEA;IACA,IAAMC,iBAAiB,GAAG,CACxB,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,CACZ;IAED,OAAO,CAACA,iBAAiB,CAACC,IAAI,CAAC,UAAAC,OAAO;MAAA,OAAIA,OAAO,CAACC,IAAI,CAACX,GAAG,CAAC;IAAA,EAAC;EAC9D,CAAC,CAAC,OAAAY,OAAA,EAAM;IACN,OAAO,KAAK;EACd;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAC9Bb,GAAW,EAGA;EAAA,IAFXc,cAAwB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAAA,IAC7BG,UAAkB,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;EAExB,IAAI,CAACf,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IACnC,OAAOkB,UAAU;EACnB;;EAEA;EACA,IAAI,CAACnB,UAAU,CAACC,GAAG,CAAC,EAAE;IACpB,OAAOkB,UAAU;EACnB;EAEA,IAAI;IACF,IAAIjB,OAAe;IACnB,IAAIkB,WAAmB;IAEvB,IAAIrB,aAAa,CAAC,CAAC,EAAE;MACnB;MACAG,OAAO,GAAG,kBAAkB;MAC5BkB,WAAW,GAAG,WAAW;IAC3B,CAAC,MAAM;MACL,IAAMjB,QAAQ,GAAGL,WAAW,CAAC,CAAC;MAC9B,IAAI,CAACK,QAAQ,EAAE;QACb,OAAOgB,UAAU;MACnB;MACAjB,OAAO,GAAGC,QAAQ,CAACC,MAAM;MACzBgB,WAAW,GAAGjB,QAAQ,CAACkB,QAAQ;IACjC;IAEA,IAAMhB,MAAM,GAAG,IAAIC,GAAG,CAACL,GAAG,EAAEC,OAAO,CAAC;;IAEpC;IACA,IAAIa,cAAc,CAACE,MAAM,KAAK,CAAC,EAAE;MAC/B,IAAIZ,MAAM,CAACgB,QAAQ,KAAKD,WAAW,EAAE;QACnC,OAAOD,UAAU;MACnB;IACF,CAAC,MAAM;MACL;MACA,IAAMG,eAAe,GAAGP,cAAc,CAACL,IAAI,CAAC,UAAAa,MAAM;QAAA,OAChDlB,MAAM,CAACgB,QAAQ,KAAKE,MAAM,IAAIlB,MAAM,CAACgB,QAAQ,CAACG,QAAQ,KAAAC,MAAA,CAAKF,MAAM,CAAE,CAAC;MAAA,CACtE,CAAC;MAED,IAAI,CAACD,eAAe,IAAIjB,MAAM,CAACgB,QAAQ,KAAKD,WAAW,EAAE;QACvD,OAAOD,UAAU;MACnB;IACF;IAEA,OAAOd,MAAM,CAACqB,QAAQ,GAAGrB,MAAM,CAACsB,MAAM;EACxC,CAAC,CAAC,OAAAC,QAAA,EAAM;IACN,OAAOT,UAAU;EACnB;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMU,YAAY,GAAG,SAAfA,YAAYA,CAAI5B,GAAW,EAA0C;EAAA,IAAxCc,cAAwB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EACrE,IAAMc,OAAO,GAAGhB,mBAAmB,CAACb,GAAG,EAAEc,cAAc,CAAC;EAExD,IAAIhB,aAAa,CAAC,CAAC,EAAE;IACnB;IACAgC,OAAO,CAACC,IAAI,CAAC,2DAA2D,CAAC;IACzE;EACF;EAEA,IAAMC,GAAG,GAAG,OAAOC,MAAM,KAAK,WAAW,GAAGA,MAAM,GAAG,IAAI;EACzD,IAAID,GAAG,EAAE;IACPA,GAAG,CAAC9B,QAAQ,CAACgC,IAAI,GAAGL,OAAO;EAC7B;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMM,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,OAAiB,EAAe;EACnE,IAAI,OAAOA,OAAO,KAAK,UAAU,EAAE;IACjC,OAAO,YAAM,CAAC,CAAC;EACjB;EAEA,OAAO,YAAoB;IACzB,IAAI;MACFA,OAAO,CAAAC,KAAA,SAAAtB,SAAQ,CAAC;IAClB,CAAC,CAAC,OAAOuB,KAAK,EAAE;MACdR,OAAO,CAACQ,KAAK,CAAC,sBAAsB,EAAEA,KAAK,CAAC;IAC9C;EACF,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["camelToSnake","str","replace","match","concat","toLowerCase","underscoreToCamelCase","letter","toUpperCase","generateRandom18Int","Promise","resolve","reject","min","Math","pow","max","randomNum","floor","random","err"],"sources":["../../src/stringUtils.ts"],"sourcesContent":["// 将所有大写字母前加上下划线,并将大写字母转换为小写\nfunction camelToSnake(str:string) {\n return str.replace(/([A-Z])/g, (match) => `_${match.toLowerCase()}`);\n}\n\n// 下划线转驼峰\nfunction underscoreToCamelCase(str:string) {\n return str.replace(/_([a-z])/g, (match, letter) => letter.toUpperCase());\n}\n\nfunction generateRandom18Int() {\n return new Promise((resolve, reject) => {\n try {\n // 生成一个18位的随机整数\n // 10**17 到 10**18 - 1 的范围\n const min = 10 ** 17; // 18位数的最小值\n const max = (10 ** 18) - 1; // 18位数的最大值\n\n // 使用Math.floor(Math.random() * (max - min + 1)) + min 来生成随机数\n const randomNum = Math.floor(Math.random() * (max - min + 1)) + min;\n resolve(randomNum);\n return randomNum;\n } catch (err) {\n reject(err);\n return 0;\n }\n });\n}\n\nexport {\n camelToSnake,\n underscoreToCamelCase,\n generateRandom18Int,\n};\n"],"mappings":"AAAA;AACA,SAASA,YAAYA,CAACC,GAAU,EAAE;EAChC,OAAOA,GAAG,CAACC,OAAO,CAAC,UAAU,EAAE,UAACC,KAAK;IAAA,WAAAC,MAAA,CAASD,KAAK,CAACE,WAAW,CAAC,CAAC;EAAA,CAAE,CAAC;AACtE;;AAEA;AACA,SAASC,qBAAqBA,CAACL,GAAU,EAAE;EACzC,OAAOA,GAAG,CAACC,OAAO,CAAC,WAAW,EAAE,UAACC,KAAK,EAAEI,MAAM;IAAA,OAAKA,MAAM,CAACC,WAAW,CAAC,CAAC;EAAA,EAAC;AAC1E;AAEA,SAASC,mBAAmBA,CAAA,EAAG;EAC7B,OAAO,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACtC,IAAI;MACF;MACA;MACA,IAAMC,GAAG,GAAAC,IAAA,CAAAC,GAAA,CAAG,EAAE,EAAI,EAAE,EAAC,CAAC;MACtB,IAAMC,GAAG,GAAGF,IAAA,CAAAC,GAAA,CAAC,EAAE,EAAI,EAAE,IAAI,CAAC,CAAC,CAAC;;MAE5B;MACA,IAAME,SAAS,GAAGH,IAAI,CAACI,KAAK,CAACJ,IAAI,CAACK,MAAM,CAAC,CAAC,IAAIH,GAAG,GAAGH,GAAG,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG;MACnEF,OAAO,CAACM,SAAS,CAAC;MAClB,OAAOA,SAAS;IAClB,CAAC,CAAC,OAAOG,GAAG,EAAE;MACZR,MAAM,CAACQ,GAAG,CAAC;MACX,OAAO,CAAC;IACV;EACF,CAAC,CAAC;AACJ;AAEA,SACEpB,YAAY,EACZM,qBAAqB,EACrBG,mBAAmB"}
|
|
1
|
+
{"version":3,"names":["camelToSnake","str","replace","match","concat","toLowerCase","underscoreToCamelCase","letter","toUpperCase","generateRandom18Int","Promise","resolve","reject","min","Math","pow","max","randomNum","floor","random","err"],"sources":["../../src/stringUtils.ts"],"sourcesContent":["// 将所有大写字母前加上下划线,并将大写字母转换为小写\r\nfunction camelToSnake(str:string) {\r\n return str.replace(/([A-Z])/g, (match) => `_${match.toLowerCase()}`);\r\n}\r\n\r\n// 下划线转驼峰\r\nfunction underscoreToCamelCase(str:string) {\r\n return str.replace(/_([a-z])/g, (match, letter) => letter.toUpperCase());\r\n}\r\n\r\nfunction generateRandom18Int() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // 生成一个18位的随机整数\r\n // 10**17 到 10**18 - 1 的范围\r\n const min = 10 ** 17; // 18位数的最小值\r\n const max = (10 ** 18) - 1; // 18位数的最大值\r\n\r\n // 使用Math.floor(Math.random() * (max - min + 1)) + min 来生成随机数\r\n const randomNum = Math.floor(Math.random() * (max - min + 1)) + min;\r\n resolve(randomNum);\r\n return randomNum;\r\n } catch (err) {\r\n reject(err);\r\n return 0;\r\n }\r\n });\r\n}\r\n\r\nexport {\r\n camelToSnake,\r\n underscoreToCamelCase,\r\n generateRandom18Int,\r\n};\r\n"],"mappings":"AAAA;AACA,SAASA,YAAYA,CAACC,GAAU,EAAE;EAChC,OAAOA,GAAG,CAACC,OAAO,CAAC,UAAU,EAAE,UAACC,KAAK;IAAA,WAAAC,MAAA,CAASD,KAAK,CAACE,WAAW,CAAC,CAAC;EAAA,CAAE,CAAC;AACtE;;AAEA;AACA,SAASC,qBAAqBA,CAACL,GAAU,EAAE;EACzC,OAAOA,GAAG,CAACC,OAAO,CAAC,WAAW,EAAE,UAACC,KAAK,EAAEI,MAAM;IAAA,OAAKA,MAAM,CAACC,WAAW,CAAC,CAAC;EAAA,EAAC;AAC1E;AAEA,SAASC,mBAAmBA,CAAA,EAAG;EAC7B,OAAO,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACtC,IAAI;MACF;MACA;MACA,IAAMC,GAAG,GAAAC,IAAA,CAAAC,GAAA,CAAG,EAAE,EAAI,EAAE,EAAC,CAAC;MACtB,IAAMC,GAAG,GAAGF,IAAA,CAAAC,GAAA,CAAC,EAAE,EAAI,EAAE,IAAI,CAAC,CAAC,CAAC;;MAE5B;MACA,IAAME,SAAS,GAAGH,IAAI,CAACI,KAAK,CAACJ,IAAI,CAACK,MAAM,CAAC,CAAC,IAAIH,GAAG,GAAGH,GAAG,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG;MACnEF,OAAO,CAACM,SAAS,CAAC;MAClB,OAAOA,SAAS;IAClB,CAAC,CAAC,OAAOG,GAAG,EAAE;MACZR,MAAM,CAACQ,GAAG,CAAC;MACX,OAAO,CAAC;IACV;EACF,CAAC,CAAC;AACJ;AAEA,SACEpB,YAAY,EACZM,qBAAqB,EACrBG,mBAAmB"}
|
package/dist/esm/treeUtils.js
CHANGED
|
@@ -209,14 +209,14 @@ var getParamsContentByParamKeysForEvent = function getParamsContentByParamKeysFo
|
|
|
209
209
|
return paramNameList.length > 0 ? loopNodeByParamsPath(paramNameList, data) || '' : paramNames;
|
|
210
210
|
};
|
|
211
211
|
|
|
212
|
-
/**
|
|
213
|
-
* 提供给事件参数转换那边的方法
|
|
214
|
-
* 和replaceParamsValue 区别,
|
|
215
|
-
* 1、不能去掉pageParams那一层
|
|
216
|
-
* 2、字符串拼对象,需要把对象做JSON.stringify转换
|
|
217
|
-
* 3、如果替换不成功,需要返回字符串原始的值
|
|
218
|
-
* @param contentStr "你好" ,"你$好, ${pageParams.userName}" , "${pageData}, ${pageParams.userList[0]}"
|
|
219
|
-
* @param data 数据
|
|
212
|
+
/**
|
|
213
|
+
* 提供给事件参数转换那边的方法
|
|
214
|
+
* 和replaceParamsValue 区别,
|
|
215
|
+
* 1、不能去掉pageParams那一层
|
|
216
|
+
* 2、字符串拼对象,需要把对象做JSON.stringify转换
|
|
217
|
+
* 3、如果替换不成功,需要返回字符串原始的值
|
|
218
|
+
* @param contentStr "你好" ,"你$好, ${pageParams.userName}" , "${pageData}, ${pageParams.userList[0]}"
|
|
219
|
+
* @param data 数据
|
|
220
220
|
*/
|
|
221
221
|
export var replaceParamsValueForEvent = function replaceParamsValueForEvent(contentStr) {
|
|
222
222
|
var _Object$keys2;
|
|
@@ -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","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';\r\nimport escapeString from './markdownEscape';\r\n\r\nexport const getDataArr = (content: string) => {\r\n let matchArr:string[] = [];\r\n if (content && typeof content === 'string') {\r\n const escapeRegex = /\\$\\{\\{([^}]+)\\}\\}/gi; // 变量正则表达式,${{xxx}}\r\n const regex = /\\$\\{(.+?)\\}/gi; // 变量正则表达式,${xxx}\r\n let matchs = escapeRegex.exec(content);\r\n if (matchs?.[1]) {\r\n matchArr = matchs[1].split('.');\r\n } else {\r\n matchs = regex.exec(content);\r\n if (matchs?.[1]) {\r\n matchArr = matchs[1].split('.');\r\n }\r\n }\r\n return matchArr?.filter((item, idx) => !(idx === 0 && ['root', 'pageParams'].includes(item)) && !(idx === 1 && ['pageParams'].includes(item))); // 过滤掉第一个root,pageParams\r\n }\r\n return matchArr;\r\n};\r\n\r\nconst loopNodeByParamsPath:any = (\r\n paramsArr:string[],\r\n data: {[key:string]: any},\r\n escape:boolean = false\r\n) => {\r\n if (Array.isArray(paramsArr) && paramsArr.length > 0) {\r\n for (const keyword of paramsArr) {\r\n const dataNode = get(data, keyword);\r\n let nextParamsArr = paramsArr.slice(1); // 取下一个节点字段\r\n if (Array.isArray(dataNode)) {\r\n // 如果当前节点是数组,且下一个节点是数字,则取下标对应的值\r\n const idxRegex = /^\\[.*\\]$|^\\d+$/;\r\n if (idxRegex.test(nextParamsArr?.[0])) {\r\n const idxNum = nextParamsArr?.[0].replace(/\\[|\\]/g, '');\r\n if (dataNode?.[Number(idxNum)] instanceof Object) {\r\n return loopNodeByParamsPath(nextParamsArr.slice(1), dataNode?.[Number(idxNum)], escape);\r\n }\r\n return escape ? escapeString(dataNode?.[Number(idxNum)]) : dataNode?.[Number(idxNum)];\r\n }\r\n // 否则或缺中间节点,直接往下取值\r\n nextParamsArr = nextParamsArr.slice(1);\r\n if (nextParamsArr?.length >= 1) {\r\n return dataNode.map((item:any) => {\r\n // 如果数组节点是对象,则继续递归取值\r\n if (item instanceof Object && nextParamsArr?.length >= 1) {\r\n return loopNodeByParamsPath(nextParamsArr, item, escape);\r\n }\r\n // 否则直接返回数组值\r\n return escape ? escapeString(item) : item;\r\n });\r\n }\r\n return dataNode;\r\n } if (nextParamsArr?.length >= 1) {\r\n return loopNodeByParamsPath(nextParamsArr, dataNode, escape);\r\n }\r\n return escape ? escapeString(dataNode) : dataNode;\r\n }\r\n }\r\n return '';\r\n};\r\n\r\n\r\nexport const getParamsContentByParamKeys = (paramNames: string, data: {[key:string]: any} = {}) => {\r\n if (!paramNames || !data || Object.keys(data)?.length <= 0) {\r\n return undefined;\r\n }\r\n const escapeRegex = /\\$\\{\\{([^}]+)\\}\\}/gi; // 匹配${{}}格式的参数,属于需转义内容\r\n const paramNameList = getDataArr(paramNames);\r\n return loopNodeByParamsPath(paramNameList, data, escapeRegex.test(paramNames));\r\n};\r\n\r\n// 获取替换循环体内的参数值\r\nexport const replaceLoopBodyParamsValue = (\r\n contentStr: string,\r\n options: {\r\n loopParams: { [key: string]: any } // 循环体参数\r\n loopSourceArr: string[], // 循环体数据源\r\n loopData: {[key: string]: any}[], // 循环数据源数据\r\n parameters?: {[key: string]: any}, // 全量参数\r\n staticCodeMap?: {[key: string]: any}, // 静态数据\r\n },\r\n) => {\r\n const {\r\n loopParams = {},\r\n loopSourceArr = [],\r\n loopData = [],\r\n parameters = {},\r\n } = options || {};\r\n let nowTemp = '';\r\n if (typeof contentStr === 'string' && contentStr && loopParams) {\r\n nowTemp = contentStr.replace(/\\$\\{(.+?)\\}/gi, (match) => {\r\n const paramsPath = getDataArr(match).filter((itemKey) => !loopSourceArr.includes(itemKey));\r\n let filedVal:any = '';\r\n // 如果当前节点是数组,且下一个节点是数字,则取下标对应的值\r\n const idxRegex = /^\\[.*\\]$|^\\d+$/;\r\n if (idxRegex.test(paramsPath?.[0])) {\r\n const idxNum = paramsPath?.[0].replace(/\\[|\\]/g, '');\r\n if (loopData?.[Number(idxNum)] instanceof Object) {\r\n filedVal = loopNodeByParamsPath(paramsPath.slice(1), loopData?.[Number(idxNum)]);\r\n } else {\r\n filedVal = loopData?.[Number(idxNum)] || '';\r\n }\r\n } else {\r\n filedVal = loopNodeByParamsPath(paramsPath.slice(1), loopParams);\r\n\r\n // 循环体内查找不到,则从参数中取值,但忽略循环体本身\r\n if (!filedVal && parameters) {\r\n const _parameters = cloneDeep(parameters);\r\n if (Array.isArray(loopSourceArr) && loopSourceArr.length > 0) {\r\n loopSourceArr.forEach((sourceKey:string) => {\r\n delete _parameters[sourceKey];\r\n });\r\n }\r\n const paramNameList = getDataArr(match);\r\n filedVal = loopNodeByParamsPath(paramNameList, _parameters);\r\n }\r\n }\r\n return filedVal || '';\r\n });\r\n }\r\n return nowTemp;\r\n};\r\n\r\nexport const replaceParamsValue = (\r\n contentStr: string,\r\n pararms: { [key: string]: any } = {},\r\n isObject2String: boolean = false,\r\n) => {\r\n let nowContent:string = '';\r\n if (typeof contentStr === 'string' && contentStr && pararms) {\r\n nowContent = contentStr.replace(/\\$\\{\\{?[^{}]+}?\\}/g, (match) => {\r\n const filedVal = getParamsContentByParamKeys(match, pararms);\r\n if (isObject2String && typeof filedVal === 'object') {\r\n return JSON.stringify(filedVal);\r\n }\r\n return filedVal || '';\r\n });\r\n }\r\n return nowContent;\r\n};\r\n\r\n\r\n/** ======下面几个方法主要提供给事件参数使用 勿共用 ===== */\r\nconst splitStringWithTemplateLiteral = (input: string) => {\r\n // 正则表达式:匹配 ${...} 模式\r\n const templateRegex = /\\$\\{[^}]*\\}/;\r\n\r\n // 检查字符串是否包含 ${...}\r\n if (!templateRegex.test(input)) {\r\n return [input]; // 返回原始字符串\r\n }\r\n\r\n // 匹配所有 ${...} 模式\r\n const matches = input.match(templateRegex);\r\n\r\n if (!matches || matches.length === 0) {\r\n return [input]; // 返回原始字符串\r\n }\r\n\r\n // 分割字符串,同时保留 ${...} 模式\r\n const result = input.split(templateRegex).filter(Boolean); // 去掉空字符串\r\n\r\n // 将匹配到的 ${...} 模式重新插入到结果数组中\r\n matches.forEach((match, index) => {\r\n result.splice(index * 2 + 1, 0, match); // 插入到对应位置\r\n });\r\n\r\n return result;\r\n};\r\n\r\nconst getParamsContentByParamKeysForEvent = (\r\n paramNames: string,\r\n data: { [key: string]: any } = {},\r\n) => {\r\n let paramNameList: string[] = [];\r\n const regex = /\\$\\{(.+?)\\}/gi; // 变量正则表达式,${xxx}\r\n if (paramNames && typeof paramNames === 'string') {\r\n const matchs = regex.exec(paramNames);\r\n if (matchs?.[1]) {\r\n paramNameList = matchs?.[1]?.split('.');\r\n }\r\n }\r\n\r\n // 如果替换不成功,需要返回字符串原始的值\r\n return paramNameList.length > 0\r\n ? loopNodeByParamsPath(paramNameList, data) || ''\r\n : paramNames;\r\n};\r\n\r\n\r\n/**\r\n * 提供给事件参数转换那边的方法\r\n * 和replaceParamsValue 区别,\r\n * 1、不能去掉pageParams那一层\r\n * 2、字符串拼对象,需要把对象做JSON.stringify转换\r\n * 3、如果替换不成功,需要返回字符串原始的值\r\n * @param contentStr \"你好\" ,\"你$好, ${pageParams.userName}\" , \"${pageData}, ${pageParams.userList[0]}\"\r\n * @param data 数据\r\n */\r\nexport const replaceParamsValueForEvent = (\r\n contentStr: string,\r\n data: { [key: string]: any } = {},\r\n) => {\r\n if (!contentStr || !data || Object.keys(data)?.length <= 0) {\r\n return undefined;\r\n }\r\n\r\n const valueArr = splitStringWithTemplateLiteral(contentStr);\r\n // 单个字符串, 没有拼接\r\n if (valueArr.length === 1) {\r\n return getParamsContentByParamKeysForEvent(valueArr[0], data);\r\n }\r\n\r\n\r\n let nowTemp = '';\r\n if (typeof contentStr === 'string' && contentStr && data) {\r\n nowTemp = contentStr.replace(/\\$\\{(.+?)\\}/g, (match) => {\r\n const filedVal = getParamsContentByParamKeysForEvent(match, data);\r\n if (typeof filedVal === 'string') {\r\n return filedVal;\r\n }\r\n // 字符串拼对象,需要把对象做JSON.stringify转换\r\n try {\r\n return JSON.stringify(filedVal);\r\n } catch {\r\n return '';\r\n }\r\n });\r\n }\r\n return nowTemp;\r\n};\r\n\r\n/** ======上面几个方法主要提供给事件参数使用 勿共用 ===== */\r\n"],"mappings":"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"}
|