| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import deepExtend from './deepextend';
- import {err} from './console';
- import is from './type';
- const PREFIX = '[[FORM-CREATE-PREFIX-';
- const SUFFIX = '-FORM-CREATE-SUFFIX]]';
- export function toJson(obj, space) {
- return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
- if (val && val._isVue === true)
- return undefined;
- if (typeof val !== 'function') {
- return val;
- }
- if (val.__json) {
- return val.__json;
- }
- if (val.__origin)
- val = val.__origin;
- if (val.__emit)
- return undefined;
- return PREFIX + val + SUFFIX;
- }, space);
- }
- function makeFn(fn) {
- return (new Function('return ' + fn))();
- }
- export function parseFn(fn, mode) {
- if (fn && is.String(fn) && fn.length > 4) {
- let v = fn.trim();
- let flag = false;
- try {
- if (v.indexOf(SUFFIX) > 0 && v.indexOf(PREFIX) === 0) {
- v = v.replace(SUFFIX, '').replace(PREFIX, '');
- flag = true;
- } else if (v.indexOf('$FN:') === 0) {
- v = v.substring(4);
- flag = true;
- } else if (v.indexOf('$EXEC:') === 0) {
- v = v.substring(6);
- flag = true;
- } else if (v.indexOf('$GLOBAL:') === 0) {
- const name = v.substring(8);
- v = function (...args) {
- const callback = args[0].api.getGlobalEvent(name);
- if (callback) {
- return callback.call(this, ...args);
- }
- return undefined;
- }
- v.__json = fn;
- v.__inject = true;
- return v;
- } else if (v.indexOf('$FNX:') === 0) {
- v = makeFn('function($inject){' + v.substring(5) + '}');
- v.__json = fn;
- v.__inject = true;
- return v;
- } else if (!mode && v.indexOf('function ') === 0 && v !== 'function ') {
- flag = true;
- } else if (!mode && v.indexOf('function(') === 0 && v !== 'function(') {
- flag = true;
- }
- if (!flag) return fn;
- let val;
- try{
- val = makeFn(v);
- }catch (e){
- val = makeFn('function ' + v);
- }
- val.__json = fn;
- return val;
- } catch (e) {
- err(`解析失败:${v}\n\nerr: ${e}`);
- return undefined;
- }
- }
- return fn;
- }
- export function parseJson(json, mode) {
- return JSON.parse(json, function (k, v) {
- if (is.Undef(v) || !v.indexOf) return v;
- return parseFn(v, mode);
- });
- }
|