{"_id":"@5i84/utils","_rev":"7-c840af061111c43d5ffae2d887db72e5","name":"@5i84/utils","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.0":{"name":"@5i84/utils","version":"1.0.0","keywords":["5i84","utils"],"author":{"url":"303278055@qq.com","name":"Robin"},"license":"MIT","_id":"@5i84/utils@1.0.0","maintainers":[{"name":"robin901118","email":"303278055@qq.com"}],"dist":{"shasum":"9a527f5e90660f6616a47aee07f478d4c1570d70","tarball":"https://registry.npmjs.org/@5i84/utils/-/utils-1.0.0.tgz","fileCount":6,"integrity":"sha512-Bin8j2M5RMxdqEvfGS+0u9blF4JQUC8cttoNwjk0FecKpI/yZ2pBm3925DhsdPwhdRiLkk5Co3aqVtIwHxvhUw==","signatures":[{"sig":"MEQCIFHIctn7kUs0xjVAUtvjJ+LKnaz+ghe2HTu9Y2oqmULQAiBYNq6BgbkBzRA60y/mPVBWabthWXigqAXTYhkUQ0W/ZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16586},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"2d351a917f9ffeda3e0cab8bd900775bfa7b99de","scripts":{"build":"tsup","prettier":"npx prettier --write ./src"},"_npmUser":{"name":"robin901118","email":"303278055@qq.com"},"_npmVersion":"10.8.2","description":"5i84通用工具类","directories":{},"_nodeVersion":"20.19.5","dependencies":{"qs":"^6.15.1","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","prettier":"^3.8.1","@types/qs":"^6.15.0","typescript":"~6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.0_1775807506964_0.39198459481368686","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@5i84/utils","version":"1.0.1","keywords":["5i84","utils"],"author":{"url":"303278055@qq.com","name":"Robin"},"license":"MIT","_id":"@5i84/utils@1.0.1","maintainers":[{"name":"robin901118","email":"303278055@qq.com"}],"dist":{"shasum":"df6403add45b5cb6e57bcb599911499c7866a9d6","tarball":"https://registry.npmjs.org/@5i84/utils/-/utils-1.0.1.tgz","fileCount":6,"integrity":"sha512-H7ymEk/MyZZmKCEiwaQqlYOpL+lnmzpNGmEhik03lZifKrPqbT5uzW6g6U3tgMB/fJB+bIJadqRhVgCz64Dj2g==","signatures":[{"sig":"MEUCIQDeZNMuYrNt3LHRj482FNF5MFXpTSqW1TgRADf9/DaQYQIgcIFMHyyZthVLV6S9ArXHY7T1qhacuryVkHeARWPPNjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16599},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"2d351a917f9ffeda3e0cab8bd900775bfa7b99de","scripts":{"build":"tsup","prettier":"npx prettier --write ./src"},"_npmUser":{"name":"robin901118","email":"303278055@qq.com"},"_npmVersion":"10.8.2","description":"5i84通用工具类","directories":{},"_nodeVersion":"20.19.5","dependencies":{"qs":"^6.15.1","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","prettier":"^3.8.1","@types/qs":"^6.15.0","typescript":"~6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.1_1775807912605_0.17704791721722213","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@5i84/utils","version":"1.0.2","keywords":["utils"],"author":{"name":"Robin"},"license":"MIT","_id":"@5i84/utils@1.0.2","maintainers":[{"name":"robin901118","email":"303278055@qq.com"}],"dist":{"shasum":"72f4736ff086f31c355b8051a9877c18deeed6b4","tarball":"https://registry.npmjs.org/@5i84/utils/-/utils-1.0.2.tgz","fileCount":7,"integrity":"sha512-QjbJvmnknCOK0/uQdHNwCYPKPxupbLS/oy37CciSIda5M+IukI87PVY0Sh9piW8d0lIsFpzBJnQl6kE3aCLg4Q==","signatures":[{"sig":"MEUCIHHHx46hVFgKP9xunLVE7T2mhHPwMrLlh0M3PMvGzIKlAiEAiIyfPPL5j0SxBWsWohHTpS9nSvEqFyl1DpAZiSe2dvI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17220},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"e7d0f2d07b0add5fa3f8e67a3b986e7d8bac0656","scripts":{"build":"tsup","prettier":"npx prettier --write ./src"},"_npmUser":{"name":"robin901118","email":"303278055@qq.com"},"_npmVersion":"10.8.2","description":"通用工具类","directories":{},"_nodeVersion":"20.19.5","dependencies":{"qs":"^6.15.1","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","prettier":"^3.8.1","@types/qs":"^6.15.0","typescript":"~6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.2_1776065205202_0.8352839111378749","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@5i84/utils","version":"1.0.3","keywords":["utils"],"author":{"name":"Robin"},"license":"MIT","_id":"@5i84/utils@1.0.3","maintainers":[{"name":"robin901118","email":"303278055@qq.com"}],"dist":{"shasum":"ba3b39b9ecaf726919bec718ad0dbba9fc3d0036","tarball":"https://registry.npmjs.org/@5i84/utils/-/utils-1.0.3.tgz","fileCount":7,"integrity":"sha512-c6WiNq4p3GNmCj+GU7/UeI1gOYdNkCxX27+0nx+pupi4rO57Mqgx7lTcvFL0Ddtxrb9HbsilN+16y3DZ2lvD9Q==","signatures":[{"sig":"MEYCIQC6jqVD7NzdN9dXY0UMdoIPWgCJxd67si3rcopEh3/MYAIhAI6Rw42R629nTQCYFaCigmEez/2e0NMxKF1ZUMO0Gr+e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17504},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"d9d4c7d4946a481a531c2c7c670677d48eedd3f3","scripts":{"build":"tsup","prettier":"npx prettier --write ./src"},"_npmUser":{"name":"robin901118","email":"303278055@qq.com"},"_npmVersion":"11.12.1","description":"通用工具类","directories":{},"_nodeVersion":"22.20.0","dependencies":{"qs":"^6.15.1","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","prettier":"^3.8.1","@types/qs":"^6.15.0","typescript":"~6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.3_1777529396708_0.20322805639522334","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@5i84/utils","version":"1.0.4","keywords":["utils"],"author":{"name":"Robin"},"license":"MIT","_id":"@5i84/utils@1.0.4","maintainers":[{"name":"robin901118","email":"303278055@qq.com"}],"dist":{"shasum":"9b0e999bbd3544cf675930addf4b2e23dee93987","tarball":"https://registry.npmjs.org/@5i84/utils/-/utils-1.0.4.tgz","fileCount":7,"integrity":"sha512-b/pKQAVIDIEnpjYqo+MEhRQpJvB5LsdODPDyG0GPthV1jiiUxmIlGsmZ6fSzRxrMAtCLMrZ00eMpLZz/4V2Zjg==","signatures":[{"sig":"MEUCIGQ/hDWTaWu9E3Nup1se9mpQz4qzJnBwLO9fhMzBfpg+AiEAmNh+zSqpyacH0fwXO2RSFlhpdondJQYzgh7IWSS9Tvo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17552},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"57ce6f9bd89303249b037d751d0ba98d4a49908a","scripts":{"build":"tsup","prettier":"npx prettier --write ./src"},"_npmUser":{"name":"robin901118","email":"303278055@qq.com"},"_npmVersion":"11.12.1","description":"通用工具类","directories":{},"_nodeVersion":"22.20.0","dependencies":{"qs":"^6.15.1","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","prettier":"^3.8.1","@types/qs":"^6.15.0","typescript":"~6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.4_1778053229268_0.7617648608510543","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@5i84/utils","version":"1.0.5","keywords":["utils"],"author":{"name":"Robin"},"license":"MIT","_id":"@5i84/utils@1.0.5","maintainers":[{"name":"robin901118","email":"303278055@qq.com"}],"dist":{"shasum":"ded8238d0f7646d01d99e0f04a7ed05431c7dd34","tarball":"https://registry.npmjs.org/@5i84/utils/-/utils-1.0.5.tgz","fileCount":7,"integrity":"sha512-Peh3HwWZ9jQsmRpPhhbV4brL5heGXuy/0nfK6HceF71RmE5EBKVmK+tNkK9h5/Xz4dtF/9HDcdMWjlUt2/1CBQ==","signatures":[{"sig":"MEUCIAzEke/rksmWZ53BipFtAgqqB2WCgxGdu0EoBYpnmvY1AiEAvsUJapDRkR1udROiO4jKYeoQiwejiFCWHrnz+l9zq24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18016},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"a42e3752ba7ebc1fd113d47d812fb4937cc08c5e","scripts":{"build":"tsup","prettier":"npx prettier --write ./src"},"_npmUser":{"name":"robin901118","email":"303278055@qq.com"},"_npmVersion":"11.12.1","description":"通用工具类","directories":{},"_nodeVersion":"22.20.0","dependencies":{"qs":"^6.15.1","zod":"^4.3.6"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","prettier":"^3.8.1","@types/qs":"^6.15.0","typescript":"~6.0.2","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.5_1778294294834_0.7727691489354493","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@5i84/utils","version":"1.0.6","description":"通用工具类","scripts":{"build":"tsup","prettier":"npx prettier --write ./src"},"keywords":["utils"],"main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"author":{"name":"Robin"},"license":"MIT","devDependencies":{"@types/node":"^25.5.2","@types/qs":"^6.15.0","prettier":"^3.8.1","tsup":"^8.0.0","typescript":"~6.0.2"},"dependencies":{"qs":"^6.15.1","zod":"^4.3.6"},"gitHead":"c2f928e8fb49ac48ad0e0faf6b0ede7e4b93fba9","_id":"@5i84/utils@1.0.6","_nodeVersion":"22.20.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-caNMxX3dKmlAV37nA8RWqsf80PkjDE1s83Hoe512+ltmsSUPQ8Fg4GHlNJItkc2JT06VjvujtLylIEzfrW/Npg==","shasum":"73c699613cb62fbf98e7d2f33431277bce8fac66","tarball":"https://registry.npmjs.org/@5i84/utils/-/utils-1.0.6.tgz","fileCount":7,"unpackedSize":18102,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHFEcg08jZpdzDdPPU0Elhn9CQ7bbiTwuczxTM3LchmIAiEA6t4j2eZyPFh3D7UcZMNIViIL/Y4zQnOFYkh5oYP/R+g="}]},"_npmUser":{"name":"robin901118","email":"303278055@qq.com"},"directories":{},"maintainers":[{"name":"robin901118","email":"303278055@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/utils_1.0.6_1778463708924_0.46435530530978464"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-10T07:51:46.873Z","modified":"2026-05-11T01:41:49.202Z","1.0.0":"2026-04-10T07:51:47.113Z","1.0.1":"2026-04-10T07:58:32.749Z","1.0.2":"2026-04-13T07:26:45.343Z","1.0.3":"2026-04-30T06:09:56.837Z","1.0.4":"2026-05-06T07:40:29.397Z","1.0.5":"2026-05-09T02:38:14.965Z","1.0.6":"2026-05-11T01:41:49.061Z"},"author":{"name":"Robin"},"license":"MIT","keywords":["utils"],"description":"通用工具类","maintainers":[{"name":"robin901118","email":"303278055@qq.com"}],"readme":"# 5i84-utils\r\n\r\n通用工具类库，提供常用的工具函数，包括网络请求、URL 处理、精确数学运算、数据验证等功能。\r\n\r\n## 安装\r\n\r\n```\r\nbash\r\nnpm install @5i84/utils\r\n# 或\r\nyarn add @5i84/utils\r\n# 或\r\nbun add @5i84/utils\r\n```\r\n## 快速开始\r\n\r\n```\r\ntypescript\r\nimport { Request, add, isPhoneNumber } from '@5i84/utils'\r\n\r\n// 使用网络请求\r\nconst api = new Request({\r\n  baseUrl: 'https://api.example.com',\r\n  tokenKey: 'Authorization',\r\n  getTokenFunc: () => localStorage.getItem('token'),\r\n  errorHandler: (error) => console.error(error.message)\r\n  //可选参数\r\n  successCodes:[200]\r\n})\r\n\r\n// 使用精确加法\r\nconst result = add(0.1, 0.2) // 0.3\r\n\r\n// 使用手机号验证\r\nisPhoneNumber('13812345678') // true\r\n```\r\n## API 文档\r\n\r\n### 🌐 Request - 网络请求封装\r\n\r\n基于 `fetch` API 封装的网络请求类，支持自动 Token 注入、响应数据校验（Zod）、错误处理等。\r\n\r\n#### 构造函数参数\r\n\r\n```\r\ntypescript\r\ninterface RequestConstructorOptions {\r\n  baseUrl: string              // API 基础地址\r\n  tokenKey: string             // Token 在请求头中的键名\r\n  getTokenFunc: () => string | null | undefined  // 获取 Token 的函数\r\n  errorHandler: (error: { code: number; message: string }) => void  // 错误处理回调\r\n}\r\n```\r\n#### 使用示例\r\n\r\n```\r\ntypescript\r\nimport { Request } from '@5i84/utils'\r\nimport { z } from 'zod'\r\n\r\nconst api = new Request({\r\n  baseUrl: 'https://api.example.com',\r\n  tokenKey: 'Authorization',\r\n  getTokenFunc: () => localStorage.getItem('token'),\r\n  errorHandler: ({ code, message }) => {\r\n    console.error(`请求错误 [${code}]: ${message}`)\r\n  }\r\n})\r\n\r\n// 定义响应数据结构\r\nconst userSchema = z.object({\r\n  id: z.number(),\r\n  name: z.string(),\r\n  email: z.string().email()\r\n})\r\n\r\n// GET 请求\r\nconst user = await api.ajax({\r\n  url: '/user/123',\r\n  method: 'get',\r\n  resultRules: userSchema\r\n})\r\n\r\n// POST 请求\r\nconst newUser = await api.ajax({\r\n  url: '/user',\r\n  method: 'post',\r\n  data: { name: '张三', email: 'zhangsan@example.com' },\r\n  resultRules: userSchema\r\n})\r\n```\r\n---\r\n\r\n### 🔗 URL 工具函数\r\n\r\n#### getUrlQuery\r\n\r\n从 URL 中获取查询参数。\r\n\r\n```\r\ntypescript\r\nfunction getUrlQuery(name: string, url?: string): string | null\r\n```\r\n**参数：**\r\n- `name`: 参数名\r\n- `url`: 可选，默认为当前页面 URL\r\n\r\n**返回值：** 参数值或 `null`\r\n\r\n**示例：**\r\n\r\n```\r\ntypescript\r\nimport { getUrlQuery } from '@5i84/utils'\r\n\r\n// 当前 URL: https://example.com/?id=123&name=test\r\ngetUrlQuery('id')    // '123'\r\ngetUrlQuery('name')  // 'test'\r\ngetUrlQuery('age')   // null\r\n\r\n// 指定 URL\r\ngetUrlQuery('id', 'https://example.com/?id=456')  // '456'\r\n```\r\n---\r\n\r\n### 🔢 精确数学运算\r\n\r\n解决 JavaScript 浮点数精度问题。\r\n\r\n#### add - 精确加法\r\n\r\n```\r\ntypescript\r\nfunction add(...numbers: number[]): number\r\n```\r\n**示例：**\r\n\r\n```\r\ntypescript\r\nimport { add } from '@5i84/utils'\r\n\r\nadd(0.1, 0.2)           // 0.3\r\nadd(0.1, 0.2, 0.3)      // 0.6\r\nadd(1.999, 0.001)       // 2\r\nadd()                   // 0\r\n```\r\n#### subtract - 精确减法\r\n\r\n```\r\ntypescript\r\nfunction subtract(...numbers: number[]): number\r\n```\r\n**示例：**\r\n\r\n```\r\ntypescript\r\nimport { subtract } from '@5i84/utils'\r\n\r\nsubtract(1.0, 0.9)           // 0.1\r\nsubtract(10, 1.5, 2.3)       // 6.2 (10 - 1.5 - 2.3)\r\nsubtract()                   // 0\r\n```\r\n#### multiply - 精确乘法\r\n\r\n```\r\ntypescript\r\nfunction multiply(...numbers: number[]): number\r\n```\r\n**示例：**\r\n\r\n```\r\ntypescript\r\nimport { multiply } from '@5i84/utils'\r\n\r\nmultiply(0.1, 0.2)           // 0.02\r\nmultiply(1.5, 2, 3)          // 9\r\nmultiply()                   // 1\r\n```\r\n#### divide - 精确除法\r\n\r\n```\r\ntypescript\r\nfunction divide(...numbers: number[]): number\r\n```\r\n**示例：**\r\n\r\n```\r\ntypescript\r\nimport { divide } from '@5i84/utils'\r\n\r\ndivide(0.3, 0.1)             // 3\r\ndivide(100, 2, 5)            // 10 (100 / 2 / 5)\r\ndivide(1, 0)                 // Infinity\r\ndivide()                     // NaN\r\n```\r\n> **注意：** 除法可能产生无限循环小数（如 `1/3`），这种情况下无法完全避免精度丢失。\r\n\r\n---\r\n\r\n### ✅ 数据验证\r\n\r\n#### isPhoneNumber - 手机号验证\r\n\r\n验证中国大陆手机号码（支持 +86、0086 前缀）。\r\n\r\n```\r\ntypescript\r\nfunction isPhoneNumber(phoneNumber: string): boolean\r\n```\r\n**示例：**\r\n\r\n```\r\ntypescript\r\nimport { isPhoneNumber } from '@5i84/utils'\r\n\r\nisPhoneNumber('13812345678')      // true\r\nisPhoneNumber('+8613812345678')   // true\r\nisPhoneNumber('008613812345678')  // true\r\nisPhoneNumber('10123456789')      // false (无效号段)\r\nisPhoneNumber('1381234567')       // false (位数不足)\r\n```\r\n#### isImageLink - 图片链接验证\r\n\r\n验证 URL 是否为图片链接。\r\n\r\n```\r\ntypescript\r\nfunction isImageLink(url: string): boolean\r\n```\r\n**示例：**\r\n\r\n```\r\ntypescript\r\nimport { isImageLink } from '@5i84/utils'\r\n\r\nisImageLink('https://example.com/image.jpg')   // true\r\nisImageLink('https://example.com/photo.png')   // true\r\nisImageLink('https://example.com/page.html')   // false\r\nisImageLink('not-a-url')                        // false\r\n```\r\n---\r\n\r\n## 类型定义\r\n\r\n所有导出的函数和类都包含完整的 TypeScript 类型定义，IDE 会自动提供智能提示。\r\n\r\n```\r\ntypescript\r\nimport type { RequestConstructorOptions, AjaxOptions } from '@5i84/utils'\r\n```\r\n---\r\n\r\n## 依赖\r\n\r\n本库依赖以下第三方库（使用时需要自行安装）：\r\n\r\n- [`zod`](https://zod.dev/) - 数据验证（Request 必需）\r\n- [`qs`](https://www.npmjs.com/package/qs) - URL 参数序列化\r\n\r\n```\r\nbash\r\nnpm install zod qs\r\n```\r\n\r\n\r\n## License\r\n\r\nMIT © Robin","readmeFilename":"README.md"}