npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

shai

v0.4.1

Published

数据模拟库

Downloads

86

Readme

数据生成与模拟工具库


GitHub file size in bytes GitHub file size in bytes GitHub file size in bytes GitHub file size in bytes npm type definitions npm

本库介绍 :

  • [x] 本库含4个子项,均可独立使用。见各子项引用示例及说明。
  • [x] 子项1,JSON数组数据生成,支持多级自嵌套、指定数量、随机数量生成。
  • [x] 子项2,快速模拟数据的增、删、改、查,仿数据记录集CRUD
  • [x] 子项3,常用模拟数据工具库,含44项方法,轻量级,文件小。
  • [x] 子项4,区域数据模拟,可到区县级,生成对应地区范围的经纬度、电话等信息。
  • [x] 库为 ES6,前后端通用,无其它依赖包。

安装:    Demo
npm install shai -D

JSON数组生成

引用库模块及基本用法示例:

import Shai from 'shai';
import { web, rand } from 'shai/mock';

const { use, gen } = new Shai();

gen({
  setting: 2,
  username: use(web.account), //use对象,为对应生成数据的函数方法,可以自定义
  password: use(web.password)
})
/* 生成结果(普通数组):
[
  { username: Gdda-3ef, password: dje^Ip&d }, 
  { username: PjKL3m4Y, password: jeF2s@ko }
]
*/

gen({
  setting: {level: 2},
  num: use(rand.int)
})
/* 生成结果(自嵌套):
{
  num:13, 
  children:[{
    num:7,
    children: [{
      num:29
    }]
  }]
}
*/

数组数据生成方法说明
  • use(func, ...args) 第1个参数为所使用生成数据的方法函数,第2到n个参数为函数的实参设值。
  • gen(data, propKey?) 第1个参数为设定了相关规则的数据对象,第2个为自定义选项的键名(默认为setting)。
批量对象生成设定规则
  • setting: number 设定生成普通数组的长度,值为指定数目。
  • setting: [number, number] 设定生成普通数组的随机长度,值为区间下限及上限数。
  • setting: object 生成自嵌套数组。属性如下:

length 子对象数组长度,值为数字,为指定长度,值为2个数字的数组,则为2个数字之间的随机值,不设定则默认1。
key 子对象组的属性名,不设定则默认为children。
level 子对象组的的层级数目,不设定则默认1。

提示:嵌套数据层数请谨慎设置,如:setting:{length: 15, level:5},那么产生的记录是70多万条!为指数级
建议:使用多级数据模版组合,局部或少量采用嵌套。

更多数据生成用法示例:
// 可多级配置节点项
let data = gen({
  setting: 3, // 顶层节点设置
  a: use(cn.fullName),
  b: [
      use(text.chinese),
      {
        setting: {key: 'items'}, // 子节点设置
        d: use(text.chinese),
      }
  ]
})
console.log(data);

// 使用不同的对象实例,生成不同范围的值
let i1 = util.incre();
let i2 = util.incre(2);
let data = gen({
  setting: 3,
  a: use(i1.val),
  b: [
      use(text.chinese),
      use(i2.val)
  ]
})
console.log(data);

// 若setting键名有冲突,可自定义选项键
let data = gen({ myKey: 20, num: use(rand.int) }, 'myKey')
console.log(data);

仿数据集数组操作(access)

仿数据记录集CRUD操作方法说明

对数组数据,快速仿数据记录集CRUD操作。用法见下面示例。 数据操作不成功,一律返回undefined

  • create(params) 新增单条或多条记录,返回该条新记录
  • read(query, mergeObj) 查询单条记录,返回该条记录,可选合并到第二参数对象
  • update(params) 修改单条记录,并返回修改后该行记录
  • delete(query) 删除单条或多条记录,返回成功删除数据的索引值数组
  • list(query?) 普通列表,可选过滤数据的查询条件
  • pageList(query, queryKeys? returnKeys?) 分页列表,可选过滤数据的查询条件,查询对象分页属性必需有当前页码、数量,可选参数2为指定查询参数的页码、数量键名配置选项,可选参数3为指定输出对象的键名配置选项。

access.config 全局属性配置说明:

  • uniqueKey?: string 不重复索引属性名称,默认: id
  • uniqueType? number 索引键类型increment(0)或uuid(1),默认: 0

access.data 数据设值

更多数据生成用法示例:
import Generator, { cn, text, util, rand } from 'shai'; 
import Access from 'shai/access'; 

const { use, gen } = new Generator();
const access = new Access();
var im1 =  util.incre();

// 模拟数据
access.data = gen({
  setting: 20,
  id : use(im1.val),
  username : use(web.account),
  password : use(web.password)
});

let dt = access.create({ username: 'admin', password: '123456'});
console.log("新增数据是否成功", dt)

dt = access.read({ username: 'admin', password: '111' })
console.log("是否存在", dt)

dt = access.update({id: 10, username: 'admin2', password: '222222'})
console.log("更新是否成功", dt)

dt = access.delete(['11', '28'])
console.log("删除是否成功", dt)

