@dpaskhin/ 独一无二
@dpaskhin/ 独一无二 是用于生成独特值的 TypeScript 库。 它通过拒绝重复来保证不重复 并重试直到找到新结果。 确保非重复随机值的理想值 .
目录
安装
要安装 @dpaskhin/ 独一无二,运行 :
npm install --save-dev @dpaskhin/unique
或者,如果你使用pnpm:
pnpm add --save-dev @dpaskhin/unique
特征
- 根据任何函数或平方值的输出生成独特的值.
- 支助
custom存储或global存储用于独有性跟踪. - 可配置
retry财务报告和审定财务报表timeout选项. stringifier支持在特性检查时自定义处理复杂对象.
使用量
基本示例
这里有一个使用 @dpaskhin/ 独一无二数字 :
import { unique } from '@dpaskhin/unique';
// Outputs a unique random number each time
console.log(unique(Math.random));
console.log(unique(Math.random));
console.log(unique(Math.random));
Faker.js 示例
@dpaskhin/ 独一无二 和图书馆合作得很好 Faker.js (英语) 用于生成唯一 随机数据.
import { unique, uniqueFactory } from '@dpaskhin/unique';
import { faker } from '@faker-js/faker';
// Outputs a unique first name each time
console.log(unique(faker.person.firstName));
console.log(unique(faker.person.firstName));
console.log(unique(faker.person.firstName));
// ----------------------------------------
const createUniqueUser = uniqueFactory(() => ({
firstName: faker.person.firstName(),
lastName: faker.person.lastName(),
age: faker.number.int({ min: 18, max: 100 }),
}));
// Each output user is structurally unique
console.log(createUniqueUser());
console.log(createUniqueUser());
console.log(createUniqueUser());
自定义存储
你可以提供自己的商店 来隔离独特的检查。 这确保了在以下范围内跟踪独特性: 你的申请.
import { unique } from '@dpaskhin/unique';
const scopedStore = new Set();
// Outputs a unique random number
console.log(unique(Math.random, [], { store: scopedStore }));
全球存储
如果您不提供自定义商店, 图书馆会使用 全球 默认。 这可以有用,如果你 想要跟踪您应用程序不同部分的独特值.
import { unique, GLOBAL_STORE } from '@dpaskhin/unique';
// Use the global store for uniqueness checks
const uniqueRandomValue1 = unique(Math.random);
const uniqueRandomValue2 = unique(Math.random);
// Outputs two unique random values
console.log(uniqueRandomValue1, uniqueRandomValue2);
// Clear the global store when needed
GLOBAL_STORE.clear();
不包括具体价值
您也可以提供排除列表,以防止特定值在独特性检查时被考虑.
import { uniqueFactory } from '@dpaskhin/unique';
const createUniqueRandom = uniqueFactory(Math.random, {
// Prevents these values from being returned
exclude: [0.5, 0.6],
});
// Outputs a unique random number, excluding 0.5 and 0.6
console.log(createUniqueRandom());
复杂对象或其他非原始类型的字符串
这个 字符串 选项允许您处理复杂的对象,将它们转换成字符串进行独有性检查.
默认a JSON.stringify- 使用基于字符串符——它另外区分 NaN编号 :Infinity编号 :-Infinity
从 null (裸着) JSON.stringify 否则就会崩溃 "null" 并总是返回真实
字符串,甚至对数值如 undefined 对其中 JSON.stringify 自动返回 undefined。 。 。 .
import { uniqueFactory } from '@dpaskhin/unique';
import { faker } from '@faker-js/faker';
import JsonMarshal from 'json-marshal';
const createUniqueUser = uniqueFactory(
() => ({
name: faker.person.firstName(),
age: faker.number.int({ min: 18, max: 100 }),
}),
{
// Here can be any function that takes the return value of the function provided above and converts it to a string.
// Or just omit it to use the default stringifier described above.
stringifier: JsonMarshal.stringify,
}
);
const user1 = createUniqueUser();
const user2 = createUniqueUser();
// Outputs two unique users
console.log(user1, user2);
API 参考
唯一事实( fn, 选项)
创建一个功能,确保根据所提供的函数 fn 得出独特的结果.
参数
- fn - 用于生成值的函数.
- 选项 - 可选。 包含配置选项的对象 :
- 存储 (Set):用于跟踪独特值的自定义商店. 默认为 a 新设置。 。 。 .
- 最大存储量 (数字):在投出出出错前生成唯一值的最大重试次数. 默认为50.
- 最大时间 (数字):在投出一个 错误。 默认为50ms.
- 排除 (Array):从结果集中排除的数值列表. 这些值不会是 由唯一生成器返回.
- 字符串 (函数):在存储结果之前将结果字符串的函数 。 默认为 a
JSON.stringify- 基于 字符串( 见 复杂对象的字符串) (中文(简体) ).
回返
一个函数以相同的签名生成基于 fn 的独特值.
示例
import { uniqueFactory } from '@dpaskhin/unique';
import { faker } from '@faker-js/faker';
const createUniqueUser = uniqueFactory(() => ({
name: faker.person.firstName(),
age: faker.number.int({ min: 18, max: 100 }),
}));
// Outputs a unique user each time
console.log(createUniqueUser());
console.log(createUniqueUser());
console.log(createUniqueUser());
独有( fn, 参数, 选项)
通过运行 fn 和通过提供或全球商店确保独有性来生成一个独特的值.
参数
- fn - 用于生成值的函数.
- args - 可选. 一系列要传递到 fn 的参数 .
- 选项 - 可选。 包含配置选项的对象 :
- 存储 (Set):用于跟踪独特值的自定义商店. 默认情况下 全球 已使用.
- 最大存储量 (数字):在投出出出错前生成唯一值的最大重试次数. 默认为50.
- 最大时间 (数字):在投出一个 错误。 默认为50ms.
- 排除 (Array):从结果集中排除的数值列表. 这些值不会是 由唯一生成器返回.
- 字符串 (函数):在存储结果之前将结果字符串的函数 。 默认为 a
JSON.stringify- 基于 字符串( 见 复杂对象的字符串) (中文(简体) ).
回返
由 fn 生成的独特值 .
示例
import { unique } from '@dpaskhin/unique';
import { faker } from '@faker-js/faker';
const uniqueEmail = unique(faker.internet.email, [
{
firstName: faker.person.firstName(),
lastName: faker.person.lastName(),
},
]);
// Outputs a unique email
console.log(uniqueEmail);
独有( 值, 选项)
通过检查所提供的或全球商店,确保纯值是独一无二的.
参数
- 值 - 纯值(非功能性),以确保其独特性.
- 选项 - 可选。 包含配置选项的对象 :
- 存储 (Set):用于跟踪独特值的自定义商店. 默认情况下 全球 已使用.
- 排除 (Array):要排除的数值列表. 这些值不会被添加到存储或返回 .
- 字符串 (函数):一个在存储之前将值字符串的函数 。 默认为 a
JSON.stringify- 基于 字符串( 见 复杂对象的字符串) (中文(简体) ).
回返
提供的独特价值.
示例
这个超载是用来检查您已经拥有的值—— 不是随机生成的值—— 对一个商店, 例如一发子弹 从用户输入中得出 :
import { unique } from '@dpaskhin/unique';
const usedSlugs = new Set();
function toSlug(title: string) {
return unique(title.toLowerCase().replace(/\s+/g, '-'), { store: usedSlugs });
}
console.log(toSlug('Hello World')); // 'hello-world'
toSlug('Hello World'); // throws UniqueError — slug already taken
唯一错误
所抛出的错误类 uniqueFactory编号 :unique 当无法产生独特的价值时。 扩展 Error。 。 。 .
字段
- 存储大小 (数字):商店在失败时所持有的数值数.
- 会期 (数字):在放弃前曾尝试过多久(以毫秒计)的一代.
- 重复次数 (数字):在放弃之前,生成器函数被调用多少次.
见 处理错误 以下为用法示例.
全球
模块级别 Set 用于 unique() 不提供习惯的电话 store 选项。 分享整个你
默认应用——见 全球存储 上文,以及 最佳做法 何时
避开它.
处理错误
uniqueFactory编号 :unique 丢出一个 UniqueError 当它们不能产生独特的价值时:
- 用于基于函数的生成
uniqueFactory(fn), (中文(简体) ),unique(fn, args)这一次maxRetries或者说maxTime超过. - 用于平价形式(
unique(value)如果value已经在店里了.
UniqueError 以导出, 这样您就可以检查它, 而不是分析错误消息 :
import { unique, UniqueError } from '@dpaskhin/unique';
try {
unique(() => Math.floor(Math.random() * 2), [], { maxRetries: 5 });
} catch (error) {
if (error instanceof UniqueError) {
console.error(error.message);
console.error(error.storeSize, error.iterations, error.duration);
}
}
最佳做法
- 在需要本地特性时避免使用全球商店,因为它可能导致出乎意料的结果 由于共享状态.
- 配置 Max Retries和超时: 根据预期的独特性和复杂性自定义最大 Retries和最大时间 的数值.
- 避免使用纯值,更喜欢生成函数来进行灵活性和再试.
许可证
@dpaskhin/ 独一无二 根据麻省理工学院的许可证颁发执照.
捐款
欢迎捐款! 如果你有想法或改进,请随意提交拉动请求.