@digitalwalletcorp/utils 0.4.2 → 0.6.0

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.
Files changed (35) hide show
  1. package/lib/crypto-util-B5K2CmE2.js +70 -0
  2. package/lib/crypto-util-B5K2CmE2.js.map +1 -0
  3. package/lib/crypto-util-BcHurtbE.cjs +2 -0
  4. package/lib/crypto-util-BcHurtbE.cjs.map +1 -0
  5. package/lib/crypto-util.cjs +1 -1
  6. package/lib/crypto-util.d.cts +19 -0
  7. package/lib/crypto-util.d.ts +19 -0
  8. package/lib/crypto-util.js +5 -3
  9. package/lib/index.cjs +1 -1
  10. package/lib/index.js +3 -3
  11. package/lib/number-util-BSra7lF5.cjs +2 -0
  12. package/lib/{number-util-BaSf1wWH.cjs.map → number-util-BSra7lF5.cjs.map} +1 -1
  13. package/lib/{number-util-BA4KVFyF.js → number-util-DXjPN_-P.js} +68 -54
  14. package/lib/{number-util-BA4KVFyF.js.map → number-util-DXjPN_-P.js.map} +1 -1
  15. package/lib/number-util.cjs +1 -1
  16. package/lib/number-util.d.cts +9 -0
  17. package/lib/number-util.d.ts +9 -0
  18. package/lib/number-util.js +10 -9
  19. package/lib/{object-util-auzl09b5.js → object-util-BFc8L2u1.js} +34 -20
  20. package/lib/{object-util-auzl09b5.js.map → object-util-BFc8L2u1.js.map} +1 -1
  21. package/lib/{object-util-6uts5Xax.cjs → object-util-D-XiTVyo.cjs} +2 -2
  22. package/lib/{object-util-6uts5Xax.cjs.map → object-util-D-XiTVyo.cjs.map} +1 -1
  23. package/lib/object-util.cjs +1 -1
  24. package/lib/object-util.d.cts +31 -0
  25. package/lib/object-util.d.ts +31 -0
  26. package/lib/object-util.js +7 -6
  27. package/package.json +1 -1
  28. package/src/crypto-util.ts +44 -0
  29. package/src/number-util.ts +22 -0
  30. package/src/object-util.ts +39 -0
  31. package/lib/crypto-util-DFJqfmuw.js +0 -46
  32. package/lib/crypto-util-DFJqfmuw.js.map +0 -1
  33. package/lib/crypto-util-DeZSGetI.cjs +0 -2
  34. package/lib/crypto-util-DeZSGetI.cjs.map +0 -1
  35. package/lib/number-util-BaSf1wWH.cjs +0 -2
