@yelon/util 12.0.13 → 12.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (231) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +2 -2
  3. package/array/array-type.service.d.ts +68 -68
  4. package/array/array.service.d.ts +75 -75
  5. package/array/index.d.ts +2 -2
  6. package/array/yelon-util-array.d.ts +4 -4
  7. package/array/yelon-util-array.metadata.json +1 -1
  8. package/browser/browser.d.ts +4 -4
  9. package/browser/cookie.service.d.ts +64 -64
  10. package/browser/copy.d.ts +6 -6
  11. package/browser/index.d.ts +5 -5
  12. package/browser/is-empty.d.ts +6 -6
  13. package/browser/scroll.service.d.ts +34 -34
  14. package/browser/style.d.ts +21 -21
  15. package/bundles/browser.umd.js +275 -275
  16. package/bundles/yelon-util-array.umd.js +606 -606
  17. package/bundles/yelon-util-array.umd.js.map +1 -1
  18. package/bundles/yelon-util-config.umd.js +366 -366
  19. package/bundles/yelon-util-date-time.umd.js +216 -216
  20. package/bundles/yelon-util-decorator.umd.js +437 -437
  21. package/bundles/yelon-util-form.umd.js +116 -116
  22. package/bundles/yelon-util-format.umd.js +726 -726
  23. package/bundles/yelon-util-math.umd.js +83 -83
  24. package/bundles/yelon-util-other.umd.js +652 -656
  25. package/bundles/yelon-util-other.umd.js.map +1 -1
  26. package/bundles/yelon-util-pipes-currency.umd.js +83 -83
  27. package/bundles/yelon-util-pipes-filter.umd.js +353 -353
  28. package/bundles/yelon-util-pipes-format.umd.js +47 -47
  29. package/bundles/yelon-util-pipes.umd.js +7 -7
  30. package/bundles/yelon-util-token.umd.js +30 -30
  31. package/bundles/yelon-util.umd.js +7 -7
  32. package/config/abc/date-picker.type.d.ts +52 -52
  33. package/config/abc/error-collect.type.d.ts +10 -10
  34. package/config/abc/image.type.d.ts +15 -15
  35. package/config/abc/index.d.ts +16 -16
  36. package/config/abc/loading.type.d.ts +31 -31
  37. package/config/abc/lodop.type.d.ts +33 -33
  38. package/config/abc/media.type.d.ts +11 -11
  39. package/config/abc/onboarding.type.d.ts +4 -4
  40. package/config/abc/page-header.type.d.ts +39 -39
  41. package/config/abc/pdf.type.d.ts +35 -35
  42. package/config/abc/qr.type.d.ts +25 -25
  43. package/config/abc/se.type.d.ts +32 -32
  44. package/config/abc/sg.type.d.ts +10 -10
  45. package/config/abc/st.type.d.ts +427 -431
  46. package/config/abc/sv.type.d.ts +14 -14
  47. package/config/abc/xlsx.type.d.ts +12 -12
  48. package/config/abc/zip.type.d.ts +10 -10
  49. package/config/acl/acl.type.d.ts +32 -32
  50. package/config/auth/auth.type.d.ts +55 -55
  51. package/config/bis/bis.type.d.ts +7 -7
  52. package/config/cache/cache.type.d.ts +40 -40
  53. package/config/chart/chart.type.d.ts +33 -33
  54. package/config/config.service.d.ts +10 -10
  55. package/config/config.types.d.ts +49 -49
  56. package/config/index.d.ts +14 -14
  57. package/config/mock/mock.type.d.ts +18 -18
  58. package/config/sf/sf.type.d.ts +127 -127
  59. package/config/stomp/stomp.type.d.ts +2 -2
  60. package/config/theme/http.type.d.ts +14 -14
  61. package/config/theme/i18n.type.d.ts +8 -8
  62. package/config/theme/index.d.ts +3 -3
  63. package/config/theme/responsive.type.d.ts +12 -12
  64. package/config/util/array.type.d.ts +22 -22
  65. package/config/util/currency.type.d.ts +39 -39
  66. package/config/yelon-util-config.d.ts +4 -4
  67. package/date-time/index.d.ts +2 -2
  68. package/date-time/picker.d.ts +68 -68
  69. package/date-time/time.d.ts +26 -26
  70. package/date-time/yelon-util-date-time.d.ts +4 -4
  71. package/decorator/convert.d.ts +24 -24
  72. package/decorator/index.d.ts +2 -2
  73. package/decorator/yelon-util-decorator.d.ts +4 -4
  74. package/decorator/zone-outside.d.ts +35 -35
  75. package/esm2015/array/array-type.service.js +1 -1
  76. package/esm2015/array/array.service.js +250 -250
  77. package/esm2015/array/index.js +2 -2
  78. package/esm2015/array/yelon-util-array.js +4 -4
  79. package/esm2015/browser/browser.js +4 -4
  80. package/esm2015/browser/cookie.service.js +103 -103
  81. package/esm2015/browser/copy.js +26 -26
  82. package/esm2015/browser/index.js +5 -5
  83. package/esm2015/browser/is-empty.js +18 -18
  84. package/esm2015/browser/scroll.service.js +88 -88
  85. package/esm2015/browser/style.js +37 -37
  86. package/esm2015/config/abc/date-picker.type.js +1 -1
  87. package/esm2015/config/abc/error-collect.type.js +1 -1
  88. package/esm2015/config/abc/image.type.js +1 -1
  89. package/esm2015/config/abc/index.js +16 -16
  90. package/esm2015/config/abc/loading.type.js +1 -1
  91. package/esm2015/config/abc/lodop.type.js +1 -1
  92. package/esm2015/config/abc/media.type.js +1 -1
  93. package/esm2015/config/abc/onboarding.type.js +1 -1
  94. package/esm2015/config/abc/page-header.type.js +1 -1
  95. package/esm2015/config/abc/pdf.type.js +1 -1
  96. package/esm2015/config/abc/qr.type.js +1 -1
  97. package/esm2015/config/abc/se.type.js +1 -1
  98. package/esm2015/config/abc/sg.type.js +1 -1
  99. package/esm2015/config/abc/st.type.js +2 -2
  100. package/esm2015/config/abc/sv.type.js +2 -2
  101. package/esm2015/config/abc/xlsx.type.js +1 -1
  102. package/esm2015/config/abc/zip.type.js +1 -1
  103. package/esm2015/config/acl/acl.type.js +1 -1
  104. package/esm2015/config/auth/auth.type.js +1 -1
  105. package/esm2015/config/bis/bis.type.js +1 -1
  106. package/esm2015/config/cache/cache.type.js +1 -1
  107. package/esm2015/config/chart/chart.type.js +1 -1
  108. package/esm2015/config/config.service.js +33 -33
  109. package/esm2015/config/config.types.js +8 -8
  110. package/esm2015/config/index.js +14 -14
  111. package/esm2015/config/mock/mock.type.js +1 -1
  112. package/esm2015/config/sf/sf.type.js +1 -1
  113. package/esm2015/config/stomp/stomp.type.js +1 -1
  114. package/esm2015/config/theme/http.type.js +1 -1
  115. package/esm2015/config/theme/i18n.type.js +1 -1
  116. package/esm2015/config/theme/index.js +3 -3
  117. package/esm2015/config/theme/responsive.type.js +1 -1
  118. package/esm2015/config/util/array.type.js +1 -1
  119. package/esm2015/config/util/currency.type.js +1 -1
  120. package/esm2015/config/yelon-util-config.js +4 -4
  121. package/esm2015/date-time/index.js +2 -2
  122. package/esm2015/date-time/picker.js +115 -115
  123. package/esm2015/date-time/time.js +83 -83
  124. package/esm2015/date-time/yelon-util-date-time.js +4 -4
  125. package/esm2015/decorator/convert.js +55 -55
  126. package/esm2015/decorator/index.js +2 -2
  127. package/esm2015/decorator/yelon-util-decorator.js +4 -4
  128. package/esm2015/decorator/zone-outside.js +54 -54
  129. package/esm2015/form/index.js +2 -2
  130. package/esm2015/form/match-control.js +29 -29
  131. package/esm2015/form/validators.js +80 -80
  132. package/esm2015/form/yelon-util-form.js +4 -4
  133. package/esm2015/format/currency.service.js +224 -224
  134. package/esm2015/format/currency.types.js +7 -7
  135. package/esm2015/format/index.js +4 -4
  136. package/esm2015/format/string.js +75 -75
  137. package/esm2015/format/validate.js +93 -93
  138. package/esm2015/format/yelon-util-format.js +4 -4
  139. package/esm2015/index.js +11 -11
  140. package/esm2015/math/in-range.js +24 -24
  141. package/esm2015/math/index.js +2 -2
  142. package/esm2015/math/round.js +52 -52
  143. package/esm2015/math/yelon-util-math.js +4 -4
  144. package/esm2015/other/assert.js +66 -66
  145. package/esm2015/other/deep.js +76 -76
  146. package/esm2015/other/index.js +4 -4
  147. package/esm2015/other/lazy.service.js +118 -118
  148. package/esm2015/other/logger.js +33 -36
  149. package/esm2015/other/yelon-util-other.js +4 -4
  150. package/esm2015/pipes/currency/cny.pipe.js +21 -21
  151. package/esm2015/pipes/currency/index.js +3 -3
  152. package/esm2015/pipes/currency/mega.pipe.js +25 -25
  153. package/esm2015/pipes/currency/module.js +13 -13
  154. package/esm2015/pipes/currency/price.pipe.js +25 -25
  155. package/esm2015/pipes/currency/yelon-util-pipes-currency.js +5 -5
  156. package/esm2015/pipes/filter/filter.pipe.js +14 -14
  157. package/esm2015/pipes/filter/index.js +2 -2
  158. package/esm2015/pipes/filter/module.js +11 -11
  159. package/esm2015/pipes/filter/yelon-util-pipes-filter.js +4 -4
  160. package/esm2015/pipes/format/index.js +2 -2
  161. package/esm2015/pipes/format/mask.pipe.js +29 -29
  162. package/esm2015/pipes/format/module.js +11 -11
  163. package/esm2015/pipes/format/yelon-util-pipes-format.js +4 -4
  164. package/esm2015/pipes/index.js +3 -3
  165. package/esm2015/pipes/yelon-util-pipes.js +4 -4
  166. package/esm2015/token/index.js +2 -2
  167. package/esm2015/token/page-visibility.js +15 -15
  168. package/esm2015/token/window.js +16 -16
  169. package/esm2015/token/yelon-util-token.js +4 -4
  170. package/esm2015/yelon-util.js +4 -4
  171. package/fesm2015/browser.js +257 -257
  172. package/fesm2015/yelon-util-array.js +246 -246
  173. package/fesm2015/yelon-util-array.js.map +1 -1
  174. package/fesm2015/yelon-util-config.js +36 -36
  175. package/fesm2015/yelon-util-date-time.js +196 -196
  176. package/fesm2015/yelon-util-decorator.js +107 -107
  177. package/fesm2015/yelon-util-form.js +108 -108
  178. package/fesm2015/yelon-util-format.js +390 -390
  179. package/fesm2015/yelon-util-math.js +75 -75
  180. package/fesm2015/yelon-util-other.js +281 -284
  181. package/fesm2015/yelon-util-other.js.map +1 -1
  182. package/fesm2015/yelon-util-pipes-currency.js +72 -72
  183. package/fesm2015/yelon-util-pipes-filter.js +22 -22
  184. package/fesm2015/yelon-util-pipes-format.js +36 -36
  185. package/fesm2015/yelon-util-pipes.js +2 -2
  186. package/fesm2015/yelon-util-token.js +25 -25
  187. package/fesm2015/yelon-util.js +2 -2
  188. package/form/index.d.ts +2 -2
  189. package/form/match-control.d.ts +15 -15
  190. package/form/validators.d.ts +62 -62
  191. package/form/yelon-util-form.d.ts +4 -4
  192. package/format/currency.service.d.ts +34 -34
  193. package/format/currency.types.d.ts +77 -77
  194. package/format/index.d.ts +4 -4
  195. package/format/string.d.ts +44 -44
  196. package/format/validate.d.ts +72 -72
  197. package/format/yelon-util-format.d.ts +4 -4
  198. package/index.d.ts +11 -11
  199. package/math/in-range.d.ts +14 -14
  200. package/math/index.d.ts +2 -2
  201. package/math/round.d.ts +33 -33
  202. package/math/yelon-util-math.d.ts +4 -4
  203. package/other/assert.d.ts +36 -36
  204. package/other/deep.d.ts +33 -33
  205. package/other/index.d.ts +4 -4
  206. package/other/lazy.service.d.ts +22 -22
  207. package/other/logger.d.ts +5 -6
  208. package/other/yelon-util-other.d.ts +4 -4
  209. package/other/yelon-util-other.metadata.json +1 -1
  210. package/package.json +1 -1
  211. package/pipes/currency/cny.pipe.d.ts +12 -12
  212. package/pipes/currency/index.d.ts +3 -3
  213. package/pipes/currency/mega.pipe.d.ts +13 -13
  214. package/pipes/currency/module.d.ts +2 -2
  215. package/pipes/currency/price.pipe.d.ts +16 -16
  216. package/pipes/currency/yelon-util-pipes-currency.d.ts +5 -5
  217. package/pipes/filter/filter.pipe.d.ts +10 -10
  218. package/pipes/filter/index.d.ts +2 -2
  219. package/pipes/filter/module.d.ts +2 -2
  220. package/pipes/filter/yelon-util-pipes-filter.d.ts +4 -4
  221. package/pipes/format/index.d.ts +2 -2
  222. package/pipes/format/mask.pipe.d.ts +24 -24
  223. package/pipes/format/module.d.ts +2 -2
  224. package/pipes/format/yelon-util-pipes-format.d.ts +4 -4
  225. package/pipes/index.d.ts +3 -3
  226. package/pipes/yelon-util-pipes.d.ts +4 -4
  227. package/token/index.d.ts +2 -2
  228. package/token/page-visibility.d.ts +8 -8
  229. package/token/window.d.ts +7 -7
  230. package/token/yelon-util-token.d.ts +4 -4
  231. package/yelon-util.d.ts +4 -4
