@dasmig/persona

中文文档
1.7.1发布于 2026/11/10MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 2189

完全虚构的人物(姓名、国家、城市、出生、身体、个性、兴趣、工作),来自一个种子电话,在WebAssembly.

中文使用文档
文档目录9 节
  1. 安装
  2. 正在装入
  3. 请求
  4. 结果
  5. 电池
  6. 重放人物为
  7. 数据
  8. 版本数
  9. 许可证

@ dasmig/ 个人

npm license node types

完全虚构的人物 来自一个种子的呼叫:姓名,国家,城市,出生日期和年龄,身体,人格,宗教,爱好,最喜欢的媒体和工作. 没错 人为生成者 (C++23) 编译到WebAssembly,与 lite 它所构建的8个库的数据,所以运行时没有获取到任何数据,而是模块本身的 persona.wasm。 。 。 .

输出是虚构的样本数据,而不是真实人物的描述或预测.

import { createPersonaGenerator } from '@dasmig/persona';

createPersonaGenerator().then(personas => {
  const p = personas.generate({ country: 'BR', sex: 'female', ages: { min: 25, max: 40 } });
  console.log(p.name, p.age, p.city.name, p.occupation.job?.label);

  // The same seed, request and data give the same persona, on every platform.
  const again = personas.generate({ country: 'BR', sex: 'female', ages: { min: 25, max: 40 }, seed: p.signature.seed });
});

安装

npm install @dasmig/persona

该套件仅是ES模块(没有通用JS构建),用于浏览器,Web Workers和Node 20+.

它自行运送了TypeScript类型(index.d.ts)和WebAssembly模块(Apersona.wasm,大约8 MB,在3 MB 下压缩),例如Vite、webpack和esbuild等捆绑机从中取出 new URL('persona.wasm', import.meta.url); 通过 locateFile 或者说 wasmBinary 改为 createPersonaGenerator() 以其他方式装入。 它没有依赖关系.

正在装入

createPersonaGenerator() 即时化模块并加载所有八个库的数据。 这需要 秒或两秒 (大约1.4 s在桌面上,更多在电话上)并屏蔽它运行的线程,一个生成器使用大约90 MB的内存. 所以说:

  • 创建一个生成器并重用它 . 每人大约需要一毫秒的三分之一.
  • 在浏览器中, 在 Web Worker 中创建它 因此,页面保持响应, 并张贴个人(Plain JSON)回来:
// persona-worker.js, started with new Worker(new URL('./persona-worker.js', import.meta.url), { type: 'module' })
import { createPersonaGenerator } from '@dasmig/persona';

const ready = createPersonaGenerator();
onmessage = async ({ data: request }) => {
  const personas = await ready;
  try {
    postMessage({ persona: personas.generate(request) });
  } catch (error) {
    postMessage({ error: error.message });
  }
};

模块在一个浏览器中找到 persona.wasm 下边(new URL('persona.wasm', import.meta.url)) (中文(简体) ). Vite和Webpack 5遵循这一点,将文件作为资产放出;Webpack警告说,它超过了建议的资产规模,这是预期的. 要从别处提供文件,请通过 Emscripten's locateFile,或以 wasmBinary数字 :

const personas = await createPersonaGenerator({ locateFile: file => '/assets/' + file });

在节点,包 node 导出为 persona.wasm 从磁盘.

persona.wasm 是8.3 MB,大部分数据(城市和名称列表): 2.8 MB为gzip, 2.2 MB为brotli. 把它压缩.

请求

每个领域都是可选的。 所遗漏的东西是抽取的;所给的条件是赖以抽取的。 由国家定出城市,取名文化,身体和工作;由年龄和性别定出其余的.

