@planarcat/js-toolkit 1.7.11 → 1.7.22
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 +57 -0
- package/dist/date/formatDateCompiled.d.ts +30 -0
- package/dist/date/formatDateCompiled.d.ts.map +1 -0
- package/dist/date/formatDateCompiled.js +126 -0
- package/dist/date/formatDateCompiled.js.map +1 -0
- package/dist/date/formatDatePlain.d.ts +34 -0
- package/dist/date/formatDatePlain.d.ts.map +1 -0
- package/dist/date/formatDatePlain.js +128 -0
- package/dist/date/formatDatePlain.js.map +1 -0
- package/dist/object/toFormattedNumber.d.ts +2 -2
- package/dist/object/toFormattedNumber.d.ts.map +1 -1
- package/dist/object/toFormattedNumber.js +15 -14
- package/dist/object/toFormattedNumber.js.map +1 -1
- package/dist/object/toFormattedNumberString.d.ts +61 -2
- package/dist/object/toFormattedNumberString.d.ts.map +1 -1
- package/dist/object/toFormattedNumberString.js +67 -66
- package/dist/object/toFormattedNumberString.js.map +1 -1
- package/dist/types/object.d.ts +4 -3
- package/dist/types/object.d.ts.map +1 -1
- package/dist/utils/constants.d.ts +13 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +35 -1
- package/dist/utils/constants.js.map +1 -1
- package/package.json +25 -23
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 时间
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 编译模式日期格式化实现
|
|
3
|
+
* 首次调用编译格式化字符串,后续调用使用缓存的编译函数
|
|
4
|
+
*/
|
|
5
|
+
import { DateFormatOptions, DateInput } from '../types/date';
|
|
6
|
+
/**
|
|
7
|
+
* 编译后的格式化函数类型
|
|
8
|
+
*/
|
|
9
|
+
type CompiledFormatter = (date: Date, options: DateFormatOptions) => string;
|
|
10
|
+
/**
|
|
11
|
+
* 编译格式化字符串,生成优化的格式化函数
|
|
12
|
+
* @param formatStr - 格式化字符串
|
|
13
|
+
* @returns 编译后的格式化函数
|
|
14
|
+
*/
|
|
15
|
+
export declare function compileFormat(formatStr: string): CompiledFormatter;
|
|
16
|
+
/**
|
|
17
|
+
* 清除格式化缓存
|
|
18
|
+
* @param formatStr - 可选,指定要清除的格式化字符串缓存
|
|
19
|
+
*/
|
|
20
|
+
export declare function clearFormatCache(formatStr?: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* 编译模式日期格式化
|
|
23
|
+
* @param input - 要格式化的日期输入
|
|
24
|
+
* @param formatStr - 格式化字符串
|
|
25
|
+
* @param options - 格式化选项
|
|
26
|
+
* @returns 格式化后的日期字符串
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatDateCompiled(input: DateInput, formatStr?: string, options?: Partial<DateFormatOptions>): string;
|
|
29
|
+
export default formatDateCompiled;
|
|
30
|
+
//# sourceMappingURL=formatDateCompiled.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatDateCompiled.d.ts","sourceRoot":"","sources":["../../src/date/formatDateCompiled.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI7D;;GAEG;AACH,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,KAAK,MAAM,CAAC;AAO5E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CA0FlE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,SAAS,EAChB,SAAS,GAAE,MAA8B,EACzC,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACzC,MAAM,CASR;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatDateCompiled = exports.clearFormatCache = exports.compileFormat = void 0;
|
|
4
|
+
const constants_1 = require("../utils/constants");
|
|
5
|
+
const formatDatePlain_1 = require("./formatDatePlain");
|
|
6
|
+
/**
|
|
7
|
+
* 格式化缓存,用于存储编译后的格式化函数
|
|
8
|
+
*/
|
|
9
|
+
const FORMAT_CACHE = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* 编译格式化字符串,生成优化的格式化函数
|
|
12
|
+
* @param formatStr - 格式化字符串
|
|
13
|
+
* @returns 编译后的格式化函数
|
|
14
|
+
*/
|
|
15
|
+
function compileFormat(formatStr) {
|
|
16
|
+
// 检查缓存
|
|
17
|
+
if (FORMAT_CACHE.has(formatStr)) {
|
|
18
|
+
return FORMAT_CACHE.get(formatStr);
|
|
19
|
+
}
|
|
20
|
+
// 生成编译后的函数
|
|
21
|
+
const compiledFn = (date, options) => {
|
|
22
|
+
// 获取日期各部分
|
|
23
|
+
const year = date.getFullYear();
|
|
24
|
+
const month = date.getMonth() + 1;
|
|
25
|
+
const day = date.getDate();
|
|
26
|
+
const hours = date.getHours();
|
|
27
|
+
const minutes = date.getMinutes();
|
|
28
|
+
const seconds = date.getSeconds();
|
|
29
|
+
const milliseconds = date.getMilliseconds();
|
|
30
|
+
const weekday = date.getDay();
|
|
31
|
+
const quarter = Math.floor((date.getMonth() + 3) / 3);
|
|
32
|
+
const weekNumber = (0, formatDatePlain_1.getWeekNumber)(date);
|
|
33
|
+
// 12小时制
|
|
34
|
+
const hours12 = hours % 12 || 12;
|
|
35
|
+
const ampm = hours < 12 ? 'AM' : 'PM';
|
|
36
|
+
const ampmLower = ampm.toLowerCase();
|
|
37
|
+
let result = formatStr;
|
|
38
|
+
// 优先替换 timestamp,避免被拆解
|
|
39
|
+
if (result.includes('timestamp')) {
|
|
40
|
+
result = result.replace(/timestamp/g, date.getTime().toString());
|
|
41
|
+
}
|
|
42
|
+
// 2. 应用自定义格式化器(优先级最高)
|
|
43
|
+
if (options.customFormatters) {
|
|
44
|
+
Object.entries(options.customFormatters).forEach(([token, formatter]) => {
|
|
45
|
+
const escapedToken = token.replace(/[.*+?^${}()|[\\]/g, '\\$&');
|
|
46
|
+
const regex = new RegExp(`(?<![a-zA-Z0-9])${escapedToken}(?![a-zA-Z0-9])`, 'g');
|
|
47
|
+
result = result.replace(regex, formatter(date));
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// 3. 替换多字符标记(2-4个字符)
|
|
51
|
+
const multiCharReplacements = {
|
|
52
|
+
YYYY: year.toString().padStart(4, '0'),
|
|
53
|
+
YY: year.toString().slice(-2),
|
|
54
|
+
MM: month.toString().padStart(2, '0'),
|
|
55
|
+
DD: day.toString().padStart(2, '0'),
|
|
56
|
+
HH: hours.toString().padStart(2, '0'),
|
|
57
|
+
hh: hours12.toString().padStart(2, '0'),
|
|
58
|
+
mm: minutes.toString().padStart(2, '0'),
|
|
59
|
+
ss: seconds.toString().padStart(2, '0'),
|
|
60
|
+
SSS: milliseconds.toString().padStart(3, '0'),
|
|
61
|
+
WW: weekNumber.toString().padStart(2, '0'),
|
|
62
|
+
dd: (0, formatDatePlain_1.getLocalizedWeekday)(weekday, options),
|
|
63
|
+
};
|
|
64
|
+
Object.entries(multiCharReplacements).forEach(([token, value]) => {
|
|
65
|
+
// 使用单词边界或字符串边界来确保精确匹配
|
|
66
|
+
const regex = new RegExp(`\\b${token}\\b|${token}(?![a-zA-Z0-9])`, 'g');
|
|
67
|
+
result = result.replace(regex, value);
|
|
68
|
+
});
|
|
69
|
+
// 4. 替换单字符标记(使用更精确的匹配)
|
|
70
|
+
const singleCharReplacements = {
|
|
71
|
+
Y: year.toString(),
|
|
72
|
+
M: month.toString(),
|
|
73
|
+
D: day.toString(),
|
|
74
|
+
H: hours.toString(),
|
|
75
|
+
h: hours12.toString(),
|
|
76
|
+
m: minutes.toString(),
|
|
77
|
+
s: seconds.toString(),
|
|
78
|
+
W: weekNumber.toString(),
|
|
79
|
+
d: weekday.toString(),
|
|
80
|
+
Q: quarter.toString(),
|
|
81
|
+
A: ampm,
|
|
82
|
+
a: ampmLower,
|
|
83
|
+
};
|
|
84
|
+
Object.entries(singleCharReplacements).forEach(([token, value]) => {
|
|
85
|
+
// 单字符需要更精确的匹配:前面是边界或特定字符,后面不是相同字符
|
|
86
|
+
const regex = new RegExp(`(?<![a-zA-Z0-9])${token}(?![a-zA-Z0-9])`, 'g');
|
|
87
|
+
result = result.replace(regex, value);
|
|
88
|
+
});
|
|
89
|
+
return result;
|
|
90
|
+
};
|
|
91
|
+
// 缓存编译结果
|
|
92
|
+
FORMAT_CACHE.set(formatStr, compiledFn);
|
|
93
|
+
return compiledFn;
|
|
94
|
+
}
|
|
95
|
+
exports.compileFormat = compileFormat;
|
|
96
|
+
/**
|
|
97
|
+
* 清除格式化缓存
|
|
98
|
+
* @param formatStr - 可选,指定要清除的格式化字符串缓存
|
|
99
|
+
*/
|
|
100
|
+
function clearFormatCache(formatStr) {
|
|
101
|
+
if (formatStr) {
|
|
102
|
+
FORMAT_CACHE.delete(formatStr);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
FORMAT_CACHE.clear();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.clearFormatCache = clearFormatCache;
|
|
109
|
+
/**
|
|
110
|
+
* 编译模式日期格式化
|
|
111
|
+
* @param input - 要格式化的日期输入
|
|
112
|
+
* @param formatStr - 格式化字符串
|
|
113
|
+
* @param options - 格式化选项
|
|
114
|
+
* @returns 格式化后的日期字符串
|
|
115
|
+
*/
|
|
116
|
+
function formatDateCompiled(input, formatStr = 'YYYY-MM-DD HH:mm:ss', options = {}) {
|
|
117
|
+
const date = (0, formatDatePlain_1.safeParseDate)(input);
|
|
118
|
+
const mergedOptions = { ...constants_1.DEFAULT_DATE_FORMAT_OPTIONS, ...options };
|
|
119
|
+
// 编译并缓存格式化函数
|
|
120
|
+
const formatter = compileFormat(formatStr);
|
|
121
|
+
// 使用编译后的函数格式化日期
|
|
122
|
+
return formatter(date, mergedOptions);
|
|
123
|
+
}
|
|
124
|
+
exports.formatDateCompiled = formatDateCompiled;
|
|
125
|
+
exports.default = formatDateCompiled;
|
|
126
|
+
//# sourceMappingURL=formatDateCompiled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatDateCompiled.js","sourceRoot":"","sources":["../../src/date/formatDateCompiled.ts"],"names":[],"mappings":";;;AAKA,kDAAiE;AACjE,uDAAsF;AAOtF;;GAEG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE1D;;;;GAIG;AACH,SAAgB,aAAa,CAAC,SAAiB;IAC3C,OAAO;IACP,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IACxC,CAAC;IAED,WAAW;IACX,MAAM,UAAU,GAAsB,CAAC,IAAU,EAAE,OAA0B,EAAE,EAAE;QAC7E,UAAU;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAA,+BAAa,EAAC,IAAI,CAAC,CAAC;QAEvC,QAAQ;QACR,MAAM,OAAO,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,MAAM,GAAG,SAAS,CAAC;QAEvB,uBAAuB;QACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,sBAAsB;QACtB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE;gBACpE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;gBAChE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,mBAAmB,YAAY,iBAAiB,EAAE,GAAG,CAAC,CAAC;gBAChF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACP,CAAC;QAED,qBAAqB;QACrB,MAAM,qBAAqB,GAA2B;YAClD,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACtC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACrC,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACnC,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACrC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACvC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACvC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YACvC,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YAC7C,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;YAC1C,EAAE,EAAE,IAAA,qCAAmB,EAAC,OAAO,EAAE,OAAO,CAAC;SAC5C,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;YAC7D,sBAAsB;YACtB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,KAAK,iBAAiB,EAAE,GAAG,CAAC,CAAC;YACxE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,MAAM,sBAAsB,GAA2B;YACnD,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE;YAClB,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE;YACnB,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE;YACjB,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE;YACnB,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE;YACrB,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE;YACrB,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE;YACrB,CAAC,EAAE,UAAU,CAAC,QAAQ,EAAE;YACxB,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE;YACrB,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE;YACrB,CAAC,EAAE,IAAI;YACP,CAAC,EAAE,SAAS;SACf,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9D,kCAAkC;YAClC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,mBAAmB,KAAK,iBAAiB,EAAE,GAAG,CAAC,CAAC;YACzE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF,SAAS;IACT,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxC,OAAO,UAAU,CAAC;AACtB,CAAC;AA1FD,sCA0FC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,SAAkB;IAC/C,IAAI,SAAS,EAAE,CAAC;QACZ,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACJ,YAAY,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACL,CAAC;AAND,4CAMC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAC9B,KAAgB,EAChB,YAAoB,qBAAqB,EACzC,UAAsC,EAAE;IAExC,MAAM,IAAI,GAAG,IAAA,+BAAa,EAAC,KAAK,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,EAAE,GAAG,uCAA2B,EAAE,GAAG,OAAO,EAAE,CAAC;IAErE,aAAa;IACb,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAE3C,gBAAgB;IAChB,OAAO,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAC1C,CAAC;AAbD,gDAaC;AAED,kBAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 普通模式日期格式化实现
|
|
3
|
+
* 每次调用都会重新解析格式化字符串
|
|
4
|
+
*/
|
|
5
|
+
import { DateFormatOptions, DateInput } from '../types/date';
|
|
6
|
+
/**
|
|
7
|
+
* 将各种输入类型安全地转换为 Date 对象
|
|
8
|
+
* @param input - 日期输入
|
|
9
|
+
* @returns 转换后的 Date 对象,无效输入返回当前时间
|
|
10
|
+
*/
|
|
11
|
+
export declare function safeParseDate(input: DateInput): Date;
|
|
12
|
+
/**
|
|
13
|
+
* 计算一年中的第几周 (ISO 8601)
|
|
14
|
+
* @param date - 日期对象
|
|
15
|
+
* @returns 周数
|
|
16
|
+
*/
|
|
17
|
+
export declare function getWeekNumber(date: Date): number;
|
|
18
|
+
/**
|
|
19
|
+
* 获取本地化的星期几
|
|
20
|
+
* @param weekday - 星期几 (0-6)
|
|
21
|
+
* @param options - 格式化选项
|
|
22
|
+
* @returns 本地化的星期几字符串
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLocalizedWeekday(weekday: number, options: DateFormatOptions): string;
|
|
25
|
+
/**
|
|
26
|
+
* 普通模式日期格式化
|
|
27
|
+
* @param input - 要格式化的日期输入
|
|
28
|
+
* @param formatStr - 格式化字符串
|
|
29
|
+
* @param options - 格式化选项
|
|
30
|
+
* @returns 格式化后的日期字符串
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatDatePlain(input: DateInput, formatStr?: string, options?: Partial<DateFormatOptions>): string;
|
|
33
|
+
export default formatDatePlain;
|
|
34
|
+
//# sourceMappingURL=formatDatePlain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatDatePlain.d.ts","sourceRoot":"","sources":["../../src/date/formatDatePlain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG7D;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAepD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAMhD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAGvF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC3B,KAAK,EAAE,SAAS,EAChB,SAAS,GAAE,MAA8B,EACzC,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACzC,MAAM,CA+ER;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatDatePlain = exports.getLocalizedWeekday = exports.getWeekNumber = exports.safeParseDate = void 0;
|
|
4
|
+
const constants_1 = require("../utils/constants");
|
|
5
|
+
/**
|
|
6
|
+
* 将各种输入类型安全地转换为 Date 对象
|
|
7
|
+
* @param input - 日期输入
|
|
8
|
+
* @returns 转换后的 Date 对象,无效输入返回当前时间
|
|
9
|
+
*/
|
|
10
|
+
function safeParseDate(input) {
|
|
11
|
+
if (input instanceof Date && !isNaN(input.getTime())) {
|
|
12
|
+
return input;
|
|
13
|
+
}
|
|
14
|
+
if (typeof input === 'string' || typeof input === 'number') {
|
|
15
|
+
const date = new Date(input);
|
|
16
|
+
if (!isNaN(date.getTime())) {
|
|
17
|
+
return date;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// 无效输入返回当前时间
|
|
21
|
+
console.warn(`Invalid date input: ${input}, using current date instead.`);
|
|
22
|
+
return new Date();
|
|
23
|
+
}
|
|
24
|
+
exports.safeParseDate = safeParseDate;
|
|
25
|
+
/**
|
|
26
|
+
* 计算一年中的第几周 (ISO 8601)
|
|
27
|
+
* @param date - 日期对象
|
|
28
|
+
* @returns 周数
|
|
29
|
+
*/
|
|
30
|
+
function getWeekNumber(date) {
|
|
31
|
+
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
32
|
+
const dayNum = d.getUTCDay() || 7;
|
|
33
|
+
d.setUTCDate(d.getUTCDate() + 4 - dayNum);
|
|
34
|
+
const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
|
|
35
|
+
return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
|
|
36
|
+
}
|
|
37
|
+
exports.getWeekNumber = getWeekNumber;
|
|
38
|
+
/**
|
|
39
|
+
* 获取本地化的星期几
|
|
40
|
+
* @param weekday - 星期几 (0-6)
|
|
41
|
+
* @param options - 格式化选项
|
|
42
|
+
* @returns 本地化的星期几字符串
|
|
43
|
+
*/
|
|
44
|
+
function getLocalizedWeekday(weekday, options) {
|
|
45
|
+
const lang = options.locale?.split('-')[0] || 'zh';
|
|
46
|
+
return constants_1.WEEKDAY_MAP[lang]?.[weekday] || constants_1.WEEKDAY_MAP.zh[weekday];
|
|
47
|
+
}
|
|
48
|
+
exports.getLocalizedWeekday = getLocalizedWeekday;
|
|
49
|
+
/**
|
|
50
|
+
* 普通模式日期格式化
|
|
51
|
+
* @param input - 要格式化的日期输入
|
|
52
|
+
* @param formatStr - 格式化字符串
|
|
53
|
+
* @param options - 格式化选项
|
|
54
|
+
* @returns 格式化后的日期字符串
|
|
55
|
+
*/
|
|
56
|
+
function formatDatePlain(input, formatStr = 'YYYY-MM-DD HH:mm:ss', options = {}) {
|
|
57
|
+
const date = safeParseDate(input);
|
|
58
|
+
const mergedOptions = { ...constants_1.DEFAULT_DATE_FORMAT_OPTIONS, ...options };
|
|
59
|
+
// 获取日期各部分
|
|
60
|
+
const year = date.getFullYear();
|
|
61
|
+
const month = date.getMonth() + 1;
|
|
62
|
+
const day = date.getDate();
|
|
63
|
+
const hours = date.getHours();
|
|
64
|
+
const minutes = date.getMinutes();
|
|
65
|
+
const seconds = date.getSeconds();
|
|
66
|
+
const milliseconds = date.getMilliseconds();
|
|
67
|
+
const weekday = date.getDay();
|
|
68
|
+
const quarter = Math.floor((date.getMonth() + 3) / 3);
|
|
69
|
+
const weekNumber = getWeekNumber(date);
|
|
70
|
+
// 12小时制
|
|
71
|
+
const hours12 = hours % 12 || 12;
|
|
72
|
+
const ampm = hours < 12 ? 'AM' : 'PM';
|
|
73
|
+
const ampmLower = ampm.toLowerCase();
|
|
74
|
+
let result = formatStr;
|
|
75
|
+
// 优先替换 timestamp,避免被拆解
|
|
76
|
+
if (result.includes('timestamp')) {
|
|
77
|
+
result = result.replace(/timestamp/g, date.getTime().toString());
|
|
78
|
+
}
|
|
79
|
+
// 2. 应用自定义格式化器(优先级最高)
|
|
80
|
+
if (mergedOptions.customFormatters) {
|
|
81
|
+
Object.entries(mergedOptions.customFormatters).forEach(([token, formatter]) => {
|
|
82
|
+
const escapedToken = token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
83
|
+
const regex = new RegExp(`(?<![a-zA-Z0-9])${escapedToken}(?![a-zA-Z0-9])`, 'g');
|
|
84
|
+
result = result.replace(regex, formatter(date));
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// 3. 替换多字符标记(2-4个字符)
|
|
88
|
+
const multiCharReplacements = {
|
|
89
|
+
YYYY: year.toString().padStart(4, '0'),
|
|
90
|
+
YY: year.toString().slice(-2),
|
|
91
|
+
MM: month.toString().padStart(2, '0'),
|
|
92
|
+
DD: day.toString().padStart(2, '0'),
|
|
93
|
+
HH: hours.toString().padStart(2, '0'),
|
|
94
|
+
hh: hours12.toString().padStart(2, '0'),
|
|
95
|
+
mm: minutes.toString().padStart(2, '0'),
|
|
96
|
+
ss: seconds.toString().padStart(2, '0'),
|
|
97
|
+
SSS: milliseconds.toString().padStart(3, '0'),
|
|
98
|
+
WW: weekNumber.toString().padStart(2, '0'),
|
|
99
|
+
dd: getLocalizedWeekday(weekday, mergedOptions),
|
|
100
|
+
};
|
|
101
|
+
Object.entries(multiCharReplacements).forEach(([token, value]) => {
|
|
102
|
+
const regex = new RegExp(`\\b${token}\\b|${token}(?![a-zA-Z0-9])`, 'g');
|
|
103
|
+
result = result.replace(regex, value);
|
|
104
|
+
});
|
|
105
|
+
// 4. 替换单字符标记(使用更精确的匹配)
|
|
106
|
+
const singleCharReplacements = {
|
|
107
|
+
Y: year.toString(),
|
|
108
|
+
M: month.toString(),
|
|
109
|
+
D: day.toString(),
|
|
110
|
+
H: hours.toString(),
|
|
111
|
+
h: hours12.toString(),
|
|
112
|
+
m: minutes.toString(),
|
|
113
|
+
s: seconds.toString(),
|
|
114
|
+
W: weekNumber.toString(),
|
|
115
|
+
d: weekday.toString(),
|
|
116
|
+
Q: quarter.toString(),
|
|
117
|
+
A: ampm,
|
|
118
|
+
a: ampmLower,
|
|
119
|
+
};
|
|
120
|
+
Object.entries(singleCharReplacements).forEach(([token, value]) => {
|
|
121
|
+
const regex = new RegExp(`(?<![a-zA-Z0-9])${token}(?![a-zA-Z0-9])`, 'g');
|
|
122
|
+
result = result.replace(regex, value);
|
|
123
|
+
});
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
exports.formatDatePlain = formatDatePlain;
|
|
127
|
+
exports.default = formatDatePlain;
|
|
128
|
+
//# sourceMappingURL=formatDatePlain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatDatePlain.js","sourceRoot":"","sources":["../../src/date/formatDatePlain.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
* toFormattedNumber('abc', { nanValue: -1 }); // -1
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
|
-
declare function toFormattedNumber(object: unknown[], options?: import(
|
|
55
|
-
declare function toFormattedNumber(object: unknown, options?: import(
|
|
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":"
|
|
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
|
|
21
|
+
case 'number':
|
|
21
22
|
return value;
|
|
22
|
-
case
|
|
23
|
+
case 'string': {
|
|
23
24
|
const numStr = extractNumberFromString(value);
|
|
24
25
|
return numStr ? Number(numStr) : 0;
|
|
25
26
|
}
|
|
26
|
-
case
|
|
27
|
+
case 'boolean':
|
|
27
28
|
return value ? 1 : 0;
|
|
28
|
-
case
|
|
29
|
-
case
|
|
29
|
+
case 'function':
|
|
30
|
+
case 'symbol':
|
|
30
31
|
return NaN;
|
|
31
|
-
case
|
|
32
|
+
case 'object':
|
|
32
33
|
if (value === null) {
|
|
33
34
|
return NaN;
|
|
34
35
|
}
|
|
35
36
|
// 其他对象类型返回NaN
|
|
36
37
|
return NaN;
|
|
37
|
-
case
|
|
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 =
|
|
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 ===
|
|
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,
|
|
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(
|
|
2
|
-
declare function toFormattedNumberString(object: unknown, options?: import(
|
|
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":"
|
|
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 ===
|
|
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 ===
|
|
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
|
|
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
|
|
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 ===
|
|
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 ===
|
|
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 =
|
|
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":";;;;;AAAA
|
|
1
|
+
{"version":3,"file":"toFormattedNumberString.js","sourceRoot":"","sources":["../../src/object/toFormattedNumberString.ts"],"names":[],"mappings":"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"}
|
package/dist/types/object.d.ts
CHANGED
|
@@ -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
|
-
* 默认
|
|
8
|
-
* 可选值:number(保留指定小数位) |
|
|
8
|
+
* 默认DecimalPlacesOptions.RETAIN_ALL(保留所有小数位,不额外处理),
|
|
9
|
+
* 可选值:number(保留指定小数位) | DecimalPlacesOptions.RETAIN_ALL(保留所有小数位,不额外处理)。
|
|
9
10
|
*/
|
|
10
|
-
decimalPlaces?:
|
|
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,
|
|
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"}
|
package/dist/utils/constants.js
CHANGED
|
@@ -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.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.7.22",
|
|
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
|
+
}
|