@adriangalilea/utils 2.25.1 → 2.27.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 (46) hide show
  1. package/README.md +17 -12
  2. package/dist/bot/text.d.ts +23 -0
  3. package/dist/bot/text.d.ts.map +1 -0
  4. package/dist/bot/text.js +40 -0
  5. package/dist/bot/text.js.map +1 -0
  6. package/dist/bot/update-identity.d.ts +19 -0
  7. package/dist/bot/update-identity.d.ts.map +1 -0
  8. package/dist/bot/update-identity.js +92 -0
  9. package/dist/bot/update-identity.js.map +1 -0
  10. package/dist/bot/worker.d.ts +62 -0
  11. package/dist/bot/worker.d.ts.map +1 -1
  12. package/dist/bot/worker.js +181 -0
  13. package/dist/bot/worker.js.map +1 -1
  14. package/dist/universal/currency/classify.d.ts +7 -0
  15. package/dist/universal/currency/classify.d.ts.map +1 -0
  16. package/dist/universal/currency/classify.js +147 -0
  17. package/dist/universal/currency/classify.js.map +1 -0
  18. package/dist/universal/currency/decimals.d.ts +2 -0
  19. package/dist/universal/currency/decimals.d.ts.map +1 -0
  20. package/dist/universal/currency/decimals.js +93 -0
  21. package/dist/universal/currency/decimals.js.map +1 -0
  22. package/dist/universal/currency/index.d.ts +12 -57
  23. package/dist/universal/currency/index.d.ts.map +1 -1
  24. package/dist/universal/currency/index.js +27 -317
  25. package/dist/universal/currency/index.js.map +1 -1
  26. package/dist/universal/currency/money.d.ts +12 -0
  27. package/dist/universal/currency/money.d.ts.map +1 -0
  28. package/dist/universal/currency/money.js +40 -0
  29. package/dist/universal/currency/money.js.map +1 -0
  30. package/dist/universal/currency/percent.d.ts +7 -0
  31. package/dist/universal/currency/percent.d.ts.map +1 -0
  32. package/dist/universal/currency/percent.js +32 -0
  33. package/dist/universal/currency/percent.js.map +1 -0
  34. package/dist/universal/currency/symbols.d.ts +32 -0
  35. package/dist/universal/currency/symbols.d.ts.map +1 -0
  36. package/dist/universal/currency/symbols.js +36 -0
  37. package/dist/universal/currency/symbols.js.map +1 -0
  38. package/dist/universal/currency/usd.d.ts +23 -0
  39. package/dist/universal/currency/usd.d.ts.map +1 -0
  40. package/dist/universal/currency/usd.js +54 -0
  41. package/dist/universal/currency/usd.js.map +1 -0
  42. package/dist/universal/format.d.ts +17 -29
  43. package/dist/universal/format.d.ts.map +1 -1
  44. package/dist/universal/format.js +28 -54
  45. package/dist/universal/format.js.map +1 -1
  46. package/package.json +11 -1
@@ -1,8 +1,12 @@
1
1
  /**
2
2
  * Pure number formatting. No currency coupling — money formatting (usd, btc,
3
3
  * money(value, code), …) lives in ./currency, which owns the symbol/decimals
4
- * knowledge and its 133KB crypto-symbol dataset. Keeping this module pure is
5
- * what lets a browser bundle import `compact` without shipping that dataset.
4
+ * knowledge; its module split keeps the crypto-symbol dataset out of bundles
5
+ * that only print money.
6
+ *
7
+ * Every formatter accepts `null | undefined` and renders "—" (em dash) — the
8
+ * universal "no data" glyph. Callers pass DB fields and API values straight
9
+ * through instead of each app re-wrapping every formatter for null.
6
10
  *
7
11
  * Every Intl call pins "en" — never the runtime default locale. In an SSR app
8
12
  * the server formats in en-US and the browser in the user's locale; a
@@ -12,8 +16,11 @@
12
16
  * Named exports only (no namespace object): a namespace keeps every function
13
17
  * — and its imports — alive in the bundle; named imports tree-shake.
14
18
  */
19
+ export type Numberish = number | null | undefined;
20
+ /** The "no data" glyph every formatter renders for null/undefined. */
21
+ export declare const NO_DATA = "\u2014";
15
22
  /** Compact notation: 1.2K, 3.4M, … (Intl, en). */
