Comparing version 0.1.10 to 1.0.0-beta1
{ | ||
"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). |
414
src/mock.js
@@ -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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Wildcard dependency
QualityPackage has a dependency with a floating version range. This can cause issues if the dependency publishes a new major version.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
High entropy strings
Supply chain riskContains high entropy strings. This could be a sign of encrypted data, leaked secrets or obfuscated code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
1801470
10
18740
60
1
31
8
8
+ Addedcommander@12.1.0(transitive)
- Removedcommander@1.3.2(transitive)
- Removedkeypress@0.1.0(transitive)
Updatedcommander@*