@@ -1,225 +1,225 @@
1
- import { CurrencyPipe, formatNumber } from '@angular/common';
2
- import { DEFAULT_CURRENCY_CODE, Inject, Injectable, LOCALE_ID } from '@angular/core';
3
- import { YunzaiConfigService } from '@yelon/util/config';
4
- import { CurrencyMega_Powers } from './currency.types';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@yelon/util/config";
7
- export class CurrencyService {
8
- constructor(cog, locale, _defaultCurrencyCode = 'USD') {
9
- this.locale = locale;
10
- this.currencyPipe = new CurrencyPipe(locale, _defaultCurrencyCode);
11
- this.c = cog.merge('utilCurrency', {
12
- startingUnit: 'yuan',
13
- megaUnit: { Q: '京', T: '兆', B: '亿', M: '万', K: '千' },
14
- precision: 2,
15
- ignoreZeroPrecision: true
16
- });
17
- }
18
- /**
19
- * Format a number with commas as thousands separators
20
- *
21
- * 格式化货币,用逗号将数字格式化为千位分隔符
22
- * ```ts
23
- * 10000 => `10,000`
24
- * 10000.567 => `10,000.57`
25
- * ```
26
- */
27
- format(value, options) {
28
- options = Object.assign({ startingUnit: this.c.startingUnit, precision: this.c.precision, ignoreZeroPrecision: this.c.ignoreZeroPrecision, ngCurrency: this.c.ngCurrency }, options);
29
- let truthValue = Number(value);
30
- if (value == null || isNaN(truthValue)) {
31
- return '';
32
- }
33
- if (options.startingUnit === 'cent') {
34
- truthValue = truthValue / 100;
35
- }
36
- if (options.ngCurrency != null) {
37
- const cur = options.ngCurrency;
38
- return this.currencyPipe.transform(truthValue, cur.currencyCode, cur.display, cur.digitsInfo, cur.locale || this.locale);
39
- }
40
- const res = formatNumber(truthValue, this.locale, `.${options.ignoreZeroPrecision ? 1 : options.precision}-${options.precision}`);
41
- return options.ignoreZeroPrecision ? res.replace(/(?:\.[0]+)$/g, '') : res;
42
- }
43
- /**
44
- * Large number format filter
45
- *
46
- * 大数据格式化
47
- * ```ts
48
- * 1000 => { value: '1', unit: 'K', unitI18n: '千' }
49
- * 12456 => { value: '12.46', unit: 'K', unitI18n: '千' }
50
- * ```
51
- */
52
- mega(value, options) {
53
- options = Object.assign({ precision: this.c.precision, unitI18n: this.c.megaUnit, startingUnit: this.c.startingUnit }, options);
54
- let num = Number(value);
55
- const res = { raw: value, value: '', unit: '', unitI18n: '' };
56
- if (isNaN(num) || num === 0) {
57
- res.value = value.toString();
58
- return res;
59
- }
60
- if (options.startingUnit === 'cent') {
61
- num = num / 100;
62
- }
63
- let abs = Math.abs(+num);
64
- const rounder = Math.pow(10, options.precision);
65
- const isNegative = num < 0;
66
- for (const p of CurrencyMega_Powers) {
67
- let reduced = abs / p.value;
68
- reduced = Math.round(reduced * rounder) / rounder;
69
- if (reduced >= 1) {
70
- abs = reduced;
71
- res.unit = p.unit;
72
- break;
73
- }
74
- }
75
- res.value = (isNegative ? '-' : '') + abs;
76
- res.unitI18n = options.unitI18n[res.unit];
77
- return res;
78
- }
79
- /**
80
- * Converted into RMB notation.
81
- *
82
- * 转化成人民币表示法
83
- */
84
- cny(value, options) {
85
- options = Object.assign({ inWords: true, minusSymbol: '负', startingUnit: this.c.startingUnit }, options);
86
- value = Number(value);
87
- if (isNaN(value)) {
88
- return '';
89
- }
90
- if (options.startingUnit === 'cent') {
91
- value = value / 100;
92
- }
93
- value = value.toString();
94
- let integer;
95
- let decimal;
96
- [integer, decimal] = value.split('.');
97
- let symbol = '';
98
- if (integer.startsWith('-')) {
99
- symbol = options.minusSymbol;
100
- integer = integer.substr(1);
101
- }
102
- if (/^-?\d+$/.test(value)) {
103
- decimal = null;
104
- }
105
- integer = (+integer).toString();
106
- const inWords = options.inWords;
107
- const unit = {
108
- num: inWords
109
- ? ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '点']
110
- : ['', '一', '二', '三', '四', '五', '六', '七', '八', '九', '点'],
111
- radice: inWords
112
- ? [
113
- '',
114
- '拾',
115
- '佰',
116
- '仟',
117
- '万',
118
- '拾',
119
- '佰',
120
- '仟',
121
- '亿',
122
- '拾',
123
- '佰',
124
- '仟',
125
- '万亿',
126
- '拾',
127
- '佰',
128
- '仟',
129
- '兆',
130
- '拾',
131
- '佰',
132
- '仟'
133
- ]
134
- : [
135
- '',
136
- '十',
137
- '百',
138
- '千',
139
- '万',
140
- '十',
141
- '百',
142
- '千',
143
- '亿',
144
- '十',
145
- '百',
146
- '千',
147
- '万亿',
148
- '十',
149
- '百',
150
- '千',
151
- '兆',
152
- '十',
153
- '百',
154
- '千'
155
- ],
156
- dec: ['角', '分', '厘', '毫']
157
- };
158
- if (inWords) {
159
- value = (+value).toFixed(5).toString();
160
- }
161
- let integerRes = '';
162
- const integerCount = integer.length;
163
- if (integer === '0' || integerCount === 0) {
164
- integerRes = '零';
165
- }
166
- else {
167
- let cnDesc = '';
168
- for (let i = 0; i < integerCount; i++) {
169
- const n = +integer[i];
170
- const j = integerCount - i - 1;
171
- const isZero = i > 1 && n !== 0 && integer[i - 1] === '0';
172
- const cnZero = isZero ? '零' : '';
173
- const isEmpptyUnit = (n === 0 && j % 4 !== 0) || integer.substr(i - 3, 4) === '0000';
174
- const descMark = cnDesc;
175
- let cnNum = unit.num[n];
176
- cnDesc = isEmpptyUnit ? '' : unit.radice[j];
177
- // 第一位是一十
178
- if (i === 0 && cnNum === '一' && cnDesc === '十')
179
- cnNum = '';
180
- const isChangeEr = n > 1 &&
181
- cnNum === '二' && // 去除首位
182
- ['', '十', '百'].indexOf(cnDesc) === -1 && // 不读两\两十\两百
183
- descMark !== '十'; // 不读十两
184
- if (isChangeEr)
185
- cnNum = '两';
186
- integerRes += cnZero + cnNum + cnDesc;
187
- }
188
- }
189
- // 小数部分拼接
190
- let decimalRes = '';
191
- const decimalCount = decimal ? decimal.toString().length : 0;
192
- if (decimal === null) {
193
- decimalRes = inWords ? '整' : '';
194
- }
195
- else if (decimal === '0') {
196
- decimalRes = '零';
197
- }
198
- else {
199
- for (let i = 0; i < decimalCount; i++) {
200
- if (inWords && i > unit.dec.length - 1)
201
- break;
202
- const n = decimal[i];
203
- const cnZero = n === '0' ? '零' : '';
204
- const cnNum = unit.num[+n];
205
- const cnDesc = inWords ? unit.dec[i] : '';
206
- decimalRes += cnZero + cnNum + cnDesc;
207
- }
208
- }
209
- const ret = symbol +
210
- (inWords
211
- ? integerRes + (decimalRes === '零' ? '元整' : `元${decimalRes}`)
212
- : integerRes + (decimalRes === '' ? '' : `点${decimalRes}`));
213
- return ret;
214
- }
215
- }
216
- CurrencyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CurrencyService_Factory() { return new CurrencyService(i0.ɵɵinject(i1.YunzaiConfigService), i0.ɵɵinject(i0.LOCALE_ID), i0.ɵɵinject(i0.DEFAULT_CURRENCY_CODE)); }, token: CurrencyService, providedIn: "root" });
217
- CurrencyService.decorators = [
218
- { type: Injectable, args: [{ providedIn: 'root' },] }
219
- ];
220
- CurrencyService.ctorParameters = () => [
221
- { type: YunzaiConfigService },
222
- { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },
223
- { type: String, decorators: [{ type: Inject, args: [DEFAULT_CURRENCY_CODE,] }] }
224
- ];
1
+ import { CurrencyPipe, formatNumber } from '@angular/common';
2
+ import { DEFAULT_CURRENCY_CODE, Inject, Injectable, LOCALE_ID } from '@angular/core';
3
+ import { YunzaiConfigService } from '@yelon/util/config';
4
+ import { CurrencyMega_Powers } from './currency.types';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@yelon/util/config";
7
+ export class CurrencyService {
8
+ constructor(cog, locale, _defaultCurrencyCode = 'USD') {
9
+ this.locale = locale;
10
+ this.currencyPipe = new CurrencyPipe(locale, _defaultCurrencyCode);
11
+ this.c = cog.merge('utilCurrency', {
12
+ startingUnit: 'yuan',
13
+ megaUnit: { Q: '京', T: '兆', B: '亿', M: '万', K: '千' },
14
+ precision: 2,
15
+ ignoreZeroPrecision: true
16
+ });
17
+ }
18
+ /**
19
+ * Format a number with commas as thousands separators
20
+ *
21
+ * 格式化货币,用逗号将数字格式化为千位分隔符
22
+ * ```ts
23
+ * 10000 => `10,000`
24
+ * 10000.567 => `10,000.57`
25
+ * ```
26
+ */
27
+ format(value, options) {
28
+ options = Object.assign({ startingUnit: this.c.startingUnit, precision: this.c.precision, ignoreZeroPrecision: this.c.ignoreZeroPrecision, ngCurrency: this.c.ngCurrency }, options);
29
+ let truthValue = Number(value);
30
+ if (value == null || isNaN(truthValue)) {
31
+ return '';
32
+ }
33
+ if (options.startingUnit === 'cent') {
34
+ truthValue = truthValue / 100;
35
+ }
36
+ if (options.ngCurrency != null) {
37
+ const cur = options.ngCurrency;
38
+ return this.currencyPipe.transform(truthValue, cur.currencyCode, cur.display, cur.digitsInfo, cur.locale || this.locale);
39
+ }
40
+ const res = formatNumber(truthValue, this.locale, `.${options.ignoreZeroPrecision ? 1 : options.precision}-${options.precision}`);
41
+ return options.ignoreZeroPrecision ? res.replace(/(?:\.[0]+)$/g, '') : res;
42
+ }
43
+ /**
44
+ * Large number format filter
45
+ *
46
+ * 大数据格式化
47
+ * ```ts
48
+ * 1000 => { value: '1', unit: 'K', unitI18n: '千' }
49
+ * 12456 => { value: '12.46', unit: 'K', unitI18n: '千' }
50
+ * ```
51
+ */
52
+ mega(value, options) {
53
+ options = Object.assign({ precision: this.c.precision, unitI18n: this.c.megaUnit, startingUnit: this.c.startingUnit }, options);
54
+ let num = Number(value);
55
+ const res = { raw: value, value: '', unit: '', unitI18n: '' };
56
+ if (isNaN(num) || num === 0) {
57
+ res.value = value.toString();
58
+ return res;
59
+ }
60
+ if (options.startingUnit === 'cent') {
61
+ num = num / 100;
62
+ }
63
+ let abs = Math.abs(+num);
64
+ const rounder = Math.pow(10, options.precision);
65
+ const isNegative = num < 0;
66
+ for (const p of CurrencyMega_Powers) {
67
+ let reduced = abs / p.value;
68
+ reduced = Math.round(reduced * rounder) / rounder;
69
+ if (reduced >= 1) {
70
+ abs = reduced;
71
+ res.unit = p.unit;
72
+ break;
73
+ }
74
+ }
75
+ res.value = (isNegative ? '-' : '') + abs;
76
+ res.unitI18n = options.unitI18n[res.unit];
77
+ return res;
78
+ }
79
+ /**
80
+ * Converted into RMB notation.
81
+ *
82
+ * 转化成人民币表示法
83
+ */
84
+ cny(value, options) {
85
+ options = Object.assign({ inWords: true, minusSymbol: '负', startingUnit: this.c.startingUnit }, options);
86
+ value = Number(value);
87
+ if (isNaN(value)) {
88
+ return '';
89
+ }
90
+ if (options.startingUnit === 'cent') {
91
+ value = value / 100;
92
+ }
93
+ value = value.toString();
94
+ let integer;
95
+ let decimal;
96
+ [integer, decimal] = value.split('.');
97
+ let symbol = '';
98
+ if (integer.startsWith('-')) {
99
+ symbol = options.minusSymbol;
100
+ integer = integer.substr(1);
101
+ }
102
+ if (/^-?\d+$/.test(value)) {
103
+ decimal = null;
104
+ }
105
+ integer = (+integer).toString();
106
+ const inWords = options.inWords;
107
+ const unit = {
108
+ num: inWords
109
+ ? ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '点']
110
+ : ['', '一', '二', '三', '四', '五', '六', '七', '八', '九', '点'],
111
+ radice: inWords
112
+ ? [
113
+ '',
114
+ '拾',
115
+ '佰',
116
+ '仟',
117
+ '万',
118
+ '拾',
119
+ '佰',
120
+ '仟',
121
+ '亿',
122
+ '拾',
123
+ '佰',
124
+ '仟',
125
+ '万亿',
126
+ '拾',
127
+ '佰',
128
+ '仟',
129
+ '兆',
130
+ '拾',
131
+ '佰',
132
+ '仟'
133
+ ]
134
+ : [
135
+ '',
136
+ '十',
137
+ '百',
138
+ '千',
139
+ '万',
140
+ '十',
141
+ '百',
142
+ '千',
143
+ '亿',
144
+ '十',
145
+ '百',
146
+ '千',
147
+ '万亿',
148
+ '十',
149
+ '百',
150
+ '千',
151
+ '兆',
152
+ '十',
153
+ '百',
154
+ '千'
155
+ ],
156
+ dec: ['角', '分', '厘', '毫']
157
+ };
158
+ if (inWords) {
159
+ value = (+value).toFixed(5).toString();
160
+ }
161
+ let integerRes = '';
162
+ const integerCount = integer.length;
163
+ if (integer === '0' || integerCount === 0) {
164
+ integerRes = '零';
165
+ }
166
+ else {
167
+ let cnDesc = '';
168
+ for (let i = 0; i < integerCount; i++) {
169
+ const n = +integer[i];
170
+ const j = integerCount - i - 1;
171
+ const isZero = i > 1 && n !== 0 && integer[i - 1] === '0';
172
+ const cnZero = isZero ? '零' : '';
173
+ const isEmpptyUnit = (n === 0 && j % 4 !== 0) || integer.substr(i - 3, 4) === '0000';
174
+ const descMark = cnDesc;
175
+ let cnNum = unit.num[n];
176
+ cnDesc = isEmpptyUnit ? '' : unit.radice[j];
177
+ // 第一位是一十
178
+ if (i === 0 && cnNum === '一' && cnDesc === '十')
179
+ cnNum = '';
180
+ const isChangeEr = n > 1 &&
181
+ cnNum === '二' && // 去除首位
182
+ ['', '十', '百'].indexOf(cnDesc) === -1 && // 不读两\两十\两百
183
+ descMark !== '十'; // 不读十两
184
+ if (isChangeEr)
185
+ cnNum = '两';
186
+ integerRes += cnZero + cnNum + cnDesc;
187
+ }
188
+ }
189
+ // 小数部分拼接
190
+ let decimalRes = '';
191
+ const decimalCount = decimal ? decimal.toString().length : 0;
192
+ if (decimal === null) {
193
+ decimalRes = inWords ? '整' : '';
194
+ }
195
+ else if (decimal === '0') {
196
+ decimalRes = '零';
197
+ }
198
+ else {
199
+ for (let i = 0; i < decimalCount; i++) {
200
+ if (inWords && i > unit.dec.length - 1)
201
+ break;
202
+ const n = decimal[i];
203
+ const cnZero = n === '0' ? '零' : '';
204
+ const cnNum = unit.num[+n];
205
+ const cnDesc = inWords ? unit.dec[i] : '';
206
+ decimalRes += cnZero + cnNum + cnDesc;
207
+ }
208
+ }
209
+ const ret = symbol +
210
+ (inWords
211
+ ? integerRes + (decimalRes === '零' ? '元整' : `元${decimalRes}`)
212
+ : integerRes + (decimalRes === '' ? '' : `点${decimalRes}`));
213
+ return ret;
214
+ }
215
+ }
216
+ CurrencyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CurrencyService_Factory() { return new CurrencyService(i0.ɵɵinject(i1.YunzaiConfigService), i0.ɵɵinject(i0.LOCALE_ID), i0.ɵɵinject(i0.DEFAULT_CURRENCY_CODE)); }, token: CurrencyService, providedIn: "root" });
217
+ CurrencyService.decorators = [
218
+ { type: Injectable, args: [{ providedIn: 'root' },] }
219
+ ];
220
+ CurrencyService.ctorParameters = () => [
221
+ { type: YunzaiConfigService },
222
+ { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },
223
+ { type: String, decorators: [{ type: Inject, args: [DEFAULT_CURRENCY_CODE,] }] }
224
+ ];
225
225
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWwvZm9ybWF0L2N1cnJlbmN5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJckYsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBRW5GLE9BQU8sRUFLTCxtQkFBbUIsRUFDcEIsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRzFCLE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ0UsR0FBd0IsRUFDRyxNQUFjLEVBQ1YsdUJBQStCLEtBQUs7UUFEeEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUd6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDakMsWUFBWSxFQUFFLE1BQU07WUFDcEIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELFNBQVMsRUFBRSxDQUFDO1lBQ1osbUJBQW1CLEVBQUUsSUFBSTtTQUMxQixDQUFFLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsS0FBc0IsRUFBRSxPQUErQjtRQUM1RCxPQUFPLG1CQUNMLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFD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YixDQUFDOzs7O1lBaFBGLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OztZQVZ6QixtQkFBbUI7eUNBaUJ2QixNQUFNLFNBQUMsU0FBUzt5Q0FDaEIsTUFBTSxTQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSwgZm9ybWF0TnVtYmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERFRkFVTFRfQ1VSUkVOQ1lfQ09ERSwgSW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBZdW56YWlDb25maWdTZXJ2aWNlLCBZdW56YWlVdGlsQ3VycmVuY3lDb25maWcgfSBmcm9tICdAeWVsb24vdXRpbC9jb25maWcnO1xuXG5pbXBvcnQge1xuICBDdXJyZW5jeUNOWU9wdGlvbnMsXG4gIEN1cnJlbmN5Rm9ybWF0T3B0aW9ucyxcbiAgQ3VycmVuY3lNZWdhT3B0aW9ucyxcbiAgQ3VycmVuY3lNZWdhUmVzdWx0LFxuICBDdXJyZW5jeU1lZ2FfUG93ZXJzXG59IGZyb20gJy4vY3VycmVuY3kudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5U2VydmljZSB7XG4gIHByaXZhdGUgYzogWXVuemFpVXRpbEN1cnJlbmN5Q29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbmN5UGlwZTogQ3VycmVuY3lQaXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvZzogWXVuemFpQ29uZmlnU2VydmljZSxcbiAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBsb2NhbGU6IHN0cmluZyxcbiAgICBASW5qZWN0KERFRkFVTFRfQ1VSUkVOQ1lfQ09ERSkgX2RlZmF1bHRDdXJyZW5jeUNvZGU6IHN0cmluZyA9ICdVU0QnXG4gICkge1xuICAgIHRoaXMuY3VycmVuY3lQaXBlID0gbmV3IEN1cnJlbmN5UGlwZShsb2NhbGUsIF9kZWZhdWx0Q3VycmVuY3lDb2RlKTtcbiAgICB0aGlzLmMgPSBjb2cubWVyZ2UoJ3V0aWxDdXJyZW5jeScsIHtcbiAgICAgIHN0YXJ0aW5nVW5pdDogJ3l1YW4nLFxuICAgICAgbWVnYVVuaXQ6IHsgUTogJ+S6rCcsIFQ6ICflhYYnLCBCOiAn5Lq/JywgTTogJ+S4hycsIEs6ICfljYMnIH0sXG4gICAgICBwcmVjaXNpb246IDIsXG4gICAgICBpZ25vcmVaZXJvUHJlY2lzaW9uOiB0cnVlXG4gICAgfSkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBhIG51bWJlciB3aXRoIGNvbW1hcyBhcyB0aG91c2FuZHMgc2VwYXJhdG9yc1xuICAgKlxuICAgKiDmoLzlvI/ljJbotKfluIHvvIznlKjpgJflj7flsIbmlbDlrZfmoLzlvI/ljJbkuLrljYPkvY3liIbpmpTnrKZcbiAgICogYGBgdHNcbiAgICogMTAwMDAgPT4gYDEwLDAwMGBcbiAgICogMTAwMDAuNTY3ID0+IGAxMCwwMDAuNTdgXG4gICAqIGBgYFxuICAgKi9cbiAgZm9ybWF0KHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIG9wdGlvbnM/OiBDdXJyZW5jeUZvcm1hdE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBzdGFydGluZ1VuaXQ6IHRoaXMuYy5zdGFydGluZ1VuaXQsXG4gICAgICBwcmVjaXNpb246IHRoaXMuYy5wcmVjaXNpb24sXG4gICAgICBpZ25vcmVaZXJvUHJlY2lzaW9uOiB0aGlzLmMuaWdub3JlWmVyb1ByZWNpc2lvbixcbiAgICAgIG5nQ3VycmVuY3k6IHRoaXMuYy5uZ0N1cnJlbmN5LFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG4gICAgbGV0IHRydXRoVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IGlzTmFOKHRydXRoVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXJ0aW5nVW5pdCA9PT0gJ2NlbnQnKSB7XG4gICAgICB0cnV0aFZhbHVlID0gdHJ1dGhWYWx1ZSAvIDEwMDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubmdDdXJyZW5jeSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjdXIgPSBvcHRpb25zLm5nQ3VycmVuY3khO1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVuY3lQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgdHJ1dGhWYWx1ZSxcbiAgICAgICAgY3VyLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgY3VyLmRpc3BsYXksXG4gICAgICAgIGN1ci5kaWdpdHNJbmZvLFxuICAgICAgICBjdXIubG9jYWxlIHx8IHRoaXMubG9jYWxlXG4gICAgICApITtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gZm9ybWF0TnVtYmVyKFxuICAgICAgdHJ1dGhWYWx1ZSxcbiAgICAgIHRoaXMubG9jYWxlLFxuICAgICAgYC4ke29wdGlvbnMuaWdub3JlWmVyb1ByZWNpc2lvbiA/IDEgOiBvcHRpb25zLnByZWNpc2lvbn0tJHtvcHRpb25zLnByZWNpc2lvbn1gXG4gICAgKTtcbiAgICByZXR1cm4gb3B0aW9ucy5pZ25vcmVaZXJvUHJlY2lzaW9uID8gcmVzLnJlcGxhY2UoLyg/OlxcLlswXSspJC9nLCAnJykgOiByZXM7XG4gIH1cblxuICAvKipcbiAgICogTGFyZ2UgbnVtYmVyIGZvcm1hdCBmaWx0ZXJcbiAgICpcbiAgICog5aSn5pWw5o2u5qC85byP5YyWXG4gICAqIGBgYHRzXG4gICAqIDEwMDAgPT4geyB2YWx1ZTogJzEnLCB1bml0OiAnSycsIHVuaXRJMThuOiAn5Y2DJyB9XG4gICAqIDEyNDU2ID0+IHsgdmFsdWU6ICcxMi40NicsIHVuaXQ6ICdLJywgdW5pdEkxOG46ICfljYMnIH1cbiAgICogYGBgXG4gICAqL1xuICBtZWdhKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIG9wdGlvbnM/OiBDdXJyZW5jeU1lZ2FPcHRpb25zKTogQ3VycmVuY3lNZWdhUmVzdWx0IHtcbiAgICBvcHRpb25zID0geyBwcmVjaXNpb246IHRoaXMuYy5wcmVjaXNpb24sIHVuaXRJMThuOiB0aGlzLmMubWVnYVVuaXQsIHN0YXJ0aW5nVW5pdDogdGhpcy5jLnN0YXJ0aW5nVW5pdCwgLi4ub3B0aW9ucyB9O1xuICAgIGxldCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgIGNvbnN0IHJlczogQ3VycmVuY3lNZWdhUmVzdWx0ID0geyByYXc6IHZhbHVlLCB2YWx1ZTogJycsIHVuaXQ6ICcnLCB1bml0STE4bjogJycgfTtcbiAgICBpZiAoaXNOYU4obnVtKSB8fCBudW0gPT09IDApIHtcbiAgICAgIHJlcy52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdGFydGluZ1VuaXQgPT09ICdjZW50Jykge1xuICAgICAgbnVtID0gbnVtIC8gMTAwO1xuICAgIH1cbiAgICBsZXQgYWJzID0gTWF0aC5hYnMoK251bSk7XG4gICAgY29uc3Qgcm91bmRlciA9IE1hdGgucG93KDEwLCBvcHRpb25zLnByZWNpc2lvbiEpO1xuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSBudW0gPCAwO1xuICAgIGZvciAoY29uc3QgcCBvZiBDdXJyZW5jeU1lZ2FfUG93ZXJzKSB7XG4gICAgICBsZXQgcmVkdWNlZCA9IGFicyAvIHAudmFsdWU7XG5cbiAgICAgIHJlZHVjZWQgPSBNYXRoLnJvdW5kKHJlZHVjZWQgKiByb3VuZGVyKSAvIHJvdW5kZXI7XG5cbiAgICAgIGlmIChyZWR1Y2VkID49IDEpIHtcbiAgICAgICAgYWJzID0gcmVkdWNlZDtcbiAgICAgICAgcmVzLnVuaXQgPSBwLnVuaXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy52YWx1ZSA9IChpc05lZ2F0aXZlID8gJy0nIDogJycpICsgYWJzO1xuICAgIHJlcy51bml0STE4biA9IChvcHRpb25zLnVuaXRJMThuIGFzIHsgW2tleTogc3RyaW5nXTogTnpTYWZlQW55IH0pW3Jlcy51bml0XTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRlZCBpbnRvIFJNQiBub3RhdGlvbi5cbiAgICpcbiAgICog6L2s5YyW5oiQ5Lq65rCR5biB6KGo56S65rOVXG4gICAqL1xuICBjbnkodmFsdWU6IG51bWJlciB8IHN0cmluZywgb3B0aW9ucz86IEN1cnJlbmN5Q05ZT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIGluV29yZHM6IHRydWUsXG4gICAgICBtaW51c1N5bWJvbDogJ+i0nycsXG4gICAgICBzdGFydGluZ1VuaXQ6IHRoaXMuYy5zdGFydGluZ1VuaXQsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXJ0aW5nVW5pdCA9PT0gJ2NlbnQnKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlIC8gMTAwO1xuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgbGV0IGludGVnZXI6IG51bWJlciB8IHN0cmluZztcbiAgICBsZXQgZGVjaW1hbDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgICBbaW50ZWdlciwgZGVjaW1hbF0gPSB2YWx1ZS5zcGxpdCgnLicpO1xuICAgIGxldCBzeW1ib2wgPSAnJztcbiAgICBpZiAoaW50ZWdlci5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgIHN5bWJvbCA9IG9wdGlvbnMubWludXNTeW1ib2whO1xuICAgICAgaW50ZWdlciA9IGludGVnZXIuc3Vic3RyKDEpO1xuICAgIH1cbiAgICBpZiAoL14tP1xcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgZGVjaW1hbCA9IG51bGw7XG4gICAgfVxuICAgIGludGVnZXIgPSAoK2ludGVnZXIpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaW5Xb3JkcyA9IG9wdGlvbnMuaW5Xb3JkcztcbiAgICBjb25zdCB1bml0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7XG4gICAgICBudW06IGluV29yZHNcbiAgICAgICAgPyBbJycsICflo7knLCAn6LSwJywgJ+WPgScsICfogoYnLCAn5LyNJywgJ+mZhicsICfmn5InLCAn5o2MJywgJ+eOlicsICfngrknXVxuICAgICAgICA6IFsnJywgJ+S4gCcsICfkuownLCAn5LiJJywgJ+WbmycsICfkupQnLCAn5YWtJywgJ+S4gycsICflhasnLCAn5LmdJywgJ+eCuSddLFxuICAgICAgcmFkaWNlOiBpbldvcmRzXG4gICAgICAgID8gW1xuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAn5ou+JyxcbiAgICAgICAgICAgICfkvbAnLFxuICAgICAgICAgICAgJ+S7nycsXG4gICAgICAgICAgICAn5LiHJyxcbiAgICAgICAgICAgICfmi74nLFxuICAgICAgICAgICAgJ+S9sCcsXG4gICAgICAgICAgICAn5LufJyxcbiAgICAgICAgICAgICfkur8nLFxuICAgICAgICAgICAgJ+aLvicsXG4gICAgICAgICAgICAn5L2wJyxcbiAgICAgICAgICAgICfku58nLFxuICAgICAgICAgICAgJ+S4h+S6vycsXG4gICAgICAgICAgICAn5ou+JyxcbiAgICAgICAgICAgICfkvbAnLFxuICAgICAgICAgICAgJ+S7nycsXG4gICAgICAgICAgICAn5YWGJyxcbiAgICAgICAgICAgICfmi74nLFxuICAgICAgICAgICAgJ+S9sCcsXG4gICAgICAgICAgICAn5LufJ1xuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICfljYEnLFxuICAgICAgICAgICAgJ+eZvicsXG4gICAgICAgICAgICAn5Y2DJyxcbiAgICAgICAgICAgICfkuIcnLFxuICAgICAgICAgICAgJ+WNgScsXG4gICAgICAgICAgICAn55m+JyxcbiAgICAgICAgICAgICfljYMnLFxuICAgICAgICAgICAgJ+S6vycsXG4gICAgICAgICAgICAn5Y2BJyxcbiAgICAgICAgICAgICfnmb4nLFxuICAgICAgICAgICAgJ+WNgycsXG4gICAgICAgICAgICAn5LiH5Lq/JyxcbiAgICAgICAgICAgICfljYEnLFxuICAgICAgICAgICAgJ+eZvicsXG4gICAgICAgICAgICAn5Y2DJyxcbiAgICAgICAgICAgICflhYYnLFxuICAgICAgICAgICAgJ+WNgScsXG4gICAgICAgICAgICAn55m+JyxcbiAgICAgICAgICAgICfljYMnXG4gICAgICAgICAgXSxcbiAgICAgIGRlYzogWyfop5InLCAn5YiGJywgJ+WOmCcsICfmr6snXVxuICAgIH07XG4gICAgaWYgKGluV29yZHMpIHtcbiAgICAgIHZhbHVlID0gKCt2YWx1ZSkudG9GaXhlZCg1KS50b1N0cmluZygpO1xuICAgIH1cbiAgICBsZXQgaW50ZWdlclJlcyA9ICcnO1xuICAgIGNvbnN0IGludGVnZXJDb3VudCA9IGludGVnZXIubGVuZ3RoO1xuICAgIGlmIChpbnRlZ2VyID09PSAnMCcgfHwgaW50ZWdlckNvdW50ID09PSAwKSB7XG4gICAgICBpbnRlZ2VyUmVzID0gJ+mbtic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjbkRlc2MgPSAnJztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50ZWdlckNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgbiA9ICtpbnRlZ2VyW2ldO1xuICAgICAgICBjb25zdCBqID0gaW50ZWdlckNvdW50IC0gaSAtIDE7XG4gICAgICAgIGNvbnN0IGlzWmVybyA9IGkgPiAxICYmIG4gIT09IDAgJiYgaW50ZWdlcltpIC0gMV0gPT09ICcwJztcbiAgICAgICAgY29uc3QgY25aZXJvID0gaXNaZXJvID8gJ+mbticgOiAnJztcbiAgICAgICAgY29uc3QgaXNFbXBwdHlVbml0ID0gKG4gPT09IDAgJiYgaiAlIDQgIT09IDApIHx8IGludGVnZXIuc3Vic3RyKGkgLSAzLCA0KSA9PT0gJzAwMDAnO1xuICAgICAgICBjb25zdCBkZXNjTWFyayA9IGNuRGVzYztcbiAgICAgICAgbGV0IGNuTnVtID0gdW5pdC5udW1bbl07XG5cbiAgICAgICAgY25EZXNjID0gaXNFbXBwdHlVbml0ID8gJycgOiB1bml0LnJhZGljZVtqXTtcbiAgICAgICAgLy8g56ys5LiA5L2N5piv5LiA5Y2BXG4gICAgICAgIGlmIChpID09PSAwICYmIGNuTnVtID09PSAn5LiAJyAmJiBjbkRlc2MgPT09ICfljYEnKSBjbk51bSA9ICcnO1xuICAgICAgICBjb25zdCBpc0NoYW5nZUVyID1cbiAgICAgICAgICBuID4gMSAmJlxuICAgICAgICAgIGNuTnVtID09PSAn5LqMJyAmJiAvLyDljrvpmaTpppbkvY1cbiAgICAgICAgICBbJycsICfljYEnLCAn55m+J10uaW5kZXhPZihjbkRlc2MpID09PSAtMSAmJiAvLyDkuI3or7vkuKRcXOS4pOWNgVxc5Lik55m+XG4gICAgICAgICAgZGVzY01hcmsgIT09ICfljYEnOyAvLyDkuI3or7vljYHkuKRcbiAgICAgICAgaWYgKGlzQ2hhbmdlRXIpIGNuTnVtID0gJ+S4pCc7XG4gICAgICAgIGludGVnZXJSZXMgKz0gY25aZXJvICsgY25OdW0gKyBjbkRlc2M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g5bCP5pWw6YOo5YiG5ou85o6lXG4gICAgbGV0IGRlY2ltYWxSZXMgPSAnJztcbiAgICBjb25zdCBkZWNpbWFsQ291bnQgPSBkZWNpbWFsID8gZGVjaW1hbC50b1N0cmluZygpLmxlbmd0aCA6IDA7XG4gICAgaWYgKGRlY2ltYWwgPT09IG51bGwpIHtcbiAgICAgIGRlY2ltYWxSZXMgPSBpbldvcmRzID8gJ+aVtCcgOiAnJztcbiAgICB9IGVsc2UgaWYgKGRlY2ltYWwgPT09ICcwJykge1xuICAgICAgZGVjaW1hbFJlcyA9ICfpm7YnO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY2ltYWxDb3VudDsgaSsrKSB7XG4gICAgICAgIGlmIChpbldvcmRzICYmIGkgPiB1bml0LmRlYy5sZW5ndGggLSAxKSBicmVhaztcbiAgICAgICAgY29uc3QgbiA9IGRlY2ltYWxbaV07XG4gICAgICAgIGNvbnN0IGNuWmVybyA9IG4gPT09ICcwJyA/ICfpm7YnIDogJyc7XG4gICAgICAgIGNvbnN0IGNuTnVtID0gdW5pdC5udW1bK25dO1xuICAgICAgICBjb25zdCBjbkRlc2MgPSBpbldvcmRzID8gdW5pdC5kZWNbaV0gOiAnJztcbiAgICAgICAgZGVjaW1hbFJlcyArPSBjblplcm8gKyBjbk51bSArIGNuRGVzYztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmV0ID1cbiAgICAgIHN5bWJvbCArXG4gICAgICAoaW5Xb3Jkc1xuICAgICAgICA/IGludGVnZXJSZXMgKyAoZGVjaW1hbFJlcyA9PT0gJ+mbticgPyAn5YWD5pW0JyA6IGDlhYMke2RlY2ltYWxSZXN9YClcbiAgICAgICAgOiBpbnRlZ2VyUmVzICsgKGRlY2ltYWxSZXMgPT09ICcnID8gJycgOiBg54K5JHtkZWNpbWFsUmVzfWApKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4iXX0=
@@ -1,8 +1,8 @@
1
- export const CurrencyMega_Powers = [
2
- { unit: 'Q', value: Math.pow(10, 15) },
3
- { unit: 'T', value: Math.pow(10, 12) },
4
- { unit: 'B', value: Math.pow(10, 9) },
5
- { unit: 'M', value: Math.pow(10, 6) },
6
- { unit: 'K', value: 1000 }
7
- ];
1
+ export const CurrencyMega_Powers = [
2
+ { unit: 'Q', value: Math.pow(10, 15) },
3
+ { unit: 'T', value: Math.pow(10, 12) },
4
+ { unit: 'B', value: Math.pow(10, 9) },
5
+ { unit: 'M', value: Math.pow(10, 6) },
6
+ { unit: 'K', value: 1000 }
7
+ ];
8
8
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlsL2Zvcm1hdC9jdXJyZW5jeS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyREEsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtJQUN0QyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQ3RDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDckMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNyQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtDQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQ3VycmVuY3lTdGFydGluZ1VuaXQgPSAneXVhbicgfCAnY2VudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVuY3lTdGFydGluZ1VuaXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFydGluZyB1bml0IG9mIHRoZSB2YWx1ZSwgYHl1YW5gIG1lYW5zIOWFgywgYGNlbnRgIG1lYW5zIOWIhiwgZGVmYXVsdDogYHl1YW5gXG4gICAqXG4gICAqIOWAvOeahOi1t+Wni+WNleS9je+8jGB5dWFuYCDlhYPvvIxgY2VudGAg5YiG77yM6buY6K6k77yaYHl1YW5gXG4gICAqL1xuICBzdGFydGluZ1VuaXQ/OiBDdXJyZW5jeVN0YXJ0aW5nVW5pdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJyZW5jeUZvcm1hdE9wdGlvbnMgZXh0ZW5kcyBDdXJyZW5jeVN0YXJ0aW5nVW5pdE9wdGlvbnMge1xuICAvKipcbiAgICogVXNpbmcgYERFRkFVTFRfQ1VSUkVOQ1lfQ09ERWAgd2hlbiB2YWx1ZSBpcyBgdHJ1ZVxuICAgKlxuICAgKiDmmK/lkKbkvb/nlKggYEN1cnJlbmN5UGlwZWAg5p2l5pu/5LujXG4gICAqL1xuICB1c2VBbmd1bGFyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOeyvuW6pu+8jOm7mOiupO+8mmAyYFxuICAgKi9cbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICAvKipcbiAgICog5piv5ZCm5b+955Wl57K+5bqmIGAuMGAg5oiWIGAuMDBgIOe7k+WwvueahOWtl+espu+8jOm7mOiupO+8mmB0cnVlYFxuICAgKi9cbiAgaWdub3JlWmVyb1ByZWNpc2lvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSBhbmd1YXIgYGN1cnJlbmN5YCBwaXBlIHBhcnNlIHdoZW4gaXMgc2V0LCBwbHMgcmVmZXIgdG8gW2RvY3VtZW50XShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9DdXJyZW5jeVBpcGUpXG4gICAqXG4gICAqIOiLpeaMh+WumuWImeihqOekuuS9v+eUqCBBbmd1bGFyIOiHquW4pueahCBgY3VycmVuY3lgIOeuoemBk+adpeino+aekO+8jOingVvmlofmoaNdKGh0dHBzOi8vYW5ndWxhci5jbi9hcGkvY29tbW9uL0N1cnJlbmN5UGlwZSlcbiAgICovXG4gIG5nQ3VycmVuY3k/OiB7XG4gICAgZGlzcGxheTogJ2NvZGUnIHwgJ3N5bWJvbCcgfCAnc3ltYm9sLW5hcnJvdyc7XG4gICAgY3VycmVuY3lDb2RlPzogc3RyaW5nO1xuICAgIGRpZ2l0c0luZm8/OiBzdHJpbmc7XG4gICAgbG9jYWxlPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbmN5TWVnYU9wdGlvbnMgZXh0ZW5kcyBDdXJyZW5jeVN0YXJ0aW5nVW5pdE9wdGlvbnMge1xuICAvKipcbiAgICog57K+5bqm77yM6buY6K6k77yaYDJgXG4gICAqL1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIOWNleS9jeWbvemZheWMlu+8jOm7mOiupO+8mmB7UTogJ+S6rCcsIFQ6ICflhYYnLCBCOiAn5Lq/JywgTTogJ+S4hycsIEs6ICfljYMnLH1gXG4gICAqL1xuICB1bml0STE4bj86IEN1cnJlbmN5TWVnYVVuaXRJMThuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbmN5TWVnYVJlc3VsdCB7XG4gIHJhdzogbnVtYmVyIHwgc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICB1bml0OiBzdHJpbmc7XG4gIHVuaXRJMThuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBDdXJyZW5jeU1lZ2FfUG93ZXJzID0gW1xuICB7IHVuaXQ6ICdRJywgdmFsdWU6IE1hdGgucG93KDEwLCAxNSkgfSxcbiAgeyB1bml0OiAnVCcsIHZhbHVlOiBNYXRoLnBvdygxMCwgMTIpIH0sXG4gIHsgdW5pdDogJ0InLCB2YWx1ZTogTWF0aC5wb3coMTAsIDkpIH0sXG4gIHsgdW5pdDogJ00nLCB2YWx1ZTogTWF0aC5wb3coMTAsIDYpIH0sXG4gIHsgdW5pdDogJ0snLCB2YWx1ZTogMTAwMCB9XG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbmN5TWVnYVVuaXRJMThuIHtcbiAgUTogc3RyaW5nO1xuICBUOiBzdHJpbmc7XG4gIEI6IHN0cmluZztcbiAgTTogc3RyaW5nO1xuICBLOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVuY3lDTllPcHRpb25zIGV4dGVuZHMgQ3VycmVuY3lTdGFydGluZ1VuaXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0dXJuIHRvIHVwcGVyY2FzZSBub3RhdGlvbiwgZGVmYXVsdDogYHRydWVgXG4gICAqXG4gICAqIOaYr+WQpui/lOWbnuWkp+WGmeihqOekuuazle+8jOm7mOiupO+8mmB0cnVlYFxuICAgKi9cbiAgaW5Xb3Jkcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTcGVjaWZ5IG5lZ2F0aXZlIHNpZ24sIGRlZmF1bHQ6IGBuZWdhdGl2ZWBcbiAgICpcbiAgICog5oyH5a6a6LSf5pWw56ym5Y+377yM6buY6K6k77yaYOi0n2BcbiAgICovXG4gIG1pbnVzU3ltYm9sPzogc3RyaW5nO1xufVxuIl19
@@ -1,5 +1,5 @@
1
- export * from './string';
2
- export * from './validate';
3
- export * from './currency.service';
4
- export * from './currency.types';
1
+ export * from './string';
2
+ export * from './validate';
3
+ export * from './currency.service';
4
+ export * from './currency.types';
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlsL2Zvcm1hdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3N0cmluZyc7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vY3VycmVuY3kuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2N1cnJlbmN5LnR5cGVzJztcbiJdfQ==