16
- export declare function compact(value: number): string;
23
+ export declare function compact(value: Numberish): string;
17
24
  export interface PercentageOptions {
18
25
  /** Fixed decimal places. Omit for smart decimals (2 below 0.1, 0 at ≥100, else 1). */
19
26
  decimals?: number;
@@ -21,20 +28,22 @@ export interface PercentageOptions {
21
28
  sign?: boolean;
22
29
  }
23
30
  /** Percentage: smart decimals by default, or fixed via opts; optional +sign. */
24
- export declare function percentage(value: number, opts?: PercentageOptions): string;
25
- /** Thousands separators: 1,234,567.89 (optionally fixed decimals). */
26
- export declare function withCommas(value: number, decimals?: number): string;
31
+ export declare function percentage(value: Numberish, opts?: PercentageOptions): string;
32
+ /** Plain fixed-decimal number, no grouping: 1.23 (lag, ratios, small counts). */
33
+ export declare function fixed(value: Numberish, decimals?: number): string;
34
+ /** Thousands separators: 1,234,567.89 (optionally fixed decimals). bigint-safe. */
35
+ export declare function withCommas(value: number | bigint | null | undefined, decimals?: number): string;
27
36
  /**
28
37
  * Bytes → "12.7 TB", "2.0 TB", "850.0 GB", "500.0 MB". Decimal SI prefixes —
29
38
  * how drive manufacturers and SMART tools quote capacities (`df -h` too).
30
39
  * Below 1 MB the raw byte count is the honest answer.
31
40
  */
32
- export declare function bytes(value: number): string;
41
+ export declare function bytes(value: Numberish): string;
33
42
  /**
34
43
  * Bits/sec → "10 Gbps", "2.5 Gbps", "100 Mbps". Network speeds use decimal SI
35
44
  * (a "1 Gbps" link moves 10^9 bits/sec, not 2^30).
36
45
  */
37
- export declare function bitsPerSec(value: number): string;
46
+ export declare function bitsPerSec(value: Numberish): string;
38
47
  /**
39
48
  * Decimals that keep 2 significant digits of a sub-cent value, capped at 10.
40
49
  * The fix for fixed-decimal erasure: a micro-priced asset (~$4.3e-7) under a
@@ -42,25 +51,4 @@ export declare function bitsPerSec(value: number): string;
42
51
  * 4.3e-7 → 8 decimals → "$0.00000043".
43
52
  */
44
53
  export declare function sigDecimals(absValue: number): number;
45
- /** The USD decimals policy: 2 for dollars, more as the value shrinks, significant-digit floor below a cent. */
46
- export declare function usdDecimals(value: number): number;
47
- export interface UsdOptions {
48
- /** Fixed decimal places, overriding the optimal-decimals policy. */
49
- decimals?: number;
50
- /** Compact notation for market-cap-scale money: $60.9M. */
51
- compact?: boolean;
52
- }
53
- /**
54
- * The USD decimals POLICY as Intl.NumberFormatOptions, for consumers that
55
- * format internally — animated numbers (NumberFlow), chart axes, table cell
56
- * renderers. One policy serves strings and widgets alike; `usd()` below is
57
- * just this policy applied. Value-dependent: recompute when the value moves.
58
- */
59
- export declare function usdIntlOptions(value: number, opts?: UsdOptions): Intl.NumberFormatOptions;
60
- /**
61
- * $1,234.56 with optimal decimals (grouped, en-pinned — SSR-hydration-safe);
62
- * sub-cent values keep 2 significant digits ($0.00000043) instead of rounding
63
- * to $0.000000. `{compact: true}` → $60.9M; `{decimals}` overrides the policy.
64
- */
65
- export declare function usd(value: number, opts?: UsdOptions): string;
66
54
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/universal/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,kDAAkD;AAClD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,MAAM,WAAW,iBAAiB;IACjC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CACzB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,iBAAsB,GAC1B,MAAM,CAYR;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AASD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,+GAA+G;AAC/G,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,MAAM,WAAW,UAAU;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,UAAe,GACnB,IAAI,CAAC,mBAAmB,CAgB1B;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CAIhE"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/universal/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAElD,sEAAsE;AACtE,eAAO,MAAM,OAAO,WAAM,CAAC;AAE3B,kDAAkD;AAClD,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAMhD;AAED,MAAM,WAAW,iBAAiB;IACjC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CACzB,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE,iBAAsB,GAC1B,MAAM,CAaR;AAED,iFAAiF;AACjF,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,SAAI,GAAG,MAAM,CAG5D;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CACzB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,QAAQ,CAAC,EAAE,MAAM,GACf,MAAM,CASR;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAO9C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAKnD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -1,8 +1,12 @@
1
1
  /**
2
2
  * Pure number formatting. No currency coupling — money formatting (usd, btc,
3
3
  * money(value, code), …) lives in ./currency, which owns the symbol/decimals
4
- * knowledge and its 133KB crypto-symbol dataset. Keeping this module pure is
5
- * what lets a browser bundle import `compact` without shipping that dataset.
4
+ * knowledge; its module split keeps the crypto-symbol dataset out of bundles
5
+ * that only print money.
6
+ *
7
+ * Every formatter accepts `null | undefined` and renders "—" (em dash) — the
8
+ * universal "no data" glyph. Callers pass DB fields and API values straight
9
+ * through instead of each app re-wrapping every formatter for null.
6
10
  *
7
11
  * Every Intl call pins "en" — never the runtime default locale. In an SSR app
8
12
  * the server formats in en-US and the browser in the user's locale; a
@@ -12,8 +16,12 @@
12
16
  * Named exports only (no namespace object): a namespace keeps every function
13
17
  * — and its imports — alive in the bundle; named imports tree-shake.
14
18
  */
19
+ /** The "no data" glyph every formatter renders for null/undefined. */
20
+ export const NO_DATA = "—";
15
21
  /** Compact notation: 1.2K, 3.4M, … (Intl, en). */
16
22
  export function compact(value) {
23
+ if (value == null)
24
+ return NO_DATA;
17
25
  return new Intl.NumberFormat("en", {
18
26
  notation: "compact",
19
27
  maximumFractionDigits: 1,
@@ -21,6 +29,8 @@ export function compact(value) {
21
29
  }
22
30
  /** Percentage: smart decimals by default, or fixed via opts; optional +sign. */
23
31
  export function percentage(value, opts = {}) {
32
+ if (value == null)
33
+ return NO_DATA;
24
34
  let decimals = opts.decimals;
25
35
  if (decimals === undefined) {
26
36
  decimals = 1;
@@ -34,9 +44,19 @@ export function percentage(value, opts = {}) {
34
44
  const sign = opts.sign && value > 0 ? "+" : "";
35
45
  return `${sign}${value.toFixed(decimals)}%`;
36
46
  }
37
- /** Thousands separators: 1,234,567.89 (optionally fixed decimals). */
47
+ /** Plain fixed-decimal number, no grouping: 1.23 (lag, ratios, small counts). */
48
+ export function fixed(value, decimals = 2) {
49
+ if (value == null)
50
+ return NO_DATA;
51
+ return value.toFixed(decimals);
52
+ }
53
+ /** Thousands separators: 1,234,567.89 (optionally fixed decimals). bigint-safe. */
38
54
  export function withCommas(value, decimals) {
39
- const fixed = decimals !== undefined ? value.toFixed(decimals) : value.toString();
55
+ if (value == null)
56
+ return NO_DATA;
57
+ const fixed = decimals !== undefined && typeof value === "number"
58
+ ? value.toFixed(decimals)
59
+ : value.toString();
40
60
  const parts = fixed.split(".");
41
61
  parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
42
62
  return parts.join(".");
@@ -47,6 +67,8 @@ export function withCommas(value, decimals) {
47
67
  * Below 1 MB the raw byte count is the honest answer.
48
68
  */
49
69
  export function bytes(value) {
70
+ if (value == null)
71
+ return NO_DATA;
50
72
  if (value < 1e6)
51
73
  return `${value} B`;
52
74
  if (value < 1e9)
@@ -62,18 +84,14 @@ export function bytes(value) {
62
84
  * (a "1 Gbps" link moves 10^9 bits/sec, not 2^30).
63
85
  */
64
86
  export function bitsPerSec(value) {
87
+ if (value == null)
88
+ return NO_DATA;
65
89
  if (value < 1e6)
66
90
  return `${value} bps`;
67
91
  if (value < 1e9)
68
92
  return `${(value / 1e6).toFixed(0)} Mbps`;
69
93
  return `${(value / 1e9).toFixed(1).replace(/\.0$/, "")} Gbps`;
70
94
  }
71
- // ── USD ────────────────────────────────────────────────────────────
72
- // USD lives HERE, not in ./currency, deliberately: formatting dollars needs
73
- // no symbol lookup and no crypto dataset — putting it in currency would drag
74
- // 133KB of ticker symbols into every client bundle that prints a price.
75
- // currency.getOptimalDecimals delegates its USD/stables case to usdDecimals,
76
- // so the policy has exactly one home.
77
95
  /**
78
96
  * Decimals that keep 2 significant digits of a sub-cent value, capped at 10.
79
97
  * The fix for fixed-decimal erasure: a micro-priced asset (~$4.3e-7) under a
@@ -83,48 +101,4 @@ export function bitsPerSec(value) {
83
101
  export function sigDecimals(absValue) {
84
102
  return Math.min(10, 1 - Math.floor(Math.log10(absValue)));
85
103
  }
86
- /** The USD decimals policy: 2 for dollars, more as the value shrinks, significant-digit floor below a cent. */
87
- export function usdDecimals(value) {
88
- if (value === 0)
89
- return 2;
90
- const absValue = Math.abs(value);
91
- if (absValue < 0.01)
92
- return sigDecimals(absValue);
93
- if (absValue < 0.1)
94
- return 4;
95
- if (absValue < 1)
96
- return 3;
97
- return 2;
98
- }
99
- /**
100
- * The USD decimals POLICY as Intl.NumberFormatOptions, for consumers that
101
- * format internally — animated numbers (NumberFlow), chart axes, table cell
102
- * renderers. One policy serves strings and widgets alike; `usd()` below is
103
- * just this policy applied. Value-dependent: recompute when the value moves.
104
- */
105
- export function usdIntlOptions(value, opts = {}) {
106
- if (opts.compact) {
107
- return {
108
- style: "currency",
109
- currency: "USD",
110
- notation: "compact",
111
- maximumFractionDigits: 1,
112
- };
113
- }
114
- const decimals = opts.decimals ?? usdDecimals(value);
115
- return {
116
- style: "currency",
117
- currency: "USD",
118
- minimumFractionDigits: decimals,
119
- maximumFractionDigits: decimals,
120
- };
121
- }
122
- /**
123
- * $1,234.56 with optimal decimals (grouped, en-pinned — SSR-hydration-safe);
124
- * sub-cent values keep 2 significant digits ($0.00000043) instead of rounding
125
- * to $0.000000. `{compact: true}` → $60.9M; `{decimals}` overrides the policy.
126
- */
127
- export function usd(value, opts = {}) {
128
- return new Intl.NumberFormat("en-US", usdIntlOptions(value, opts)).format(value);
129
- }
130
104
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/universal/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/universal/format.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adriangalilea/utils",
3
- "version": "2.25.1",
3
+ "version": "2.27.0",
4
4
  "description": "TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -179,6 +179,14 @@
179
179
  "./bot/metrics": {
180
180
  "types": "./dist/bot/metrics.d.ts",
181
181
  "default": "./dist/bot/metrics.js"
182
+ },
183
+ "./bot/text": {
184
+ "types": "./dist/bot/text.d.ts",
185
+ "default": "./dist/bot/text.js"
186
+ },
187
+ "./bot/update-identity": {
188
+ "types": "./dist/bot/update-identity.d.ts",
189
+ "default": "./dist/bot/update-identity.js"
182
190
  }
183
191
  },
184
192
  "files": [
@@ -211,6 +219,8 @@
211
219
  "test:llm": "tsx tests/llm-live-test.ts",
212
220
  "test:tg-md": "tsx tests/tg-md-test.ts",
213
221
  "test:self-echo": "tsx tests/self-echo-test.ts",
222
+ "test:update-identity": "tsx tests/update-identity-test.ts",
223
+ "test:bot-text": "tsx tests/bot-text-test.ts",
214
224
  "test:url": "tsx tests/url-test.ts",
215
225
  "test:bot-urls": "tsx tests/bot-urls-test.ts",
216
226
  "test:bot-updates": "tsx tests/bot-updates-test.ts",