@@ -0,0 +1,70 @@
1
+ import c from "crypto-js";
2
+ const u = {
3
+ ascii: "!\"#$%&'()*+,-./0123456789:;<=>?@[]^_`abcdefghijklmnopqrstuvwxyz{|}~",
4
+ number: "0123456789",
5
+ alphabet: "abcdefghijklmnopqrstuvwxyz",
6
+ alphanum: "0123456789abcdefghijklmnopqrstuvwxyz",
7
+ hex: "0123456789abcdef"
8
+ }, d = (e) => globalThis.crypto.getRandomValues(new Uint8Array(e));
9
+ function f(e) {
10
+ return c.SHA256(e).toString().toUpperCase();
11
+ }
12
+ function g(e, r) {
13
+ if (!Number.isInteger(e) || e < 0)
14
+ throw new Error("crypto-util.generateRandomString: length must be a non-negative integer");
15
+ const t = u[r?.charset ?? "ascii"], a = t.toUpperCase();
16
+ let i = r?.case === "upperCase" ? a : r?.case === "lowerCase" ? t : t + a;
17
+ const s = r?.includeChars;
18
+ s && (i += Array.isArray(s) ? s.join("") : s);
19
+ const l = r?.excludeChars;
20
+ if (l) {
21
+ const y = new Set(Array.isArray(l) ? l : Array.from(l));
22
+ i = Array.from(i).filter((h) => !y.has(h)).join("");
23
+ }
24
+ const o = Array.from(new Set(i));
25
+ if (!o.length)
26
+ throw new Error("crypto-util.generateRandomString: no characters left after applying excludeChars");
27
+ const p = Math.floor(256 / o.length) * o.length - 1;
28
+ let n = "";
29
+ do
30
+ for (n = ""; n.length < e; )
31
+ for (const y of d(e - n.length))
32
+ y <= p && (n += o[y % o.length]);
33
+ while (r?.rejectStartsWithZero && n.startsWith("0"));
34
+ return n;
35
+ }
36
+ function S(e, r) {
37
+ try {
38
+ return c.AES.encrypt(e, r).toString();
39
+ } catch {
40
+ throw new Error("crypto-util.encryptAES: plainText contains an unpaired surrogate");
41
+ }
42
+ }
43
+ function w(e, r) {
44
+ const t = c.format.OpenSSL.parse(e).ciphertext;
45
+ if (!t.sigBytes || t.sigBytes % 16 !== 0)
46
+ throw new Error("crypto-util.decryptAES: encryptedText is not a valid ciphertext");
47
+ const a = c.AES.decrypt(e, r);
48
+ if (a.sigBytes < 0)
49
+ throw new Error("crypto-util.decryptAES: failed to decrypt. The key may be wrong");
50
+ try {
51
+ return a.toString(c.enc.Utf8);
52
+ } catch {
53
+ throw new Error("crypto-util.decryptAES: failed to decrypt. The key may be wrong");
54
+ }
55
+ }
56
+ const A = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
57
+ __proto__: null,
58
+ decryptAES: w,
59
+ encryptAES: S,
60
+ generateRandomString: g,
61
+ toSha256: f
62
+ }, Symbol.toStringTag, { value: "Module" }));
63
+ export {
64
+ A as c,
65
+ w as d,
66
+ S as e,
67
+ g,
68
+ f as t
69
+ };
70
+ //# sourceMappingURL=crypto-util-B5K2CmE2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-util-B5K2CmE2.js","sources":["../src/crypto-util.ts"],"sourcesContent":["import CryptoJS from 'crypto-js';\n\nconst CHARSETS = {\n ascii: `!\"#$%&'()*+,-./0123456789:;<=>?@[]^_\\`abcdefghijklmnopqrstuvwxyz{|}~`,\n number: '0123456789',\n alphabet: 'abcdefghijklmnopqrstuvwxyz',\n alphanum: '0123456789abcdefghijklmnopqrstuvwxyz',\n hex: '0123456789abcdef'\n} as const;\n\nconst randomBytes = (size: number): Uint8Array => globalThis.crypto.getRandomValues(new Uint8Array(size));\n\n/**\n * 文字列をSHA-256でハッシュ化し、大文字の16進数文字列で返す\n *\n * @param {string} str\n * @returns {string}\n */\nexport function toSha256(str: string): string {\n return CryptoJS.SHA256(str).toString().toUpperCase();\n}\n\n/**\n * ランダムな文字列を生成する\n * 大文字と小文字は別の文字として扱う\n * caseを指定しない場合は生成対象の文字セットに大文字と小文字の両方を含めるため、'a'と'A'の出現率は同じ確率になる\n *\n * @param {number} length 生成する文字列の桁数\n * @param {*} [options]\n * ├ charset 'ascii' | 'number' | 'alphabet' | 'alphanum' | 'hex' 未指定の場合はASCIIの記号・数字・英字(スペースとバックスラッシュを除く)\n * ├ case 'upperCase' | 'lowerCase' 英字を大文字のみ・小文字のみにする。未指定の場合は大文字小文字混在\n * ├ rejectStartsWithZero trueを指定した場合、0始まりの文字列を生成しない\n * ├ includeChars 文字セットに追加する文字。大文字小文字を区別する\n * ├ excludeChars 文字セットから除外する文字。大文字小文字は区別する\n * @returns {string}\n */\nexport function generateRandomString(length: number, options?: {\n charset?: 'ascii' | 'number' | 'alphabet' | 'alphanum' | 'hex';\n case?: 'upperCase' | 'lowerCase';\n rejectStartsWithZero?: boolean;\n includeChars?: string | string[];\n excludeChars?: string | string[];\n}): string {\n if (!Number.isInteger(length) || length < 0) {\n throw new Error('crypto-util.generateRandomString: length must be a non-negative integer');\n }\n\n const lower = CHARSETS[options?.charset ?? 'ascii'];\n const upper = lower.toUpperCase();\n let pool = options?.case === 'upperCase'\n ? upper\n : options?.case === 'lowerCase'\n ? lower\n : lower + upper;\n const includeChars = options?.includeChars;\n if (includeChars) {\n // 追加文字の指定がある場合\n pool += Array.isArray(includeChars) ? includeChars.join('') : includeChars;\n }\n const excludeChars = options?.excludeChars;\n if (excludeChars) {\n // 除外文字の指定がある場合\n const excluded = new Set(Array.isArray(excludeChars) ? excludeChars : Array.from(excludeChars));\n pool = Array.from(pool).filter(a => !excluded.has(a)).join('');\n }\n const characters = Array.from(new Set(pool));\n if (!characters.length) {\n throw new Error('crypto-util.generateRandomString: no characters left after applying excludeChars');\n }\n // 256を文字種の数で割り切れる範囲のバイトだけを使い、文字ごとの出現率を揃える\n const maxAcceptableValue = Math.floor(256 / characters.length) * characters.length - 1;\n let result = '';\n do {\n result = '';\n while (result.length < length) {\n for (const byte of randomBytes(length - result.length)) {\n if (byte <= maxAcceptableValue) {\n result += characters[byte % characters.length];\n }\n }\n }\n } while (options?.rejectStartsWithZero && result.startsWith('0'));\n return result;\n}\n\n/**\n * 文字列をAESで暗号化し、Base64の文字列で返す\n * OpenSSL互換のパスフレーズ方式で、saltを毎回ランダムに生成するため同じ入力でも結果は毎回異なる\n *\n * @param {string} plainText\n * @param {string} key パスフレーズ\n * @returns {string}\n */\nexport function encryptAES(plainText: string, key: string): string {\n try {\n return CryptoJS.AES.encrypt(plainText, key).toString();\n } catch {\n // UTF-8に変換できない文字列(サロゲートペアの片割れを含む)はURIErrorになるので、原因が分かるメッセージに置き換える\n throw new Error('crypto-util.encryptAES: plainText contains an unpaired surrogate');\n }\n}\n\n/**\n * encryptAESで暗号化した文字列を復号する\n * 暗号文の形式が不正な場合と、復号に失敗したことが分かる場合は例外を投げる\n * (鍵違いは確実には検出できない。復号結果がたまたまパディングとUTF-8として成立すると、空文字や意味のない文字列が返ることがある)\n *\n * @param {string} encryptedText\n * @param {string} key パスフレーズ\n * @returns {string}\n */\nexport function decryptAES(encryptedText: string, key: string): string {\n const ciphertext = CryptoJS.format.OpenSSL.parse(encryptedText).ciphertext;\n if (!ciphertext.sigBytes || ciphertext.sigBytes % 16 !== 0) {\n throw new Error('crypto-util.decryptAES: encryptedText is not a valid ciphertext');\n }\n const decrypted = CryptoJS.AES.decrypt(encryptedText, key);\n // 鍵が違うとパディングが壊れて長さが負になる\n if (decrypted.sigBytes < 0) {\n throw new Error('crypto-util.decryptAES: failed to decrypt. The key may be wrong');\n }\n try {\n return decrypted.toString(CryptoJS.enc.Utf8);\n } catch {\n // パディングは成立したが復号結果がUTF-8として不正な場合も鍵違い\n throw new Error('crypto-util.decryptAES: failed to decrypt. The key may be wrong');\n }\n}\n"],"names":["CHARSETS","randomBytes","size","toSha256","str","CryptoJS","generateRandomString","length","options","lower","upper","pool","includeChars","excludeChars","excluded","a","characters","maxAcceptableValue","result","byte","encryptAES","plainText","key","decryptAES","encryptedText","ciphertext","decrypted"],"mappings":";AAEA,MAAMA,IAAW;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,KAAK;AACP,GAEMC,IAAc,CAACC,MAA6B,WAAW,OAAO,gBAAgB,IAAI,WAAWA,CAAI,CAAC;AAQjG,SAASC,EAASC,GAAqB;AAC5C,SAAOC,EAAS,OAAOD,CAAG,EAAE,SAAA,EAAW,YAAA;AACzC;AAgBO,SAASE,EAAqBC,GAAgBC,GAM1C;AACT,MAAI,CAAC,OAAO,UAAUD,CAAM,KAAKA,IAAS;AACxC,UAAM,IAAI,MAAM,yEAAyE;AAG3F,QAAME,IAAQT,EAASQ,GAAS,WAAW,OAAO,GAC5CE,IAAQD,EAAM,YAAA;AACpB,MAAIE,IAAOH,GAAS,SAAS,cACzBE,IACAF,GAAS,SAAS,cAChBC,IACAA,IAAQC;AACd,QAAME,IAAeJ,GAAS;AAC9B,EAAII,MAEFD,KAAQ,MAAM,QAAQC,CAAY,IAAIA,EAAa,KAAK,EAAE,IAAIA;AAEhE,QAAMC,IAAeL,GAAS;AAC9B,MAAIK,GAAc;AAEhB,UAAMC,IAAW,IAAI,IAAI,MAAM,QAAQD,CAAY,IAAIA,IAAe,MAAM,KAAKA,CAAY,CAAC;AAC9F,IAAAF,IAAO,MAAM,KAAKA,CAAI,EAAE,OAAO,CAAAI,MAAK,CAACD,EAAS,IAAIC,CAAC,CAAC,EAAE,KAAK,EAAE;AAAA,EAC/D;AACA,QAAMC,IAAa,MAAM,KAAK,IAAI,IAAIL,CAAI,CAAC;AAC3C,MAAI,CAACK,EAAW;AACd,UAAM,IAAI,MAAM,kFAAkF;AAGpG,QAAMC,IAAqB,KAAK,MAAM,MAAMD,EAAW,MAAM,IAAIA,EAAW,SAAS;AACrF,MAAIE,IAAS;AACb;AAEE,SADAA,IAAS,IACFA,EAAO,SAASX;AACrB,iBAAWY,KAAQlB,EAAYM,IAASW,EAAO,MAAM;AACnD,QAAIC,KAAQF,MACVC,KAAUF,EAAWG,IAAOH,EAAW,MAAM;AAAA,SAI5CR,GAAS,wBAAwBU,EAAO,WAAW,GAAG;AAC/D,SAAOA;AACT;AAUO,SAASE,EAAWC,GAAmBC,GAAqB;AACjE,MAAI;AACF,WAAOjB,EAAS,IAAI,QAAQgB,GAAWC,CAAG,EAAE,SAAA;AAAA,EAC9C,QAAQ;AAEN,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACF;AAWO,SAASC,EAAWC,GAAuBF,GAAqB;AACrE,QAAMG,IAAapB,EAAS,OAAO,QAAQ,MAAMmB,CAAa,EAAE;AAChE,MAAI,CAACC,EAAW,YAAYA,EAAW,WAAW,OAAO;AACvD,UAAM,IAAI,MAAM,iEAAiE;AAEnF,QAAMC,IAAYrB,EAAS,IAAI,QAAQmB,GAAeF,CAAG;AAEzD,MAAII,EAAU,WAAW;AACvB,UAAM,IAAI,MAAM,iEAAiE;AAEnF,MAAI;AACF,WAAOA,EAAU,SAASrB,EAAS,IAAI,IAAI;AAAA,EAC7C,QAAQ;AAEN,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AACF;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const c=require("crypto-js"),S={ascii:"!\"#$%&'()*+,-./0123456789:;<=>?@[]^_`abcdefghijklmnopqrstuvwxyz{|}~",number:"0123456789",alphabet:"abcdefghijklmnopqrstuvwxyz",alphanum:"0123456789abcdefghijklmnopqrstuvwxyz",hex:"0123456789abcdef"},w=e=>globalThis.crypto.getRandomValues(new Uint8Array(e));function p(e){return c.SHA256(e).toString().toUpperCase()}function h(e,r){if(!Number.isInteger(e)||e<0)throw new Error("crypto-util.generateRandomString: length must be a non-negative integer");const t=S[r?.charset??"ascii"],o=t.toUpperCase();let i=r?.case==="upperCase"?o:r?.case==="lowerCase"?t:t+o;const s=r?.includeChars;s&&(i+=Array.isArray(s)?s.join(""):s);const l=r?.excludeChars;if(l){const y=new Set(Array.isArray(l)?l:Array.from(l));i=Array.from(i).filter(f=>!y.has(f)).join("")}const a=Array.from(new Set(i));if(!a.length)throw new Error("crypto-util.generateRandomString: no characters left after applying excludeChars");const g=Math.floor(256/a.length)*a.length-1;let n="";do for(n="";n.length<e;)for(const y of w(e-n.length))y<=g&&(n+=a[y%a.length]);while(r?.rejectStartsWithZero&&n.startsWith("0"));return n}function u(e,r){try{return c.AES.encrypt(e,r).toString()}catch{throw new Error("crypto-util.encryptAES: plainText contains an unpaired surrogate")}}function d(e,r){const t=c.format.OpenSSL.parse(e).ciphertext;if(!t.sigBytes||t.sigBytes%16!==0)throw new Error("crypto-util.decryptAES: encryptedText is not a valid ciphertext");const o=c.AES.decrypt(e,r);if(o.sigBytes<0)throw new Error("crypto-util.decryptAES: failed to decrypt. The key may be wrong");try{return o.toString(c.enc.Utf8)}catch{throw new Error("crypto-util.decryptAES: failed to decrypt. The key may be wrong")}}const m=Object.freeze(Object.defineProperty({__proto__:null,decryptAES:d,encryptAES:u,generateRandomString:h,toSha256:p},Symbol.toStringTag,{value:"Module"}));exports.cryptoUtil=m;exports.decryptAES=d;exports.encryptAES=u;exports.generateRandomString=h;exports.toSha256=p;
2
+ //# sourceMappingURL=crypto-util-BcHurtbE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-util-BcHurtbE.cjs","sources":["../src/crypto-util.ts"],"sourcesContent":["import CryptoJS from 'crypto-js';\n\nconst CHARSETS = {\n ascii: `!\"#$%&'()*+,-./0123456789:;<=>?@[]^_\\`abcdefghijklmnopqrstuvwxyz{|}~`,\n number: '0123456789',\n alphabet: 'abcdefghijklmnopqrstuvwxyz',\n alphanum: '0123456789abcdefghijklmnopqrstuvwxyz',\n hex: '0123456789abcdef'\n} as const;\n\nconst randomBytes = (size: number): Uint8Array => globalThis.crypto.getRandomValues(new Uint8Array(size));\n\n/**\n * 文字列をSHA-256でハッシュ化し、大文字の16進数文字列で返す\n *\n * @param {string} str\n * @returns {string}\n */\nexport function toSha256(str: string): string {\n return CryptoJS.SHA256(str).toString().toUpperCase();\n}\n\n/**\n * ランダムな文字列を生成する\n * 大文字と小文字は別の文字として扱う\n * caseを指定しない場合は生成対象の文字セットに大文字と小文字の両方を含めるため、'a'と'A'の出現率は同じ確率になる\n *\n * @param {number} length 生成する文字列の桁数\n * @param {*} [options]\n * ├ charset 'ascii' | 'number' | 'alphabet' | 'alphanum' | 'hex' 未指定の場合はASCIIの記号・数字・英字(スペースとバックスラッシュを除く)\n * ├ case 'upperCase' | 'lowerCase' 英字を大文字のみ・小文字のみにする。未指定の場合は大文字小文字混在\n * ├ rejectStartsWithZero trueを指定した場合、0始まりの文字列を生成しない\n * ├ includeChars 文字セットに追加する文字。大文字小文字を区別する\n * ├ excludeChars 文字セットから除外する文字。大文字小文字は区別する\n * @returns {string}\n */\nexport function generateRandomString(length: number, options?: {\n charset?: 'ascii' | 'number' | 'alphabet' | 'alphanum' | 'hex';\n case?: 'upperCase' | 'lowerCase';\n rejectStartsWithZero?: boolean;\n includeChars?: string | string[];\n excludeChars?: string | string[];\n}): string {\n if (!Number.isInteger(length) || length < 0) {\n throw new Error('crypto-util.generateRandomString: length must be a non-negative integer');\n }\n\n const lower = CHARSETS[options?.charset ?? 'ascii'];\n const upper = lower.toUpperCase();\n let pool = options?.case === 'upperCase'\n ? upper\n : options?.case === 'lowerCase'\n ? lower\n : lower + upper;\n const includeChars = options?.includeChars;\n if (includeChars) {\n // 追加文字の指定がある場合\n pool += Array.isArray(includeChars) ? includeChars.join('') : includeChars;\n }\n const excludeChars = options?.excludeChars;\n if (excludeChars) {\n // 除外文字の指定がある場合\n const excluded = new Set(Array.isArray(excludeChars) ? excludeChars : Array.from(excludeChars));\n pool = Array.from(pool).filter(a => !excluded.has(a)).join('');\n }\n const characters = Array.from(new Set(pool));\n if (!characters.length) {\n throw new Error('crypto-util.generateRandomString: no characters left after applying excludeChars');\n }\n // 256を文字種の数で割り切れる範囲のバイトだけを使い、文字ごとの出現率を揃える\n const maxAcceptableValue = Math.floor(256 / characters.length) * characters.length - 1;\n let result = '';\n do {\n result = '';\n while (result.length < length) {\n for (const byte of randomBytes(length - result.length)) {\n if (byte <= maxAcceptableValue) {\n result += characters[byte % characters.length];\n }\n }\n }\n } while (options?.rejectStartsWithZero && result.startsWith('0'));\n return result;\n}\n\n/**\n * 文字列をAESで暗号化し、Base64の文字列で返す\n * OpenSSL互換のパスフレーズ方式で、saltを毎回ランダムに生成するため同じ入力でも結果は毎回異なる\n *\n * @param {string} plainText\n * @param {string} key パスフレーズ\n * @returns {string}\n */\nexport function encryptAES(plainText: string, key: string): string {\n try {\n return CryptoJS.AES.encrypt(plainText, key).toString();\n } catch {\n // UTF-8に変換できない文字列(サロゲートペアの片割れを含む)はURIErrorになるので、原因が分かるメッセージに置き換える\n throw new Error('crypto-util.encryptAES: plainText contains an unpaired surrogate');\n }\n}\n\n/**\n * encryptAESで暗号化した文字列を復号する\n * 暗号文の形式が不正な場合と、復号に失敗したことが分かる場合は例外を投げる\n * (鍵違いは確実には検出できない。復号結果がたまたまパディングとUTF-8として成立すると、空文字や意味のない文字列が返ることがある)\n *\n * @param {string} encryptedText\n * @param {string} key パスフレーズ\n * @returns {string}\n */\nexport function decryptAES(encryptedText: string, key: string): string {\n const ciphertext = CryptoJS.format.OpenSSL.parse(encryptedText).ciphertext;\n if (!ciphertext.sigBytes || ciphertext.sigBytes % 16 !== 0) {\n throw new Error('crypto-util.decryptAES: encryptedText is not a valid ciphertext');\n }\n const decrypted = CryptoJS.AES.decrypt(encryptedText, key);\n // 鍵が違うとパディングが壊れて長さが負になる\n if (decrypted.sigBytes < 0) {\n throw new Error('crypto-util.decryptAES: failed to decrypt. The key may be wrong');\n }\n try {\n return decrypted.toString(CryptoJS.enc.Utf8);\n } catch {\n // パディングは成立したが復号結果がUTF-8として不正な場合も鍵違い\n throw new Error('crypto-util.decryptAES: failed to decrypt. The key may be wrong');\n }\n}\n"],"names":["CHARSETS","randomBytes","size","toSha256","str","CryptoJS","generateRandomString","length","options","lower","upper","pool","includeChars","excludeChars","excluded","a","characters","maxAcceptableValue","result","byte","encryptAES","plainText","key","decryptAES","encryptedText","ciphertext","decrypted"],"mappings":"0CAEMA,EAAW,CACf,MAAO,uEACP,OAAQ,aACR,SAAU,6BACV,SAAU,uCACV,IAAK,kBACP,EAEMC,EAAeC,GAA6B,WAAW,OAAO,gBAAgB,IAAI,WAAWA,CAAI,CAAC,EAQjG,SAASC,EAASC,EAAqB,CAC5C,OAAOC,EAAS,OAAOD,CAAG,EAAE,SAAA,EAAW,YAAA,CACzC,CAgBO,SAASE,EAAqBC,EAAgBC,EAM1C,CACT,GAAI,CAAC,OAAO,UAAUD,CAAM,GAAKA,EAAS,EACxC,MAAM,IAAI,MAAM,yEAAyE,EAG3F,MAAME,EAAQT,EAASQ,GAAS,SAAW,OAAO,EAC5CE,EAAQD,EAAM,YAAA,EACpB,IAAIE,EAAOH,GAAS,OAAS,YACzBE,EACAF,GAAS,OAAS,YAChBC,EACAA,EAAQC,EACd,MAAME,EAAeJ,GAAS,aAC1BI,IAEFD,GAAQ,MAAM,QAAQC,CAAY,EAAIA,EAAa,KAAK,EAAE,EAAIA,GAEhE,MAAMC,EAAeL,GAAS,aAC9B,GAAIK,EAAc,CAEhB,MAAMC,EAAW,IAAI,IAAI,MAAM,QAAQD,CAAY,EAAIA,EAAe,MAAM,KAAKA,CAAY,CAAC,EAC9FF,EAAO,MAAM,KAAKA,CAAI,EAAE,OAAOI,GAAK,CAACD,EAAS,IAAIC,CAAC,CAAC,EAAE,KAAK,EAAE,CAC/D,CACA,MAAMC,EAAa,MAAM,KAAK,IAAI,IAAIL,CAAI,CAAC,EAC3C,GAAI,CAACK,EAAW,OACd,MAAM,IAAI,MAAM,kFAAkF,EAGpG,MAAMC,EAAqB,KAAK,MAAM,IAAMD,EAAW,MAAM,EAAIA,EAAW,OAAS,EACrF,IAAIE,EAAS,GACb,EAEE,KADAA,EAAS,GACFA,EAAO,OAASX,GACrB,UAAWY,KAAQlB,EAAYM,EAASW,EAAO,MAAM,EAC/CC,GAAQF,IACVC,GAAUF,EAAWG,EAAOH,EAAW,MAAM,SAI5CR,GAAS,sBAAwBU,EAAO,WAAW,GAAG,GAC/D,OAAOA,CACT,CAUO,SAASE,EAAWC,EAAmBC,EAAqB,CACjE,GAAI,CACF,OAAOjB,EAAS,IAAI,QAAQgB,EAAWC,CAAG,EAAE,SAAA,CAC9C,MAAQ,CAEN,MAAM,IAAI,MAAM,kEAAkE,CACpF,CACF,CAWO,SAASC,EAAWC,EAAuBF,EAAqB,CACrE,MAAMG,EAAapB,EAAS,OAAO,QAAQ,MAAMmB,CAAa,EAAE,WAChE,GAAI,CAACC,EAAW,UAAYA,EAAW,SAAW,KAAO,EACvD,MAAM,IAAI,MAAM,iEAAiE,EAEnF,MAAMC,EAAYrB,EAAS,IAAI,QAAQmB,EAAeF,CAAG,EAEzD,GAAII,EAAU,SAAW,EACvB,MAAM,IAAI,MAAM,iEAAiE,EAEnF,GAAI,CACF,OAAOA,EAAU,SAASrB,EAAS,IAAI,IAAI,CAC7C,MAAQ,CAEN,MAAM,IAAI,MAAM,iEAAiE,CACnF,CACF"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("crypto-js");const e=require("./crypto-util-DeZSGetI.cjs");exports.generateRandomString=e.generateRandomString;exports.toSha256=e.toSha256;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("crypto-js");const e=require("./crypto-util-BcHurtbE.cjs");exports.decryptAES=e.decryptAES;exports.encryptAES=e.encryptAES;exports.generateRandomString=e.generateRandomString;exports.toSha256=e.toSha256;
2
2
  //# sourceMappingURL=crypto-util.cjs.map
@@ -26,3 +26,22 @@ export declare function generateRandomString(length: number, options?: {
26
26
  includeChars?: string | string[];
27
27
  excludeChars?: string | string[];
28
28
  }): string;
29
+ /**
30
+ * 文字列をAESで暗号化し、Base64の文字列で返す
31
+ * OpenSSL互換のパスフレーズ方式で、saltを毎回ランダムに生成するため同じ入力でも結果は毎回異なる
32
+ *
33
+ * @param {string} plainText
34
+ * @param {string} key パスフレーズ
35
+ * @returns {string}
36
+ */
37
+ export declare function encryptAES(plainText: string, key: string): string;
38
+ /**
39
+ * encryptAESで暗号化した文字列を復号する
40
+ * 暗号文の形式が不正な場合と、復号に失敗したことが分かる場合は例外を投げる
41
+ * (鍵違いは確実には検出できない。復号結果がたまたまパディングとUTF-8として成立すると、空文字や意味のない文字列が返ることがある)
42
+ *
43
+ * @param {string} encryptedText
44
+ * @param {string} key パスフレーズ
45
+ * @returns {string}
46
+ */
47
+ export declare function decryptAES(encryptedText: string, key: string): string;
@@ -26,3 +26,22 @@ export declare function generateRandomString(length: number, options?: {
26
26
  includeChars?: string | string[];
27
27
  excludeChars?: string | string[];
28
28
  }): string;
29
+ /**
30
+ * 文字列をAESで暗号化し、Base64の文字列で返す
31
+ * OpenSSL互換のパスフレーズ方式で、saltを毎回ランダムに生成するため同じ入力でも結果は毎回異なる
32
+ *
33
+ * @param {string} plainText
34
+ * @param {string} key パスフレーズ
35
+ * @returns {string}
36
+ */
37
+ export declare function encryptAES(plainText: string, key: string): string;
38
+ /**
39
+ * encryptAESで暗号化した文字列を復号する
40
+ * 暗号文の形式が不正な場合と、復号に失敗したことが分かる場合は例外を投げる
41
+ * (鍵違いは確実には検出できない。復号結果がたまたまパディングとUTF-8として成立すると、空文字や意味のない文字列が返ることがある)
42
+ *
43
+ * @param {string} encryptedText
44
+ * @param {string} key パスフレーズ
45
+ * @returns {string}
46
+ */
47
+ export declare function decryptAES(encryptedText: string, key: string): string;
@@ -1,7 +1,9 @@
1
1
  import "crypto-js";
2
- import { g as r, t as e } from "./crypto-util-DFJqfmuw.js";
2
+ import { d as r, e as o, g as n, t as p } from "./crypto-util-B5K2CmE2.js";
3
3
  export {
4
- r as generateRandomString,
5
- e as toSha256
4
+ r as decryptAES,
5
+ o as encryptAES,
6
+ n as generateRandomString,
7
+ p as toSha256
6
8
  };
7
9
  //# sourceMappingURL=crypto-util.js.map
package/lib/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./crypto-util-DeZSGetI.cjs"),i=require("./date-util-DG-ujlhH.cjs"),e=require("./decimal.cjs"),l=require("./file-util-D09BvDYY.cjs"),r=require("./html-util-ClGIpzW1.cjs"),U=require("./json-util-5mq7fsX_.cjs"),o=require("./number-util-BaSf1wWH.cjs"),c=require("./object-util-6uts5Xax.cjs"),n=require("./string-util-w2I5EYuY.cjs");exports.CryptoUtil=t.cryptoUtil;exports.DateUtil=i.dateUtil;exports.Decimal=e.Decimal;exports.FileUtil=l.fileUtil;exports.HtmlUtil=r.htmlUtil;exports.JsonUtil=U.jsonUtil;exports.NumberUtil=o.numberUtil;exports.ObjectUtil=c.objectUtil;exports.StringUtil=n.stringUtil;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./crypto-util-BcHurtbE.cjs"),i=require("./date-util-DG-ujlhH.cjs"),e=require("./decimal.cjs"),l=require("./file-util-D09BvDYY.cjs"),r=require("./html-util-ClGIpzW1.cjs"),U=require("./json-util-5mq7fsX_.cjs"),o=require("./number-util-BSra7lF5.cjs"),c=require("./object-util-D-XiTVyo.cjs"),n=require("./string-util-w2I5EYuY.cjs");exports.CryptoUtil=t.cryptoUtil;exports.DateUtil=i.dateUtil;exports.Decimal=e.Decimal;exports.FileUtil=l.fileUtil;exports.HtmlUtil=r.htmlUtil;exports.JsonUtil=U.jsonUtil;exports.NumberUtil=o.numberUtil;exports.ObjectUtil=c.objectUtil;exports.StringUtil=n.stringUtil;
2
2
  //# sourceMappingURL=index.cjs.map
package/lib/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import { c as r } from "./crypto-util-DFJqfmuw.js";
1
+ import { c as r } from "./crypto-util-B5K2CmE2.js";
2
2
  import { d as m } from "./date-util-B-g6dSaM.js";
3
3
  import { Decimal as l } from "./decimal.js";
4
4
  import { f } from "./file-util-H-c_eQcd.js";
5
5
  import { h as s } from "./html-util-CcRJtzod.js";
6
6
  import { j as U } from "./json-util-CF-O1b7m.js";
7
- import { n } from "./number-util-BA4KVFyF.js";
8
- import { o as j } from "./object-util-auzl09b5.js";
7
+ import { n } from "./number-util-DXjPN_-P.js";
8
+ import { o as j } from "./object-util-BFc8L2u1.js";
9
9
  import { s as d } from "./string-util-Cw0VgbIH.js";
10
10
  export {
11
11
  r as CryptoUtil,
@@ -0,0 +1,2 @@
1
+ "use strict";const i=require("./decimal.cjs"),C=new i.Decimal("-9223372036854775808"),V=new i.Decimal("9223372036854775807"),b=new RegExp("([+-]?)([0-9]*)[.]?([0-9]*)"),F=/^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i,d=t=>typeof t=="string"&&t.trim()==="";function w(t,e){if(t==null||d(t))return!1;const r=Number.isFinite(e?.minValue)?new i.Decimal(e.minValue):C;try{return r.lte(t)&&V.gte(t)}catch{return!1}}function g(t,e,r){if(t==null||t==="")return"";let n;switch(typeof t){case"number":if(!Number.isFinite(t))return String(t);n=new i.Decimal(t).toString();break;case"string":if(n=a(t).trim(),!F.test(n))return t;/e/i.test(n)&&(n=`${n.startsWith("+")?"+":""}${new i.Decimal(n).toString()}`);break;default:n=t.toString()}const o=b.exec(n),l=o[1];let u=o[2]||"0",c=o[3],f,s=new i.Decimal(`${l==="-"?"-":""}${u}.${c}`);if(e!=null){s=s.round(e,r??i.ROUNDING_MODE.roundHalfUp);const N=b.exec(s.toString());u=N[2],c=N[3],f=e}else f=c.length;const D=s.eq(0)?"":l;return u=u.replace(/(\d)(?=(\d{3})+$)/g,"$1,"),c=`${c}${"0".repeat(f)}`.substring(0,f),c===""?`${D}${u}`:`${D}${u}.${c}`}function a(t){return t.replace(/,/g,"")}function $(t,e){return new Intl.NumberFormat(e,{notation:"compact"}).format(t)}function p(t,e,r){let n=new i.Decimal(t);for(const o of e)n=n[o.operator](o.value);return r?.scale!=null&&(n=n.round(r.scale,r.roundingMode??i.ROUNDING_MODE.roundHalfUp)),n.toNumber()}function S(t,...e){let r=new i.Decimal(t);for(const n of e)r=r.add(n);return r.toNumber()}function M(t,...e){let r=new i.Decimal(t);for(const n of e)r=r.sub(n);return r.toNumber()}function O(t,...e){let r=new i.Decimal(t);for(const n of e)r=r.times(n);return r.toNumber()}function U(t,...e){let r=new i.Decimal(t);for(const n of e)r=r.div(n);return r.toNumber()}function m(t,e){return new i.Decimal(t).compareTo(e)}function _(t,e){return m(t,e)===0}function h(t,e){return m(t,e)<0}function R(t,e){return m(t,e)<=0}function E(t,e){return 0<m(t,e)}function G(t,e){return 0<=m(t,e)}function I(t,e,r){if(t==null)return null;const n=r??i.ROUNDING_MODE.roundHalfUp;switch(typeof t){case"number":return Number.isFinite(t)?new i.Decimal(t).round(e,n).toNumber():t;case"string":{if(d(t))return null;try{return new i.Decimal(t).round(e,n).toNumber()}catch{return Number.NaN}}default:return new i.Decimal(t).round(e,n).toNumber()}}function T(t,e){if(t==null)return"";if(d(t)||typeof t=="number"&&!Number.isFinite(t))return String(t);try{const r=new i.Decimal(t);return e?.scale!=null?r.toFixed(e.scale,e.roundingMode??i.ROUNDING_MODE.roundHalfUp):r.toString()}catch{return String(t)}}function B(t){if(t==null||d(t))return null;switch(typeof t){case"number":return t;case"bigint":return Number(t);default:return Number(a(t).trim())}}function y(t,e){if(t==null||t==="")return[String(t),""];let r;switch(typeof t){case"number":if(Number.isNaN(t))return["NaN",""];r=new i.Decimal(t);break;case"string":try{r=new i.Decimal(a(t))}catch{return[t,""]}break;default:r=new i.Decimal(t)}const n=["B","KB","MB","GB","TB"];let o=0;for(;r.gte(1024)&&o<n.length-1;)r=r.div(1024),o++;const l=e?.scale??2,u=e?.roundingMode??i.ROUNDING_MODE.roundHalfUp;return e?.format?[g(r.toString(),l,u),n[o]]:[r.round(l,u).toString(),n[o]]}const k=Object.freeze(Object.defineProperty({__proto__:null,ROUNDING_MODE:i.ROUNDING_MODE,add:S,calc:p,compareTo:m,div:U,eq:_,formatBytes:y,formatComma:g,formatCompact:$,gt:E,gte:G,isLongValue:w,lt:h,lte:R,removeComma:a,round:I,sub:M,times:O,toNumber:B,toString:T},Symbol.toStringTag,{value:"Module"}));exports.add=S;exports.calc=p;exports.compareTo=m;exports.div=U;exports.eq=_;exports.formatBytes=y;exports.formatComma=g;exports.formatCompact=$;exports.gt=E;exports.gte=G;exports.isLongValue=w;exports.lt=h;exports.lte=R;exports.numberUtil=k;exports.removeComma=a;exports.round=I;exports.sub=M;exports.times=O;exports.toNumber=B;exports.toString=T;
2
+ //# sourceMappingURL=number-util-BSra7lF5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"number-util-BaSf1wWH.cjs","sources":["../src/number-util.ts"],"sourcesContent":["import { Decimal, ROUNDING_MODE } from './decimal';\nimport type { NumberSource, RoundingMode } from './decimal';\n\nexport { ROUNDING_MODE };\nexport type { NumberSource, RoundingMode };\n\n// 64bit整数の範囲\nconst MIN_LONG = new Decimal('-9223372036854775808');\nconst MAX_LONG = new Decimal('9223372036854775807');\n\n/** 数値パターン */\nconst NUMBER_PATTERN = new RegExp('([\\+\\-]?)([0-9]*)[\\.]?([0-9]*)');\n\n/** 数値として解釈できる文字列のパターン(符号・小数点・指数表記) */\nconst NUMERIC_STRING_PATTERN = /^[+-]?(\\d+\\.?\\d*|\\.\\d+)(e[+-]?\\d+)?$/i;\n\n// 空文字・空白のみの文字列はtrueを返す\nconst isBlank = (value: unknown): value is string => typeof value === 'string' && value.trim() === '';\n\n/**\n * long(64bit)の範囲(-9223372036854775808〜9223372036854775807)の値か判定する\n * Javascriptのnumberの範囲は(-9007199254740991〜9007199254740991)である\n *\n * @param {string | bigint} value\n * @param {*} [options]\n * ├ minValue number 最小値を指定する場合(0を指定すると負数の場合falseを返す)\n * 不正な値を指定した場合は無視される(最小値を-9223372036854775808とみなす)\n * @returns {boolean}\n * @see Number.MAX_SAFE_INTEGER\n * @see Number.MIN_SAFE_INTEGER\n */\nexport function isLongValue(value: string | bigint, options?: {\n minValue?: number;\n}): boolean {\n if (value == null || isBlank(value)) {\n return false;\n }\n const min = Number.isFinite(options?.minValue) ? new Decimal(options!.minValue) : MIN_LONG;\n try {\n // -9223372036854775808 <= value <= 9223372036854775807\n return min.lte(value) && MAX_LONG.gte(value);\n } catch (error) {\n // 数値として解釈できない値\n return false;\n }\n}\n\n/**\n * 3桁ごとカンマ区切りした文字列を返す\n * 指数表記の値(1e21など)は通常の表記に展開してから区切る\n * 数値として解釈できない文字列はそのまま返し、NaN/Infinityは \"NaN\"/\"Infinity\"/\"-Infinity\" を返す\n *\n * @param {NumberSource | null | undefined} value 値\n * @param {number} [scale] 小数点桁数(補助桁数)\n * @param {RoundingMode} [roundingMode] 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)\n * @returns {string}\n */\nexport function formatComma(value: NumberSource | null | undefined, scale?: number, roundingMode?: RoundingMode): string {\n if (value == null || value === '') {\n // 空文字を返却\n return '';\n }\n let strValue: string;\n switch (typeof value) {\n case 'number':\n if (!Number.isFinite(value)) {\n // \"NaN\" / \"Infinity\" / \"-Infinity\" を返却\n return String(value);\n }\n // toString()は1e21以上や1e-7以下を指数表記にするため、Decimalで通常の表記に展開する\n strValue = new Decimal(value).toString();\n break;\n case 'string':\n strValue = removeComma(value).trim();\n if (!NUMERIC_STRING_PATTERN.test(strValue)) {\n // 元の文字列を返却\n return value;\n }\n if (/e/i.test(strValue)) {\n // 指数表記を通常の表記に展開する。表示用に '+' を付け直す\n const plusSign = strValue.startsWith('+') ? '+' : '';\n strValue = `${plusSign}${new Decimal(strValue).toString()}`;\n }\n break;\n default:\n // bigintの場合\n strValue = value.toString();\n }\n const matches = NUMBER_PATTERN.exec(strValue) as RegExpExecArray;\n const sign = matches[1];\n let natural = matches[2] || '0';\n let decimal = matches[3];\n let dp: number;\n let decimalValue = new Decimal(`${sign === '-' ? '-' : ''}${natural}.${decimal}`);\n if (scale != null) {\n decimalValue = decimalValue.round(scale, roundingMode ?? ROUNDING_MODE.roundHalfUp);\n const roundedMatches = NUMBER_PATTERN.exec(decimalValue.toString()) as RegExpExecArray;\n natural = roundedMatches[2];\n decimal = roundedMatches[3];\n dp = scale;\n } else {\n dp = decimal.length;\n }\n // 丸めた結果がゼロになる場合('-0.001' を小数2桁にするなど)に \"-0.00\" とならないよう、丸めた後の値で判定する\n const displaySign = decimalValue.eq(0) ? '' : sign;\n natural = natural.replace(/(\\d)(?=(\\d{3})+$)/g, '$1,');\n decimal = `${decimal}${'0'.repeat(dp)}`.substring(0, dp);\n return decimal === ''\n ? `${displaySign}${natural}`\n : `${displaySign}${natural}.${decimal}`;\n}\n\n/**\n * カンマを除去する\n *\n * @param {string} value 入力値\n * @returns {string} カンマを取り除いた文字列\n */\nexport function removeComma(value: string): string {\n return value.replace(/,/g, '');\n}\n\n/**\n * 数値を表示ロケールの短縮表記にする。\n * en は 1.2K/3.4M/5.6B、ja は 12万/34億 のように単位が切り替わる。\n *\n * @param {number} value 値\n * @param {string} locale 表示ロケール(例 'ja' / 'en')\n * @returns {string} 短縮表記の文字列\n */\nexport function formatCompact(value: number, locale: string): string {\n return new Intl.NumberFormat(locale, { notation: 'compact' }).format(value);\n}\n\nexport type Operator = 'add' | 'sub' | 'times' | 'div';\n\nexport interface OperationItem {\n operator: Operator;\n value: NumberSource | null | undefined;\n}\n\n/**\n * 複数の演算をまとめて計算する\n * 計算途中は精度を保持し、最後にnumberへ変換する\n * この関数では四則演算の優先順位はなく、与えられた配列の順で計算を行う\n * * 優先順位やカッコの概念がある場合は事前に計算したうえでこの関数を利用する\n *\n * 例)\n * calc(\n * '123',\n * [\n * { operator: 'add', value: '123' },\n * { operator: 'sub', value: 100 },\n * { operator: 'times', value: 2 },\n * { operator: 'div', value: 3 }\n * ]\n * )\n * 123 + 123 = 246\n * 246 - 100 = 146\n * 146 * 2 = 292\n * 292 / 3 = 97.33333333\n *\n * null等の扱いは add / sub / times / div と同じ\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} initialValue\n * @param {OperationItem[]} operationItems\n * ├ operator: Operator\n * ├ value: NumberSource | null | undefined\n * @param {*} [options]\n * ├ scale 計算結果を丸める小数桁数。指定しない場合は丸めない\n * ├ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)\n * @returns {number}\n */\nexport function calc(initialValue: NumberSource | null | undefined, operationItems: OperationItem[], options?: {\n scale?: number;\n roundingMode?: RoundingMode;\n}): number {\n let decimal = new Decimal(initialValue);\n for (const item of operationItems) {\n decimal = decimal[item.operator](item.value);\n }\n if (options?.scale != null) {\n decimal = decimal.round(options.scale, options.roundingMode ?? ROUNDING_MODE.roundHalfUp);\n }\n return decimal.toNumber();\n}\n\n/**\n * 加算を行う\n * null/undefined/空文字/NaNは0と見做されるため、演算結果に影響しない\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {(NumberSource | null | undefined)[]} value2\n * @returns {number}\n */\nexport function add(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number {\n let decimal = new Decimal(value1);\n for (const value of value2) {\n decimal = decimal.add(value);\n }\n return decimal.toNumber();\n}\n\n/**\n * 減算を行う\n * null/undefined/空文字/NaNは0と見做されるため、演算結果に影響しない\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {(NumberSource | null | undefined)[]} value2\n * @returns {number}\n */\nexport function sub(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number {\n let decimal = new Decimal(value1);\n for (const value of value2) {\n decimal = decimal.sub(value);\n }\n return decimal.toNumber();\n}\n\n/**\n * 乗算を行う\n * null/undefined/空文字/NaNは0と見做されるため、演算結果は0になる\n * 元の値を保持したい場合は times(price, discount ?? 1) のようにフォールバック値を指定する\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {(NumberSource | null | undefined)[]} value2\n * @returns {number}\n */\nexport function times(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number {\n let decimal = new Decimal(value1);\n for (const value of value2) {\n decimal = decimal.times(value);\n }\n return decimal.toNumber();\n}\n\n/**\n * 除算を行う\n * 割る値のnull/undefined/空文字/NaNは1と見做されるため、演算結果に影響しない\n * 割る値に0を指定した場合はゼロ除算エラーになる\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {(NumberSource | null | undefined)[]} value2\n * @returns {number}\n */\nexport function div(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number {\n let decimal = new Decimal(value1);\n for (const value of value2) {\n decimal = decimal.div(value);\n }\n return decimal.toNumber();\n}\n\n/**\n * 2つの値を数値として比較する\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {-1 | 0 | 1} value1がvalue2より小さい場合は-1、等しい場合は0、大きい場合は1\n */\nexport function compareTo(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): -1 | 0 | 1 {\n return new Decimal(value1).compareTo(value2);\n}\n\n/**\n * 2つの値が数値として等しいかを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function eq(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return compareTo(value1, value2) === 0;\n}\n\n/**\n * value1がvalue2より小さいかを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function lt(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return compareTo(value1, value2) < 0;\n}\n\n/**\n * value1がvalue2以下かを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function lte(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return compareTo(value1, value2) <= 0;\n}\n\n/**\n * value1がvalue2より大きいかを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function gt(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return 0 < compareTo(value1, value2);\n}\n\n/**\n * value1がvalue2以上かを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function gte(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return 0 <= compareTo(value1, value2);\n}\n\n/**\n * 数値を指定した桁で丸める\n * null/undefined/空文字はnull、数値として解釈できない文字列はNaNを返す\n * NaN/Infinityはそのまま返す\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value\n * @param {number} scale\n * @param {RoundingMode} [roundingMode] デフォルトは 1: 四捨五入\n * 0 切り捨て\n * 1 四捨五入\n * 2 ISO丸め\n * 3 切り上げ\n * @returns {number | null}\n * @see ROUNDING_MODE\n */\nexport function round(\n value: NumberSource | null | undefined,\n scale: number,\n roundingMode?: RoundingMode\n): number | null {\n if (value == null) {\n return null;\n }\n const rm = roundingMode ?? ROUNDING_MODE.roundHalfUp;\n switch (typeof value) {\n case 'number':\n if (!Number.isFinite(value)) {\n // NaN/Infinityはそのまま返す\n return value;\n }\n return new Decimal(value).round(scale, rm).toNumber();\n case 'string': {\n if (isBlank(value)) {\n // 空文字は値なしとしてnullと同じ扱いにする\n return null;\n }\n try {\n return new Decimal(value).round(scale, rm).toNumber();\n } catch (error) {\n // 数値として解釈できない文字列\n return Number.NaN;\n }\n }\n default:\n return new Decimal(value).round(scale, rm).toNumber();\n }\n}\n\n/**\n * 数値文字列に変換する\n * 指数表記にはならず、通常の表記で返す\n * 数値として解釈できない値はString(value)を返す\n *\n * @param {NumberSource | null | undefined} value\n * @param {*} [options]\n * ├ scale 小数桁数。指定しない場合は丸めずにすべての桁を返す\n * ├ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)\n * @returns {string}\n * @see ROUNDING_MODE\n */\nexport function toString(\n value: NumberSource | null | undefined,\n options?: {\n scale?: number;\n roundingMode?: RoundingMode;\n }\n): string {\n if (value == null) {\n return '';\n }\n if (isBlank(value) || (typeof value === 'number' && !Number.isFinite(value))) {\n // 空文字・NaN・Infinityは数値として扱わない\n return String(value);\n }\n try {\n const decimal = new Decimal(value);\n return options?.scale != null\n ? decimal.toFixed(options.scale, options.roundingMode ?? ROUNDING_MODE.roundHalfUp)\n : decimal.toString();\n } catch (error) {\n return String(value);\n }\n}\n\n/**\n * 渡されたバイト数値を桁数に応じてMB,GBなどに単位を変更する\n *\n * @param {NumberSource} bytes\n * @param {*} [options]\n * ┝ scale 小数以下桁数 デフォルト:2\n * ┝ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)\n * ┝ format フォーマットするか。trueを指定した場合、3桁カンマ区切り+小数末尾0の桁揃え\n * @returns {[string, string]} 精度以下を丸めた数値(文字列)と単位をタプルで返す\n */\nexport function formatBytes(\n bytes: NumberSource,\n options?: {\n scale?: number;\n roundingMode?: RoundingMode;\n format?: boolean;\n }\n): [string, string] {\n if (bytes == null || bytes === '') {\n return [String(bytes), ''];\n }\n let decimalValue: Decimal;\n switch (typeof bytes) {\n case 'number':\n if (Number.isNaN(bytes)) {\n // \"NaN\" を返却\n return ['NaN', ''];\n }\n decimalValue = new Decimal(bytes);\n break;\n case 'string':\n try {\n decimalValue = new Decimal(removeComma(bytes));\n } catch (error) {\n // 元の文字列を返却\n return [bytes, ''];\n }\n break;\n default:\n // bigintの場合\n decimalValue = new Decimal(bytes);\n }\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n while (decimalValue.gte(1024) && i < units.length - 1) {\n decimalValue = decimalValue.div(1024);\n i++;\n }\n const scale = options?.scale ?? 2;\n const roundingMode = options?.roundingMode ?? ROUNDING_MODE.roundHalfUp;\n if (options?.format) {\n return [formatComma(decimalValue.toString(), scale, roundingMode), units[i]];\n }\n return [decimalValue.round(scale, roundingMode).toString(), units[i]];\n}\n"],"names":["MIN_LONG","Decimal","MAX_LONG","NUMBER_PATTERN","NUMERIC_STRING_PATTERN","isBlank","value","isLongValue","options","min","formatComma","scale","roundingMode","strValue","removeComma","matches","sign","natural","decimal","dp","decimalValue","ROUNDING_MODE","roundedMatches","displaySign","formatCompact","locale","calc","initialValue","operationItems","item","add","value1","value2","sub","times","div","compareTo","eq","lt","lte","gt","gte","round","rm","toString","formatBytes","bytes","units","i"],"mappings":"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"}
1
+ {"version":3,"file":"number-util-BSra7lF5.cjs","sources":["../src/number-util.ts"],"sourcesContent":["import { Decimal, ROUNDING_MODE } from './decimal';\nimport type { NumberSource, RoundingMode } from './decimal';\n\nexport { ROUNDING_MODE };\nexport type { NumberSource, RoundingMode };\n\n// 64bit整数の範囲\nconst MIN_LONG = new Decimal('-9223372036854775808');\nconst MAX_LONG = new Decimal('9223372036854775807');\n\n/** 数値パターン */\nconst NUMBER_PATTERN = new RegExp('([\\+\\-]?)([0-9]*)[\\.]?([0-9]*)');\n\n/** 数値として解釈できる文字列のパターン(符号・小数点・指数表記) */\nconst NUMERIC_STRING_PATTERN = /^[+-]?(\\d+\\.?\\d*|\\.\\d+)(e[+-]?\\d+)?$/i;\n\n// 空文字・空白のみの文字列はtrueを返す\nconst isBlank = (value: unknown): value is string => typeof value === 'string' && value.trim() === '';\n\n/**\n * long(64bit)の範囲(-9223372036854775808〜9223372036854775807)の値か判定する\n * Javascriptのnumberの範囲は(-9007199254740991〜9007199254740991)である\n *\n * @param {string | bigint} value\n * @param {*} [options]\n * ├ minValue number 最小値を指定する場合(0を指定すると負数の場合falseを返す)\n * 不正な値を指定した場合は無視される(最小値を-9223372036854775808とみなす)\n * @returns {boolean}\n * @see Number.MAX_SAFE_INTEGER\n * @see Number.MIN_SAFE_INTEGER\n */\nexport function isLongValue(value: string | bigint, options?: {\n minValue?: number;\n}): boolean {\n if (value == null || isBlank(value)) {\n return false;\n }\n const min = Number.isFinite(options?.minValue) ? new Decimal(options!.minValue) : MIN_LONG;\n try {\n // -9223372036854775808 <= value <= 9223372036854775807\n return min.lte(value) && MAX_LONG.gte(value);\n } catch (error) {\n // 数値として解釈できない値\n return false;\n }\n}\n\n/**\n * 3桁ごとカンマ区切りした文字列を返す\n * 指数表記の値(1e21など)は通常の表記に展開してから区切る\n * 数値として解釈できない文字列はそのまま返し、NaN/Infinityは \"NaN\"/\"Infinity\"/\"-Infinity\" を返す\n *\n * @param {NumberSource | null | undefined} value 値\n * @param {number} [scale] 小数点桁数(補助桁数)\n * @param {RoundingMode} [roundingMode] 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)\n * @returns {string}\n */\nexport function formatComma(value: NumberSource | null | undefined, scale?: number, roundingMode?: RoundingMode): string {\n if (value == null || value === '') {\n // 空文字を返却\n return '';\n }\n let strValue: string;\n switch (typeof value) {\n case 'number':\n if (!Number.isFinite(value)) {\n // \"NaN\" / \"Infinity\" / \"-Infinity\" を返却\n return String(value);\n }\n // toString()は1e21以上や1e-7以下を指数表記にするため、Decimalで通常の表記に展開する\n strValue = new Decimal(value).toString();\n break;\n case 'string':\n strValue = removeComma(value).trim();\n if (!NUMERIC_STRING_PATTERN.test(strValue)) {\n // 元の文字列を返却\n return value;\n }\n if (/e/i.test(strValue)) {\n // 指数表記を通常の表記に展開する。表示用に '+' を付け直す\n const plusSign = strValue.startsWith('+') ? '+' : '';\n strValue = `${plusSign}${new Decimal(strValue).toString()}`;\n }\n break;\n default:\n // bigintの場合\n strValue = value.toString();\n }\n const matches = NUMBER_PATTERN.exec(strValue) as RegExpExecArray;\n const sign = matches[1];\n let natural = matches[2] || '0';\n let decimal = matches[3];\n let dp: number;\n let decimalValue = new Decimal(`${sign === '-' ? '-' : ''}${natural}.${decimal}`);\n if (scale != null) {\n decimalValue = decimalValue.round(scale, roundingMode ?? ROUNDING_MODE.roundHalfUp);\n const roundedMatches = NUMBER_PATTERN.exec(decimalValue.toString()) as RegExpExecArray;\n natural = roundedMatches[2];\n decimal = roundedMatches[3];\n dp = scale;\n } else {\n dp = decimal.length;\n }\n // 丸めた結果がゼロになる場合('-0.001' を小数2桁にするなど)に \"-0.00\" とならないよう、丸めた後の値で判定する\n const displaySign = decimalValue.eq(0) ? '' : sign;\n natural = natural.replace(/(\\d)(?=(\\d{3})+$)/g, '$1,');\n decimal = `${decimal}${'0'.repeat(dp)}`.substring(0, dp);\n return decimal === ''\n ? `${displaySign}${natural}`\n : `${displaySign}${natural}.${decimal}`;\n}\n\n/**\n * カンマを除去する\n *\n * @param {string} value 入力値\n * @returns {string} カンマを取り除いた文字列\n */\nexport function removeComma(value: string): string {\n return value.replace(/,/g, '');\n}\n\n/**\n * 数値を表示ロケールの短縮表記にする。\n * en は 1.2K/3.4M/5.6B、ja は 12万/34億 のように単位が切り替わる。\n *\n * @param {number} value 値\n * @param {string} locale 表示ロケール(例 'ja' / 'en')\n * @returns {string} 短縮表記の文字列\n */\nexport function formatCompact(value: number, locale: string): string {\n return new Intl.NumberFormat(locale, { notation: 'compact' }).format(value);\n}\n\nexport type Operator = 'add' | 'sub' | 'times' | 'div';\n\nexport interface OperationItem {\n operator: Operator;\n value: NumberSource | null | undefined;\n}\n\n/**\n * 複数の演算をまとめて計算する\n * 計算途中は精度を保持し、最後にnumberへ変換する\n * この関数では四則演算の優先順位はなく、与えられた配列の順で計算を行う\n * * 優先順位やカッコの概念がある場合は事前に計算したうえでこの関数を利用する\n *\n * 例)\n * calc(\n * '123',\n * [\n * { operator: 'add', value: '123' },\n * { operator: 'sub', value: 100 },\n * { operator: 'times', value: 2 },\n * { operator: 'div', value: 3 }\n * ]\n * )\n * 123 + 123 = 246\n * 246 - 100 = 146\n * 146 * 2 = 292\n * 292 / 3 = 97.33333333\n *\n * null等の扱いは add / sub / times / div と同じ\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} initialValue\n * @param {OperationItem[]} operationItems\n * ├ operator: Operator\n * ├ value: NumberSource | null | undefined\n * @param {*} [options]\n * ├ scale 計算結果を丸める小数桁数。指定しない場合は丸めない\n * ├ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)\n * @returns {number}\n */\nexport function calc(initialValue: NumberSource | null | undefined, operationItems: OperationItem[], options?: {\n scale?: number;\n roundingMode?: RoundingMode;\n}): number {\n let decimal = new Decimal(initialValue);\n for (const item of operationItems) {\n decimal = decimal[item.operator](item.value);\n }\n if (options?.scale != null) {\n decimal = decimal.round(options.scale, options.roundingMode ?? ROUNDING_MODE.roundHalfUp);\n }\n return decimal.toNumber();\n}\n\n/**\n * 加算を行う\n * null/undefined/空文字/NaNは0と見做されるため、演算結果に影響しない\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {(NumberSource | null | undefined)[]} value2\n * @returns {number}\n */\nexport function add(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number {\n let decimal = new Decimal(value1);\n for (const value of value2) {\n decimal = decimal.add(value);\n }\n return decimal.toNumber();\n}\n\n/**\n * 減算を行う\n * null/undefined/空文字/NaNは0と見做されるため、演算結果に影響しない\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {(NumberSource | null | undefined)[]} value2\n * @returns {number}\n */\nexport function sub(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number {\n let decimal = new Decimal(value1);\n for (const value of value2) {\n decimal = decimal.sub(value);\n }\n return decimal.toNumber();\n}\n\n/**\n * 乗算を行う\n * null/undefined/空文字/NaNは0と見做されるため、演算結果は0になる\n * 元の値を保持したい場合は times(price, discount ?? 1) のようにフォールバック値を指定する\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {(NumberSource | null | undefined)[]} value2\n * @returns {number}\n */\nexport function times(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number {\n let decimal = new Decimal(value1);\n for (const value of value2) {\n decimal = decimal.times(value);\n }\n return decimal.toNumber();\n}\n\n/**\n * 除算を行う\n * 割る値のnull/undefined/空文字/NaNは1と見做されるため、演算結果に影響しない\n * 割る値に0を指定した場合はゼロ除算エラーになる\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {(NumberSource | null | undefined)[]} value2\n * @returns {number}\n */\nexport function div(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number {\n let decimal = new Decimal(value1);\n for (const value of value2) {\n decimal = decimal.div(value);\n }\n return decimal.toNumber();\n}\n\n/**\n * 2つの値を数値として比較する\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {-1 | 0 | 1} value1がvalue2より小さい場合は-1、等しい場合は0、大きい場合は1\n */\nexport function compareTo(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): -1 | 0 | 1 {\n return new Decimal(value1).compareTo(value2);\n}\n\n/**\n * 2つの値が数値として等しいかを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function eq(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return compareTo(value1, value2) === 0;\n}\n\n/**\n * value1がvalue2より小さいかを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function lt(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return compareTo(value1, value2) < 0;\n}\n\n/**\n * value1がvalue2以下かを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function lte(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return compareTo(value1, value2) <= 0;\n}\n\n/**\n * value1がvalue2より大きいかを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function gt(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return 0 < compareTo(value1, value2);\n}\n\n/**\n * value1がvalue2以上かを返す\n * null/undefined/空文字/NaNは0と見做す\n * 数値として解釈できない文字列やInfinityを指定した場合はTypeErrorになる\n *\n * @param {NumberSource | null | undefined} value1\n * @param {NumberSource | null | undefined} value2\n * @returns {boolean}\n */\nexport function gte(value1: NumberSource | null | undefined, value2: NumberSource | null | undefined): boolean {\n return 0 <= compareTo(value1, value2);\n}\n\n/**\n * 数値を指定した桁で丸める\n * null/undefined/空文字はnull、数値として解釈できない文字列はNaNを返す\n * NaN/Infinityはそのまま返す\n * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる\n *\n * @param {NumberSource | null | undefined} value\n * @param {number} scale\n * @param {RoundingMode} [roundingMode] デフォルトは 1: 四捨五入\n * 0 切り捨て\n * 1 四捨五入\n * 2 ISO丸め\n * 3 切り上げ\n * @returns {number | null}\n * @see ROUNDING_MODE\n */\nexport function round(\n value: NumberSource | null | undefined,\n scale: number,\n roundingMode?: RoundingMode\n): number | null {\n if (value == null) {\n return null;\n }\n const rm = roundingMode ?? ROUNDING_MODE.roundHalfUp;\n switch (typeof value) {\n case 'number':\n if (!Number.isFinite(value)) {\n // NaN/Infinityはそのまま返す\n return value;\n }\n return new Decimal(value).round(scale, rm).toNumber();\n case 'string': {\n if (isBlank(value)) {\n // 空文字は値なしとしてnullと同じ扱いにする\n return null;\n }\n try {\n return new Decimal(value).round(scale, rm).toNumber();\n } catch (error) {\n // 数値として解釈できない文字列\n return Number.NaN;\n }\n }\n default:\n return new Decimal(value).round(scale, rm).toNumber();\n }\n}\n\n/**\n * 数値文字列に変換する\n * 指数表記にはならず、通常の表記で返す\n * 数値として解釈できない値はString(value)を返す\n *\n * @param {NumberSource | null | undefined} value\n * @param {*} [options]\n * ├ scale 小数桁数。指定しない場合は丸めずにすべての桁を返す\n * ├ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)\n * @returns {string}\n * @see ROUNDING_MODE\n */\nexport function toString(\n value: NumberSource | null | undefined,\n options?: {\n scale?: number;\n roundingMode?: RoundingMode;\n }\n): string {\n if (value == null) {\n return '';\n }\n if (isBlank(value) || (typeof value === 'number' && !Number.isFinite(value))) {\n // 空文字・NaN・Infinityは数値として扱わない\n return String(value);\n }\n try {\n const decimal = new Decimal(value);\n return options?.scale != null\n ? decimal.toFixed(options.scale, options.roundingMode ?? ROUNDING_MODE.roundHalfUp)\n : decimal.toString();\n } catch (error) {\n return String(value);\n }\n}\n\n/**\n * 数値に変換する\n * null・undefined・空文字は未指定として null を返す\n * 文字列はカンマを除いてから変換し、数値として解釈できない場合は NaN を返す\n *\n * @param {NumberSource | null | undefined} value\n * @returns {number | null}\n */\nexport function toNumber(value: NumberSource | null | undefined): number | null {\n if (value == null || isBlank(value)) {\n return null;\n }\n switch (typeof value) {\n case 'number':\n return value;\n case 'bigint':\n return Number(value);\n default:\n return Number(removeComma(value).trim());\n }\n}\n\n/**\n * 渡されたバイト数値を桁数に応じてMB,GBなどに単位を変更する\n *\n * @param {NumberSource} bytes\n * @param {*} [options]\n * ┝ scale 小数以下桁数 デフォルト:2\n * ┝ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)\n * ┝ format フォーマットするか。trueを指定した場合、3桁カンマ区切り+小数末尾0の桁揃え\n * @returns {[string, string]} 精度以下を丸めた数値(文字列)と単位をタプルで返す\n */\nexport function formatBytes(\n bytes: NumberSource,\n options?: {\n scale?: number;\n roundingMode?: RoundingMode;\n format?: boolean;\n }\n): [string, string] {\n if (bytes == null || bytes === '') {\n return [String(bytes), ''];\n }\n let decimalValue: Decimal;\n switch (typeof bytes) {\n case 'number':\n if (Number.isNaN(bytes)) {\n // \"NaN\" を返却\n return ['NaN', ''];\n }\n decimalValue = new Decimal(bytes);\n break;\n case 'string':\n try {\n decimalValue = new Decimal(removeComma(bytes));\n } catch (error) {\n // 元の文字列を返却\n return [bytes, ''];\n }\n break;\n default:\n // bigintの場合\n decimalValue = new Decimal(bytes);\n }\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n while (decimalValue.gte(1024) && i < units.length - 1) {\n decimalValue = decimalValue.div(1024);\n i++;\n }\n const scale = options?.scale ?? 2;\n const roundingMode = options?.roundingMode ?? ROUNDING_MODE.roundHalfUp;\n if (options?.format) {\n return [formatComma(decimalValue.toString(), scale, roundingMode), units[i]];\n }\n return [decimalValue.round(scale, roundingMode).toString(), units[i]];\n}\n"],"names":["MIN_LONG","Decimal","MAX_LONG","NUMBER_PATTERN","NUMERIC_STRING_PATTERN","isBlank","value","isLongValue","options","min","formatComma","scale","roundingMode","strValue","removeComma","matches","sign","natural","decimal","dp","decimalValue","ROUNDING_MODE","roundedMatches","displaySign","formatCompact","locale","calc","initialValue","operationItems","item","add","value1","value2","sub","times","div","compareTo","eq","lt","lte","gt","gte","round","rm","toString","toNumber","formatBytes","bytes","units","i"],"mappings":"8CAOMA,EAAW,IAAIC,EAAAA,QAAQ,sBAAsB,EAC7CC,EAAW,IAAID,EAAAA,QAAQ,qBAAqB,EAG5CE,EAAiB,IAAI,OAAO,6BAAgC,EAG5DC,EAAyB,wCAGzBC,EAAWC,GAAoC,OAAOA,GAAU,UAAYA,EAAM,SAAW,GAc5F,SAASC,EAAYD,EAAwBE,EAExC,CACV,GAAIF,GAAS,MAAQD,EAAQC,CAAK,EAChC,MAAO,GAET,MAAMG,EAAM,OAAO,SAASD,GAAS,QAAQ,EAAI,IAAIP,UAAQO,EAAS,QAAQ,EAAIR,EAClF,GAAI,CAEF,OAAOS,EAAI,IAAIH,CAAK,GAAKJ,EAAS,IAAII,CAAK,CAC7C,MAAgB,CAEd,MAAO,EACT,CACF,CAYO,SAASI,EAAYJ,EAAwCK,EAAgBC,EAAqC,CACvH,GAAIN,GAAS,MAAQA,IAAU,GAE7B,MAAO,GAET,IAAIO,EACJ,OAAQ,OAAOP,EAAA,CACb,IAAK,SACH,GAAI,CAAC,OAAO,SAASA,CAAK,EAExB,OAAO,OAAOA,CAAK,EAGrBO,EAAW,IAAIZ,EAAAA,QAAQK,CAAK,EAAE,SAAA,EAC9B,MACF,IAAK,SAEH,GADAO,EAAWC,EAAYR,CAAK,EAAE,KAAA,EAC1B,CAACF,EAAuB,KAAKS,CAAQ,EAEvC,OAAOP,EAEL,KAAK,KAAKO,CAAQ,IAGpBA,EAAW,GADMA,EAAS,WAAW,GAAG,EAAI,IAAM,EAC5B,GAAG,IAAIZ,EAAAA,QAAQY,CAAQ,EAAE,UAAU,IAE3D,MACF,QAEEA,EAAWP,EAAM,SAAA,CAAS,CAE9B,MAAMS,EAAUZ,EAAe,KAAKU,CAAQ,EACtCG,EAAOD,EAAQ,CAAC,EACtB,IAAIE,EAAUF,EAAQ,CAAC,GAAK,IACxBG,EAAUH,EAAQ,CAAC,EACnBI,EACAC,EAAe,IAAInB,EAAAA,QAAQ,GAAGe,IAAS,IAAM,IAAM,EAAE,GAAGC,CAAO,IAAIC,CAAO,EAAE,EAChF,GAAIP,GAAS,KAAM,CACjBS,EAAeA,EAAa,MAAMT,EAAOC,GAAgBS,EAAAA,cAAc,WAAW,EAClF,MAAMC,EAAiBnB,EAAe,KAAKiB,EAAa,UAAU,EAClEH,EAAUK,EAAe,CAAC,EAC1BJ,EAAUI,EAAe,CAAC,EAC1BH,EAAKR,CACP,MACEQ,EAAKD,EAAQ,OAGf,MAAMK,EAAcH,EAAa,GAAG,CAAC,EAAI,GAAKJ,EAC9C,OAAAC,EAAUA,EAAQ,QAAQ,qBAAsB,KAAK,EACrDC,EAAU,GAAGA,CAAO,GAAG,IAAI,OAAOC,CAAE,CAAC,GAAG,UAAU,EAAGA,CAAE,EAChDD,IAAY,GACf,GAAGK,CAAW,GAAGN,CAAO,GACxB,GAAGM,CAAW,GAAGN,CAAO,IAAIC,CAAO,EACzC,CAQO,SAASJ,EAAYR,EAAuB,CACjD,OAAOA,EAAM,QAAQ,KAAM,EAAE,CAC/B,CAUO,SAASkB,EAAclB,EAAemB,EAAwB,CACnE,OAAO,IAAI,KAAK,aAAaA,EAAQ,CAAE,SAAU,SAAA,CAAW,EAAE,OAAOnB,CAAK,CAC5E,CA0CO,SAASoB,EAAKC,EAA+CC,EAAiCpB,EAG1F,CACT,IAAIU,EAAU,IAAIjB,EAAAA,QAAQ0B,CAAY,EACtC,UAAWE,KAAQD,EACjBV,EAAUA,EAAQW,EAAK,QAAQ,EAAEA,EAAK,KAAK,EAE7C,OAAIrB,GAAS,OAAS,OACpBU,EAAUA,EAAQ,MAAMV,EAAQ,MAAOA,EAAQ,cAAgBa,EAAAA,cAAc,WAAW,GAEnFH,EAAQ,SAAA,CACjB,CAWO,SAASY,EAAIC,KAA4CC,EAAqD,CACnH,IAAId,EAAU,IAAIjB,EAAAA,QAAQ8B,CAAM,EAChC,UAAWzB,KAAS0B,EAClBd,EAAUA,EAAQ,IAAIZ,CAAK,EAE7B,OAAOY,EAAQ,SAAA,CACjB,CAWO,SAASe,EAAIF,KAA4CC,EAAqD,CACnH,IAAId,EAAU,IAAIjB,EAAAA,QAAQ8B,CAAM,EAChC,UAAWzB,KAAS0B,EAClBd,EAAUA,EAAQ,IAAIZ,CAAK,EAE7B,OAAOY,EAAQ,SAAA,CACjB,CAYO,SAASgB,EAAMH,KAA4CC,EAAqD,CACrH,IAAId,EAAU,IAAIjB,EAAAA,QAAQ8B,CAAM,EAChC,UAAWzB,KAAS0B,EAClBd,EAAUA,EAAQ,MAAMZ,CAAK,EAE/B,OAAOY,EAAQ,SAAA,CACjB,CAYO,SAASiB,EAAIJ,KAA4CC,EAAqD,CACnH,IAAId,EAAU,IAAIjB,EAAAA,QAAQ8B,CAAM,EAChC,UAAWzB,KAAS0B,EAClBd,EAAUA,EAAQ,IAAIZ,CAAK,EAE7B,OAAOY,EAAQ,SAAA,CACjB,CAWO,SAASkB,EAAUL,EAAyCC,EAAqD,CACtH,OAAO,IAAI/B,EAAAA,QAAQ8B,CAAM,EAAE,UAAUC,CAAM,CAC7C,CAWO,SAASK,EAAGN,EAAyCC,EAAkD,CAC5G,OAAOI,EAAUL,EAAQC,CAAM,IAAM,CACvC,CAWO,SAASM,EAAGP,EAAyCC,EAAkD,CAC5G,OAAOI,EAAUL,EAAQC,CAAM,EAAI,CACrC,CAWO,SAASO,EAAIR,EAAyCC,EAAkD,CAC7G,OAAOI,EAAUL,EAAQC,CAAM,GAAK,CACtC,CAWO,SAASQ,EAAGT,EAAyCC,EAAkD,CAC5G,MAAO,GAAII,EAAUL,EAAQC,CAAM,CACrC,CAWO,SAASS,EAAIV,EAAyCC,EAAkD,CAC7G,MAAO,IAAKI,EAAUL,EAAQC,CAAM,CACtC,CAkBO,SAASU,EACdpC,EACAK,EACAC,EACe,CACf,GAAIN,GAAS,KACX,OAAO,KAET,MAAMqC,EAAK/B,GAAgBS,EAAAA,cAAc,YACzC,OAAQ,OAAOf,EAAA,CACb,IAAK,SACH,OAAK,OAAO,SAASA,CAAK,EAInB,IAAIL,EAAAA,QAAQK,CAAK,EAAE,MAAMK,EAAOgC,CAAE,EAAE,SAAA,EAFlCrC,EAGX,IAAK,SAAU,CACb,GAAID,EAAQC,CAAK,EAEf,OAAO,KAET,GAAI,CACF,OAAO,IAAIL,EAAAA,QAAQK,CAAK,EAAE,MAAMK,EAAOgC,CAAE,EAAE,SAAA,CAC7C,MAAgB,CAEd,OAAO,OAAO,GAChB,CACF,CACA,QACE,OAAO,IAAI1C,EAAAA,QAAQK,CAAK,EAAE,MAAMK,EAAOgC,CAAE,EAAE,SAAA,CAAS,CAE1D,CAcO,SAASC,EACdtC,EACAE,EAIQ,CACR,GAAIF,GAAS,KACX,MAAO,GAET,GAAID,EAAQC,CAAK,GAAM,OAAOA,GAAU,UAAY,CAAC,OAAO,SAASA,CAAK,EAExE,OAAO,OAAOA,CAAK,EAErB,GAAI,CACF,MAAMY,EAAU,IAAIjB,EAAAA,QAAQK,CAAK,EACjC,OAAOE,GAAS,OAAS,KACrBU,EAAQ,QAAQV,EAAQ,MAAOA,EAAQ,cAAgBa,EAAAA,cAAc,WAAW,EAChFH,EAAQ,SAAA,CACd,MAAgB,CACd,OAAO,OAAOZ,CAAK,CACrB,CACF,CAUO,SAASuC,EAASvC,EAAuD,CAC9E,GAAIA,GAAS,MAAQD,EAAQC,CAAK,EAChC,OAAO,KAET,OAAQ,OAAOA,EAAA,CACb,IAAK,SACH,OAAOA,EACT,IAAK,SACH,OAAO,OAAOA,CAAK,EACrB,QACE,OAAO,OAAOQ,EAAYR,CAAK,EAAE,MAAM,CAAA,CAE7C,CAYO,SAASwC,EACdC,EACAvC,EAKkB,CAClB,GAAIuC,GAAS,MAAQA,IAAU,GAC7B,MAAO,CAAC,OAAOA,CAAK,EAAG,EAAE,EAE3B,IAAI3B,EACJ,OAAQ,OAAO2B,EAAA,CACb,IAAK,SACH,GAAI,OAAO,MAAMA,CAAK,EAEpB,MAAO,CAAC,MAAO,EAAE,EAEnB3B,EAAe,IAAInB,EAAAA,QAAQ8C,CAAK,EAChC,MACF,IAAK,SACH,GAAI,CACF3B,EAAe,IAAInB,EAAAA,QAAQa,EAAYiC,CAAK,CAAC,CAC/C,MAAgB,CAEd,MAAO,CAACA,EAAO,EAAE,CACnB,CACA,MACF,QAEE3B,EAAe,IAAInB,EAAAA,QAAQ8C,CAAK,CAAA,CAEpC,MAAMC,EAAQ,CAAC,IAAK,KAAM,KAAM,KAAM,IAAI,EAC1C,IAAIC,EAAI,EACR,KAAO7B,EAAa,IAAI,IAAI,GAAK6B,EAAID,EAAM,OAAS,GAClD5B,EAAeA,EAAa,IAAI,IAAI,EACpC6B,IAEF,MAAMtC,EAAQH,GAAS,OAAS,EAC1BI,EAAeJ,GAAS,cAAgBa,EAAAA,cAAc,YAC5D,OAAIb,GAAS,OACJ,CAACE,EAAYU,EAAa,SAAA,EAAYT,EAAOC,CAAY,EAAGoC,EAAMC,CAAC,CAAC,EAEtE,CAAC7B,EAAa,MAAMT,EAAOC,CAAY,EAAE,SAAA,EAAYoC,EAAMC,CAAC,CAAC,CACtE"}
@@ -1,11 +1,11 @@
1
- import { Decimal as o, ROUNDING_MODE as a } from "./decimal.js";
2
- const S = new o("-9223372036854775808"), $ = new o("9223372036854775807"), b = new RegExp("([+-]?)([0-9]*)[.]?([0-9]*)"), h = /^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i, g = (n) => typeof n == "string" && n.trim() === "";
1
+ import { Decimal as o, ROUNDING_MODE as s } from "./decimal.js";
2
+ const S = new o("-9223372036854775808"), h = new o("9223372036854775807"), w = new RegExp("([+-]?)([0-9]*)[.]?([0-9]*)"), $ = /^[+-]?(\d+\.?\d*|\.\d+)(e[+-]?\d+)?$/i, d = (n) => typeof n == "string" && n.trim() === "";
3
3
  function M(n, r) {
4
- if (n == null || g(n))
4
+ if (n == null || d(n))
5
5
  return !1;
6
6
  const t = Number.isFinite(r?.minValue) ? new o(r.minValue) : S;
7
7
  try {
8
- return t.lte(n) && $.gte(n);
8
+ return t.lte(n) && h.gte(n);
9
9
  } catch {
10
10
  return !1;
11
11
  }
@@ -21,25 +21,25 @@ function p(n, r, t) {
21
21
  e = new o(n).toString();
22
22
  break;
23
23
  case "string":
24
- if (e = N(n).trim(), !h.test(e))
24
+ if (e = g(n).trim(), !$.test(e))
25
25
  return n;
26
26
  /e/i.test(e) && (e = `${e.startsWith("+") ? "+" : ""}${new o(e).toString()}`);
27
27
  break;
28
28
  default:
29
29
  e = n.toString();
30
30
  }
31
- const i = b.exec(e), f = i[1];
32
- let u = i[2] || "0", c = i[3], l, m = new o(`${f === "-" ? "-" : ""}${u}.${c}`);
31
+ const i = w.exec(e), f = i[1];
32
+ let u = i[2] || "0", c = i[3], m, l = new o(`${f === "-" ? "-" : ""}${u}.${c}`);
33
33
  if (r != null) {
34
- m = m.round(r, t ?? a.roundHalfUp);
35
- const d = b.exec(m.toString());
36
- u = d[2], c = d[3], l = r;
34
+ l = l.round(r, t ?? s.roundHalfUp);
35
+ const N = w.exec(l.toString());
36
+ u = N[2], c = N[3], m = r;
37
37
  } else
38
- l = c.length;
39
- const w = m.eq(0) ? "" : f;
40
- return u = u.replace(/(\d)(?=(\d{3})+$)/g, "$1,"), c = `${c}${"0".repeat(l)}`.substring(0, l), c === "" ? `${w}${u}` : `${w}${u}.${c}`;
38
+ m = c.length;
39
+ const b = l.eq(0) ? "" : f;
40
+ return u = u.replace(/(\d)(?=(\d{3})+$)/g, "$1,"), c = `${c}${"0".repeat(m)}`.substring(0, m), c === "" ? `${b}${u}` : `${b}${u}.${c}`;
41
41
  }
42
- function N(n) {
42
+ function g(n) {
43
43
  return n.replace(/,/g, "");
44
44
  }
45
45
  function _(n, r) {
@@ -49,7 +49,7 @@ function T(n, r, t) {
49
49
  let e = new o(n);
50
50
  for (const i of r)
51
51
  e = e[i.operator](i.value);
52
- return t?.scale != null && (e = e.round(t.scale, t.roundingMode ?? a.roundHalfUp)), e.toNumber();
52
+ return t?.scale != null && (e = e.round(t.scale, t.roundingMode ?? s.roundHalfUp)), e.toNumber();
53
53
  }
54
54
  function U(n, ...r) {
55
55
  let t = new o(n);
@@ -75,33 +75,33 @@ function k(n, ...r) {
75
75
  t = t.div(e);
76
76
  return t.toNumber();
77
77
  }
78
- function s(n, r) {
78
+ function a(n, r) {
79
79
  return new o(n).compareTo(r);
80
80
  }
81
+ function y(n, r) {
82
+ return a(n, r) === 0;
83
+ }
81
84
  function E(n, r) {
82
- return s(n, r) === 0;
85
+ return a(n, r) < 0;
83
86
  }
84
87
  function F(n, r) {
85
- return s(n, r) < 0;
88
+ return a(n, r) <= 0;
86
89
  }
87
90
  function O(n, r) {
88
- return s(n, r) <= 0;
91
+ return 0 < a(n, r);
89
92
  }
90
93
  function V(n, r) {
91
- return 0 < s(n, r);
92
- }
93
- function x(n, r) {
94
- return 0 <= s(n, r);
94
+ return 0 <= a(n, r);
95
95
  }
96
- function y(n, r, t) {
96
+ function x(n, r, t) {
97
97
  if (n == null)
98
98
  return null;
99
- const e = t ?? a.roundHalfUp;
99
+ const e = t ?? s.roundHalfUp;
100
100
  switch (typeof n) {
101
101
  case "number":
102
102
  return Number.isFinite(n) ? new o(n).round(r, e).toNumber() : n;
103
103
  case "string": {
104
- if (g(n))
104
+ if (d(n))
105
105
  return null;
106
106
  try {
107
107
  return new o(n).round(r, e).toNumber();
@@ -116,16 +116,28 @@ function y(n, r, t) {
116
116
  function G(n, r) {
117
117
  if (n == null)
118
118
  return "";
119
- if (g(n) || typeof n == "number" && !Number.isFinite(n))
119
+ if (d(n) || typeof n == "number" && !Number.isFinite(n))
120
120
  return String(n);
121
121
  try {
122
122
  const t = new o(n);
123
- return r?.scale != null ? t.toFixed(r.scale, r.roundingMode ?? a.roundHalfUp) : t.toString();
123
+ return r?.scale != null ? t.toFixed(r.scale, r.roundingMode ?? s.roundHalfUp) : t.toString();
124
124
  } catch {
125
125
  return String(n);
126
126
  }
127
127
  }
128
- function H(n, r) {
128
+ function H(n) {
129
+ if (n == null || d(n))
130
+ return null;
131
+ switch (typeof n) {
132
+ case "number":
133
+ return n;
134
+ case "bigint":
135
+ return Number(n);
136
+ default:
137
+ return Number(g(n).trim());
138
+ }
139
+ }
140
+ function I(n, r) {
129
141
  if (n == null || n === "")
130
142
  return [String(n), ""];
131
143
  let t;
@@ -137,7 +149,7 @@ function H(n, r) {
137
149
  break;
138
150
  case "string":
139
151
  try {
140
- t = new o(N(n));
152
+ t = new o(g(n));
141
153
  } catch {
142
154
  return [n, ""];
143
155
  }
@@ -149,50 +161,52 @@ function H(n, r) {
149
161
  let i = 0;
150
162
  for (; t.gte(1024) && i < e.length - 1; )
151
163
  t = t.div(1024), i++;
152
- const f = r?.scale ?? 2, u = r?.roundingMode ?? a.roundHalfUp;
164
+ const f = r?.scale ?? 2, u = r?.roundingMode ?? s.roundHalfUp;
153
165
  return r?.format ? [p(t.toString(), f, u), e[i]] : [t.round(f, u).toString(), e[i]];
154
166
  }
155
- const C = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
167
+ const j = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
156
168
  __proto__: null,
157
- ROUNDING_MODE: a,
169
+ ROUNDING_MODE: s,
158
170
  add: U,
159
171
  calc: T,
160
- compareTo: s,
172
+ compareTo: a,
161
173
  div: k,
162
- eq: E,
163
- formatBytes: H,
174
+ eq: y,
175
+ formatBytes: I,
164
176
  formatComma: p,
165
177
  formatCompact: _,
166
- gt: V,
167
- gte: x,
178
+ gt: O,
179
+ gte: V,
168
180
  isLongValue: M,
169
- lt: F,
170
- lte: O,
171
- removeComma: N,
172
- round: y,
181
+ lt: E,
182
+ lte: F,
183
+ removeComma: g,
184
+ round: x,
173
185
  sub: B,
174
186
  times: R,
187
+ toNumber: H,
175
188
  toString: G
176
189
  }, Symbol.toStringTag, { value: "Module" }));
177
190
  export {
178
191
  U as a,
179
- s as b,
192
+ a as b,
180
193
  T as c,
181
194
  k as d,
182
- E as e,
183
- H as f,
195
+ y as e,
196
+ I as f,
184
197
  p as g,
185
198
  _ as h,
186
- V as i,
187
- x as j,
199
+ O as i,
200
+ V as j,
188
201
  M as k,
189
- F as l,
190
- O as m,
191
- C as n,
192
- y as o,
193
- G as p,
194
- N as r,
202
+ E as l,
203
+ F as m,
204
+ j as n,
205
+ x as o,
206
+ H as p,
207
+ G as q,
208
+ g as r,
195
209
  B as s,
196
210
  R as t
197
211
  };
198
- //# sourceMappingURL=number-util-BA4KVFyF.js.map
212
+ //# sourceMappingURL=number-util-DXjPN_-P.js.map