Socket
Socket
Sign inDemoInstall

mockjs

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mockjs - npm Package Compare versions

Comparing version 0.1.10 to 1.0.0-beta1

.editorconfig

32

bower.json
{
"name": "mockjs",
"title": "Mock.js",
"version": "0.1.10",
"homepage": "http://mockjs.com/",
"authors": [
"nuysoft <nuysoft@gmail.com>"
],
"main": [
"dist/mock.js"
],
"main": "dist/mock.js",
"license": "MIT",

@@ -17,13 +10,16 @@ "ignore": [

"bower_components",
"src",
"test",
"tests"
"site",
"plugins",
"package.json",
"gulpfile.js",
"AUTHORS.txt",
"CONTRIBUTING.md",
"HISTORY.md",
"CHANGELOG.md",
"README.md",
"LICENSE"
],
"devDependencies": {
"jquery": "~2.1.1",
"bootstrap": "",
"codemirror": "~3.20.0",
"highlightjs": "~8.0.0",
"seajs": "*",
"js-beautify": "~1.5.1"
}
}
"devDependencies": {}
}
# Changelog
## 2015.12.03 V0.2.0-alpha2
1. 改用 webpack 打包
### 2014.3.20 V0.2.0-alpha1
1. 增加网站
### 2014.12.23 V0.2.0 重构代码
1. 改用 gulp 打包
2. 改用 mocha 重写测试用例
3. 改用 requirejs 重构代码
### 2014.6.24 V0.2.0 重构代码
1. 支持 UMD,包括:
* 未打包前的代码
* 打包后的代码
2. random CLI
* --help 增加方法和参数说明
3. 重构文档站 @萝素
* 增加《入门》
* 单列《文档》
4. 测试用例
* 重写测试用例
* 同时支持 nodeunit 和 qunit
* 同时支持 jQuery、KISSY、Zepto
* 同时支持 KMD、AMD、CMD
5. 复写 XHR @行列 @霍庸
6. 废弃的功能
* Mock.mockjax()
* Mock.tpl()
* Mock.xtpl()
7. Random.dateImage() 支持 node-canvas
8. Mock.valid(tpl, data)
9. Mock.toJOSNSchema()
10. Mock.mock(regexp)
11. 完善地支持 node,代码中的:
* window
* document
* XHRHttpRequest
12. 支持相对路径
### 2014.6.23 V0.1.5

@@ -7,10 +51,10 @@

* jQuery 2.1.0
* jQuery 2.0.2
* jQuery 1.11.0
* jQuery 1.10.1
* jQuery 1.9.1
* jQuery 1.8.3
* jQuery 1.7.2
* jQuery 1.6.4
* jQuery 2.1.0
* jQuery 2.0.2
* jQuery 1.11.0
* jQuery 1.10.1
* jQuery 1.9.1
* jQuery 1.8.3
* jQuery 1.7.2
* jQuery 1.6.4

@@ -17,0 +61,0 @@ 非常抱歉,这个问题一直困扰着 Mock.js 用户,在后面的版本中,会通过拦截 XMLHttpRequest 的方法“一劳永逸”地解决拦截 Ajax 的兼容和适配问题。

@@ -5,3 +5,3 @@ {

"description": "模拟请求 & 模拟数据",
"version": "0.1.10",
"version": "1.0.0-beta1",
"homepage": "http://mockjs.com/",

@@ -11,35 +11,19 @@ "keywords": [

"mockJSON",
"mockAjax",
"mockTempalte"
"mockAjax"
],
"author": "nuysoft@gmail.com",
"dependencies": {
"commander": "1.3.x"
"commander": "*"
},
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-jshint": "~0.6.4",
"grunt-contrib-watch": "~0.5.3",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-uglify": "~0.2.2",
"grunt-contrib-connect": "~0.5.0",
"grunt-markdown": "~0.4.0",
"grunt-exec": "~0.4.2",
"jquery": "~2.1.1",
"handlebars": "~1.0.12",
"underscore": "~1.5.1",
"jison": "~0.4.10",
"shelljs": "~0.2.1",
"kissy": "~1.3.1",
"node-print": "~0.0.4",
"codemirror": "~3.18.0",
"grunt-contrib-qunit": "~0.3.0",
"grunt-contrib-nodeunit": "~0.2.1",
"zepto": "0.0.4",
"time-grunt": "~0.3.1",
"grunt-cleaver": "~0.3.2",
"jsdom": "~0.10.5",
"xmlhttprequest": "~1.6.0"
"gulp": "^3.9.0",
"gulp-connect": "*",
"gulp-coveralls": "^0.1.4",
"gulp-istanbul": "^0.10.3",
"gulp-jshint": "^2.0.0",
"gulp-mocha": "^2.2.0",
"gulp-mocha-phantomjs": "^0.10.1",
"jshint": "^2.8.0",
"jshint-stylish": "^2.1.0",
"webpack": "^1.12.9"
},