外地类型默认
countryISO 3166-1 α-2 代码来自 personas.countries (79个国家),任何案件一个 personas.countries按人口加权
sex'male' 或者说 'female'与生俱来
ages{ min, max },完成年份,0-120国家时代金字塔
traits个性特征数, 0 到 personas.maxTraits3个
referenceDate'YYYY-MM-DD' 或一个 Date (当地日期),1900-2100'2023-07-01'
relationstrue,或 { up, down, siblings, partners, names, stepparents, home }: 也把人的家人引入 relatives无
identitytrue 国家编号,或 { documents: ['passport', 'id_card'] } 添加文档无
financetrue 用于一个活期账户,或 { accounts, cards, cardNumbers, network }:机会,由该国全球指数股份无
safetrue 用图书馆的安全方法制作数字、文档、账户和卡片false
hometrue,或 { type, tenure, area } 强迫他们:还引出人格的家 home 及其家庭收入 household_income无
seedA 类 bigint,非负式安全整数,或 十六进制 字符串随机
  • 国家. 只有国家 personas.countries 在所有八个库中都有数据,所以另一个代码是一个错误而不是一个名字来自错误文化的人.
  • 特质. 当没有其他特性与已经选择的特性相容时,返回的特性比要求的少(一组中的两块相互排斥).
  • 证件和钱包. 数字、账户和卡片是测试数据。 无 safe 它们结构上是有效的,可能与真实的人相符:永远不要使用它们来识别任何人,开户,通过支票,或者在现场支付系统上. 见 限制。 。 。 .
  • 诸眷属. relations: true 添加 relatives:人的父母、兄弟姐妹、同父异母的兄弟姐妹、伴侣和儿童(up: 2 加上祖父母, down: 2 孙子们),每个都有名字,出生日期,而对于死者来说,有死亡日期,由"活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活 edges。 。 。 . members[0] 就是那个人. stepparents: true 增加父母的新伴侣( )stepfather, (中文(简体) ), stepmother,带有 step_parent_of 子女,父母与子女(同父异母)和他们自己的子女stepsibling和 home: true 添加 household和这个人住在一起 两者都是默认关闭的. 家族有自有的种子溪流,所以其余的人物a与所生的和所生的相同.
  • 归. home: true 添加 home (财产继承人的住房类型、使用权、房间、面积、建造年份和 monthly_cost和 household_income家里每个人都能赚多少 与 relations家适合我们家 household家是开着的;没有家,家是单独吸引的. monthly_cost 财务报告和审定财务报表 household_income 为: null 当家里没人挣钱的时候.
  • 约会. 发电机从不读钟 过 referenceDate: new Date() 从今天开始,如果人必须重播,则保留与种子的日期.
  • 种子来. 种子为64位无符号整数. 字符串读取为十六进制,可选择在 0x,这是形式 signature.seed数字 : seed: '42' 是 0x42(66),而不是42。 使用一个 bigint 以上种子的十六进制字符串 Number.MAX_SAFE_INTEGER。 。 。 .

生成任何内容前的无效请求: a TypeError 对于错误类型或未知字段(错误的字段) contry 是一个错误,而不是一个随机的国家)和 RangeError 用于超出范围的值。 信息说哪个领域和为什么。 一个失败的呼叫让生成器可用 .

结果

generate() 返回 a Persona (见 index.d.ts) (中文(简体) ). 它已经 name, (中文(简体) ), sex, (中文(简体) ), age, (中文(简体) ), admin1 (州或省)和 signature,而每个图书馆自己的结果在 country, (中文(简体) ), city, (中文(简体) ), birth, (中文(简体) ), biodata, (中文(简体) ), personality, (中文(简体) ), interest 财务报告和审定财务报表 occupation。 。 。 . generateJson() 返回与 JSON 文本相同的文本,与 C++ 库所写的文本完全相同.

每个部分都取自自己的随机流,从人物的种子中分出. 强迫一种选择不会转移不相干的部分:与另一种性别的同种保持了城市和个性.

电池

对于测试数据和种群,从一批种子中生成许多人:

// 10,000 personas, as objects or as JSON Lines (one persona per line).
const people = personas.generateBatch({ request: { country: 'BR' }, count: 10000, seed: 42 });
const lines = personas.generateBatchJsonl({ request: { country: 'BR' }, count: 10000, seed: 42 });