dt = access.list()
console.log("获取数据列表", dt)

dt = access.pageList({ pageSize: 8, pageIndex: 1 })
console.log("获取分页数据列表", dt)

常用数据模拟

用法示例:
import { rand, util, cn, en, web, text, date } from 'shai/mock'; 

console.log(rand.str(2, '测试看看'));
console.log(cn.fullName());
rand 基本随机方法。

随机的基础方法

方法名 | 用途 | 参数说明 -|-|- int | 随机整数 | 可选2个参数为限定数字区间 number | 随机数字,含浮点数 | 可选前2个参数为限定数字区间,可选第3个参数为小数点位数。 pick | 随机选择数组项中1个或多个 | 必选参数1为数组内容,可选参数2为选择项数目,没有则默认1个。 str | 随机字符串 | 可选参数1为选择字符数目,默认10,可选参数2为限定字符串内容。 bool | 随机真假值 | once | 随机有或无(空白) | 必选参数1为随机字符串内容。 letter | 随机字母 | 可选参数1为选择字符数目,默认10,可选参数2为是否限定为大写字母,默认否。可选参数3为是否大小写混合,默认是。 numstr | 随机数字字符串 | 可选参数1为选择字符数目,默认10。 alphanum | 随机字母+数字 | 可选参数1为选择字符数目,默认10,可选参数2为是否限定为大写字母,默认否。 plus | 随机扩展字符,即大小写+数字+扩展 | 必选参数1为字符数目,默认10,必选参数2为所扩展的字符内容。 hex | 随机16进制字符 | 可选参数1为选择字符数目 shuffle | 随机打乱字符或数组位置 | 必选参数1为指定内容

date 时间

时间数据生成

方法名 | 用途 | 参数说明 -|-|- time | 随机时间| 可选前2个参数为限定时间范围,参数1,开始时间,参数2,结束时间。可选参数3为格式化样式YYYY/MM/DD HH:mm:ss,输出为string。
now | 当前时间 | 可选参数1为格式化样式YYYY/MM/DD HH:mm:ss, 输出为string。
year | 年,数字 | month | 月,数字 | day | 天,数字 | hour | 时,数字 | minute | 分,数字 |

util 格式数据生成

特定格式数据生成

方法名 | 用途 | 参数说明 -|-|- incre | 自增数 | 可选参数1为自增步长,可选参数2为基数,返回对象为Increment的实例,获取值的方式:util.incre().val() range | 区间数 | 必选参数1为下限数字,必选参数2为上限数字, 可选参数3位步长 uuid | GUID / UUID | 以时间为因子生成的UUID,可选参数1位连接符,默认为-, 也可以空白

text 文本块

文本块生成

方法名 | 用途 | 参数说明 -|-|- repeat | 重复文本块 | 可选参数1为重复次数,默认10,可选参数2为指定文本内容。 chinese | 中文文本块 | 可选参数1为文本长度,默认10

cn 中文地区、公司、个人信息

中文地区、公司、个人信息数据生成

方法名 | 用途 | 参数说明 -|-|- firstName | 姓 | maleName | 男性 名字 | femaleName | 女性 名字 | fullName | 全称名字,含男女 | country | 国名 | company | 公司名称 | mobile | 手机号码 | road | 路名 | build | 建筑物名 | phone | 电话 | zipcode | 邮编 | idcard | 身份证号 | autocard | 车牌号 |

en 英文信息

同上,仅为英文

方法名 | 用途 | 参数说明 -|-|- firstName | 姓 maleName | 男性 名字 | femaleName | 女性 名字 | fullName | 全称名字,含男女 | country | 国名 |

web 网络、账号等信息

网络、账号等信息生成

方法名 | 用途 | 参数说明 -|-|- account | 账号名 | password | 密码 | qq | QQ号 | domain | 域名 | url | 网页地址 | 可选参数1,为协议名前缀,如https、ws email | 邮编 | ip | IPV4地址 | 可选参数1,为局域网IP color | 颜色值 |


区域数据模拟(仅限中国大陆地区)

数据生成方式:同区划级别范围内循环。
更新于2020.10月 民政部数据

用法示例:
import Region from 'shai/region'; 

let region = new Region(440300);  // 实例化的参数可选,没有指定则随机全国

console.log(region.longitude());
console.log(region.prefecture());
console.log(region.idcard());

方法名 | 用途 | 参数说明 -|-|- province | 省直辖市 名称 | prefecture | 市州盟 名称 | 可选参数1,是否更新为下一个同级市,默认false不更新。实例参数已指定为市、县级区划则无效 county | 县区 名称 | 可选参数1,是否更新为下一个同级县,默认false不更新。实例参数已指定为县级区划则无效 longitude | 地理坐标,经度 | latitude | 地理坐标,纬度 | citycode | 县区级6位行政区划代码 | phone | 电话 | zipcode | 邮编 | idcard | 身份证号 | autocard | 车牌号 |


更多模拟库推荐

如果本库不能满足需求,可结合以下库来组合开发。