@@ -52,3 +36,4 @@ "repository": {

"scripts": {
"test": "grunt travis --verbose"
"test": "gulp mocha",
"coveralls": "gulp coveralls"
},

@@ -61,3 +46,3 @@ "bin": {

"type": "MIT",
"url": "https://github.com/nuysoft/node-print/blob/master/README.md"
"url": "https://github.com/nuysoft/Mock/blob/master/LICENSE"
}

@@ -64,0 +49,0 @@ ],

# Mock.js
<!-- 模拟请求 & 模拟数据 -->
[![Build Status](https://api.travis-ci.org/nuysoft/Mock.png?branch=master)](http://travis-ci.org/nuysoft/Mock)
[![GitHub version](https://badge.fury.io/gh/nuysoft%2FMock.png)](http://badge.fury.io/gh/nuysoft%2FMock)
[![NPM version](https://badge.fury.io/js/mockjs.png)](http://badge.fury.io/js/mockjs)
[![spm package](http://spmjs.io/badge/mockjs)](http://spmjs.io/package/mockjs)
[![Dependency Status](https://gemnasium.com/nuysoft/Mock.png)](https://gemnasium.com/nuysoft/Mock)
[![Bower version](https://badge.fury.io/bo/mockjs.png)](http://badge.fury.io/bo/mockjs)
[![Views in the last 24 hours](https://sourcegraph.com/api/repos/github.com/nuysoft/Mock/counters/views-24h.png)](https://github.com/nuysoft/Mock/)
<!-- [![Coverage Status](https://coveralls.io/repos/nuysoft/Mock/badge.png)](https://coveralls.io/r/nuysoft/Mock) -->
[![Build Status](https://travis-ci.org/nuysoft/Mock.svg?branch=refactoring)](https://travis-ci.org/nuysoft/Mock)
<!-- [![Coverage Status](https://coveralls.io/repos/nuysoft/Mock/badge.png?branch=refactoring)](https://coveralls.io/r/nuysoft/Mock?branch=refactoring)
[![NPM version](https://badge.fury.io/js/mockjs.svg)](http://badge.fury.io/js/mockjs)
[![Bower version](https://badge.fury.io/bo/mockjs.svg)](http://badge.fury.io/bo/mockjs)
[![Dependency Status](https://gemnasium.com/nuysoft/Mock.svg)](https://gemnasium.com/nuysoft/Mock)
[![spm package](http://spmjs.io/badge/mockjs)](http://spmjs.io/package/mockjs) -->
Mock.js is a simulation data generator to help the front-end to develop and prototype separate from the back-end progress and reduce some monotony particularly while writing automated tests.

@@ -19,6 +18,7 @@

* Generate simulated data according to the data template
* Provide request/response mocking for ajax requests with jQuery and KISSY
* Generate simulated data according to HTML-based templates
* Provide request/response mocking for ajax requests
* ~~Generate simulated data according to HTML-based templates~~
<!-- **TODO** This library is loosely inspired by Elijah Manor's [post](http://www.elijahmanor.com/2013/04/angry-birds-of-javascript-green-bird.html), [mennovanslooten/mockJSON](https://github.com/mennovanslooten/mockJSON), [appendto/jquery-mockjax](https://github.com/appendto/jquery-mockjax) and [victorquinn/chancejs](https://github.com/victorquinn/chancejs/). -->
This library is loosely inspired by Elijah Manor's post [Mocking
Introduction](http://www.elijahmanor.com/2013/04/angry-birds-of-javascript-green-bird.html), [mennovanslooten/mockJSON](https://github.com/mennovanslooten/mockJSON), [appendto/jquery-mockjax](https://github.com/appendto/jquery-mockjax) and [victorquinn/chancejs](https://github.com/victorquinn/chancejs/).

@@ -32,7 +32,2 @@ ## Questions?

## License
Mock.js is available under the terms of the [MIT License](./MIT-LICENSE.txt).
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/nuysoft/mock/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
Mock.js is available under the terms of the [MIT License](./MIT-LICENSE.txt).

@@ -1,48 +0,46 @@

var Random = require('./random'),
Util = require('./util');
/* global require, module, window */
var Handler = require('./mock/handler')
var Util = require('./mock/util')
var Random = require('./mock/random')
var RE = require('./mock/regexp')
var toJSONSchema = require('./mock/schema')
var valid = require('./mock/valid')
var Mock = module.exports = {
_mocked: {}
};
var XHR
if (typeof window !== 'undefined') XHR = require('./mock/xhr')
// BEGIN(BROWSER)
/*
mock data
/*!
Mock - 模拟请求 & 模拟数据
https://github.com/nuysoft/Mock
墨智 mozhi.gyy@taobao.com nuysoft@gmail.com
*/
var Mock = {
Handler: Handler,
Random: Random,
Util: Util,
XHR: XHR,
RE: RE,
toJSONSchema: toJSONSchema,
valid: valid,
heredoc: Util.heredoc,
setup: function(settings) {
return XHR.setup(settings)
},
_mocked: {}
}
/*
rkey
name|+inc
name|repeat
name|min-max
name|min-max.dmin-dmax
name|int.dmin-dmax
Mock.version = '1.0.0-beta1'
1 name, 2 inc, 3 range, 4 decimal
// 避免循环依赖
if (XHR) XHR.Mock = Mock
rplaceholder
placeholder(*)
[正则查看工具](http://www.regexper.com/)
#26 生成规则 支持 负数,例如 number|-100-100
*/
var rkey = /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,
rrange = /([\+\-]?\d+)-?([\+\-]?\d+)?/,
rplaceholder = /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g; // (^(?:.|\r|\n)*?)
Mock.extend = Util.extend
/*
## Mock
### Mock.mock( rurl?, rtype?, template|function() )
根据数据模板生成模拟数据。
* Mock.mock( template )
* Mock.mock( function() )
* Mock.mock( rurl, template )
* Mock.mock( rurl, function() )
* Mock.mock( rurl, function(options) )
* Mock.mock( rurl, rtype, template )
* Mock.mock( rurl, rtype, function() )
* Mock.mock( rurl, rtype, function(options) )
根据数据模板生成模拟数据。
*/

@@ -52,3 +50,3 @@ Mock.mock = function(rurl, rtype, template) {

if (arguments.length === 1) {
return Handle.gen(rurl)
return Handler.gen(rurl)
}

@@ -60,2 +58,4 @@ // Mock.mock(rurl, template)

}
// 拦截 XHR
if (XHR) window.XMLHttpRequest = XHR
Mock._mocked[rurl + (rtype || '')] = {

@@ -69,338 +69,2 @@ rurl: rurl,

var Handle = {
extend: Util.extend
}
Handle.rule = function(name) {
name = (name || '') + ''
var parameters = (name || '').match(rkey),
range = parameters && parameters[3] && parameters[3].match(rrange),
min = range && parseInt(range[1], 10), // || 1
max = range && parseInt(range[2], 10), // || 1
// repeat || min-max || 1
count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1,
decimal = parameters && parameters[4] && parameters[4].match(rrange),
dmin = decimal && parseInt(decimal[1], 10), // || 0,
dmax = decimal && parseInt(decimal[2], 10), // || 0,
// int || dmin-dmax || 0
dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : 0,
point = parameters && parameters[4];
return {
parameters: parameters,
range: range,
min: min,
max: max,
count: count,
decimal: decimal,
dmin: dmin,
dmax: dmax,
dcount: dcount,
point: point
}
}
/*
template 属性值(即数据模板)
name 属性名
context 数据上下文,生成后的数据
templateContext 模板上下文,
Handle.gen(template, name, options)
context
currentContext, templateCurrentContext,
path, templatePath
root, templateRoot
*/
Handle.gen = function(template, name, context) {
name = name = (name || '') + ''
context = context || {}
context = {
// 当前访问路径,只有属性名,不包括生成规则
path: context.path || [],
templatePath: context.templatePath || [],
// 最终属性值的上下文
currentContext: context.currentContext,
// 属性值模板的上下文
templateCurrentContext: context.templateCurrentContext || template,
root: context.root,
templateRoot: context.templateRoot
}
// console.log('path:', path.join('.'), template)
var rule = Handle.rule(name)
var type = Util.type(template)
if (Handle[type]) {
return Handle[type]({
// 属性值类型
type: type,
// 属性值模板
template: template,
// 属性名 + 生成规则
name: name,
// 属性名
parsedName: name ? name.replace(rkey, '$1') : name,
// 解析后的生成规则
rule: rule,
// 相关上下文
context: context
})
}
return template
}
Handle.extend({
array: function(options) {
var result = [],
i, j;
// 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }]
if (!options.rule.parameters) {
for (i = 0; i < options.template.length; i++) {
options.context.path.push(i)
result.push(
Handle.gen(options.template[i], i, {
currentContext: result,
templateCurrentContext: options.template,
path: options.context.path
})
)
options.context.path.pop()
}
} else {
// 'method|1': ['GET', 'POST', 'HEAD', 'DELETE']
if (options.rule.count === 1 && options.template.length > 1) {
// fix #17
options.context.path.push(options.name)
result = Random.pick(Handle.gen(options.template, undefined, {
currentContext: result,
templateCurrentContext: options.template,
path: options.context.path
}))
options.context.path.pop()
} else {
// 'data|1-10': [{}]
for (i = 0; i < options.rule.count; i++) {
// 'data|1-10': [{}, {}]
j = 0
do {
// 'data|1-10': []
result.push(Handle.gen(options.template[j++]))
} while (j < options.template.length)
}
}
}
return result
},
object: function(options) {
var result = {},
keys, fnKeys, key, parsedKey, inc, i;
// 'obj|min-max': {}
if (options.rule.min) {
keys = Util.keys(options.template)
keys = Random.shuffle(keys)
keys = keys.slice(0, options.rule.count)
for (i = 0; i < keys.length; i++) {
key = keys[i]
parsedKey = key.replace(rkey, '$1')
options.context.path.push(parsedKey)
result[parsedKey] = Handle.gen(options.template[key], key, {
currentContext: result,
templateCurrentContext: options.template,
path: options.context.path
})
options.context.path.pop()
}
} else {
// 'obj': {}
keys = []
fnKeys = [] // #25 改变了非函数属性的顺序,查找起来不方便
for (key in options.template) {
(typeof options.template[key] === 'function' ? fnKeys : keys).push(key)
}
keys = keys.concat(fnKeys)
/*
会改变非函数属性的顺序
keys = Util.keys(options.template)
keys.sort(function(a, b) {
var afn = typeof options.template[a] === 'function'
var bfn = typeof options.template[b] === 'function'
if (afn === bfn) return 0
if (afn && !bfn) return 1
if (!afn && bfn) return -1
})
*/
for (i = 0; i < keys.length; i++) {
key = keys[i]
parsedKey = key.replace(rkey, '$1')
options.context.path.push(parsedKey)
result[parsedKey] = Handle.gen(options.template[key], key, {
currentContext: result,
templateCurrentContext: options.template,
path: options.context.path
})
options.context.path.pop()
// 'id|+1': 1
inc = key.match(rkey)
if (inc && inc[2] && Util.type(options.template[key]) === 'number') {
options.template[key] += parseInt(inc[2], 10)
}
}
}
return result
},
number: function(options) {
var result, parts, i;
if (options.rule.point) { // float
options.template += ''
parts = options.template.split('.')
// 'float1|.1-10': 10,
// 'float2|1-100.1-10': 1,
// 'float3|999.1-10': 1,
// 'float4|.3-10': 123.123,
parts[0] = options.rule.range ? options.rule.count : parts[0]
parts[1] = (parts[1] || '').slice(0, options.rule.dcount)
for (i = 0; parts[1].length < options.rule.dcount; i++) {
parts[1] += Random.character('number')
}
result = parseFloat(parts.join('.'), 10)
} else { // integer
// 'grade1|1-100': 1,
result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template
}
return result
},
boolean: function(options) {
var result;
// 'prop|multiple': false, 当前值是相反值的概率倍数
// 'prop|probability-probability': false, 当前值与相反值的概率
result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template
return result
},
string: function(options) {
var result = '',
i, placeholders, ph, phed;
if (options.template.length) {
// 'star|1-5': '★',
for (i = 0; i < options.rule.count; i++) {
result += options.template
}
// 'email|1-10': '@EMAIL, ',
placeholders = result.match(rplaceholder) || [] // A-Z_0-9 > \w_
for (i = 0; i < placeholders.length; i++) {
ph = placeholders[i]
// TODO 只有转义斜杠是偶数时,才不需要解析占位符?
if (/^\\/.test(ph)) {
placeholders.splice(i--, 1)
continue
}
phed = Handle.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext)
// 只有一个占位符,并且没有其他字符
if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { //
result = phed
break
// if (Util.isNumeric(phed)) {
// result = parseFloat(phed, 10)
// break
// }
// if (/^(true|false)$/.test(phed)) {
// result = phed === 'true' ? true :
// phed === 'false' ? false :
// phed // 已经是布尔值
// break
// }
}
result = result.replace(ph, phed)
}
} else {
// 'ASCII|1-10': '',
// 'ASCII': '',
result = options.rule.range ? Random.string(options.rule.count) : options.template
}
return result
},
'function': function(options) {
return options.template.call(options.context.currentContext)
}
})
Handle.extend({
_all: function() {
var re = {};
for (var key in Random) re[key.toLowerCase()] = key
return re
},
placeholder: function(placeholder, obj, templateContext) {
// 1 key, 2 params
rplaceholder.exec('')
var parts = rplaceholder.exec(placeholder),
key = parts && parts[1],
lkey = key && key.toLowerCase(),
okey = this._all()[lkey],
params = parts && parts[2] || ''
// 解析占位符的参数
try {
// 1. 尝试保持参数的类型
/*
#24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24)
[BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056)
应该属于 Window Firefox 30.0 的 BUG
*/
/* jshint -W061 */
params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')')
} catch (error) {
// 2. 如果失败,只能解析为字符串
// console.error(error)
// if (error instanceof ReferenceError) params = parts[2].split(/,\s*/);
// else throw error
params = parts[2].split(/,\s*/)
}
// 占位符优先引用数据模板中的属性
if (obj && (key in obj)) return obj[key]
if (templateContext &&
(typeof templateContext === 'object') &&
(key in templateContext) &&
(placeholder !== templateContext[key]) // fix #15 避免自己依赖自己
) {
templateContext[key] = Handle.gen(templateContext[key], key, {
currentContext: obj,
templateCurrentContext: templateContext
})
return templateContext[key]
}
if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder
for (var i = 0; i < params.length; i++) {
rplaceholder.exec('')
if (rplaceholder.test(params[i])) {
params[i] = Handle.placeholder(params[i], obj)
}
}
var handle = Random[key] || Random[lkey] || Random[okey]
switch (Util.type(handle)) {
case 'array':
return Random.pick(handle)
case 'function':
var re = handle.apply(Random, params)
if (re === undefined) re = ''
return re
}
}
})
// END(BROWSER)
module.exports = Mock

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc