Commit 554ed39b130f512f480e38e9f91f5896dd49a1b2

Authored by ww
1 parent 6e78affd

fix(public request): DEFECT-1239 修复JSONParse解析方法方法解析bug

  1 +import { excludeParseEventKeyList, excludeParseEventValueList } from "@/enums/eventEnum"
  2 +
  3 +const tryRunFunction = (v: string) => {
  4 + try {
  5 + return eval(`(function(){return ${v}})()`)
  6 + } catch (error) {
  7 + return v
  8 + }
  9 +}
  10 +
  11 +export const JSONParse = (data: string) => {
  12 + return JSON.parse(data, (k, v) => {
  13 + // 过滤函数字符串
  14 + if (excludeParseEventKeyList.includes(k)) return v
  15 + // 过滤函数值表达式
  16 + if (typeof v === 'string') {
  17 + const someValue = excludeParseEventValueList.some(excludeValue => v.indexOf(excludeValue) > -1)
  18 + if (someValue) return v
  19 + }
  20 + // 还原函数值
  21 + if (typeof v === 'string' && v.indexOf && (v.indexOf('function') > -1 || v.indexOf('=>') > -1)) {
  22 + return tryRunFunction(v)
  23 + } else if (typeof v === 'string' && v.indexOf && v.indexOf('return ') > -1) {
  24 + const baseLeftIndex = v.indexOf('(')
  25 + if (baseLeftIndex > -1) {
  26 + const newFn = `function ${v.substring(baseLeftIndex)}`
  27 + return tryRunFunction(newFn)
  28 + }
  29 + }
  30 + return v
  31 + })
  32 +}
@@ -12,6 +12,9 @@ import { RequestHttpIntervalEnum, RequestParamsObjType } from '@/enums/httpEnum' @@ -12,6 +12,9 @@ import { RequestHttpIntervalEnum, RequestParamsObjType } from '@/enums/httpEnum'
12 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d' 12 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
13 import { excludeParseEventKeyList, excludeParseEventValueList } from '@/enums/eventEnum' 13 import { excludeParseEventKeyList, excludeParseEventValueList } from '@/enums/eventEnum'
14 14
  15 +/// THINGS_KIT 替换JSONParse解析
  16 +export { JSONParse } from './external/utils'
  17 +
15 /** 18 /**
16 * * 判断是否是开发环境 19 * * 判断是否是开发环境
17 * @return { Boolean } 20 * @return { Boolean }
@@ -127,11 +130,11 @@ export const fileToUrl = (file: File): string => { @@ -127,11 +130,11 @@ export const fileToUrl = (file: File): string => {
127 * * file转base64 130 * * file转base64
128 */ 131 */
129 export const fileTobase64 = (file: File, callback: Function) => { 132 export const fileTobase64 = (file: File, callback: Function) => {
130 - let reader = new FileReader() 133 + const reader = new FileReader()
131 reader.readAsDataURL(file) 134 reader.readAsDataURL(file)
132 reader.onload = function (e: ProgressEvent<FileReader>) { 135 reader.onload = function (e: ProgressEvent<FileReader>) {
133 if (e.target) { 136 if (e.target) {
134 - let base64 = e.target.result 137 + const base64 = e.target.result
135 callback(base64) 138 callback(base64)
136 } 139 }
137 } 140 }
@@ -318,7 +321,8 @@ export const JSONStringify = <T>(data: T) => { @@ -318,7 +321,8 @@ export const JSONStringify = <T>(data: T) => {
318 * * JSON反序列化,支持函数和 undefined 321 * * JSON反序列化,支持函数和 undefined
319 * @param data 322 * @param data
320 */ 323 */
321 -export const JSONParse = (data: string) => { 324 +/// THINGS_KIT 重命名 JSONParse 为 JSONParseOriginal
  325 +export const JSONParseOriginal = (data: string) => {
322 return JSON.parse(data, (k, v) => { 326 return JSON.parse(data, (k, v) => {
323 // 过滤函数字符串 327 // 过滤函数字符串
324 if (excludeParseEventKeyList.includes(k)) return v 328 if (excludeParseEventKeyList.includes(k)) return v
@@ -347,4 +351,4 @@ export const JSONParse = (data: string) => { @@ -347,4 +351,4 @@ export const JSONParse = (data: string) => {
347 */ 351 */
348 export const setTitle = (title?: string) => { 352 export const setTitle = (title?: string) => {
349 title && (document.title = title) 353 title && (document.title = title)
350 -}  
  354 +}