@digitalwalletcorp/utils 0.1.0 → 0.2.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.
@@ -0,0 +1,223 @@
1
+ /**
2
+ * 数値として扱える値の型
3
+ */
4
+ export type NumberSource = number | string | bigint;
5
+ /**
6
+ * 丸めモード
7
+ * 公開APIに内部の算術ライブラリ(big.js)の型を出さないよう、値を直接定義する(big.jsの丸めモードと同じ値)
8
+ */
9
+ export declare const ROUNDING_MODE: {
10
+ /**
11
+ * Rounds towards zero.
12
+ * I.e. truncate, no rounding.
13
+ */
14
+ readonly roundDown: 0;
15
+ /**
16
+ * Rounds towards nearest neighbour.
17
+ * If equidistant, rounds away from zero.
18
+ */
19
+ readonly roundHalfUp: 1;
20
+ /**
21
+ * Rounds towards nearest neighbour.
22
+ * If equidistant, rounds towards even neighbour.
23
+ */
24
+ readonly roundHalfEven: 2;
25
+ /**
26
+ * Rounds away from zero.
27
+ */
28
+ readonly roundUp: 3;
29
+ };
30
+ export type RoundingMode = typeof ROUNDING_MODE[keyof typeof ROUNDING_MODE];
31
+ /**
32
+ * long(64bit)の範囲(-9223372036854775808〜9223372036854775807)の値か判定する
33
+ * Javascriptのnumberの範囲は(-9007199254740991〜9007199254740991)である
34
+ *
35
+ * @param {string | bigint} value
36
+ * @param {*} [options]
37
+ * ├ minValue number 最小値を指定する場合(0を指定すると負数の場合falseを返す)
38
+ * 不正な値を指定した場合は無視される(最小値を-9223372036854775808とみなす)
39
+ * @returns {boolean}
40
+ * @see Number.MAX_SAFE_INTEGER
41
+ * @see Number.MIN_SAFE_INTEGER
42
+ */
43
+ export declare function isLongValue(value: string | bigint, options?: {
44
+ minValue?: number;
45
+ }): boolean;
46
+ /**
47
+ * 3桁ごとカンマ区切りした文字列を返す
48
+ * 指数表記の値(1e21など)は通常の表記に展開してから区切る
49
+ * 数値として解釈できない文字列はそのまま返し、NaN/Infinityは "NaN"/"Infinity"/"-Infinity" を返す
50
+ *
51
+ * @param {NumberSource | null | undefined} value 値
52
+ * @param {number} [scale] 小数点桁数(補助桁数)
53
+ * @param {RoundingMode} [roundingMode] 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)
54
+ * @returns {string}
55
+ */
56
+ export declare function formatComma(value: NumberSource | null | undefined, scale?: number, roundingMode?: RoundingMode): string;
57
+ /**
58
+ * カンマを除去する
59
+ *
60
+ * @param {string} value 入力値
61
+ * @returns {string} カンマを取り除いた文字列
62
+ */
63
+ export declare function removeComma(value: string): string;
64
+ /**
65
+ * 数値を表示ロケールの短縮表記にする。
66
+ * en は 1.2K/3.4M/5.6B、ja は 12万/34億 のように単位が切り替わる。
67
+ *
68
+ * @param {number} value 値
69
+ * @param {string} locale 表示ロケール(例 'ja' / 'en')
70
+ * @returns {string} 短縮表記の文字列
71
+ */
72
+ export declare function formatCompact(value: number, locale: string): string;
73
+ export type Operator = 'add' | 'sub' | 'times' | 'div';
74
+ export interface OperationItem {
75
+ operator: Operator;
76
+ value: NumberSource | null | undefined;
77
+ }
78
+ /**
79
+ * 複数の演算をまとめて計算する
80
+ * 計算途中は精度を保持し、最後にnumberへ変換する
81
+ * この関数では四則演算の優先順位はなく、与えられた配列の順で計算を行う
82
+ * * 優先順位やカッコの概念がある場合は事前に計算したうえでこの関数を利用する
83
+ *
84
+ * 例)
85
+ * calc(
86
+ * '123',
87
+ * [
88
+ * { operator: 'add', value: '123' },
89
+ * { operator: 'sub', value: 100 },
90
+ * { operator: 'times', value: 2 },
91
+ * { operator: 'div', value: 3 }
92
+ * ]
93
+ * )
94
+ * 123 + 123 = 246
95
+ * 246 - 100 = 146
96
+ * 146 * 2 = 292
97
+ * 292 / 3 = 97.33333333
98
+ *
99
+ * 数学的な感覚だと 123 + 123 - ((100 * 2) / 3) = 229.33333333 となるが、この関数はそのような計算を行わない
100
+ * null等の扱いは add / sub / times / div と同じ
101
+ * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる
102
+ *
103
+ * @param {NumberSource | null | undefined} initialValue
104
+ * @param {OperationItem[]} operationItems
105
+ * ├ operator: Operator
106
+ * ├ value: NumberSource | null | undefined
107
+ * @param {*} [options]
108
+ * ├ scale 計算結果を丸める小数桁数。指定しない場合は丸めない
109
+ * ├ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)
110
+ * @returns {number}
111
+ */
112
+ export declare function calc(initialValue: NumberSource | null | undefined, operationItems: OperationItem[], options?: {
113
+ scale?: number;
114
+ roundingMode?: RoundingMode;
115
+ }): number;
116
+ /**
117
+ * 加算を行う
118
+ * null/undefined/空文字/NaNは0と見做されるため、演算結果に影響しない
119
+ * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる
120
+ *
121
+ * @param {NumberSource | null | undefined} value1
122
+ * @param {(NumberSource | null | undefined)[]} value2
123
+ * @returns {number}
124
+ */
125
+ export declare function add(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number;
126
+ /**
127
+ * 減算を行う
128
+ * null/undefined/空文字/NaNは0と見做されるため、演算結果に影響しない
129
+ * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる
130
+ *
131
+ * @param {NumberSource | null | undefined} value1
132
+ * @param {(NumberSource | null | undefined)[]} value2
133
+ * @returns {number}
134
+ */
135
+ export declare function sub(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number;
136
+ /**
137
+ * 乗算を行う
138
+ * null/undefined/空文字/NaNは0と見做されるため、演算結果は0になる
139
+ * 元の値を保持したい場合は times(price, discount ?? 1) のようにフォールバック値を指定する
140
+ * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる
141
+ *
142
+ * @param {NumberSource | null | undefined} value1
143
+ * @param {(NumberSource | null | undefined)[]} value2
144
+ * @returns {number}
145
+ */
146
+ export declare function times(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number;
147
+ /**
148
+ * 除算を行う
149
+ * 割る値のnull/undefined/空文字/NaNは1と見做されるため、演算結果に影響しない
150
+ * 割る値に0を指定した場合はゼロ除算エラーになる
151
+ * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる
152
+ *
153
+ * @param {NumberSource | null | undefined} value1
154
+ * @param {(NumberSource | null | undefined)[]} value2
155
+ * @returns {number}
156
+ */
157
+ export declare function div(value1: NumberSource | null | undefined, ...value2: (NumberSource | null | undefined)[]): number;
158
+ /**
159
+ * 数値を指定した桁で丸める
160
+ * null/undefined/空文字はnull、数値として解釈できない文字列はNaNを返す
161
+ * NaN/Infinityはそのまま返す
162
+ * 戻り値はnumberのため、Number.MAX_SAFE_INTEGERを超える結果は精度が落ちる
163
+ *
164
+ * @param {NumberSource | null | undefined} value
165
+ * @param {number} scale
166
+ * @param {RoundingMode} roundingMode
167
+ * 0 切り捨て
168
+ * 1 四捨五入
169
+ * 2 ISO丸め
170
+ * 3 切り上げ
171
+ * @returns {number | null}
172
+ * @see ROUNDING_MODE
173
+ */
174
+ export declare function round(value: NumberSource | null | undefined, scale: number, roundingMode: RoundingMode): number | null;
175
+ /**
176
+ * 数値文字列に変換する
177
+ * 指数表記にはならず、通常の表記で返す
178
+ * 数値として解釈できない値はString(value)を返す
179
+ *
180
+ * @param {NumberSource | null | undefined} value
181
+ * @param {*} [options]
182
+ * ├ scale 小数桁数。指定しない場合は丸めずにすべての桁を返す
183
+ * ├ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)
184
+ * @returns {string}
185
+ * @see ROUNDING_MODE
186
+ */
187
+ export declare function toString(value: NumberSource | null | undefined, options?: {
188
+ scale?: number;
189
+ roundingMode?: RoundingMode;
190
+ }): string;
191
+ /**
192
+ * 数値型をビットの配列に変換する
193
+ * 例)
194
+ * 7 => [1, 2, 4]
195
+ *
196
+ * 第二引数に候補値の配列を渡した場合、対象リストの中から該当するもののうち、値の大きなものから抽出して配列で返す
197
+ * 例)
198
+ * 86, [2, 4, 80] => [2, 4, 80]
199
+ * この例で第二引数を渡さない場合は 86 => [2, 4, 16, 64] になる
200
+ * 候補値はそのビットがすべて立っている場合のみ該当とする(16, [80] => [])
201
+ * いずれの候補値にも分類できないビットは無視される
202
+ * 小数は切り捨て、0以下は空配列を返す
203
+ *
204
+ * @param {number} a
205
+ * @param {(number | string)[]} [candidates]
206
+ * @returns {number[]}
207
+ */
208
+ export declare function bitArray(a: number, candidates?: (number | string)[]): number[];
209
+ /**
210
+ * 渡されたバイト数値を桁数に応じてMB,GBなどに単位を変更する
211
+ *
212
+ * @param {NumberSource} bytes
213
+ * @param {*} [options]
214
+ * ┝ scale 小数以下桁数 デフォルト:2
215
+ * ┝ roundingMode 丸めモード デフォルトはROUNDING_MODE.roundHalfUp(四捨五入・half-away-from-zero)
216
+ * ┝ format フォーマットするか。trueを指定した場合、3桁カンマ区切り+小数末尾0の桁揃え
217
+ * @returns {[string, string]} 精度以下を丸めた数値(文字列)と単位をタプルで返す
218
+ */
219
+ export declare function formatBytes(bytes: NumberSource, options?: {
220
+ scale?: number;
221
+ roundingMode?: RoundingMode;
222
+ format?: boolean;
223
+ }): [string, string];