@adriangalilea/utils 7.1.0 → 9.0.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.
- package/README.md +95 -56
- package/dist/bot/access-control.d.ts +89 -31
- package/dist/bot/access-control.d.ts.map +1 -1
- package/dist/bot/access-control.js +10 -28
- package/dist/bot/access-control.js.map +1 -1
- package/dist/bot/callbacks.d.ts +0 -13
- package/dist/bot/callbacks.d.ts.map +1 -1
- package/dist/bot/callbacks.js +0 -16
- package/dist/bot/callbacks.js.map +1 -1
- package/dist/bot/create.d.ts.map +1 -1
- package/dist/bot/create.js +8 -5
- package/dist/bot/create.js.map +1 -1
- package/dist/bot/kit.d.ts +4 -9
- package/dist/bot/kit.d.ts.map +1 -1
- package/dist/bot/kit.js +0 -1
- package/dist/bot/kit.js.map +1 -1
- package/dist/bot/lang.d.ts +46 -0
- package/dist/bot/lang.d.ts.map +1 -0
- package/dist/bot/lang.js +29 -0
- package/dist/bot/lang.js.map +1 -0
- package/dist/bot/language.d.ts +0 -2
- package/dist/bot/language.d.ts.map +1 -1
- package/dist/bot/language.js +0 -12
- package/dist/bot/language.js.map +1 -1
- package/dist/bot/llm.d.ts +1 -2
- package/dist/bot/llm.d.ts.map +1 -1
- package/dist/bot/llm.js +1 -2
- package/dist/bot/llm.js.map +1 -1
- package/dist/bot/menu.d.ts +7 -0
- package/dist/bot/menu.d.ts.map +1 -1
- package/dist/bot/menu.js +8 -2
- package/dist/bot/menu.js.map +1 -1
- package/dist/bot/payments/callbacks.d.ts +1 -1
- package/dist/bot/payments/callbacks.d.ts.map +1 -1
- package/dist/bot/payments/callbacks.js +9 -11
- package/dist/bot/payments/callbacks.js.map +1 -1
- package/dist/bot/payments/commands.d.ts +1 -1
- package/dist/bot/payments/commands.d.ts.map +1 -1
- package/dist/bot/payments/commands.js +2 -2
- package/dist/bot/payments/commands.js.map +1 -1
- package/dist/bot/payments/derive.d.ts.map +1 -1
- package/dist/bot/payments/derive.js +7 -6
- package/dist/bot/payments/derive.js.map +1 -1
- package/dist/bot/payments/handlers.d.ts +1 -5
- package/dist/bot/payments/handlers.d.ts.map +1 -1
- package/dist/bot/payments/handlers.js +59 -20
- package/dist/bot/payments/handlers.js.map +1 -1
- package/dist/bot/payments/invoice.d.ts.map +1 -1
- package/dist/bot/payments/invoice.js +27 -10
- package/dist/bot/payments/invoice.js.map +1 -1
- package/dist/bot/payments/menu-item.d.ts.map +1 -1
- package/dist/bot/payments/menu-item.js +2 -2
- package/dist/bot/payments/menu-item.js.map +1 -1
- package/dist/bot/payments/payouts.d.ts +3 -3
- package/dist/bot/payments/payouts.js +3 -3
- package/dist/bot/payments/plugin.d.ts +87 -29
- package/dist/bot/payments/plugin.d.ts.map +1 -1
- package/dist/bot/payments/refund.d.ts +1 -5
- package/dist/bot/payments/refund.d.ts.map +1 -1
- package/dist/bot/payments/refund.js +24 -42
- package/dist/bot/payments/refund.js.map +1 -1
- package/dist/bot/payments/types.d.ts +2 -9
- package/dist/bot/payments/types.d.ts.map +1 -1
- package/dist/bot/payments/types.js +0 -7
- package/dist/bot/payments/types.js.map +1 -1
- package/dist/bot/payments/waiver.d.ts +1 -17
- package/dist/bot/payments/waiver.d.ts.map +1 -1
- package/dist/bot/payments/waiver.js +5 -33
- package/dist/bot/payments/waiver.js.map +1 -1
- package/dist/bot/profile.d.ts.map +1 -1
- package/dist/bot/profile.js +18 -11
- package/dist/bot/profile.js.map +1 -1
- package/dist/bot/reactions.d.ts +0 -2
- package/dist/bot/reactions.d.ts.map +1 -1
- package/dist/bot/reactions.js +0 -16
- package/dist/bot/reactions.js.map +1 -1
- package/dist/bot/session.d.ts +1 -21
- package/dist/bot/session.d.ts.map +1 -1
- package/dist/bot/session.js +1 -29
- package/dist/bot/session.js.map +1 -1
- package/dist/bot/storage-d1.d.ts.map +1 -1
- package/dist/bot/storage-d1.js +4 -4
- package/dist/bot/storage-d1.js.map +1 -1
- package/dist/bot/storage.d.ts +1 -1
- package/dist/bot/storage.js +6 -6
- package/dist/bot/storage.js.map +1 -1
- package/dist/bot/worker.d.ts.map +1 -1
- package/dist/bot/worker.js +24 -15
- package/dist/bot/worker.js.map +1 -1
- package/dist/cli/text.d.ts.map +1 -1
- package/dist/cli/text.js +2 -3
- package/dist/cli/text.js.map +1 -1
- package/dist/llm/index.js +5 -5
- package/dist/llm/index.js.map +1 -1
- package/dist/offensive.d.ts.map +1 -1
- package/dist/offensive.js +3 -4
- package/dist/offensive.js.map +1 -1
- package/dist/runtime.d.ts +6 -4
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +12 -17
- package/dist/runtime.js.map +1 -1
- package/dist/tg-html/index.d.ts +11 -4
- package/dist/tg-html/index.d.ts.map +1 -1
- package/dist/tg-html/index.js +13 -8
- package/dist/tg-html/index.js.map +1 -1
- package/dist/tg-md/index.d.ts +6 -6
- package/dist/tg-md/index.d.ts.map +1 -1
- package/dist/tg-md/index.js +9 -19
- package/dist/tg-md/index.js.map +1 -1
- package/dist/universal/format.d.ts +3 -2
- package/dist/universal/format.d.ts.map +1 -1
- package/dist/universal/format.js +3 -2
- package/dist/universal/format.js.map +1 -1
- package/dist/universal/log.d.ts +176 -95
- package/dist/universal/log.d.ts.map +1 -1
- package/dist/universal/log.js +677 -217
- package/dist/universal/log.js.map +1 -1
- package/dist/universal/time.d.ts +11 -2
- package/dist/universal/time.d.ts.map +1 -1
- package/dist/universal/time.js +22 -2
- package/dist/universal/time.js.map +1 -1
- package/package.json +9 -15
- package/dist/bot/index.d.ts +0 -31
- package/dist/bot/index.d.ts.map +0 -1
- package/dist/bot/index.js +0 -31
- package/dist/bot/index.js.map +0 -1
- package/dist/universal/currency/download-crypto-list.d.ts +0 -10
- package/dist/universal/currency/download-crypto-list.d.ts.map +0 -1
- package/dist/universal/currency/download-crypto-list.js +0 -69
- package/dist/universal/currency/download-crypto-list.js.map +0 -1
- package/dist/universal/url/update-rules.d.ts +0 -15
- package/dist/universal/url/update-rules.d.ts.map +0 -1
- package/dist/universal/url/update-rules.js +0 -122
- package/dist/universal/url/update-rules.js.map +0 -1
package/dist/tg-md/index.d.ts
CHANGED
|
@@ -25,8 +25,11 @@
|
|
|
25
25
|
*
|
|
26
26
|
* Typography (heading air, bullet glyph, the title underline) IS the opinion;
|
|
27
27
|
* it becomes configurable when a second consumer needs a different look, not
|
|
28
|
-
* before. Zero deps, worker-safe
|
|
28
|
+
* before. Zero external deps, worker-safe; the HTML escaping comes from
|
|
29
|
+
* `tg-html`, which owns the same output dialect.
|
|
29
30
|
*/
|
|
31
|
+
import { escapeHtml } from "../tg-html/index.js";
|
|
32
|
+
export { escapeHtml };
|
|
30
33
|
/** Unwrap a leading/trailing ```…``` code fence (some models add one) and trim. */
|
|
31
34
|
export declare function tidyRichMarkdown(raw: string): string;
|
|
32
35
|
/**
|
|
@@ -42,9 +45,8 @@ export declare function tidyRichMarkdown(raw: string): string;
|
|
|
42
45
|
* `` `code` `` -> `<code>`; links -> `<a>`
|
|
43
46
|
* Only `*`-based emphasis is honored (never `_`), so `snake_case` survives. Every tag
|
|
44
47
|
* is balanced, so Telegram can't reject the message; unmatched markers stay literal.
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* bullets reads as a wall.
|
|
48
|
+
* Spacing follows the same contract as `tg-html`: every heading is followed by a
|
|
49
|
+
* blank line so sections breathe — a heading hugging its bullets reads as a wall.
|
|
48
50
|
*/
|
|
49
51
|
export declare function markdownToTelegramHtml(markdown: string): string;
|
|
50
52
|
/**
|
|
@@ -64,8 +66,6 @@ export declare function markdownToTelegramHtml(markdown: string): string;
|
|
|
64
66
|
* plain fallbacks have no image support, so they never carry a cover.
|
|
65
67
|
*/
|
|
66
68
|
export declare function markdownToRichHtml(markdown: string, coverUrl?: string): string;
|
|
67
|
-
/** Escape text/code content for Telegram HTML. */
|
|
68
|
-
export declare function escapeHtml(s: string): string;
|
|
69
69
|
/**
|
|
70
70
|
* Strip Markdown to plain text: the fallback when Telegram rejects the rich message.
|
|
71
71
|
* Removes heading/bullet markers and emphasis, unwraps links to their text, but KEEPS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tg-md/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tg-md/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAc,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GACf,MAAM,CAyFR;AA0ED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAcpD"}
|
package/dist/tg-md/index.js
CHANGED
|
@@ -25,8 +25,11 @@
|
|
|
25
25
|
*
|
|
26
26
|
* Typography (heading air, bullet glyph, the title underline) IS the opinion;
|
|
27
27
|
* it becomes configurable when a second consumer needs a different look, not
|
|
28
|
-
* before. Zero deps, worker-safe
|
|
28
|
+
* before. Zero external deps, worker-safe; the HTML escaping comes from
|
|
29
|
+
* `tg-html`, which owns the same output dialect.
|
|
29
30
|
*/
|
|
31
|
+
import { escapeAttr, escapeHtml } from "../tg-html/index.js";
|
|
32
|
+
export { escapeHtml };
|
|
30
33
|
/** Unwrap a leading/trailing ```…``` code fence (some models add one) and trim. */
|
|
31
34
|
export function tidyRichMarkdown(raw) {
|
|
32
35
|
const trimmed = raw.trim();
|
|
@@ -46,9 +49,8 @@ export function tidyRichMarkdown(raw) {
|
|
|
46
49
|
* `` `code` `` -> `<code>`; links -> `<a>`
|
|
47
50
|
* Only `*`-based emphasis is honored (never `_`), so `snake_case` survives. Every tag
|
|
48
51
|
* is balanced, so Telegram can't reject the message; unmatched markers stay literal.
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* bullets reads as a wall.
|
|
52
|
+
* Spacing follows the same contract as `tg-html`: every heading is followed by a
|
|
53
|
+
* blank line so sections breathe — a heading hugging its bullets reads as a wall.
|
|
52
54
|
*/
|
|
53
55
|
export function markdownToTelegramHtml(markdown) {
|
|
54
56
|
const lines = tidyRichMarkdown(markdown).split(/\r?\n/);
|
|
@@ -99,8 +101,8 @@ export function markdownToTelegramHtml(markdown) {
|
|
|
99
101
|
if (heading) {
|
|
100
102
|
const level = heading[1].length;
|
|
101
103
|
const text = inlineMd(heading[2]);
|
|
102
|
-
// ###### is the source footer: metadata, not a heading — it renders as a
|
|
103
|
-
// plain line
|
|
104
|
+
// ###### is the source footer: metadata, not a heading — it renders as a
|
|
105
|
+
// quiet plain line, never bold.
|
|
104
106
|
if (level === 1)
|
|
105
107
|
out.push(`<b><u>${text}</u></b>`, "");
|
|
106
108
|
else if (level === 6)
|
|
@@ -234,7 +236,7 @@ function insertCover(out, url) {
|
|
|
234
236
|
out.splice(at, 0, "", img, "");
|
|
235
237
|
}
|
|
236
238
|
/** Normalize rendered HTML: strip trailing whitespace, collapse blank-line runs. Blank lines
|
|
237
|
-
* around lists stay — that air is the layout
|
|
239
|
+
* around lists stay — that air is the layout; only runs of 3+ collapse. */
|
|
238
240
|
function tidyHtml(html) {
|
|
239
241
|
return html
|
|
240
242
|
.replace(/[ \t]+\n/g, "\n")
|
|
@@ -273,18 +275,6 @@ function inlineMd(text) {
|
|
|
273
275
|
s = s.replace(/\|\|([^|]+)\|\|/g, "<tg-spoiler>$1</tg-spoiler>");
|
|
274
276
|
return s.replace(new RegExp(`${STASH}(\\d+)${STASH}`, "g"), (_, i) => tokens[Number(i)]);
|
|
275
277
|
}
|
|
276
|
-
/** Escape text/code content for Telegram HTML. */
|
|
277
|
-
export function escapeHtml(s) {
|
|
278
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
279
|
-
}
|
|
280
|
-
/** Escape an href for a Telegram HTML attribute. */
|
|
281
|
-
function escapeAttr(s) {
|
|
282
|
-
return s
|
|
283
|
-
.replace(/&/g, "&")
|
|
284
|
-
.replace(/"/g, """)
|
|
285
|
-
.replace(/</g, "<")
|
|
286
|
-
.replace(/>/g, ">");
|
|
287
|
-
}
|
|
288
278
|
/**
|
|
289
279
|
* Strip Markdown to plain text: the fallback when Telegram rejects the rich message.
|
|
290
280
|
* Removes heading/bullet markers and emphasis, unwraps links to their text, but KEEPS
|
package/dist/tg-md/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tg-md/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tg-md/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,8 +35,9 @@ export declare function fixed(value: Numberish, decimals?: number): string;
|
|
|
35
35
|
export declare function withCommas(value: number | bigint | null | undefined, decimals?: number): string;
|
|
36
36
|
/**
|
|
37
37
|
* Bytes → "12.7 TB", "2.0 TB", "850.0 GB", "500.0 MB". Decimal SI prefixes —
|
|
38
|
-
* how drive manufacturers and SMART tools quote capacities (`df -h`
|
|
39
|
-
* Below 1 MB the raw byte count is the honest answer.
|
|
38
|
+
* how drive manufacturers and SMART tools quote capacities (`df -H`; `df -h`
|
|
39
|
+
* is binary). Below 1 MB the raw byte count is the honest answer. The twin of
|
|
40
|
+
* go-utils `Bytes`: one rule whichever language prints the figure.
|
|
40
41
|
*/
|
|
41
42
|
export declare function bytes(value: Numberish): string;
|
|
42
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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;;;;;GAKG;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"}
|
package/dist/universal/format.js
CHANGED
|
@@ -63,8 +63,9 @@ export function withCommas(value, decimals) {
|
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
65
|
* Bytes → "12.7 TB", "2.0 TB", "850.0 GB", "500.0 MB". Decimal SI prefixes —
|
|
66
|
-
* how drive manufacturers and SMART tools quote capacities (`df -h`
|
|
67
|
-
* Below 1 MB the raw byte count is the honest answer.
|
|
66
|
+
* how drive manufacturers and SMART tools quote capacities (`df -H`; `df -h`
|
|
67
|
+
* is binary). Below 1 MB the raw byte count is the honest answer. The twin of
|
|
68
|
+
* go-utils `Bytes`: one rule whichever language prints the figure.
|
|
68
69
|
*/
|
|
69
70
|
export function bytes(value) {
|
|
70
71
|
if (value == null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/universal/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAE3B,kDAAkD;AAClD,MAAM,UAAU,OAAO,CAAC,KAAgB;IACvC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IAClC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAClC,QAAQ,EAAE,SAAS;QACnB,qBAAqB,EAAE,CAAC;KACxB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,CAAC;AASD,gFAAgF;AAChF,MAAM,UAAU,UAAU,CACzB,KAAgB,EAChB,OAA0B,EAAE;IAE5B,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IAClC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,QAAQ,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;YAC3B,QAAQ,GAAG,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;YACnC,QAAQ,GAAG,CAAC,CAAC;QACd,CAAC;IACF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,KAAK,CAAC,KAAgB,EAAE,QAAQ,GAAG,CAAC;IACnD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,UAAU,CACzB,KAAyC,EACzC,QAAiB;IAEjB,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IAClC,MAAM,KAAK,GACV,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ;QAClD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/universal/format.ts"],"names":[],"mappings":"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"}
|
package/dist/universal/log.d.ts
CHANGED
|
@@ -1,113 +1,194 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The logger: one stream of events, written the same way by go-utils,
|
|
3
|
+
* ts-utils and py-utils. The contract is the utils README
|
|
4
|
+
* (github.com/adriangalilea/utils); this file is the TypeScript side of it.
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
+
* Writing
|
|
7
|
+
* Every verb takes a message, then optional fields:
|
|
8
|
+
* log.warn("retrying", { attempt: 2 })
|
|
9
|
+
* log.error("charge failed", { err })
|
|
10
|
+
* The message says what happened, the fields say with what. Fields are a
|
|
11
|
+
* plain object; anything else panics.
|
|
6
12
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* written to (stderr), never a sibling stream.
|
|
13
|
+
* Verbs print at fixed levels
|
|
14
|
+
* error ⨯ · fail ⨯ (error) · warn ⚠ · warnOnce ⚠ (warn) · info · success ✓
|
|
15
|
+
* · wait ○ · ready ▶ · step • (info) · debug ◦ (debug) · trace » (trace).
|
|
16
|
+
* warnOnce fires once per message and scope (memory bounded).
|
|
12
17
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
+
* Scopes
|
|
19
|
+
* log.scope("api").scope("auth") carries ["api", "auth"]. Its threshold
|
|
20
|
+
* is read live from API_AUTH_LOG_LEVEL, then API_LOG_LEVEL, then
|
|
21
|
+
* LOG_LEVEL, then setLogLevel(), then info. Levels:
|
|
22
|
+
* silent < error < warn < info < debug < trace.
|
|
18
23
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
+
* Spans
|
|
25
|
+
* A span is a piece of work written as two events (start, end) and a
|
|
26
|
+
* span is a logger: what is written through it carries its span_id and
|
|
27
|
+
* trace_id, nothing else does. There is no ambient context.
|
|
28
|
+
* await log.span("sync", { repo }, async (s) => {
|
|
29
|
+
* s.info("cloned", { files })
|
|
30
|
+
* await s.span("build", async (c) => { ... })
|
|
31
|
+
* s.set({ pushed: true })
|
|
32
|
+
* })
|
|
33
|
+
* span returns what fn returns; a throw ends the span failed (the error
|
|
34
|
+
* in fields.err) and rethrows. The open form, for work that does not fit
|
|
35
|
+
* a block: const s = log.begin("upload", { size }) ... s.end() or
|
|
36
|
+
* s.end(err). Ending twice, or set() after the end, panics.
|
|
37
|
+
* Whether a span is shown is decided once, at begin, by its start's level
|
|
38
|
+
* against its scope's threshold; the end follows, so a hidden span writes
|
|
39
|
+
* no end, failed or not. What a hidden span holds attaches to the nearest
|
|
40
|
+
* shown span, a joined remote one included: its lines carry that id, its
|
|
41
|
+
* children and its traceparent() name it. With no shown ancestor its
|
|
42
|
+
* lines carry no ids. A viewer never meets a missing parent.
|
|
24
43
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* lines
|
|
29
|
-
*
|
|
30
|
-
*
|
|
44
|
+
* Traces cross processes explicitly
|
|
45
|
+
* s.traceparent() is the W3C value to hand on (HTTP header, or the
|
|
46
|
+
* TRACEPARENT env of a child). log.join(value) returns a logger whose
|
|
47
|
+
* spans are children of that remote span; its lines outside a span carry
|
|
48
|
+
* no ids. null/undefined returns the logger itself; a malformed value is
|
|
49
|
+
* ignored with one warn per distinct value. TRACEPARENT in the
|
|
50
|
+
* environment at process start is joined by every root span.
|
|
31
51
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
52
|
+
* Renderings
|
|
53
|
+
* json: one event per line, keys in the contract's order, fields sorted
|
|
54
|
+
* at every depth. human: symbols, colour (TTY, NO_COLOR, FORCE_COLOR),
|
|
55
|
+
* fields dim as key=value, an error's stack under its line, spans as
|
|
56
|
+
* "○ name" ... "✓ name 254ms" with what they hold indented.
|
|
57
|
+
* Default: Node/Bun/Deno human when stderr is a TTY, else json; browser
|
|
58
|
+
* human; Worker json.
|
|
39
59
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
60
|
+
* Configuration
|
|
61
|
+
* Each variable has a setter; the setter is the program's default and the
|
|
62
|
+
* variable, read live, overrides it: LOG_FORMAT=human|json (setLogFormat),
|
|
63
|
+
* LOG_TIME=1|0 (setLogTime, a dim local HH:MM:SS before human lines, off
|
|
64
|
+
* by default), LOG_LEVEL and {SCOPE}_LOG_LEVEL (setLogLevel), LOG_SERVICE
|
|
65
|
+
* (setLogService). Values match without regard to case, an empty variable
|
|
66
|
+
* is unset, an unknown value panics. The service defaults to the entry
|
|
67
|
+
* script's name without extension; in a Worker or browser it must be
|
|
68
|
+
* set, or the first json event panics.
|
|
47
69
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
70
|
+
* Sinks
|
|
71
|
+
* Node/Bun/Deno write every event through console.error: stderr is the
|
|
72
|
+
* log, stdout stays data, and cli/live's console patch keeps lines above
|
|
73
|
+
* a live region. Browsers and Workers use the level's console method.
|
|
52
74
|
*
|
|
53
|
-
*
|
|
54
|
-
* idioms; the record line format is identical by design.
|
|
75
|
+
* The wire shape is exported as LogEvent, and parseEvent(line) reads one back.
|
|
55
76
|
*/
|
|
56
|
-
export type
|
|
57
|
-
|
|
58
|
-
export
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
declare const LEVELS: {
|
|
62
|
-
readonly silent: 0;
|
|
63
|
-
readonly error: 1;
|
|
64
|
-
readonly warn: 2;
|
|
65
|
-
readonly info: 3;
|
|
66
|
-
readonly debug: 4;
|
|
67
|
-
readonly trace: 5;
|
|
77
|
+
export type LogLevel = "silent" | "error" | "warn" | "info" | "debug" | "trace";
|
|
78
|
+
type EventLevel = Exclude<LogLevel, "silent">;
|
|
79
|
+
export type LogVerb = "error" | "fail" | "warn" | "info" | "success" | "wait" | "ready" | "step" | "debug" | "trace";
|
|
80
|
+
export type JsonValue = null | boolean | number | string | readonly JsonValue[] | {
|
|
81
|
+
readonly [key: string]: JsonValue;
|
|
68
82
|
};
|
|
69
|
-
|
|
70
|
-
|
|
83
|
+
/** What a verb, span or set() takes: a plain object, any values (serialized by the contract's table). */
|
|
84
|
+
export type Fields = Readonly<Record<string, unknown>>;
|
|
85
|
+
interface EventBase {
|
|
86
|
+
readonly time: string;
|
|
87
|
+
readonly level: EventLevel;
|
|
88
|
+
readonly verb: LogVerb;
|
|
89
|
+
readonly msg: string;
|
|
90
|
+
readonly service: string;
|
|
91
|
+
readonly scope?: readonly string[];
|
|
92
|
+
readonly fields?: {
|
|
93
|
+
readonly [key: string]: JsonValue;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** A log line. Inside a shown span it carries the span's trace_id and span_id. */
|
|
97
|
+
export interface LineEvent extends EventBase {
|
|
98
|
+
readonly phase?: undefined;
|
|
99
|
+
readonly trace_id?: string;
|
|
100
|
+
readonly span_id?: string;
|
|
101
|
+
readonly parent_id?: undefined;
|
|
102
|
+
readonly status?: undefined;
|
|
103
|
+
readonly dur_ms?: undefined;
|
|
104
|
+
}
|
|
105
|
+
export interface SpanStartEvent extends EventBase {
|
|
106
|
+
readonly level: "info";
|
|
107
|
+
readonly verb: "wait";
|
|
108
|
+
readonly phase: "start";
|
|
109
|
+
readonly trace_id: string;
|
|
110
|
+
readonly span_id: string;
|
|
111
|
+
readonly parent_id?: string;
|
|
112
|
+
readonly status?: undefined;
|
|
113
|
+
readonly dur_ms?: undefined;
|
|
114
|
+
}
|
|
115
|
+
interface SpanEndBase extends EventBase {
|
|
116
|
+
readonly phase: "end";
|
|
117
|
+
readonly trace_id: string;
|
|
118
|
+
readonly span_id: string;
|
|
119
|
+
readonly parent_id?: string;
|
|
120
|
+
/** Monotonic, milliseconds, 3 decimals. */
|
|
121
|
+
readonly dur_ms: number;
|
|
122
|
+
}
|
|
123
|
+
export interface SpanOkEvent extends SpanEndBase {
|
|
124
|
+
readonly level: "info";
|
|
125
|
+
readonly verb: "success";
|
|
126
|
+
readonly status: "ok";
|
|
127
|
+
}
|
|
128
|
+
/** A failed span's end: the error is in fields.err. */
|
|
129
|
+
export interface SpanFailEvent extends SpanEndBase {
|
|
130
|
+
readonly level: "error";
|
|
131
|
+
readonly verb: "fail";
|
|
132
|
+
readonly status: "error";
|
|
133
|
+
}
|
|
134
|
+
export type SpanEndEvent = SpanOkEvent | SpanFailEvent;
|
|
135
|
+
/** One event of the stream, as written on the wire. Keys appear in this order. */
|
|
136
|
+
export type LogEvent = LineEvent | SpanStartEvent | SpanEndEvent;
|
|
137
|
+
export type LogFormat = "human" | "json";
|
|
138
|
+
/** The program's default level. LOG_LEVEL and {SCOPE}_LOG_LEVEL override it. */
|
|
71
139
|
export declare function setLogLevel(level: LogLevel): void;
|
|
140
|
+
/** The program's default rendering, human or json. LOG_FORMAT overrides it. */
|
|
141
|
+
export declare function setLogFormat(format: LogFormat): void;
|
|
142
|
+
/** A dim local HH:MM:SS before human lines (json always carries time). LOG_TIME overrides it. */
|
|
143
|
+
export declare function setLogTime(on: boolean): void;
|
|
144
|
+
/** The program's name in every event. LOG_SERVICE overrides it. */
|
|
145
|
+
export declare function setLogService(name: string): void;
|
|
72
146
|
export interface Logger {
|
|
73
|
-
error(
|
|
74
|
-
fail(
|
|
75
|
-
warn(
|
|
76
|
-
/** warn
|
|
77
|
-
warnOnce(
|
|
78
|
-
info(
|
|
79
|
-
success(
|
|
80
|
-
wait(
|
|
81
|
-
ready(
|
|
82
|
-
/**
|
|
83
|
-
step(
|
|
84
|
-
debug(
|
|
85
|
-
trace(
|
|
86
|
-
/**
|
|
87
|
-
time(label: string): void;
|
|
88
|
-
timeEnd(label: string): void;
|
|
89
|
-
/** Child logger: lines carry [name], level reads {NAME}_LOG_LEVEL first. */
|
|
147
|
+
error(message: string, fields?: Fields): void;
|
|
148
|
+
fail(message: string, fields?: Fields): void;
|
|
149
|
+
warn(message: string, fields?: Fields): void;
|
|
150
|
+
/** warn, once per message and scope for the process. */
|
|
151
|
+
warnOnce(message: string, fields?: Fields): void;
|
|
152
|
+
info(message: string, fields?: Fields): void;
|
|
153
|
+
success(message: string, fields?: Fields): void;
|
|
154
|
+
wait(message: string, fields?: Fields): void;
|
|
155
|
+
ready(message: string, fields?: Fields): void;
|
|
156
|
+
/** An indented sub-step. */
|
|
157
|
+
step(message: string, fields?: Fields): void;
|
|
158
|
+
debug(message: string, fields?: Fields): void;
|
|
159
|
+
trace(message: string, fields?: Fields): void;
|
|
160
|
+
/** A child logger: events carry the scope, its level reads {SCOPE}_LOG_LEVEL first. */
|
|
90
161
|
scope(name: string): Logger;
|
|
162
|
+
/**
|
|
163
|
+
* Run fn inside a span and return what it returns (a Promise when fn is
|
|
164
|
+
* async). A throw or rejection ends the span failed and is rethrown.
|
|
165
|
+
*/
|
|
166
|
+
span<T>(name: string, fn: (s: Span) => T): T;
|
|
167
|
+
span<T>(name: string, fields: Fields, fn: (s: Span) => T): T;
|
|
168
|
+
/** Open a span by hand, for work that does not fit a block. End it once with end(). */
|
|
169
|
+
begin(name: string, fields?: Fields): Span;
|
|
170
|
+
/**
|
|
171
|
+
* A logger whose spans are children of a remote span. null/undefined
|
|
172
|
+
* returns this logger; a malformed value is ignored with one warn.
|
|
173
|
+
*/
|
|
174
|
+
join(traceparent: string | null | undefined): Logger;
|
|
91
175
|
}
|
|
92
|
-
export
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
export declare const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
setLogFormat: typeof setLogFormat;
|
|
110
|
-
setLogTime: typeof setLogTime;
|
|
111
|
-
};
|
|
176
|
+
export interface Span extends Logger {
|
|
177
|
+
/** Fields learned while the span runs, carried on its end event. */
|
|
178
|
+
set(fields: Fields): void;
|
|
179
|
+
/** The W3C traceparent value to hand to a child process or request. */
|
|
180
|
+
traceparent(): string;
|
|
181
|
+
/** End the span: ok with no error, failed with one (in fields.err). Twice panics. */
|
|
182
|
+
end(err?: unknown): void;
|
|
183
|
+
}
|
|
184
|
+
/** The root logger. */
|
|
185
|
+
export declare const log: Logger;
|
|
186
|
+
/**
|
|
187
|
+
* One line of a stream as an event, or null for a line that is not one (a
|
|
188
|
+
* runtime panic, a library writing to stderr itself) so a viewer can pass it
|
|
189
|
+
* through. A JSON object with a "verb" key claims to be an event: if it
|
|
190
|
+
* breaks the contract's shape, that is a bug in a writer and it panics.
|
|
191
|
+
*/
|
|
192
|
+
export declare function parseEvent(text: string): LogEvent | null;
|
|
112
193
|
export {};
|
|
113
194
|
//# sourceMappingURL=log.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/universal/log.ts"],"names":[],"mappings":"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"}
|