@planarcat/js-toolkit 1.7.12 → 1.7.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -73,6 +73,7 @@ debouncedFn();
73
73
  import {
74
74
  toFormattedNumber,
75
75
  toFormattedNumberString,
76
+ DecimalPlacesOptions,
76
77
  } from '@planarcat/js-toolkit';
77
78
 
78
79
  // 基本使用
@@ -83,6 +84,14 @@ console.log(toFormattedNumber(1234.5678));
83
84
  console.log(toFormattedNumber(1234.5678, { decimalPlaces: 2 }));
84
85
  // 输出: 1234.57
85
86
 
87
+ // 使用 RETAIN_ALL 常量保留所有小数位
88
+ console.log(
89
+ toFormattedNumber(1234.5678, {
90
+ decimalPlaces: DecimalPlacesOptions.RETAIN_ALL,
91
+ }),
92
+ );
93
+ // 输出: 1234.5678
94
+
86
95
  // 处理字符串
87
96
  console.log(toFormattedNumber('123.45abc'));
88
97
  // 输出: 123.45
@@ -104,6 +113,14 @@ console.log(
104
113
  console.log(toFormattedNumberString(1234.5678, { decimalPlaces: 2 }));
105
114
  // 输出: "1234.57"
106
115
 
116
+ // 使用 RETAIN_ALL 常量保留所有小数位
117
+ console.log(
118
+ toFormattedNumberString(1234.5678, {
119
+ decimalPlaces: DecimalPlacesOptions.RETAIN_ALL,
120
+ }),
121
+ );
122
+ // 输出: "1234.5678"
123
+
107
124
  // 保留两位小数,不够时补0
108
125
  console.log(toFormattedNumberString(123.4, { decimalPlaces: 2 }));
109
126
  // 输出: "123.40"
@@ -235,6 +252,35 @@ pnpm test
235
252
  pnpm run test:coverage
236
253
  ```
237
254
 
255
+ ### 发布
256
+
257
+ 项目使用 GitHub Actions 和 Trusted Publishing 进行自动发布。
258
+
259
+ #### 发布流程
260
+
261
+ 1. **更新版本号**:使用 `bump-version.js` 脚本更新版本号
262
+ ```bash
263
+ # 可选参数:patch (默认), minor, major, prerelease
264
+ pnpm run bump:patch
265
+ ```
266
+
267
+ 2. **推送代码和标签**:
268
+ ```bash
269
+ git push && git push --tags
270
+ ```
271
+
272
+ 3. **自动发布**:GitHub Actions 将自动触发发布流程:
273
+ - 执行质量检查
274
+ - 构建项目
275
+ - 使用 Trusted Publishing 发布到 npm
276
+ - 创建 GitHub Release
277
+
278
+ #### 发布配置
279
+
280
+ - **Trusted Publishing**:通过 OIDC 令牌进行身份验证,无需持久化的 npm 令牌
281
+ - **自动触发**:仅在标签推送时触发发布
282
+ - **安全可靠**:使用 GitHub Actions 安全上下文
283
+
238
284
  ## 贡献
239
285
 
240
286
  欢迎贡献代码!请遵循以下步骤:
@@ -255,6 +301,17 @@ pnpm run test:coverage
255
301
 
256
302
  ## 更新日志
257
303
 
304
+ ### v1.7.13
305
+
306
+ - ✨ 重构了 `decimalPlaces` 参数类型,使用 `DecimalPlacesOptions` 联合类型
307
+ - ✨ 新增 `DecimalPlacesOptions` 对象,包含 `RETAIN_ALL` 常量用于保留所有小数位
308
+ - ✨ 优化了类型定义,提高了类型安全性
309
+ - ✨ 更新了文档,添加了 `DecimalPlacesOptions` 的使用示例
310
+
311
+ ### v1.7.12
312
+
313
+ - ✨ 修复了构建错误,解决了合并声明问题
314
+
258
315
  ### v1.7.1
259
316
 
260
317
  - ✨ 修复了 `formatDate` 函数中 Unix 时间戳计算问题,确保基于 UTC 时间
@@ -51,7 +51,7 @@
51
51
  * toFormattedNumber('abc', { nanValue: -1 }); // -1
52
52
  * ```
53
53
  */
54
- declare function toFormattedNumber(object: unknown[], options?: import("../types/object").ToFormattedNumberOptions): number[];
55
- declare function toFormattedNumber(object: unknown, options?: import("../types/object").ToFormattedNumberOptions): number;
54
+ declare function toFormattedNumber(object: unknown[], options?: import('../types/object').ToFormattedNumberOptions): number[];
55
+ declare function toFormattedNumber(object: unknown, options?: import('../types/object').ToFormattedNumberOptions): number;
56
56
  export default toFormattedNumber;
57
57
  //# sourceMappingURL=toFormattedNumber.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toFormattedNumber.d.ts","sourceRoot":"","sources":["../../src/object/toFormattedNumber.ts"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,iBAAS,iBAAiB,CACxB,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,wBAAwB,GAC3D,MAAM,EAAE,CAAC;AAEZ,iBAAS,iBAAiB,CACxB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,wBAAwB,GAC3D,MAAM,CAAC;AAmDV,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"toFormattedNumber.d.ts","sourceRoot":"","sources":["../../src/object/toFormattedNumber.ts"],"names":[],"mappings":"AA4CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,iBAAS,iBAAiB,CACxB,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,wBAAwB,GAC3D,MAAM,EAAE,CAAC;AAEZ,iBAAS,iBAAiB,CACxB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,wBAAwB,GAC3D,MAAM,CAAC;AAoDV,eAAe,iBAAiB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const constants_1 = require("../utils/constants");
3
4
  /**
4
5
  * 从字符串中提取数字部分
5
6
  * @param str - 输入字符串
@@ -8,7 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
8
9
  function extractNumberFromString(str) {
9
10
  // 匹配数字体系:0~9,小数点,正负号,科学计数法
10
11
  const match = str.match(/[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?/);
11
- return match ? match[0] : "";
12
+ return match ? match[0] : '';
12
13
  }
13
14
  /**
14
15
  * 将单个值转换为数字
@@ -17,24 +18,24 @@ function extractNumberFromString(str) {
17
18
  */
18
19
  function convertToNumber(value) {
19
20
  switch (typeof value) {
20
- case "number":
21
+ case 'number':
21
22
  return value;
22
- case "string": {
23
+ case 'string': {
23
24
  const numStr = extractNumberFromString(value);
24
25
  return numStr ? Number(numStr) : 0;
25
26
  }
26
- case "boolean":
27
+ case 'boolean':
27
28
  return value ? 1 : 0;
28
- case "function":
29
- case "symbol":
29
+ case 'function':
30
+ case 'symbol':
30
31
  return NaN;
31
- case "object":
32
+ case 'object':
32
33
  if (value === null) {
33
34
  return NaN;
34
35
  }
35
36
  // 其他对象类型返回NaN
36
37
  return NaN;
37
- case "undefined":
38
+ case 'undefined':
38
39
  return NaN;
39
40
  default:
40
41
  return NaN;
@@ -43,7 +44,7 @@ function convertToNumber(value) {
43
44
  // 主函数实现
44
45
  function toFormattedNumber(object, options) {
45
46
  // 解构并设置默认值
46
- const { decimalPlaces = true, nanValue = NaN } = options || {};
47
+ const { decimalPlaces = constants_1.DecimalPlacesOptions.RETAIN_ALL, nanValue = NaN } = options || {};
47
48
  /**
48
49
  * 格式化单个数字
49
50
  * @param num - 要格式化的数字
@@ -55,14 +56,14 @@ function toFormattedNumber(object, options) {
55
56
  return nanValue;
56
57
  }
57
58
  // 根据decimalPlaces选项处理小数位
58
- if (decimalPlaces === true) {
59
- // 保留所有小数位,不额外处理
60
- return num;
61
- }
62
- else {
59
+ if (typeof decimalPlaces === 'number') {
63
60
  // 保留指定小数位,四舍五入
64
61
  return Number(num.toFixed(decimalPlaces));
65
62
  }
63
+ else {
64
+ // 保留所有小数位,不额外处理
65
+ return num;
66
+ }
66
67
  };
67
68
  /**
68
69
  * 转换单个值为数字,支持深层数组递归处理
@@ -1 +1 @@
1
- {"version":3,"file":"toFormattedNumber.js","sourceRoot":"","sources":["../../src/object/toFormattedNumber.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,SAAS,uBAAuB,CAAC,GAAW;IAC1C,2BAA2B;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;QACb,KAAK,QAAQ;YACX,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,GAAG,CAAC;YACb,CAAC;YACD,cAAc;YACd,OAAO,GAAG,CAAC;QACb,KAAK,WAAW;YACd,OAAO,GAAG,CAAC;QACb;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAiED,QAAQ;AACR,SAAS,iBAAiB,CACxB,MAAe,EACf,OAA4D;IAE5D,WAAW;IACX,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE/D;;;;OAIG;IACH,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAU,EAAE;QACjD,UAAU;QACV,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,yBAAyB;QACzB,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,gBAAgB;YAChB,OAAO,GAAG,CAAC;QACb,CAAC;aAAM,CAAC;YACN,eAAe;YACf,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,YAAY,GAAG,CAAC,KAAc,EAAqB,EAAE;QACzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,WAAW;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAa,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,QAAQ;YACR,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACnC,QAAQ;YACR,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ;IACR,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,kBAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"toFormattedNumber.js","sourceRoot":"","sources":["../../src/object/toFormattedNumber.ts"],"names":[],"mappings":";;AAAA,kDAA0D;AAE1D;;;;GAIG;AACH,SAAS,uBAAuB,CAAC,GAAW;IAC1C,2BAA2B;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;QACb,KAAK,QAAQ;YACX,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,GAAG,CAAC;YACb,CAAC;YACD,cAAc;YACd,OAAO,GAAG,CAAC;QACb,KAAK,WAAW;YACd,OAAO,GAAG,CAAC;QACb;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAiED,QAAQ;AACR,SAAS,iBAAiB,CACxB,MAAe,EACf,OAA4D;IAE5D,WAAW;IACX,MAAM,EAAE,aAAa,GAAG,gCAAoB,CAAC,UAAU,EAAE,QAAQ,GAAG,GAAG,EAAE,GACvE,OAAO,IAAI,EAAE,CAAC;IAEhB;;;;OAIG;IACH,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAU,EAAE;QACjD,UAAU;QACV,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtC,eAAe;YACf,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,gBAAgB;YAChB,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,YAAY,GAAG,CAAC,KAAc,EAAqB,EAAE;QACzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,WAAW;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAa,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,QAAQ;YACR,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACnC,QAAQ;YACR,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ;IACR,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,kBAAe,iBAAiB,CAAC"}
@@ -1,4 +1,63 @@
1
- declare function toFormattedNumberString(object: unknown[], options?: import("../types/object").ToFormattedNumberStringOptions): string[];
2
- declare function toFormattedNumberString(object: unknown, options?: import("../types/object").ToFormattedNumberStringOptions): string;
1
+ declare function toFormattedNumberString(object: unknown[], options?: import('../types/object').ToFormattedNumberStringOptions): string[];
2
+ declare function toFormattedNumberString(object: unknown, options?: import('../types/object').ToFormattedNumberStringOptions): string;
3
+ /**
4
+ * 将任意对象转化为格式化的数字字符串
5
+ *
6
+ * 该函数先使用toFormattedNumber将对象转化为数字,再对数字进行字符串格式化
7
+ * 支持多种输入类型,包括数字、字符串、布尔值、null、undefined、数组等
8
+ * 支持深层数组递归处理
9
+ *
10
+ * @param object - 要格式化的对象,可以是任何类型
11
+ * @param options - 格式化选项,具体参数说明见类型声明
12
+ *
13
+ * @returns 格式化后的数字字符串或字符串数组
14
+ * - 当传入的 object 为非数组时,返回 string
15
+ * - 当传入的 object 为数组时,返回 string[]
16
+ * - 支持深层数组递归处理
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // 单个数字值
21
+ * toFormattedNumberString(123.456); // "123.456"
22
+ *
23
+ * // 保留两位小数,不够时补0
24
+ * toFormattedNumberString(123.4, { decimalPlaces: 2 }); // "123.40"
25
+ *
26
+ * // 带前缀后缀
27
+ * toFormattedNumberString(123.456, { prefix: '$', suffix: ' USD' }); // "$123.456 USD"
28
+ *
29
+ * // 本地化格式
30
+ * toFormattedNumberString(1234567.89, { localized: true }); // "1,234,567.89"
31
+ * // 兼容旧的useLocalizedFormat参数
32
+ * toFormattedNumberString(1234567.89, { useLocalizedFormat: true }); // "1,234,567.89"
33
+ *
34
+ * // 自定义NaN和0显示
35
+ * toFormattedNumberString(null, { nanValue: 'N/A' }); // "N/A"
36
+ * toFormattedNumberString(0, { zeroValue: '-' }); // "-"
37
+ *
38
+ * // 预处理函数
39
+ * toFormattedNumberString(0.1234, {
40
+ * preProcessor: (original, num) => num * 100,
41
+ * suffix: '%'
42
+ * }); // "12.34%"
43
+ *
44
+ * // 函数类型前缀
45
+ * toFormattedNumberString(123.456, {
46
+ * prefix: (original, num, formatted) => `$${Math.floor(num)}`
47
+ * }); // "$123123.456"
48
+ *
49
+ * // 函数类型后缀
50
+ * toFormattedNumberString(123.456, {
51
+ * suffix: (original, num, formatted) => `/${num.toFixed(0)}`
52
+ * }); // "123.456/123"
53
+ *
54
+ * // 处理数组
55
+ * toFormattedNumberString([123.456, '789.012'], { decimalPlaces: 2 }); // ["123.46", "789.01"]
56
+ *
57
+ * // 处理深层数组
58
+ * toFormattedNumberString([[1, '1.23'], ['45.67', [89.01, 'abc']]], { decimalPlaces: 2 });
59
+ * // 返回: [["1.00", "1.23"], ["45.67", ["89.01", "NaN"]]]
60
+ * ```
61
+ */
3
62
  export default toFormattedNumberString;
4
63
  //# sourceMappingURL=toFormattedNumberString.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toFormattedNumberString.d.ts","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":"AAuOA,iBAAS,uBAAuB,CAC9B,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,8BAA8B,GACjE,MAAM,EAAE,CAAC;AAEZ,iBAAS,uBAAuB,CAC9B,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,8BAA8B,GACjE,MAAM,CAAC;AA6BV,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"toFormattedNumberString.d.ts","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":"AA6KA,iBAAS,uBAAuB,CAC9B,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,8BAA8B,GACjE,MAAM,EAAE,CAAC;AAEZ,iBAAS,uBAAuB,CAC9B,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,8BAA8B,GACjE,MAAM,CAAC;AA6BV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,eAAe,uBAAuB,CAAC"}
@@ -3,65 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- /**
7
- * 将任意对象转化为格式化的数字字符串
8
- *
9
- * 该函数先使用toFormattedNumber将对象转化为数字,再对数字进行字符串格式化
10
- * 支持多种输入类型,包括数字、字符串、布尔值、null、undefined、数组等
11
- * 支持深层数组递归处理
12
- *
13
- * @param object - 要格式化的对象,可以是任何类型
14
- * @param options - 格式化选项,具体参数说明见类型声明
15
- *
16
- * @returns 格式化后的数字字符串或字符串数组
17
- * - 当传入的 object 为非数组时,返回 string
18
- * - 当传入的 object 为数组时,返回 string[]
19
- * - 支持深层数组递归处理
20
- *
21
- * @example
22
- * ```typescript
23
- * // 单个数字值
24
- * toFormattedNumberString(123.456); // "123.456"
25
- *
26
- * // 保留两位小数,不够时补0
27
- * toFormattedNumberString(123.4, { decimalPlaces: 2 }); // "123.40"
28
- *
29
- * // 带前缀后缀
30
- * toFormattedNumberString(123.456, { prefix: '$', suffix: ' USD' }); // "$123.456 USD"
31
- *
32
- * // 本地化格式
33
- * toFormattedNumberString(1234567.89, { localized: true }); // "1,234,567.89"
34
- * // 兼容旧的useLocalizedFormat参数
35
- * toFormattedNumberString(1234567.89, { useLocalizedFormat: true }); // "1,234,567.89"
36
- *
37
- * // 自定义NaN和0显示
38
- * toFormattedNumberString(null, { nanValue: 'N/A' }); // "N/A"
39
- * toFormattedNumberString(0, { zeroValue: '-' }); // "-"
40
- *
41
- * // 预处理函数
42
- * toFormattedNumberString(0.1234, {
43
- * preProcessor: (original, num) => num * 100,
44
- * suffix: '%'
45
- * }); // "12.34%"
46
- *
47
- * // 函数类型前缀
48
- * toFormattedNumberString(123.456, {
49
- * prefix: (original, num, formatted) => `$${Math.floor(num)}`
50
- * }); // "$123123.456"
51
- *
52
- * // 函数类型后缀
53
- * toFormattedNumberString(123.456, {
54
- * suffix: (original, num, formatted) => `/${num.toFixed(0)}`
55
- * }); // "123.456/123"
56
- *
57
- * // 处理数组
58
- * toFormattedNumberString([123.456, '789.012'], { decimalPlaces: 2 }); // ["123.46", "789.01"]
59
- *
60
- * // 处理深层数组
61
- * toFormattedNumberString([[1, '1.23'], ['45.67', [89.01, 'abc']]], { decimalPlaces: 2 });
62
- * // 返回: [["1.00", "1.23"], ["45.67", ["89.01", "NaN"]]]
63
- * ```
64
- */
6
+ const constants_1 = require("../utils/constants");
65
7
  const toFormattedNumber_1 = __importDefault(require("./toFormattedNumber"));
66
8
  /**
67
9
  * 检查字符串是否包含数字
@@ -82,14 +24,14 @@ function hasNumbers(str) {
82
24
  */
83
25
  function addPrefixSuffix(prefix, suffix, formatted, converted, original) {
84
26
  let processedPrefix;
85
- if (typeof prefix === "function") {
27
+ if (typeof prefix === 'function') {
86
28
  processedPrefix = prefix(original, converted, formatted);
87
29
  }
88
30
  else {
89
31
  processedPrefix = prefix;
90
32
  }
91
33
  let processedSuffix;
92
- if (typeof suffix === "function") {
34
+ if (typeof suffix === 'function') {
93
35
  processedSuffix = suffix(original, converted, formatted);
94
36
  }
95
37
  else {
@@ -118,7 +60,7 @@ function format(converted, original, options) {
118
60
  let formatted;
119
61
  if (localized) {
120
62
  // 使用本地化格式
121
- if (decimalPlaces === true) {
63
+ if (typeof decimalPlaces !== 'number') {
122
64
  // 保留所有小数位
123
65
  formatted = preProcessed.toLocaleString();
124
66
  }
@@ -132,7 +74,7 @@ function format(converted, original, options) {
132
74
  }
133
75
  else {
134
76
  // 使用非本地化格式
135
- if (decimalPlaces === true) {
77
+ if (typeof decimalPlaces !== 'number') {
136
78
  // 保留所有小数位
137
79
  formatted = preProcessed.toString();
138
80
  }
@@ -159,13 +101,13 @@ function processValue(value, original, options) {
159
101
  }
160
102
  else {
161
103
  // 检查是否为无数字的字符串
162
- if (typeof value === "string" && !hasNumbers(value)) {
104
+ if (typeof value === 'string' && !hasNumbers(value)) {
163
105
  // 无数字的字符串返回0
164
106
  return addPrefixSuffix(prefix, suffix, zeroValue, 0, original);
165
107
  }
166
108
  // 对于其他类型,首先将输入转换为数字
167
109
  // 注意:toFormattedNumber对于单个值会返回number类型
168
- const converted = typeof value === "number"
110
+ const converted = typeof value === 'number'
169
111
  ? value
170
112
  : (0, toFormattedNumber_1.default)(value, {
171
113
  decimalPlaces,
@@ -183,7 +125,7 @@ function processValue(value, original, options) {
183
125
  // 主函数实现
184
126
  function toFormattedNumberString(object, options) {
185
127
  // 解构并设置默认值
186
- const { decimalPlaces = true, nanValue = "NaN", zeroValue = "0", localized, preProcessor, prefix = "", suffix = "", } = options || {};
128
+ const { decimalPlaces = constants_1.DecimalPlacesOptions.RETAIN_ALL, nanValue = 'NaN', zeroValue = '0', localized, preProcessor, prefix = '', suffix = '', } = options || {};
187
129
  // 处理输入值
188
130
  return processValue(object, object, {
189
131
  decimalPlaces,
@@ -195,5 +137,64 @@ function toFormattedNumberString(object, options) {
195
137
  suffix,
196
138
  });
197
139
  }
140
+ /**
141
+ * 将任意对象转化为格式化的数字字符串
142
+ *
143
+ * 该函数先使用toFormattedNumber将对象转化为数字,再对数字进行字符串格式化
144
+ * 支持多种输入类型,包括数字、字符串、布尔值、null、undefined、数组等
145
+ * 支持深层数组递归处理
146
+ *
147
+ * @param object - 要格式化的对象,可以是任何类型
148
+ * @param options - 格式化选项,具体参数说明见类型声明
149
+ *
150
+ * @returns 格式化后的数字字符串或字符串数组
151
+ * - 当传入的 object 为非数组时,返回 string
152
+ * - 当传入的 object 为数组时,返回 string[]
153
+ * - 支持深层数组递归处理
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * // 单个数字值
158
+ * toFormattedNumberString(123.456); // "123.456"
159
+ *
160
+ * // 保留两位小数,不够时补0
161
+ * toFormattedNumberString(123.4, { decimalPlaces: 2 }); // "123.40"
162
+ *
163
+ * // 带前缀后缀
164
+ * toFormattedNumberString(123.456, { prefix: '$', suffix: ' USD' }); // "$123.456 USD"
165
+ *
166
+ * // 本地化格式
167
+ * toFormattedNumberString(1234567.89, { localized: true }); // "1,234,567.89"
168
+ * // 兼容旧的useLocalizedFormat参数
169
+ * toFormattedNumberString(1234567.89, { useLocalizedFormat: true }); // "1,234,567.89"
170
+ *
171
+ * // 自定义NaN和0显示
172
+ * toFormattedNumberString(null, { nanValue: 'N/A' }); // "N/A"
173
+ * toFormattedNumberString(0, { zeroValue: '-' }); // "-"
174
+ *
175
+ * // 预处理函数
176
+ * toFormattedNumberString(0.1234, {
177
+ * preProcessor: (original, num) => num * 100,
178
+ * suffix: '%'
179
+ * }); // "12.34%"
180
+ *
181
+ * // 函数类型前缀
182
+ * toFormattedNumberString(123.456, {
183
+ * prefix: (original, num, formatted) => `$${Math.floor(num)}`
184
+ * }); // "$123123.456"
185
+ *
186
+ * // 函数类型后缀
187
+ * toFormattedNumberString(123.456, {
188
+ * suffix: (original, num, formatted) => `/${num.toFixed(0)}`
189
+ * }); // "123.456/123"
190
+ *
191
+ * // 处理数组
192
+ * toFormattedNumberString([123.456, '789.012'], { decimalPlaces: 2 }); // ["123.46", "789.01"]
193
+ *
194
+ * // 处理深层数组
195
+ * toFormattedNumberString([[1, '1.23'], ['45.67', [89.01, 'abc']]], { decimalPlaces: 2 });
196
+ * // 返回: [["1.00", "1.23"], ["45.67", ["89.01", "NaN"]]]
197
+ * ```
198
+ */
198
199
  exports.default = toFormattedNumberString;
199
200
  //# sourceMappingURL=toFormattedNumberString.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toFormattedNumberString.js","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toFormattedNumberString.js","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
+ import { DecimalPlacesOptions } from '../utils/constants';
1
2
  /**
2
3
  * 公共格式化选项接口
3
4
  */
4
5
  export interface CommonFormatOptions {
5
6
  /**
6
7
  * 保留多少位小数,
7
- * 默认true(保留所有小数位,不额外处理),
8
- * 可选值:number(保留指定小数位) | true(保留所有小数位,不额外处理)。
8
+ * 默认DecimalPlacesOptions.RETAIN_ALL(保留所有小数位,不额外处理),
9
+ * 可选值:number(保留指定小数位) | DecimalPlacesOptions.RETAIN_ALL(保留所有小数位,不额外处理)。
9
10
  */
10
- decimalPlaces?: number | true;
11
+ decimalPlaces?: DecimalPlacesOptions;
11
12
  }
12
13
  /**
13
14
  * toFormattedNumber 函数的选项接口
@@ -1 +1 @@
1
- {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/types/object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,mBAAmB;IACzE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAChE;;;OAGG;IACH,MAAM,CAAC,EACH,MAAM,GACN,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAC1E;;;OAGG;IACH,MAAM,CAAC,EACH,MAAM,GACN,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC3E"}
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/types/object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,mBAAmB;IACzE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAChE;;;OAGG;IACH,MAAM,CAAC,EACH,MAAM,GACN,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAC1E;;;OAGG;IACH,MAAM,CAAC,EACH,MAAM,GACN,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC3E"}
@@ -17,4 +17,17 @@ export declare const WEEKDAY_MAP: Record<string, [
17
17
  string,
18
18
  string
19
19
  ]>;
20
+ /**
21
+ * 小数位格式化选项
22
+ */
23
+ declare const RETAIN_ALL_BRAND: unique symbol;
24
+ interface RETAIN_ALL {
25
+ readonly [RETAIN_ALL_BRAND]: typeof RETAIN_ALL_BRAND;
26
+ }
27
+ export type DecimalPlacesOptions = number | RETAIN_ALL;
28
+ declare const RETAIN_ALL: RETAIN_ALL;
29
+ export declare const DecimalPlacesOptions: {
30
+ RETAIN_ALL: RETAIN_ALL;
31
+ };
32
+ export {};
20
33
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;CAGvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAC9B,MAAM,EACN;IAAC,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;CAAC,CAYzD,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;CAGvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAC9B,MAAM,EACN;IAAC,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;CAAC,CAYzD,CAAC;AAEF;;GAEG;AA2BH,QAAA,MAAM,gBAAgB,eAA6B,CAAC;AAEpD,UAAU,UAAU;IAClB,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;CACtD;AAGD,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvD,QAAA,MAAM,UAAU,EAAE,UAEF,CAAC;AACjB,eAAO,MAAM,oBAAoB;;CAEhC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WEEKDAY_MAP = exports.DEFAULT_DATE_FORMAT_OPTIONS = void 0;
3
+ exports.DecimalPlacesOptions = exports.WEEKDAY_MAP = exports.DEFAULT_DATE_FORMAT_OPTIONS = void 0;
4
4
  /**
5
5
  * 默认格式化选项
6
6
  */
@@ -23,4 +23,38 @@ exports.WEEKDAY_MAP = {
23
23
  'Saturday',
24
24
  ],
25
25
  };
26
+ /**
27
+ * 小数位格式化选项
28
+ */
29
+ // 可扩展多个标记的写法
30
+ // declare const DECIMAL_OPTIONS_BRAND: unique symbol;
31
+ // type DecimalOptionBase = {
32
+ // readonly [DECIMAL_OPTIONS_BRAND]: typeof DECIMAL_OPTIONS_BRAND;
33
+ // };
34
+ // /**
35
+ // * 保留所有小数位的特殊标记类型
36
+ // */
37
+ // export type RetainAll = DecimalOptionBase & {
38
+ // readonly type: 'retain-all';
39
+ // };
40
+ // // 创建工厂函数
41
+ // const createDecimalOption = <T extends DecimalOptionBase & { type: string }>(
42
+ // type: T['type']
43
+ // ): T => {
44
+ // return {
45
+ // [DECIMAL_OPTIONS_BRAND]: DECIMAL_OPTIONS_BRAND,
46
+ // type
47
+ // } as T;
48
+ // };
49
+ // // 导出所有特殊值
50
+ // export const RETAIN_ALL: RetainAll =
51
+ // createDecimalOption('retain-all');
52
+ // 只需要一个标记的更简洁的写法
53
+ const RETAIN_ALL_BRAND = Symbol('RETAIN_ALL_BRAND');
54
+ const RETAIN_ALL = Object.freeze({
55
+ [RETAIN_ALL_BRAND]: RETAIN_ALL_BRAND,
56
+ });
57
+ exports.DecimalPlacesOptions = {
58
+ RETAIN_ALL,
59
+ };
26
60
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,2BAA2B,GAAG;IACzC,QAAQ,EAAE,OAAgB;IAC1B,MAAM,EAAE,OAAO;CAChB,CAAC;AAEF;;GAEG;AACU,QAAA,WAAW,GAGpB;IACF,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9C,EAAE,EAAE;QACF,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,WAAW;QACX,UAAU;QACV,QAAQ;QACR,UAAU;KACX;CACF,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,2BAA2B,GAAG;IACzC,QAAQ,EAAE,OAAgB;IAC1B,MAAM,EAAE,OAAO;CAChB,CAAC;AAEF;;GAEG;AACU,QAAA,WAAW,GAGpB;IACF,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9C,EAAE,EAAE;QACF,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,WAAW;QACX,UAAU;QACV,QAAQ;QACR,UAAU;KACX;CACF,CAAC;AAEF;;GAEG;AAEH,aAAa;AACb,sDAAsD;AACtD,6BAA6B;AAC7B,oEAAoE;AACpE,KAAK;AACL,MAAM;AACN,oBAAoB;AACpB,MAAM;AACN,gDAAgD;AAChD,iCAAiC;AACjC,KAAK;AACL,YAAY;AACZ,gFAAgF;AAChF,oBAAoB;AACpB,YAAY;AACZ,aAAa;AACb,sDAAsD;AACtD,WAAW;AACX,YAAY;AACZ,KAAK;AACL,aAAa;AACb,uCAAuC;AACvC,uCAAuC;AAEvC,iBAAiB;AACjB,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AASpD,MAAM,UAAU,GAAe,MAAM,CAAC,MAAM,CAAC;IAC3C,CAAC,gBAAgB,CAAC,EAAE,gBAAgB;CACvB,CAAC,CAAC;AACJ,QAAA,oBAAoB,GAAG;IAClC,UAAU;CACX,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@planarcat/js-toolkit",
3
- "version": "1.7.12",
4
- "description": "一个自用的带学习性质的(目前)现代化的 JavaScript/TypeScript 实用工具库,提供类型安全、高性能的常用函数,包括对象转换、日期处理、函数优化等开发常用工具。",
3
+ "version": "1.7.27",
4
+ "description": "一个现代化的 JavaScript/TypeScript 实用工具库,提供类型安全、高性能的常用函数,包括对象转换、日期处理、函数优化等开发常用工具。",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
@@ -9,6 +9,28 @@
9
9
  "README.md",
10
10
  "LICENSE"
11
11
  ],
12
+ "scripts": {
13
+ "build": "tsc -p tsconfig.build.json",
14
+ "build:watch": "tsc --watch",
15
+ "test": "jest",
16
+ "test:watch": "jest --watch",
17
+ "test:coverage": "jest --coverage",
18
+ "lint": "eslint \"src/**/*.ts\" \"__tests__/**/*.ts\"",
19
+ "lint:fix": "eslint \"src/**/*.ts\" \"__tests__/**/*.ts\" --fix",
20
+ "format": "prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"",
21
+ "format:check": "prettier --check \"src/**/*.ts\" \"__tests__/**/*.ts\"",
22
+ "prepare": "husky",
23
+ "prepublishOnly": "pnpm run lint && pnpm test && pnpm run build",
24
+ "clean": "rimraf dist coverage",
25
+ "docs": "typedoc",
26
+ "docs:watch": "typedoc --watch",
27
+ "bump": "node scripts/bump-version.js",
28
+ "bump:patch": "node scripts/bump-version.js patch",
29
+ "bump:minor": "node scripts/bump-version.js minor",
30
+ "bump:major": "node scripts/bump-version.js major",
31
+ "bump:beta": "node scripts/bump-version.js prerelease beta",
32
+ "bump:alpha": "node scripts/bump-version.js prerelease alpha"
33
+ },
12
34
  "keywords": [
13
35
  "javascript",
14
36
  "typescript",
@@ -56,25 +78,5 @@
56
78
  },
57
79
  "publishConfig": {
58
80
  "access": "public"
59
- },
60
- "scripts": {
61
- "build": "tsc -p tsconfig.build.json",
62
- "build:watch": "tsc --watch",
63
- "test": "jest",
64
- "test:watch": "jest --watch",
65
- "test:coverage": "jest --coverage",
66
- "lint": "eslint \"src/**/*.ts\" \"__tests__/**/*.ts\"",
67
- "lint:fix": "eslint \"src/**/*.ts\" \"__tests__/**/*.ts\" --fix",
68
- "format": "prettier --write \"src/**/*.ts\" \"__tests__/**/*.ts\"",
69
- "format:check": "prettier --check \"src/**/*.ts\" \"__tests__/**/*.ts\"",
70
- "clean": "rimraf dist coverage",
71
- "docs": "typedoc",
72
- "docs:watch": "typedoc --watch",
73
- "bump": "node scripts/bump-version.js",
74
- "bump:patch": "node scripts/bump-version.js patch",
75
- "bump:minor": "node scripts/bump-version.js minor",
76
- "bump:major": "node scripts/bump-version.js major",
77
- "bump:beta": "node scripts/bump-version.js prerelease beta",
78
- "bump:alpha": "node scripts/bump-version.js prerelease alpha"
79
81
  }
80
- }
82
+ }