{"id":19990021,"url":"https://github.com/wujianqi/shai","last_synced_at":"2025-05-04T09:34:12.087Z","repository":{"id":57357817,"uuid":"115863628","full_name":"wujianqi/shai","owner":"wujianqi","description":"数据模拟生成库","archived":false,"fork":false,"pushed_at":"2023-11-10T01:39:31.000Z","size":1376,"stargazers_count":56,"open_issues_count":0,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-09-17T03:14:46.593Z","etag":null,"topics":["chinese-mock","facker","generator","mock","mock-json","ts-mock"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wujianqi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-31T13:08:18.000Z","updated_at":"2023-11-05T01:25:23.000Z","dependencies_parsed_at":"2022-09-26T16:32:28.389Z","dependency_job_id":null,"html_url":"https://github.com/wujianqi/shai","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wujianqi%2Fshai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wujianqi%2Fshai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wujianqi%2Fshai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wujianqi%2Fshai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wujianqi","download_url":"https://codeload.github.com/wujianqi/shai/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224391390,"owners_count":17303609,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chinese-mock","facker","generator","mock","mock-json","ts-mock"],"created_at":"2024-11-13T04:50:54.327Z","updated_at":"2024-11-13T04:51:03.999Z","avatar_url":"https://github.com/wujianqi.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\n## 数据生成与模拟工具库\n\n------\n\n![GitHub file size in bytes](https://img.shields.io/github/size/wujianqi/shai/dist/index.mjs?label=generator)\n![GitHub file size in bytes](https://img.shields.io/github/size/wujianqi/shai/dist/access.mjs?label=access%20size)\n![GitHub file size in bytes](https://img.shields.io/github/size/wujianqi/shai/dist/mock.mjs?label=mock%20size)\n![GitHub file size in bytes](https://img.shields.io/github/size/wujianqi/shai/dist/region.mjs?label=region%20size)\n![npm type definitions](https://img.shields.io/npm/types/shai)\n![npm](https://img.shields.io/npm/v/shai)  \n\n本库介绍 ：  \n- [x] 本库含4个子项，均可独立使用。见各子项引用示例及说明。   \n- [x] 子项1，JSON数组数据生成，支持**多级自嵌套**、指定数量、随机数量生成。   \n- [x] 子项2，快速模拟数据的增、删、改、查，**仿数据记录集CRUD**。    \n- [x] 子项3，常用模拟数据工具库，含44项方法，**轻量级**，文件小。  \n- [x] 子项4，区域数据模拟，可到区县级，生成**对应地区范围的经纬度、电话**等信息。  \n- [x] 库为 ES6，前后端通用，无其它依赖包。  \n\n------\n\n##### 安装：\u0026nbsp; \u0026nbsp; [Demo](https://code.juejin.cn/pen/7297611369761734666)    \n \n\n```npm\nnpm install shai -D\n```\n\n-------\n\n### JSON数组生成\n\n##### 引用库模块及基本用法示例：\n\n```javascript\n\nimport Shai from 'shai';\nimport { web, rand } from 'shai/mock';\n\nconst { use, gen } = new Shai();\n\ngen({\n  setting: 2,\n  username: use(web.account), //use对象，为对应生成数据的函数方法，可以自定义\n  password: use(web.password)\n})\n/* 生成结果（普通数组）：\n[\n  { username: Gdda-3ef, password: dje^Ip\u0026d }, \n  { username: PjKL3m4Y, password: jeF2s@ko }\n]\n*/\n\ngen({\n  setting: {level: 2},\n  num: use(rand.int)\n})\n/* 生成结果（自嵌套）：\n{\n  num:13, \n  children:[{\n    num:7,\n    children: [{\n      num:29\n    }]\n  }]\n}\n*/\n```\n\n------\n\n##### 数组数据生成方法说明\n\n* **use**(func, ...args)  第1个参数为所使用生成数据的方法函数，第2到n个参数为函数的实参设值。  \n* **gen**(data, propKey?) 第1个参数为设定了相关规则的数据对象，第2个为自定义选项的键名（默认为setting）。 \n\n##### 批量对象生成设定规则\n* **setting: number** 设定生成普通数组的长度，值为指定数目。  \n* **setting: [number, number]** 设定生成普通数组的随机长度，值为区间下限及上限数。  \n* **setting: object** 生成自嵌套数组。属性如下：  \n\n\u003e length 子对象数组长度，值为数字，为指定长度，值为2个数字的数组，则为2个数字之间的随机值，不设定则默认1。  \n\u003e key 子对象组的属性名，不设定则默认为children。  \n\u003e level 子对象组的的层级数目，不设定则默认1。   \n\u003e  \n\u003e 提示：嵌套数据层数请谨慎设置，如：setting:{length: 15, level:5}，那么产生的记录是70多万条！为**指数级**。  \n\u003e 建议：使用多级数据模版组合，局部或少量采用嵌套。  \n\n##### 更多数据生成用法示例：\n\n```javascript\n// 可多级配置节点项\nlet data = gen({\n  setting: 3, // 顶层节点设置\n  a: use(cn.fullName),\n  b: [\n      use(text.chinese),\n      {\n        setting: {key: 'items'}, // 子节点设置\n        d: use(text.chinese),\n      }\n  ]\n})\nconsole.log(data);\n\n// 使用不同的对象实例，生成不同范围的值\nlet i1 = util.incre();\nlet i2 = util.incre(2);\nlet data = gen({\n  setting: 3,\n  a: use(i1.val),\n  b: [\n      use(text.chinese),\n      use(i2.val)\n  ]\n})\nconsole.log(data);\n\n// 若setting键名有冲突，可自定义选项键\nlet data = gen({ myKey: 20, num: use(rand.int) }, 'myKey')\nconsole.log(data);\n\n```\n-------\n\n### 仿数据集数组操作（access）\n\n##### 仿数据记录集CRUD操作方法说明  \n\n\u003e 对数组数据，快速仿数据记录集CRUD操作。用法见下面示例。\n\u003e 数据操作不成功，一律返回undefined  \n\n* **create**(params)      新增单条或多条记录，返回该条新记录  \n* **read**(query, mergeObj)  查询单条记录，返回该条记录，可选合并到第二参数对象  \n* **update**(params)      修改单条记录，并返回修改后该行记录 \n* **delete**(query)      删除单条或多条记录，返回成功删除数据的索引值数组  \n* **list**(query?)        普通列表，可选过滤数据的查询条件  \n* **pageList**(query, queryKeys? returnKeys?)    分页列表，可选过滤数据的查询条件，查询对象分页属性必需有当前页码、数量，可选参数2为指定查询参数的页码、数量键名配置选项，可选参数3为指定输出对象的键名配置选项。  \n\n\u003e access.config 全局属性配置说明：\n\n* **uniqueKey**?: string 不重复索引属性名称，默认: id  \n* **uniqueType**? number 索引键类型increment(0)或uuid(1)，默认: 0  \n\n\u003e access.data 数据设值\n\n##### 更多数据生成用法示例：\n\n\n```javascript\nimport Generator, { cn, text, util, rand } from 'shai'; \nimport Access from 'shai/access'; \n\nconst { use, gen } = new Generator();\nconst access = new Access();\nvar im1 =  util.incre();\n\n// 模拟数据\naccess.data = gen({\n  setting: 20,\n  id : use(im1.val),\n  username : use(web.account),\n  password : use(web.password)\n});\n\nlet dt = access.create({ username: 'admin', password: '123456'});\nconsole.log(\"新增数据是否成功\", dt)\n\ndt = access.read({ username: 'admin', password: '111' })\nconsole.log(\"是否存在\", dt)\n\ndt = access.update({id: 10, username: 'admin2', password: '222222'})\nconsole.log(\"更新是否成功\", dt)\n\ndt = access.delete(['11', '28'])\nconsole.log(\"删除是否成功\", dt)\n\ndt = access.list()\nconsole.log(\"获取数据列表\", dt)\n\ndt = access.pageList({ pageSize: 8, pageIndex: 1 })\nconsole.log(\"获取分页数据列表\", dt)\n\n```\n\n-------\n\n\n### 常用数据模拟\n\n##### 用法示例：\n\n```javascript\nimport { rand, util, cn, en, web, text, date } from 'shai/mock'; \n\nconsole.log(rand.str(2, '测试看看'));\nconsole.log(cn.fullName());\n\n```\n\n###### rand 基本随机方法。  \n\u003e 随机的基础方法  \n\n方法名 | 用途 | 参数说明\n-|-|- \nint | 随机整数 | 可选2个参数为限定数字区间\nnumber | 随机数字，含浮点数 | 可选前2个参数为限定数字区间，可选第3个参数为小数点位数。\npick | 随机选择数组项中1个或多个 | 必选参数1为数组内容，可选参数2为选择项数目，没有则默认1个。\nstr | 随机字符串 | 可选参数1为选择字符数目，默认10，可选参数2为限定字符串内容。\nbool | 随机真假值 | \nonce | 随机有或无(空白) | 必选参数1为随机字符串内容。\nletter | 随机字母 | 可选参数1为选择字符数目，默认10，可选参数2为是否限定为大写字母，默认否。可选参数3为是否大小写混合，默认是。\nnumstr | 随机数字字符串 | 可选参数1为选择字符数目，默认10。\nalphanum | 随机字母+数字 | 可选参数1为选择字符数目，默认10，可选参数2为是否限定为大写字母，默认否。\nplus | 随机扩展字符，即大小写+数字+扩展 | 必选参数1为字符数目，默认10，必选参数2为所扩展的字符内容。\nhex | 随机16进制字符 | 可选参数1为选择字符数目\nshuffle | 随机打乱字符或数组位置 | 必选参数1为指定内容\n\n###### date 时间  \n\u003e 时间数据生成   \n\n方法名 | 用途 | 参数说明\n-|-|- \ntime | 随机时间| 可选前2个参数为限定时间范围，参数1，开始时间，参数2，结束时间。\u003cbr\u003e可选参数3为格式化样式YYYY/MM/DD HH:mm:ss，输出为string。  \nnow | 当前时间 | 可选参数1为格式化样式YYYY/MM/DD HH:mm:ss, 输出为string。  \nyear | 年，数字 | \nmonth | 月，数字 | \nday | 天，数字 | \nhour | 时，数字 | \nminute | 分，数字 | \n\n###### util 格式数据生成\n\u003e  特定格式数据生成  \n\n方法名 | 用途 | 参数说明\n-|-|- \nincre | 自增数 | 可选参数1为自增步长，\u003cbr\u003e可选参数2为基数，返回对象为Increment的实例，\u003cbr\u003e获取值的方式：util.incre().val()\nrange | 区间数 | 必选参数1为下限数字，必选参数2为上限数字，\u003cbr\u003e 可选参数3位步长\nuuid | GUID / UUID | 以时间为因子生成的UUID，可选参数1位连接符，默认为-， 也可以空白\n\n###### text 文本块\n\u003e 文本块生成  \n\n方法名 | 用途 | 参数说明\n-|-|- \nrepeat | 重复文本块 | 可选参数1为重复次数，默认10，可选参数2为指定文本内容。\nchinese | 中文文本块 | 可选参数1为文本长度，默认10\n\n###### cn 中文地区、公司、个人信息\n\u003e中文地区、公司、个人信息数据生成  \n\n方法名 | 用途 | 参数说明\n-|-|- \nfirstName | 姓 |\nmaleName | 男性 名字 | \nfemaleName | 女性 名字 | \nfullName | 全称名字，含男女 | \ncountry | 国名 |\ncompany | 公司名称 | \nmobile | 手机号码 | \nroad | 路名 | \nbuild | 建筑物名 | \nphone | 电话 | \nzipcode | 邮编 | \nidcard | 身份证号 | \nautocard | 车牌号 | \n\n###### en 英文信息\n\u003e 同上，仅为英文  \n\n方法名 | 用途 | 参数说明\n-|-|- \nfirstName | 姓\nmaleName | 男性 名字 | \nfemaleName | 女性 名字 | \nfullName | 全称名字，含男女 | \ncountry | 国名 |\n\n\n###### web 网络、账号等信息\n\u003e 网络、账号等信息生成\n\n方法名 | 用途 | 参数说明\n-|-|- \naccount | 账号名 | \npassword | 密码 | \nqq | QQ号 | \ndomain | 域名 | \nurl | 网页地址 | 可选参数1，为协议名前缀，如https、ws\nemail | 邮编 | \nip | IPV4地址 | 可选参数1，为局域网IP\ncolor | 颜色值 | \n\n-------\n\n### 区域数据模拟（仅限中国大陆地区）\n\u003e 数据生成方式：同区划级别范围内循环。  \n\u003e 更新于2020.10月 [民政部数据](http://www.mca.gov.cn/article/sj/xzqh/2020/)。  \n\n##### 用法示例：  \n\n```javascript\nimport Region from 'shai/region'; \n\nlet region = new Region(440300);  // 实例化的参数可选，没有指定则随机全国\n\nconsole.log(region.longitude());\nconsole.log(region.prefecture());\nconsole.log(region.idcard());\n\n```\n\n方法名 | 用途 | 参数说明\n-|-|- \nprovince | 省直辖市 名称 | \nprefecture | 市州盟 名称 | 可选参数1，是否更新为下一个同级市，默认false不更新。\u003cbr\u003e实例参数已指定为市、县级区划则无效\ncounty | 县区 名称 | 可选参数1，是否更新为下一个同级县，默认false不更新。\u003cbr\u003e实例参数已指定为县级区划则无效\nlongitude | 地理坐标，经度 | \nlatitude | 地理坐标，纬度 | \ncitycode | 县区级6位行政区划代码 | \nphone | 电话 | \nzipcode | 邮编 | \nidcard | 身份证号 | \nautocard | 车牌号 | \n\n-------\n\n##### 更多模拟库推荐\n\n如果本库不能满足需求，可结合以下库来组合开发。\n\n* 正则模拟： [randexp](https://github.com/fent/randexp.js)  \n* 颜色随机： [random color](https://github.com/davidmerfield/randomColor)  \n* 图片数据：[holder](https://github.com/imsky/holder)  \n* axios请求拦截： [axios-mock-adapter](https://github.com/ctimmerm/axios-mock-adapter)  \n* API服务模拟： [msw](https://github.com/mswjs/msw)   \n* API服务模拟： [json-server](https://github.com/typicode/json-server)   \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwujianqi%2Fshai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwujianqi%2Fshai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwujianqi%2Fshai/lists"}