ph-utils 0.4.0 → 0.4.2
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/lib/copy.js +17 -21
 - package/lib/crypto_node.d.ts +2 -2
 - package/lib/crypto_node.js +23 -20
 - package/lib/date.d.ts +5 -3
 - package/lib/date.js +45 -29
 - package/lib/index.d.ts +6 -0
 - package/lib/index.js +47 -30
 - package/lib/storage.d.ts +1 -1
 - package/lib/storage.js +8 -4
 - package/package.json +1 -1
 
    
        package/lib/copy.js
    CHANGED
    
    | 
         @@ -4,14 +4,14 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
             * @return {HTMLElement}
         
     | 
| 
       5 
5 
     | 
    
         
             
             */
         
     | 
| 
       6 
6 
     | 
    
         
             
            function createFakeElement(value) {
         
     | 
| 
       7 
     | 
    
         
            -
                const fakeElement = document.createElement( 
     | 
| 
       8 
     | 
    
         
            -
                fakeElement.style.border =  
     | 
| 
       9 
     | 
    
         
            -
                fakeElement.style.padding =  
     | 
| 
       10 
     | 
    
         
            -
                fakeElement.style.margin =  
     | 
| 
       11 
     | 
    
         
            -
                fakeElement.style.position =  
     | 
| 
       12 
     | 
    
         
            -
                fakeElement.style.left =  
     | 
| 
       13 
     | 
    
         
            -
                fakeElement.style.top =  
     | 
| 
       14 
     | 
    
         
            -
                fakeElement.setAttribute( 
     | 
| 
      
 7 
     | 
    
         
            +
                const fakeElement = document.createElement("textarea");
         
     | 
| 
      
 8 
     | 
    
         
            +
                fakeElement.style.border = "0";
         
     | 
| 
      
 9 
     | 
    
         
            +
                fakeElement.style.padding = "0";
         
     | 
| 
      
 10 
     | 
    
         
            +
                fakeElement.style.margin = "0";
         
     | 
| 
      
 11 
     | 
    
         
            +
                fakeElement.style.position = "absolute";
         
     | 
| 
      
 12 
     | 
    
         
            +
                fakeElement.style.left = "-9999px";
         
     | 
| 
      
 13 
     | 
    
         
            +
                fakeElement.style.top = "-9999";
         
     | 
| 
      
 14 
     | 
    
         
            +
                fakeElement.setAttribute("readonly", "");
         
     | 
| 
       15 
15 
     | 
    
         
             
                fakeElement.value = value;
         
     | 
| 
       16 
16 
     | 
    
         
             
                return fakeElement;
         
     | 
| 
       17 
17 
     | 
    
         
             
            }
         
     | 
| 
         @@ -23,13 +23,13 @@ function copyFromCommand(text) { 
     | 
|
| 
       23 
23 
     | 
    
         
             
                fakeEl.focus();
         
     | 
| 
       24 
24 
     | 
    
         
             
                fakeEl.select();
         
     | 
| 
       25 
25 
     | 
    
         
             
                // 执行复制
         
     | 
| 
       26 
     | 
    
         
            -
                const res = document.execCommand( 
     | 
| 
      
 26 
     | 
    
         
            +
                const res = document.execCommand("copy");
         
     | 
| 
       27 
27 
     | 
    
         
             
                fakeEl.remove(); // 删除节点
         
     | 
| 
       28 
28 
     | 
    
         
             
                return Promise.resolve(res);
         
     | 
| 
       29 
29 
     | 
    
         
             
            }
         
     | 
| 
       30 
30 
     | 
    
         
             
            /** 使用 navigator.clipboard 复制 */
         
     | 
| 
       31 
31 
     | 
    
         
             
            function copyFromClipboard(text) {
         
     | 
| 
       32 
     | 
    
         
            -
                 
     | 
| 
      
 32 
     | 
    
         
            +
                const theClipboard = navigator.clipboard;
         
     | 
| 
       33 
33 
     | 
    
         
             
                if (theClipboard != null) {
         
     | 
| 
       34 
34 
     | 
    
         
             
                    return theClipboard
         
     | 
| 
       35 
35 
     | 
    
         
             
                        .writeText(text)
         
     | 
| 
         @@ -38,18 +38,16 @@ function copyFromClipboard(text) { 
     | 
|
| 
       38 
38 
     | 
    
         
             
                    })
         
     | 
| 
       39 
39 
     | 
    
         
             
                        .catch(() => Promise.resolve(false));
         
     | 
| 
       40 
40 
     | 
    
         
             
                }
         
     | 
| 
       41 
     | 
    
         
            -
                 
     | 
| 
       42 
     | 
    
         
            -
                    return Promise.resolve(false);
         
     | 
| 
       43 
     | 
    
         
            -
                }
         
     | 
| 
      
 41 
     | 
    
         
            +
                return Promise.resolve(false);
         
     | 
| 
       44 
42 
     | 
    
         
             
            }
         
     | 
| 
       45 
43 
     | 
    
         
             
            /** 解析待复制的文本 */
         
     | 
| 
       46 
44 
     | 
    
         
             
            function parseCopyText(source) {
         
     | 
| 
       47 
45 
     | 
    
         
             
                let copyText = null; // 待复制文本
         
     | 
| 
       48 
46 
     | 
    
         
             
                let sourceEl = null;
         
     | 
| 
       49 
47 
     | 
    
         
             
                // 获取待复制数据
         
     | 
| 
       50 
     | 
    
         
            -
                if (typeof source ===  
     | 
| 
      
 48 
     | 
    
         
            +
                if (typeof source === "string") {
         
     | 
| 
       51 
49 
     | 
    
         
             
                    // 从节点拿数据
         
     | 
| 
       52 
     | 
    
         
            -
                    if (source.startsWith( 
     | 
| 
      
 50 
     | 
    
         
            +
                    if (source.startsWith("#") || source.startsWith(".")) {
         
     | 
| 
       53 
51 
     | 
    
         
             
                        sourceEl = document.querySelector(source);
         
     | 
| 
       54 
52 
     | 
    
         
             
                        if (sourceEl == null) {
         
     | 
| 
       55 
53 
     | 
    
         
             
                            copyText = source;
         
     | 
| 
         @@ -64,12 +62,12 @@ function parseCopyText(source) { 
     | 
|
| 
       64 
62 
     | 
    
         
             
                }
         
     | 
| 
       65 
63 
     | 
    
         
             
                // 从节点获取待复制数据
         
     | 
| 
       66 
64 
     | 
    
         
             
                if (sourceEl != null) {
         
     | 
| 
       67 
     | 
    
         
            -
                    if (sourceEl.hasAttribute( 
     | 
| 
       68 
     | 
    
         
            -
                        copyText = sourceEl.getAttribute( 
     | 
| 
      
 65 
     | 
    
         
            +
                    if (sourceEl.hasAttribute("data-copy-text")) {
         
     | 
| 
      
 66 
     | 
    
         
            +
                        copyText = sourceEl.getAttribute("data-copy-text");
         
     | 
| 
       69 
67 
     | 
    
         
             
                    }
         
     | 
| 
       70 
68 
     | 
    
         
             
                    else {
         
     | 
| 
       71 
69 
     | 
    
         
             
                        const tagName = sourceEl.tagName;
         
     | 
| 
       72 
     | 
    
         
            -
                        if (tagName ===  
     | 
| 
      
 70 
     | 
    
         
            +
                        if (tagName === "INPUT" || tagName === "TEXTAREA") {
         
     | 
| 
       73 
71 
     | 
    
         
             
                            copyText = sourceEl.value;
         
     | 
| 
       74 
72 
     | 
    
         
             
                        }
         
     | 
| 
       75 
73 
     | 
    
         
             
                        else {
         
     | 
| 
         @@ -99,7 +97,5 @@ export async function copy(source) { 
     | 
|
| 
       99 
97 
     | 
    
         
             
                if (v === false) {
         
     | 
| 
       100 
98 
     | 
    
         
             
                    return copyFromCommand(copyText);
         
     | 
| 
       101 
99 
     | 
    
         
             
                }
         
     | 
| 
       102 
     | 
    
         
            -
                 
     | 
| 
       103 
     | 
    
         
            -
                    return Promise.resolve(true);
         
     | 
| 
       104 
     | 
    
         
            -
                }
         
     | 
| 
      
 100 
     | 
    
         
            +
                return Promise.resolve(true);
         
     | 
| 
       105 
101 
     | 
    
         
             
            }
         
     | 
    
        package/lib/crypto_node.d.ts
    CHANGED
    
    | 
         @@ -1,8 +1,8 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            type HashAlgorithmName =  
     | 
| 
      
 1 
     | 
    
         
            +
            type HashAlgorithmName = "md5" | "sha1" | "sha256";
         
     | 
| 
       2 
2 
     | 
    
         
             
            /**
         
     | 
| 
       3 
3 
     | 
    
         
             
             * 进行 md5|sha1|sha256 数据摘要签名
         
     | 
| 
       4 
4 
     | 
    
         
             
             * @param d 待加密的数据
         
     | 
| 
       5 
     | 
    
         
            -
             * @param algorithm 签名算法, md5、sha1. Defaults to " 
     | 
| 
      
 5 
     | 
    
         
            +
             * @param algorithm 签名算法, md5、sha1、sha256. Defaults to "sha256".
         
     | 
| 
       6 
6 
     | 
    
         
             
             * @param upper 返回的结果是否需要大写. Defaults to False.
         
     | 
| 
       7 
7 
     | 
    
         
             
             */
         
     | 
| 
       8 
8 
     | 
    
         
             
            export declare function hashDigest(d: string, algorithm?: HashAlgorithmName, upper?: boolean): string;
         
     | 
    
        package/lib/crypto_node.js
    CHANGED
    
    | 
         @@ -1,12 +1,12 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import { createHash, createCipheriv, randomBytes, generateKeyPair, createDecipheriv, privateDecrypt, publicEncrypt, } from  
     | 
| 
      
 1 
     | 
    
         
            +
            import { createHash, createCipheriv, randomBytes, generateKeyPair, createDecipheriv, privateDecrypt, publicEncrypt, } from "node:crypto";
         
     | 
| 
       2 
2 
     | 
    
         
             
            /**
         
     | 
| 
       3 
3 
     | 
    
         
             
             * 进行 md5|sha1|sha256 数据摘要签名
         
     | 
| 
       4 
4 
     | 
    
         
             
             * @param d 待加密的数据
         
     | 
| 
       5 
     | 
    
         
            -
             * @param algorithm 签名算法, md5、sha1. Defaults to " 
     | 
| 
      
 5 
     | 
    
         
            +
             * @param algorithm 签名算法, md5、sha1、sha256. Defaults to "sha256".
         
     | 
| 
       6 
6 
     | 
    
         
             
             * @param upper 返回的结果是否需要大写. Defaults to False.
         
     | 
| 
       7 
7 
     | 
    
         
             
             */
         
     | 
| 
       8 
     | 
    
         
            -
            export function hashDigest(d, algorithm =  
     | 
| 
       9 
     | 
    
         
            -
                const hashed = createHash(algorithm).update(d).digest( 
     | 
| 
      
 8 
     | 
    
         
            +
            export function hashDigest(d, algorithm = "sha256", upper = false) {
         
     | 
| 
      
 9 
     | 
    
         
            +
                const hashed = createHash(algorithm).update(d).digest("hex");
         
     | 
| 
       10 
10 
     | 
    
         
             
                return upper ? hashed.toUpperCase() : hashed;
         
     | 
| 
       11 
11 
     | 
    
         
             
            }
         
     | 
| 
       12 
12 
     | 
    
         
             
            /**
         
     | 
| 
         @@ -15,15 +15,15 @@ export function hashDigest(d, algorithm = 'sha256', upper = false) { 
     | 
|
| 
       15 
15 
     | 
    
         
             
             */
         
     | 
| 
       16 
16 
     | 
    
         
             
            export async function keyPair() {
         
     | 
| 
       17 
17 
     | 
    
         
             
                return new Promise((resolve, reject) => {
         
     | 
| 
       18 
     | 
    
         
            -
                    generateKeyPair( 
     | 
| 
      
 18 
     | 
    
         
            +
                    generateKeyPair("rsa", {
         
     | 
| 
       19 
19 
     | 
    
         
             
                        modulusLength: 2048,
         
     | 
| 
       20 
20 
     | 
    
         
             
                        publicKeyEncoding: {
         
     | 
| 
       21 
     | 
    
         
            -
                            type:  
     | 
| 
       22 
     | 
    
         
            -
                            format:  
     | 
| 
      
 21 
     | 
    
         
            +
                            type: "spki",
         
     | 
| 
      
 22 
     | 
    
         
            +
                            format: "pem",
         
     | 
| 
       23 
23 
     | 
    
         
             
                        },
         
     | 
| 
       24 
24 
     | 
    
         
             
                        privateKeyEncoding: {
         
     | 
| 
       25 
     | 
    
         
            -
                            type:  
     | 
| 
       26 
     | 
    
         
            -
                            format:  
     | 
| 
      
 25 
     | 
    
         
            +
                            type: "pkcs8",
         
     | 
| 
      
 26 
     | 
    
         
            +
                            format: "pem",
         
     | 
| 
       27 
27 
     | 
    
         
             
                        },
         
     | 
| 
       28 
28 
     | 
    
         
             
                    }, (err, publicKey, privateKey) => {
         
     | 
| 
       29 
29 
     | 
    
         
             
                        if (err == null) {
         
     | 
| 
         @@ -44,10 +44,13 @@ export async function keyPair() { 
     | 
|
| 
       44 
44 
     | 
    
         
             
             */
         
     | 
| 
       45 
45 
     | 
    
         
             
            export function aesEncrypt(key, input, upper = false) {
         
     | 
| 
       46 
46 
     | 
    
         
             
                const iv = randomBytes(16);
         
     | 
| 
       47 
     | 
    
         
            -
                const cipher = createCipheriv( 
     | 
| 
       48 
     | 
    
         
            -
                let encryptedData = cipher.update(input,  
     | 
| 
       49 
     | 
    
         
            -
                encryptedData += cipher.final( 
     | 
| 
       50 
     | 
    
         
            -
                return [ 
     | 
| 
      
 47 
     | 
    
         
            +
                const cipher = createCipheriv("aes-256-cbc", Buffer.from(key, "hex"), iv);
         
     | 
| 
      
 48 
     | 
    
         
            +
                let encryptedData = cipher.update(input, "utf-8", "hex");
         
     | 
| 
      
 49 
     | 
    
         
            +
                encryptedData += cipher.final("hex");
         
     | 
| 
      
 50 
     | 
    
         
            +
                return [
         
     | 
| 
      
 51 
     | 
    
         
            +
                    upper === true ? encryptedData.toUpperCase() : encryptedData,
         
     | 
| 
      
 52 
     | 
    
         
            +
                    iv.toString("hex"),
         
     | 
| 
      
 53 
     | 
    
         
            +
                ];
         
     | 
| 
       51 
54 
     | 
    
         
             
            }
         
     | 
| 
       52 
55 
     | 
    
         
             
            /**
         
     | 
| 
       53 
56 
     | 
    
         
             
             * AES 解密
         
     | 
| 
         @@ -57,9 +60,9 @@ export function aesEncrypt(key, input, upper = false) { 
     | 
|
| 
       57 
60 
     | 
    
         
             
             * @returns
         
     | 
| 
       58 
61 
     | 
    
         
             
             */
         
     | 
| 
       59 
62 
     | 
    
         
             
            export function aesDecrypt(input, key, iv) {
         
     | 
| 
       60 
     | 
    
         
            -
                const cipher = createDecipheriv( 
     | 
| 
       61 
     | 
    
         
            -
                let decryptedData = cipher.update(input,  
     | 
| 
       62 
     | 
    
         
            -
                decryptedData += cipher.final( 
     | 
| 
      
 63 
     | 
    
         
            +
                const cipher = createDecipheriv("aes-256-cbc", Buffer.from(key, "hex"), Buffer.from(iv, "hex"));
         
     | 
| 
      
 64 
     | 
    
         
            +
                let decryptedData = cipher.update(input, "hex", "utf-8");
         
     | 
| 
      
 65 
     | 
    
         
            +
                decryptedData += cipher.final("utf-8");
         
     | 
| 
       63 
66 
     | 
    
         
             
                return decryptedData;
         
     | 
| 
       64 
67 
     | 
    
         
             
            }
         
     | 
| 
       65 
68 
     | 
    
         
             
            /**
         
     | 
| 
         @@ -71,8 +74,8 @@ export function aesDecrypt(input, key, iv) { 
     | 
|
| 
       71 
74 
     | 
    
         
             
            export function rsaEncrypt(input, publicKey) {
         
     | 
| 
       72 
75 
     | 
    
         
             
                return publicEncrypt({
         
     | 
| 
       73 
76 
     | 
    
         
             
                    key: publicKey,
         
     | 
| 
       74 
     | 
    
         
            -
                    oaepHash:  
     | 
| 
       75 
     | 
    
         
            -
                }, Buffer.from(input)).toString( 
     | 
| 
      
 77 
     | 
    
         
            +
                    oaepHash: "sha256",
         
     | 
| 
      
 78 
     | 
    
         
            +
                }, Buffer.from(input)).toString("base64");
         
     | 
| 
       76 
79 
     | 
    
         
             
            }
         
     | 
| 
       77 
80 
     | 
    
         
             
            /**
         
     | 
| 
       78 
81 
     | 
    
         
             
             * RSA 解密
         
     | 
| 
         @@ -83,6 +86,6 @@ export function rsaEncrypt(input, publicKey) { 
     | 
|
| 
       83 
86 
     | 
    
         
             
            export function rsaDecrypt(encrtypData, privateKey) {
         
     | 
| 
       84 
87 
     | 
    
         
             
                return privateDecrypt({
         
     | 
| 
       85 
88 
     | 
    
         
             
                    key: privateKey,
         
     | 
| 
       86 
     | 
    
         
            -
                    oaepHash:  
     | 
| 
       87 
     | 
    
         
            -
                }, Buffer.from(encrtypData,  
     | 
| 
      
 89 
     | 
    
         
            +
                    oaepHash: "sha256",
         
     | 
| 
      
 90 
     | 
    
         
            +
                }, Buffer.from(encrtypData, "base64")).toString("utf-8");
         
     | 
| 
       88 
91 
     | 
    
         
             
            }
         
     | 
    
        package/lib/date.d.ts
    CHANGED
    
    | 
         @@ -34,15 +34,17 @@ export declare function endOf(date?: Date | string | number, unit?: string): Dat 
     | 
|
| 
       34 
34 
     | 
    
         
             
            /**
         
     | 
| 
       35 
35 
     | 
    
         
             
             * 获取时间戳
         
     | 
| 
       36 
36 
     | 
    
         
             
             * @param ctime 时间
         
     | 
| 
       37 
     | 
    
         
            -
             * @param  
     | 
| 
      
 37 
     | 
    
         
            +
             * @param pre 精度, s - 精确到秒, ms - 精确到毫秒, 默认: s
         
     | 
| 
       38 
38 
     | 
    
         
             
             * @returns
         
     | 
| 
       39 
39 
     | 
    
         
             
             */
         
     | 
| 
       40 
     | 
    
         
            -
            export declare function timeStamp(ctime?: Date | string | number,  
     | 
| 
      
 40 
     | 
    
         
            +
            export declare function timeStamp(ctime?: Date | string | number, pre?: "s" | "ms"): number;
         
     | 
| 
       41 
41 
     | 
    
         
             
            /**
         
     | 
| 
       42 
42 
     | 
    
         
             
             * 日期加上指定时间后的日期
         
     | 
| 
       43 
43 
     | 
    
         
             
             * @param date 指定的日期
         
     | 
| 
       44 
44 
     | 
    
         
             
             * @param num  需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
         
     | 
| 
       45 
     | 
    
         
            -
             * @param unit 需要添加的单位,date 
     | 
| 
      
 45 
     | 
    
         
            +
             * @param unit 需要添加的单位,date、month、year、hours、minute、second
         
     | 
| 
      
 46 
     | 
    
         
            +
             *
         
     | 
| 
      
 47 
     | 
    
         
            +
             * 查阅文档: {@link https://gitee.com/towardly/ph/wikis/utils/date ph-utils}
         
     | 
| 
       46 
48 
     | 
    
         
             
             */
         
     | 
| 
       47 
49 
     | 
    
         
             
            export declare function add(date: Date | string | number | null, num: number, unit: string): Date;
         
     | 
| 
       48 
50 
     | 
    
         
             
            /**
         
     | 
    
        package/lib/date.js
    CHANGED
    
    | 
         @@ -10,13 +10,19 @@ const ofArgs = { 
     | 
|
| 
       10 
10 
     | 
    
         
             
                end: [0, 11, -2, 23, 59, 59, 999],
         
     | 
| 
       11 
11 
     | 
    
         
             
            };
         
     | 
| 
       12 
12 
     | 
    
         
             
            const units = {
         
     | 
| 
       13 
     | 
    
         
            -
                Date: [ 
     | 
| 
       14 
     | 
    
         
            -
                Month: [ 
     | 
| 
       15 
     | 
    
         
            -
                Year: [ 
     | 
| 
       16 
     | 
    
         
            -
                Hours: [ 
     | 
| 
       17 
     | 
    
         
            -
                Minutes: [ 
     | 
| 
       18 
     | 
    
         
            -
                Seconds: [ 
     | 
| 
       19 
     | 
    
         
            -
                Milliseconds: [ 
     | 
| 
      
 13 
     | 
    
         
            +
                Date: ["date", "Date", "day", "Day", "D", "d"],
         
     | 
| 
      
 14 
     | 
    
         
            +
                Month: ["Month", "month", "m"],
         
     | 
| 
      
 15 
     | 
    
         
            +
                Year: ["Year", "year", "y"],
         
     | 
| 
      
 16 
     | 
    
         
            +
                Hours: ["Hours", "hours", "H"],
         
     | 
| 
      
 17 
     | 
    
         
            +
                Minutes: ["Minutes", "Minute", "minute", "minutes", "M"],
         
     | 
| 
      
 18 
     | 
    
         
            +
                Seconds: ["Seconds", "seconds", "Second", "second", "s"],
         
     | 
| 
      
 19 
     | 
    
         
            +
                Milliseconds: [
         
     | 
| 
      
 20 
     | 
    
         
            +
                    "Milliseconds",
         
     | 
| 
      
 21 
     | 
    
         
            +
                    "Millisecond",
         
     | 
| 
      
 22 
     | 
    
         
            +
                    "milliseconds",
         
     | 
| 
      
 23 
     | 
    
         
            +
                    "illisecond",
         
     | 
| 
      
 24 
     | 
    
         
            +
                    "S",
         
     | 
| 
      
 25 
     | 
    
         
            +
                ],
         
     | 
| 
       20 
26 
     | 
    
         
             
            };
         
     | 
| 
       21 
27 
     | 
    
         
             
            /**
         
     | 
| 
       22 
28 
     | 
    
         
             
             * 不足位数, 前位补 0
         
     | 
| 
         @@ -29,7 +35,7 @@ function p(s, l = 2) { 
     | 
|
| 
       29 
35 
     | 
    
         
             
                 * 由于年份最多为4为,所以前面先添3个0
         
     | 
| 
       30 
36 
     | 
    
         
             
                 * slice() 从后开始提前字符串
         
     | 
| 
       31 
37 
     | 
    
         
             
                 */
         
     | 
| 
       32 
     | 
    
         
            -
                return  
     | 
| 
      
 38 
     | 
    
         
            +
                return `000${s}`.slice(l * -1);
         
     | 
| 
       33 
39 
     | 
    
         
             
            }
         
     | 
| 
       34 
40 
     | 
    
         
             
            /**
         
     | 
| 
       35 
41 
     | 
    
         
             
             * 将单位转换为首字母大写, 例如:hours -> Hours
         
     | 
| 
         @@ -38,7 +44,7 @@ function p(s, l = 2) { 
     | 
|
| 
       38 
44 
     | 
    
         
             
             */
         
     | 
| 
       39 
45 
     | 
    
         
             
            function getUnit(unit) {
         
     | 
| 
       40 
46 
     | 
    
         
             
                let period = null;
         
     | 
| 
       41 
     | 
    
         
            -
                for ( 
     | 
| 
      
 47 
     | 
    
         
            +
                for (const [key, value] of Object.entries(units)) {
         
     | 
| 
       42 
48 
     | 
    
         
             
                    if (value.includes(unit)) {
         
     | 
| 
       43 
49 
     | 
    
         
             
                        period = key;
         
     | 
| 
       44 
50 
     | 
    
         
             
                        break;
         
     | 
| 
         @@ -68,16 +74,16 @@ function getLastDayOfYear(date, month) { 
     | 
|
| 
       68 
74 
     | 
    
         
             
             * @param date      日期
         
     | 
| 
       69 
75 
     | 
    
         
             
             * @param pattern   格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
         
     | 
| 
       70 
76 
     | 
    
         
             
             */
         
     | 
| 
       71 
     | 
    
         
            -
            export function format(date, pattern =  
     | 
| 
      
 77 
     | 
    
         
            +
            export function format(date, pattern = "yyyy-mm-dd HH:MM") {
         
     | 
| 
       72 
78 
     | 
    
         
             
                // eslint-disable-next-line
         
     | 
| 
       73 
79 
     | 
    
         
             
                date = parse(date);
         
     | 
| 
       74 
     | 
    
         
            -
                 
     | 
| 
       75 
     | 
    
         
            -
                 
     | 
| 
       76 
     | 
    
         
            -
                 
     | 
| 
       77 
     | 
    
         
            -
                 
     | 
| 
       78 
     | 
    
         
            -
                 
     | 
| 
       79 
     | 
    
         
            -
                 
     | 
| 
       80 
     | 
    
         
            -
                 
     | 
| 
      
 80 
     | 
    
         
            +
                const d = date.getDate();
         
     | 
| 
      
 81 
     | 
    
         
            +
                const y = date.getFullYear();
         
     | 
| 
      
 82 
     | 
    
         
            +
                const m = date.getMonth();
         
     | 
| 
      
 83 
     | 
    
         
            +
                const H = date.getHours();
         
     | 
| 
      
 84 
     | 
    
         
            +
                const M = date.getMinutes();
         
     | 
| 
      
 85 
     | 
    
         
            +
                const s = date.getSeconds();
         
     | 
| 
      
 86 
     | 
    
         
            +
                const flags = {
         
     | 
| 
       81 
87 
     | 
    
         
             
                    yy: p(y),
         
     | 
| 
       82 
88 
     | 
    
         
             
                    yyyy: y,
         
     | 
| 
       83 
89 
     | 
    
         
             
                    m: m + 1,
         
     | 
| 
         @@ -111,13 +117,13 @@ export function parse(date) { 
     | 
|
| 
       111 
117 
     | 
    
         
             
                    return new Date();
         
     | 
| 
       112 
118 
     | 
    
         
             
                if (date instanceof Date)
         
     | 
| 
       113 
119 
     | 
    
         
             
                    return date;
         
     | 
| 
       114 
     | 
    
         
            -
                if (typeof date ===  
     | 
| 
      
 120 
     | 
    
         
            +
                if (typeof date === "string" && !/Z$/i.test(date)) {
         
     | 
| 
       115 
121 
     | 
    
         
             
                    const d = date.match(REGEX_PARSE);
         
     | 
| 
       116 
122 
     | 
    
         
             
                    if (d) {
         
     | 
| 
       117 
123 
     | 
    
         
             
                        return new Date(d[1], d[2] - 1, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, d[7] || 0);
         
     | 
| 
       118 
124 
     | 
    
         
             
                    }
         
     | 
| 
       119 
125 
     | 
    
         
             
                }
         
     | 
| 
       120 
     | 
    
         
            -
                if (typeof date ===  
     | 
| 
      
 126 
     | 
    
         
            +
                if (typeof date === "number") {
         
     | 
| 
       121 
127 
     | 
    
         
             
                    return new Date(date <= 9999999999 ? date * 1000 : date);
         
     | 
| 
       122 
128 
     | 
    
         
             
                }
         
     | 
| 
       123 
129 
     | 
    
         
             
                return new Date();
         
     | 
| 
         @@ -130,18 +136,28 @@ export function parse(date) { 
     | 
|
| 
       130 
136 
     | 
    
         
             
             */
         
     | 
| 
       131 
137 
     | 
    
         
             
            export function dateOf(date, unit, isEnd = false) {
         
     | 
| 
       132 
138 
     | 
    
         
             
                /* 如果是设置某一天的开始时刻, 就需要将时、分、秒、毫秒设置为0,依次类推设置 */
         
     | 
| 
       133 
     | 
    
         
            -
                const periods = [ 
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
      
 139 
     | 
    
         
            +
                const periods = [
         
     | 
| 
      
 140 
     | 
    
         
            +
                    "Year",
         
     | 
| 
      
 141 
     | 
    
         
            +
                    "Month",
         
     | 
| 
      
 142 
     | 
    
         
            +
                    "Date",
         
     | 
| 
      
 143 
     | 
    
         
            +
                    "Hours",
         
     | 
| 
      
 144 
     | 
    
         
            +
                    "Minutes",
         
     | 
| 
      
 145 
     | 
    
         
            +
                    "Seconds",
         
     | 
| 
      
 146 
     | 
    
         
            +
                    "Milliseconds",
         
     | 
| 
      
 147 
     | 
    
         
            +
                ];
         
     | 
| 
      
 148 
     | 
    
         
            +
                let index = periods.indexOf(getUnit(unit || "Date"));
         
     | 
| 
       135 
149 
     | 
    
         
             
                const clone = parse(date);
         
     | 
| 
       136 
150 
     | 
    
         
             
                index++;
         
     | 
| 
       137 
     | 
    
         
            -
                const setValues = ofArgs[isEnd === true ?  
     | 
| 
      
 151 
     | 
    
         
            +
                const setValues = ofArgs[isEnd === true ? "end" : "start"];
         
     | 
| 
       138 
152 
     | 
    
         
             
                for (const len = periods.length; index < len; index++) {
         
     | 
| 
       139 
153 
     | 
    
         
             
                    let value = setValues[index];
         
     | 
| 
       140 
154 
     | 
    
         
             
                    if (value === -2) {
         
     | 
| 
       141 
155 
     | 
    
         
             
                        // 设置为某个月的最后一天的日期
         
     | 
| 
       142 
156 
     | 
    
         
             
                        value = getLastDayOfYear(clone);
         
     | 
| 
       143 
157 
     | 
    
         
             
                    }
         
     | 
| 
       144 
     | 
    
         
            -
                    Date.prototype[ 
     | 
| 
      
 158 
     | 
    
         
            +
                    Date.prototype["set" + periods[index]].apply(clone, [
         
     | 
| 
      
 159 
     | 
    
         
            +
                        setValues[index],
         
     | 
| 
      
 160 
     | 
    
         
            +
                    ]);
         
     | 
| 
       145 
161 
     | 
    
         
             
                }
         
     | 
| 
       146 
162 
     | 
    
         
             
                return clone;
         
     | 
| 
       147 
163 
     | 
    
         
             
            }
         
     | 
| 
         @@ -166,12 +182,12 @@ export function endOf(date, unit) { 
     | 
|
| 
       166 
182 
     | 
    
         
             
            /**
         
     | 
| 
       167 
183 
     | 
    
         
             
             * 获取时间戳
         
     | 
| 
       168 
184 
     | 
    
         
             
             * @param ctime 时间
         
     | 
| 
       169 
     | 
    
         
            -
             * @param  
     | 
| 
      
 185 
     | 
    
         
            +
             * @param pre 精度, s - 精确到秒, ms - 精确到毫秒, 默认: s
         
     | 
| 
       170 
186 
     | 
    
         
             
             * @returns
         
     | 
| 
       171 
187 
     | 
    
         
             
             */
         
     | 
| 
       172 
     | 
    
         
            -
            export function timeStamp(ctime,  
     | 
| 
      
 188 
     | 
    
         
            +
            export function timeStamp(ctime, pre = "s") {
         
     | 
| 
       173 
189 
     | 
    
         
             
                let tm = parse(ctime).getTime();
         
     | 
| 
       174 
     | 
    
         
            -
                return  
     | 
| 
      
 190 
     | 
    
         
            +
                return pre === "s" ? Math.floor(tm / 1000) : tm;
         
     | 
| 
       175 
191 
     | 
    
         
             
            }
         
     | 
| 
       176 
192 
     | 
    
         
             
            /**
         
     | 
| 
       177 
193 
     | 
    
         
             
             * 日期加上指定时间后的日期
         
     | 
| 
         @@ -188,13 +204,13 @@ export function add(date, num, unit, fmt) { 
     | 
|
| 
       188 
204 
     | 
    
         
             
                }
         
     | 
| 
       189 
205 
     | 
    
         
             
                // eslint-disable-next-line
         
     | 
| 
       190 
206 
     | 
    
         
             
                unit = getUnit(unit);
         
     | 
| 
       191 
     | 
    
         
            -
                let fn =  
     | 
| 
       192 
     | 
    
         
            -
                let gn =  
     | 
| 
      
 207 
     | 
    
         
            +
                let fn = "set" + unit;
         
     | 
| 
      
 208 
     | 
    
         
            +
                let gn = "get" + unit;
         
     | 
| 
       193 
209 
     | 
    
         
             
                // @ts-ignore
         
     | 
| 
       194 
210 
     | 
    
         
             
                let oldValue = Date.prototype[gn].apply(sdate);
         
     | 
| 
       195 
211 
     | 
    
         
             
                // @ts-ignore
         
     | 
| 
       196 
212 
     | 
    
         
             
                Date.prototype[fn].apply(sdate, [oldValue + num]);
         
     | 
| 
       197 
     | 
    
         
            -
                if (typeof fmt ===  
     | 
| 
      
 213 
     | 
    
         
            +
                if (typeof fmt === "string") {
         
     | 
| 
       198 
214 
     | 
    
         
             
                    return format(sdate, fmt);
         
     | 
| 
       199 
215 
     | 
    
         
             
                }
         
     | 
| 
       200 
216 
     | 
    
         
             
                else {
         
     | 
    
        package/lib/index.d.ts
    CHANGED
    
    | 
         @@ -80,4 +80,10 @@ export declare class BaseError extends Error { 
     | 
|
| 
       80 
80 
     | 
    
         
             
             * @return string
         
     | 
| 
       81 
81 
     | 
    
         
             
             */
         
     | 
| 
       82 
82 
     | 
    
         
             
            export declare function formatMoney(number: number): string;
         
     | 
| 
      
 83 
     | 
    
         
            +
            /**
         
     | 
| 
      
 84 
     | 
    
         
            +
             * 将风格由大写风格转换为下划线风格: IconFont -> icon_font
         
     | 
| 
      
 85 
     | 
    
         
            +
             * @param name 命名, 例如: IconFont
         
     | 
| 
      
 86 
     | 
    
         
            +
             * @param connector 连接符, 默认为: _
         
     | 
| 
      
 87 
     | 
    
         
            +
             */
         
     | 
| 
      
 88 
     | 
    
         
            +
            export declare function snakeCaseStyle(name: string, connector?: string): string;
         
     | 
| 
       83 
89 
     | 
    
         
             
            export {};
         
     | 
    
        package/lib/index.js
    CHANGED
    
    | 
         @@ -2,9 +2,9 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
             * node 和 web 通用的工具类
         
     | 
| 
       3 
3 
     | 
    
         
             
             */
         
     | 
| 
       4 
4 
     | 
    
         
             
            /** 包含字母+数字的随机数字符 */
         
     | 
| 
       5 
     | 
    
         
            -
            const RANDOM_CHARS =  
     | 
| 
      
 5 
     | 
    
         
            +
            const RANDOM_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
         
     | 
| 
       6 
6 
     | 
    
         
             
            /** 只包含字母的随机数字符 */
         
     | 
| 
       7 
     | 
    
         
            -
            const NUMBER_RANDOM_CHARTS =  
     | 
| 
      
 7 
     | 
    
         
            +
            const NUMBER_RANDOM_CHARTS = "0123456789";
         
     | 
| 
       8 
8 
     | 
    
         
             
            /**
         
     | 
| 
       9 
9 
     | 
    
         
             
             * 验证字符串是否为空
         
     | 
| 
       10 
10 
     | 
    
         
             
             * @param str               待验证的字符串
         
     | 
| 
         @@ -22,14 +22,14 @@ export function isBlank(str, ignoreWhitespace = true) { 
     | 
|
| 
       22 
22 
     | 
    
         
             
             * @returns 屏蔽后的手机号,例如:123 **** 1234
         
     | 
| 
       23 
23 
     | 
    
         
             
             */
         
     | 
| 
       24 
24 
     | 
    
         
             
            export function shieldMobile(mobile) {
         
     | 
| 
       25 
     | 
    
         
            -
                 
     | 
| 
       26 
     | 
    
         
            -
                 
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
      
 25 
     | 
    
         
            +
                const x1 = Math.floor(mobile.length / 2);
         
     | 
| 
      
 26 
     | 
    
         
            +
                const x2 = Math.ceil(x1 / 2);
         
     | 
| 
      
 27 
     | 
    
         
            +
                const shields = [" "];
         
     | 
| 
       28 
28 
     | 
    
         
             
                for (let i = 0; i < x1 - 1; i++) {
         
     | 
| 
       29 
     | 
    
         
            -
                    shields.push( 
     | 
| 
      
 29 
     | 
    
         
            +
                    shields.push("*");
         
     | 
| 
       30 
30 
     | 
    
         
             
                }
         
     | 
| 
       31 
     | 
    
         
            -
                shields.push( 
     | 
| 
       32 
     | 
    
         
            -
                return mobile.substring(0, x2) + shields.join( 
     | 
| 
      
 31 
     | 
    
         
            +
                shields.push(" ");
         
     | 
| 
      
 32 
     | 
    
         
            +
                return (mobile.substring(0, x2) + shields.join("") + mobile.substring(x2 + x1 - 1));
         
     | 
| 
       33 
33 
     | 
    
         
             
            }
         
     | 
| 
       34 
34 
     | 
    
         
             
            /**
         
     | 
| 
       35 
35 
     | 
    
         
             
             * 验证参数是否是数字
         
     | 
| 
         @@ -41,9 +41,9 @@ export function shieldMobile(mobile) { 
     | 
|
| 
       41 
41 
     | 
    
         
             
             */
         
     | 
| 
       42 
42 
     | 
    
         
             
            export function isNumeric(str, numericParam) {
         
     | 
| 
       43 
43 
     | 
    
         
             
                numericParam = { isPositive: false, isFloat: true, ...(numericParam || {}) };
         
     | 
| 
       44 
     | 
    
         
            -
                 
     | 
| 
       45 
     | 
    
         
            -
                 
     | 
| 
       46 
     | 
    
         
            -
                return new RegExp( 
     | 
| 
      
 44 
     | 
    
         
            +
                const symbol = numericParam.isPositive ? "[+]?" : "[+-]?";
         
     | 
| 
      
 45 
     | 
    
         
            +
                const main = numericParam.isFloat ? "([0-9]*[.])?[0-9]+" : "[0-9]+";
         
     | 
| 
      
 46 
     | 
    
         
            +
                return new RegExp("^" + symbol + main + "$").test(str);
         
     | 
| 
       47 
47 
     | 
    
         
             
            }
         
     | 
| 
       48 
48 
     | 
    
         
             
            /**
         
     | 
| 
       49 
49 
     | 
    
         
             
             * 验证参数是否是Boolean 类型
         
     | 
| 
         @@ -51,7 +51,7 @@ export function isNumeric(str, numericParam) { 
     | 
|
| 
       51 
51 
     | 
    
         
             
             * @returns
         
     | 
| 
       52 
52 
     | 
    
         
             
             */
         
     | 
| 
       53 
53 
     | 
    
         
             
            export function isBoolean(str) {
         
     | 
| 
       54 
     | 
    
         
            -
                return [ 
     | 
| 
      
 54 
     | 
    
         
            +
                return ["true", "false"].indexOf(str) >= 0;
         
     | 
| 
       55 
55 
     | 
    
         
             
            }
         
     | 
| 
       56 
56 
     | 
    
         
             
            /**
         
     | 
| 
       57 
57 
     | 
    
         
             
             * 生成随机数
         
     | 
| 
         @@ -61,7 +61,7 @@ export function isBoolean(str) { 
     | 
|
| 
       61 
61 
     | 
    
         
             
             * @returns
         
     | 
| 
       62 
62 
     | 
    
         
             
             */
         
     | 
| 
       63 
63 
     | 
    
         
             
            export function random(opts) {
         
     | 
| 
       64 
     | 
    
         
            -
                if (typeof opts ===  
     | 
| 
      
 64 
     | 
    
         
            +
                if (typeof opts === "object" && opts.min != null && opts.max != null) {
         
     | 
| 
       65 
65 
     | 
    
         
             
                    const randomNum = Math.random();
         
     | 
| 
       66 
66 
     | 
    
         
             
                    /* 生成两个数字之间的随机数(number) */
         
     | 
| 
       67 
67 
     | 
    
         
             
                    const end = opts.hasEnd ? 1 : 0;
         
     | 
| 
         @@ -69,18 +69,20 @@ export function random(opts) { 
     | 
|
| 
       69 
69 
     | 
    
         
             
                    return opts.isInteger !== false ? Math.floor(resRandom) : resRandom;
         
     | 
| 
       70 
70 
     | 
    
         
             
                }
         
     | 
| 
       71 
71 
     | 
    
         
             
                else {
         
     | 
| 
       72 
     | 
    
         
            -
                    if (typeof opts ===  
     | 
| 
       73 
     | 
    
         
            -
                        throw new Error( 
     | 
| 
      
 72 
     | 
    
         
            +
                    if (typeof opts === "object" && opts.length == null) {
         
     | 
| 
      
 73 
     | 
    
         
            +
                        throw new Error("random_length_cannot_null");
         
     | 
| 
       74 
74 
     | 
    
         
             
                    }
         
     | 
| 
       75 
     | 
    
         
            -
                    const len = typeof opts ===  
     | 
| 
      
 75 
     | 
    
         
            +
                    const len = typeof opts === "object" ? opts.length : opts;
         
     | 
| 
       76 
76 
     | 
    
         
             
                    /* 生成指定长度的随机数 */
         
     | 
| 
       77 
77 
     | 
    
         
             
                    const charLens = RANDOM_CHARS.length;
         
     | 
| 
       78 
78 
     | 
    
         
             
                    let chars = RANDOM_CHARS;
         
     | 
| 
       79 
     | 
    
         
            -
                    if (typeof opts ===  
     | 
| 
      
 79 
     | 
    
         
            +
                    if (typeof opts === "object" && opts.hasLetter === false) {
         
     | 
| 
       80 
80 
     | 
    
         
             
                        chars = NUMBER_RANDOM_CHARTS;
         
     | 
| 
       81 
81 
     | 
    
         
             
                    }
         
     | 
| 
       82 
     | 
    
         
            -
                    const resRandom = Array.from({ length: len }, () => chars.charAt(Math.floor(Math.random() * charLens))).join( 
     | 
| 
       83 
     | 
    
         
            -
                    if (typeof opts ===  
     | 
| 
      
 82 
     | 
    
         
            +
                    const resRandom = Array.from({ length: len }, () => chars.charAt(Math.floor(Math.random() * charLens))).join("");
         
     | 
| 
      
 83 
     | 
    
         
            +
                    if (typeof opts === "object" &&
         
     | 
| 
      
 84 
     | 
    
         
            +
                        opts.firstIsZero === false &&
         
     | 
| 
      
 85 
     | 
    
         
            +
                        resRandom.indexOf("0") === 0) {
         
     | 
| 
       84 
86 
     | 
    
         
             
                        return random(opts);
         
     | 
| 
       85 
87 
     | 
    
         
             
                    }
         
     | 
| 
       86 
88 
     | 
    
         
             
                    else {
         
     | 
| 
         @@ -100,7 +102,7 @@ export class BaseError extends Error { 
     | 
|
| 
       100 
102 
     | 
    
         
             
                constructor() {
         
     | 
| 
       101 
103 
     | 
    
         
             
                    if (arguments.length === 1) {
         
     | 
| 
       102 
104 
     | 
    
         
             
                        super(arguments[0]);
         
     | 
| 
       103 
     | 
    
         
            -
                        this.name =  
     | 
| 
      
 105 
     | 
    
         
            +
                        this.name = "BaseError";
         
     | 
| 
       104 
106 
     | 
    
         
             
                    }
         
     | 
| 
       105 
107 
     | 
    
         
             
                    else {
         
     | 
| 
       106 
108 
     | 
    
         
             
                        super(arguments[1]);
         
     | 
| 
         @@ -114,25 +116,40 @@ export class BaseError extends Error { 
     | 
|
| 
       114 
116 
     | 
    
         
             
             * @return string
         
     | 
| 
       115 
117 
     | 
    
         
             
             */
         
     | 
| 
       116 
118 
     | 
    
         
             
            export function formatMoney(number) {
         
     | 
| 
       117 
     | 
    
         
            -
                if (typeof Intl.NumberFormat !==  
     | 
| 
       118 
     | 
    
         
            -
                    const formatter = new Intl.NumberFormat( 
     | 
| 
       119 
     | 
    
         
            -
                        style:  
     | 
| 
      
 119 
     | 
    
         
            +
                if (typeof Intl.NumberFormat !== "undefined") {
         
     | 
| 
      
 120 
     | 
    
         
            +
                    const formatter = new Intl.NumberFormat("zh-CN", {
         
     | 
| 
      
 121 
     | 
    
         
            +
                        style: "decimal",
         
     | 
| 
       120 
122 
     | 
    
         
             
                        maximumFractionDigits: 2,
         
     | 
| 
       121 
123 
     | 
    
         
             
                    });
         
     | 
| 
       122 
124 
     | 
    
         
             
                    return formatter.format(number);
         
     | 
| 
       123 
125 
     | 
    
         
             
                }
         
     | 
| 
       124 
126 
     | 
    
         
             
                else {
         
     | 
| 
       125 
127 
     | 
    
         
             
                    number = number || 0;
         
     | 
| 
       126 
     | 
    
         
            -
                     
     | 
| 
       127 
     | 
    
         
            -
                     
     | 
| 
       128 
     | 
    
         
            -
                     
     | 
| 
      
 128 
     | 
    
         
            +
                    const negative = "";
         
     | 
| 
      
 129 
     | 
    
         
            +
                    const base = String(parseInt(number, 10)); // 获取数字整数部分
         
     | 
| 
      
 130 
     | 
    
         
            +
                    const mod = base.length > 3 ? base.length % 3 : 0;
         
     | 
| 
       129 
131 
     | 
    
         
             
                    /*
         
     | 
| 
       130 
132 
     | 
    
         
             
                     * 利用 正则前瞻 (?=) 将3位数字后面还紧跟一位数字的三位数字替换为 数字, 的形式
         
     | 
| 
       131 
133 
     | 
    
         
             
                     */
         
     | 
| 
       132 
     | 
    
         
            -
                     
     | 
| 
       133 
     | 
    
         
            -
                     
     | 
| 
       134 
     | 
    
         
            -
                    let dotStr = usePrecision > 0 ? numberStr.slice(usePrecision + 1) :  
     | 
| 
      
 134 
     | 
    
         
            +
                    const numberStr = String(number);
         
     | 
| 
      
 135 
     | 
    
         
            +
                    const usePrecision = numberStr.indexOf(".");
         
     | 
| 
      
 136 
     | 
    
         
            +
                    let dotStr = usePrecision > 0 ? numberStr.slice(usePrecision + 1) : "00";
         
     | 
| 
       135 
137 
     | 
    
         
             
                    dotStr = dotStr.length > 2 ? dotStr.slice(0, 2) : dotStr;
         
     | 
| 
       136 
     | 
    
         
            -
                    return (negative + 
     | 
| 
      
 138 
     | 
    
         
            +
                    return (negative +
         
     | 
| 
      
 139 
     | 
    
         
            +
                        (mod ? base.slice(0, mod) + "," : "") +
         
     | 
| 
      
 140 
     | 
    
         
            +
                        base.slice(mod).replace(/(\d{3})(?=\d)/g, "$1,") +
         
     | 
| 
      
 141 
     | 
    
         
            +
                        "." +
         
     | 
| 
      
 142 
     | 
    
         
            +
                        dotStr);
         
     | 
| 
       137 
143 
     | 
    
         
             
                }
         
     | 
| 
       138 
144 
     | 
    
         
             
            }
         
     | 
| 
      
 145 
     | 
    
         
            +
            /**
         
     | 
| 
      
 146 
     | 
    
         
            +
             * 将风格由大写风格转换为下划线风格: IconFont -> icon_font
         
     | 
| 
      
 147 
     | 
    
         
            +
             * @param name 命名, 例如: IconFont
         
     | 
| 
      
 148 
     | 
    
         
            +
             * @param connector 连接符, 默认为: _
         
     | 
| 
      
 149 
     | 
    
         
            +
             */
         
     | 
| 
      
 150 
     | 
    
         
            +
            export function snakeCaseStyle(name, connector = "_") {
         
     | 
| 
      
 151 
     | 
    
         
            +
                const snakeName = name.replace(/([A-Z])/g, (match) => {
         
     | 
| 
      
 152 
     | 
    
         
            +
                    return `${connector}${match.toLowerCase()}`;
         
     | 
| 
      
 153 
     | 
    
         
            +
                });
         
     | 
| 
      
 154 
     | 
    
         
            +
                return snakeName[0] === connector ? snakeName.substring(1) : snakeName;
         
     | 
| 
      
 155 
     | 
    
         
            +
            }
         
     | 
    
        package/lib/storage.d.ts
    CHANGED
    
    
    
        package/lib/storage.js
    CHANGED
    
    | 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            function getStorage(storage =  
     | 
| 
       2 
     | 
    
         
            -
                return storage ===  
     | 
| 
      
 1 
     | 
    
         
            +
            function getStorage(storage = "session") {
         
     | 
| 
      
 2 
     | 
    
         
            +
                return storage === "session" ? sessionStorage : localStorage;
         
     | 
| 
       3 
3 
     | 
    
         
             
            }
         
     | 
| 
       4 
4 
     | 
    
         
             
            /**
         
     | 
| 
       5 
5 
     | 
    
         
             
             * 存储值到 Storage 中
         
     | 
| 
         @@ -9,7 +9,11 @@ function getStorage(storage = 'session') { 
     | 
|
| 
       9 
9 
     | 
    
         
             
             * @param expire 数据有效期, 单位秒, 默认: -1 - 永久存储
         
     | 
| 
       10 
10 
     | 
    
         
             
             */
         
     | 
| 
       11 
11 
     | 
    
         
             
            export function set(key, value, option) {
         
     | 
| 
       12 
     | 
    
         
            -
                const opts = { 
     | 
| 
      
 12 
     | 
    
         
            +
                const opts = {
         
     | 
| 
      
 13 
     | 
    
         
            +
                    expire: -1,
         
     | 
| 
      
 14 
     | 
    
         
            +
                    storage: "session",
         
     | 
| 
      
 15 
     | 
    
         
            +
                    ...(option || {}),
         
     | 
| 
      
 16 
     | 
    
         
            +
                };
         
     | 
| 
       13 
17 
     | 
    
         
             
                const saveData = JSON.stringify({
         
     | 
| 
       14 
18 
     | 
    
         
             
                    value,
         
     | 
| 
       15 
19 
     | 
    
         
             
                    time: Date.now(),
         
     | 
| 
         @@ -41,7 +45,7 @@ export function remove(key, storage) { 
     | 
|
| 
       41 
45 
     | 
    
         
             
             * @returns Storage 中 key 对应的数据
         
     | 
| 
       42 
46 
     | 
    
         
             
             */
         
     | 
| 
       43 
47 
     | 
    
         
             
            export function get(key, defaultValue, option) {
         
     | 
| 
       44 
     | 
    
         
            -
                 
     | 
| 
      
 48 
     | 
    
         
            +
                const opts = (option || { delete: false });
         
     | 
| 
       45 
49 
     | 
    
         
             
                const storage = getStorage(opts.storage);
         
     | 
| 
       46 
50 
     | 
    
         
             
                let data = storage.getItem(key);
         
     | 
| 
       47 
51 
     | 
    
         
             
                if (data == null) {
         
     |