// The same personas, split across workers (Web Workers in a browser, worker threads in Node).
import { createPersonaPool } from '@dasmig/persona';
const pool = await createPersonaPool({ workers: 4 });
const same = await pool.generateBatchJsonl({ request: { country: 'BR' }, count: 10000, seed: 42 });
pool.close();
  • 个人a i 一组 没错 generate({ ...request, seed }) 分批出产的种子 i (单位:千美元)core::item_seed 在 C++ 库中。 因此,任何一个人从自己的 signature.seed,可以单独生成一个范围(first: 1000 起始于 persona 1000),相继相继相继相继的两批相继而相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相.
  • 选项. request (以上字段除外) seed, (中文(简体) ), count (0至2^31-1), (中文(简体) ), seed (一个如果被忽略的随机的,使批次无法重复)和 first (默认为0).
  • 速为. 在节点24的一台发电机上,大约每秒14000人,20,000人,有2个和38,000个池子,有4个池子,一旦池子开始(约半秒). JSON 线条格式跳过构建对象.
  • 记忆. 每个工人都加载自己的模块,大约60 MB,一个池子默认核数,最多4个. 游泳池需要没有 SharedArrayBuffer,所以它在任意一页都起作用:片段作为字符串行走.
  • 在浏览器中, 池启动模块 Web Works from pool-worker.mjs ; 后面的捆绑器 new URL(..., import.meta.url) 捡起.

重放人物为

要在以后(例如,从保存的游戏中)重现一个人,则存储其 signature.seed 和它提出的要求,包括: referenceDate。 。 。 .

同样的种子和请求给予相同的人a 只有相同数据。 。 。 . personas.dataHash 查明所有八个图书馆的数据, personas.identityDataHash id -生成者, personas.financeDataHash 金融创造者, personas.propertyDataHash 财务报告和审定财务报表 personas.relationshipDataHash 两个家庭加,和 personas.versions 列出模块创建的库版本。 存储 dataHash 与种子相伴:如果一个软件包更新更改了它,被保存的种子会给出不同的人称.

一个人的每个部分a 还有一个 signature,拥有自己的种子和库中的数据散列.

数据

这些数据来自开放式数据集(地名、mledoze/countries、联合国世界人口前景、NCD-RisC、CIA世界概况介绍、劳工组织统计数据库等)以及为图书馆编写的目录. DATA_LICENSES.txt 列出每个来源及其许可证。 名字来自 名称数据集; 参见名称生成器的 数据说明 因为它的来源.

每个图书馆自行记录其数据限制 doc/data.md。 。 。 .

版本数

软件包版本是自己的. personas.versions 列出个人生成器的释放和库的释放 persona-generator: 'v3.0.0'),每个软件包的放行都标记 package-v<version> 输入 仓库,带有其注释中包含的图书馆版本. 同种种子只为同类库版本提供同人称,因此更改输出的库更新是包的主要版本.

资料来源: 遗传/包装问题: github.com/dasmig/人-生成人/问题。 。 。 .

许可证

代码的麻省理工学院;见 DATA_LICENSES.txt 数据.

版本与发布记录

@dasmig/persona 共发布 13 个版本,首次发布于 2026/10/19;过去 12 个月发布了 13 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.7.1latest2026/11/101 天前
1.7.02026/11/083 天前
1.6.02026/11/074 天前
1.5.02026/10/2517 天前
1.4.02026/10/2220 天前
1.3.02026/10/2220 天前

关于 @dasmig/persona 的常见问题

@dasmig/persona 是什么?

完全虚构的人物(姓名、国家、城市、出生、身体、个性、兴趣、工作),来自一个种子电话,在WebAssembly.

如何安装 @dasmig/persona?

在项目目录运行 npm install @dasmig/persona,或使用 pnpm add / yarn add / bun add。

@dasmig/persona 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dasmig/persona 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@dasmig/persona 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dasmig/persona 可以商用吗?

@dasmig/persona 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dasmig/persona 的下载量有多少?

根据 npm 官方下载统计,@dasmig/persona 在 2026/10/12 – 2026/11/10 这 30 天内被下载 2,189 次,日均约 73 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dasmig/persona 还在维护吗?

最新版本 1.7.1 发布于 2026/11/10(1 天前);至今共发布 13 个版本,其中过去 12 个月发布了 13 个;首次发布于 2026/10/19。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。