| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /**
- * @author suxiaoxin
- * @info mockJs 功能增强脚本
- */
- var strRegex = /\${([a-zA-Z]+)\.?([a-zA-Z0-9_\.]*)\}/i;
- var varSplit = '.';
- var mockSplit = '|';
- var Mock = require('mockjs');
- Mock.Random.extend({
- timestamp: function(){
- var time = new Date().getTime() + '';
- return +time.substr(0, time.length - 3)
- }
- })
- function mock(mockJSON, context) {
- context = context || {};
- var filtersMap = {
- regexp: handleRegexp
- };
- if(!mockJSON || typeof mockJSON !== 'object'){
- return mockJSON;
- }
- return parse(mockJSON);
- function parse(p, c) {
- if(!c){
- c = Array.isArray(p) ? [] : {}
- }
- for (var i in p) {
- if (!p.hasOwnProperty(i)) {
- continue;
- }
- if (p[i] && typeof p[i] === 'object') {
- c[i] = (p[i].constructor === Array) ? [] : {};
- parse(p[i], c[i]);
- } else if(p[i] && typeof p[i] === 'string'){
- p[i] = handleStr(p[i]);
- var filters = i.split(mockSplit), newFilters = [].concat(filters);
- c[i] = p[i];
- if (filters.length > 1) {
- for (var f = 1, l = filters.length, index; f < l; f++) {
- filters[f] = filters[f].toLowerCase();
- if (filters[f] in filtersMap) {
- if ((index = newFilters.indexOf(filters[f])) !== -1) {
- newFilters.splice(index, 1);
- }
- delete c[i];
- c[newFilters.join(mockSplit)] = filtersMap[filters[f]].call(p, p[i]);
- }
- }
- }
- }else{
- c[i] = p[i];
- }
- }
- return c;
- }
- function handleRegexp(item) {
- return new RegExp(item);
- }
- function handleStr(str) {
- if (typeof str !== 'string' || str.indexOf('{') === -1 || str.indexOf('}') === -1 || str.indexOf('$') === -1) {
- return str;
- }
- let matchs = str.match(strRegex);
- if(matchs){
- let name = matchs[1] + (matchs[2]? '.' + matchs[2] : '');
- if(!name) return str;
- var names = name.split(varSplit);
- var data = context;
-
- if(typeof context[names[0]] === undefined){
- return str;
- }
- names.forEach(function (n) {
- if (data === '') return '';
- if (n in data) {
- data = data[n];
- } else {
- data = '';
- }
- });
- return data;
- }
- return str;
- }
- }
- module.exports = mock;
|