logixia 2.0.4 → 2.0.6
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 +172 -2614
- package/dist/{async-context-B05ArHgM.mjs → async-context-2mbUKhcl.mjs} +4 -6
- package/dist/async-context-2mbUKhcl.mjs.map +1 -0
- package/dist/{async-context-DTQgi8f7.js → async-context-DUFMDYAr.js} +4 -6
- package/dist/async-context-DUFMDYAr.js.map +1 -0
- package/dist/{azure-monitor.transport-CwbOLZHB.js → azure-monitor.transport-Bu4S2I2q.js} +5 -5
- package/dist/azure-monitor.transport-Bu4S2I2q.js.map +1 -0
- package/dist/{azure-monitor.transport-DV03Z5P4.d.ts → azure-monitor.transport-Bvf7Xegt.d.ts} +2 -2
- package/dist/{azure-monitor.transport-DV03Z5P4.d.ts.map → azure-monitor.transport-Bvf7Xegt.d.ts.map} +1 -1
- package/dist/{azure-monitor.transport-BPbgjATu.mjs → azure-monitor.transport-C1RWAumT.mjs} +5 -5
- package/dist/azure-monitor.transport-C1RWAumT.mjs.map +1 -0
- package/dist/{azure-monitor.transport-C7kYyZUW.d.mts → azure-monitor.transport-CbSHOnNX.d.mts} +2 -2
- package/dist/{azure-monitor.transport-C7kYyZUW.d.mts.map → azure-monitor.transport-CbSHOnNX.d.mts.map} +1 -1
- package/dist/azure.d.mts +1 -1
- package/dist/azure.d.ts +1 -1
- package/dist/azure.js +1 -1
- package/dist/azure.mjs +1 -1
- package/dist/{batch-buffer-0fgLmIPn.mjs → batch-buffer-BvXLDPlV.mjs} +3 -3
- package/dist/{batch-buffer-0fgLmIPn.mjs.map → batch-buffer-BvXLDPlV.mjs.map} +1 -1
- package/dist/{batch-buffer-DT4gdXmf.js → batch-buffer-C7Am4Mw-.js} +3 -3
- package/dist/{batch-buffer-DT4gdXmf.js.map → batch-buffer-C7Am4Mw-.js.map} +1 -1
- package/dist/browser.d.mts +5 -5
- package/dist/browser.d.mts.map +1 -1
- package/dist/browser.d.ts +5 -5
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +47 -12
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +47 -12
- package/dist/browser.mjs.map +1 -1
- package/dist/{builder-D70z6kjj.mjs → builder-DhNhvOkt.mjs} +106 -153
- package/dist/builder-DhNhvOkt.mjs.map +1 -0
- package/dist/{builder-M7NoaugM.js → builder-yFvJrz7o.js} +109 -179
- package/dist/builder-yFvJrz7o.js.map +1 -0
- package/dist/cli/index.js +157 -66
- package/dist/cloudwatch.d.mts +1 -1
- package/dist/cloudwatch.d.ts +1 -1
- package/dist/cloudwatch.js +1 -1
- package/dist/cloudwatch.mjs +1 -1
- package/dist/{cloudwatch.transport-Bf7L4I59.d.ts → cloudwatch.transport-CQyT6U91.d.ts} +2 -2
- package/dist/{cloudwatch.transport-Bf7L4I59.d.ts.map → cloudwatch.transport-CQyT6U91.d.ts.map} +1 -1
- package/dist/{cloudwatch.transport-B2wKQFF7.js → cloudwatch.transport-Ch1Uae-0.js} +6 -6
- package/dist/cloudwatch.transport-Ch1Uae-0.js.map +1 -0
- package/dist/{cloudwatch.transport-Rj4yTpRn.d.mts → cloudwatch.transport-CjVrI6S4.d.mts} +2 -2
- package/dist/{cloudwatch.transport-Rj4yTpRn.d.mts.map → cloudwatch.transport-CjVrI6S4.d.mts.map} +1 -1
- package/dist/{cloudwatch.transport-BTvYfLs9.mjs → cloudwatch.transport-DZqF2xZO.mjs} +6 -6
- package/dist/cloudwatch.transport-DZqF2xZO.mjs.map +1 -0
- package/dist/correlation.d.mts +4 -55
- package/dist/correlation.d.mts.map +1 -1
- package/dist/correlation.d.ts +4 -55
- package/dist/correlation.d.ts.map +1 -1
- package/dist/correlation.js +13 -13
- package/dist/correlation.js.map +1 -1
- package/dist/correlation.mjs +13 -13
- package/dist/correlation.mjs.map +1 -1
- package/dist/{entry-fields-RLd1jCoR.js → entry-fields-BSLkzw18.js} +8 -3
- package/dist/entry-fields-BSLkzw18.js.map +1 -0
- package/dist/{entry-fields-CGuvT2R0.mjs → entry-fields-J1OBi24o.mjs} +8 -3
- package/dist/entry-fields-J1OBi24o.mjs.map +1 -0
- package/dist/gcp.d.mts +1 -1
- package/dist/gcp.d.ts +1 -1
- package/dist/gcp.js +1 -1
- package/dist/gcp.mjs +1 -1
- package/dist/{gcp.transport-CFQfdAOK.d.ts → gcp.transport-BCIvdFV-.d.ts} +4 -4
- package/dist/{gcp.transport-CFQfdAOK.d.ts.map → gcp.transport-BCIvdFV-.d.ts.map} +1 -1
- package/dist/{gcp.transport-C5D72b1g.d.mts → gcp.transport-D9SdLPwP.d.mts} +4 -4
- package/dist/{gcp.transport-C5D72b1g.d.mts.map → gcp.transport-D9SdLPwP.d.mts.map} +1 -1
- package/dist/{gcp.transport-CGKopAhQ.mjs → gcp.transport-DVCmnA3b.mjs} +20 -16
- package/dist/gcp.transport-DVCmnA3b.mjs.map +1 -0
- package/dist/{gcp.transport-KZe9hCAR.js → gcp.transport-Dy2Lf8FI.js} +20 -16
- package/dist/gcp.transport-Dy2Lf8FI.js.map +1 -0
- package/dist/http-shapes-BnBkJcid.d.mts +32 -0
- package/dist/http-shapes-BnBkJcid.d.mts.map +1 -0
- package/dist/http-shapes-BnBkJcid.d.ts +32 -0
- package/dist/http-shapes-BnBkJcid.d.ts.map +1 -0
- package/dist/{index-xqaJtAZn.d.mts → index-BSTtFcQ6.d.mts} +142 -8
- package/dist/index-BSTtFcQ6.d.mts.map +1 -0
- package/dist/{index-DwozbmB4.d.ts → index-CFDGkI8n.d.ts} +142 -8
- package/dist/index-CFDGkI8n.d.ts.map +1 -0
- package/dist/index.d.mts +21 -65
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +21 -65
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -21
- package/dist/index.mjs.map +1 -1
- package/dist/{internal-log-uCSd1PMc.mjs → internal-log-Bg4V1cPg.mjs} +30 -2
- package/dist/internal-log-Bg4V1cPg.mjs.map +1 -0
- package/dist/{internal-log-b0Vp4qrB.js → internal-log-By4Govmu.js} +41 -1
- package/dist/internal-log-By4Govmu.js.map +1 -0
- package/dist/{logitron-logger-D2B75Oc7.d.ts → logitron-logger-D22Yb61K.d.mts} +13 -100
- package/dist/logitron-logger-D22Yb61K.d.mts.map +1 -0
- package/dist/{logitron-logger-oEd6wNhf.d.mts → logitron-logger-D_MYYrQt.d.ts} +13 -100
- package/dist/logitron-logger-D_MYYrQt.d.ts.map +1 -0
- package/dist/middleware.d.mts +4 -17
- package/dist/middleware.d.mts.map +1 -1
- package/dist/middleware.d.ts +4 -17
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +9 -39
- package/dist/middleware.js.map +1 -1
- package/dist/middleware.mjs +7 -37
- package/dist/middleware.mjs.map +1 -1
- package/dist/nest.d.mts +14 -7
- package/dist/nest.d.mts.map +1 -1
- package/dist/nest.d.ts +14 -7
- package/dist/nest.d.ts.map +1 -1
- package/dist/nest.js +15 -10
- package/dist/nest.js.map +1 -1
- package/dist/nest.mjs +15 -10
- package/dist/nest.mjs.map +1 -1
- package/dist/{transport.manager-eZ_EeC00.mjs → otel-Dt5riXuE.mjs} +173 -24
- package/dist/otel-Dt5riXuE.mjs.map +1 -0
- package/dist/{transport.manager-DkcEOlqV.js → otel-DyeH6DVR.js} +214 -23
- package/dist/otel-DyeH6DVR.js.map +1 -0
- package/dist/own-property-BWkibepN.js +40 -0
- package/dist/own-property-BWkibepN.js.map +1 -0
- package/dist/own-property-CjFw9qwZ.mjs +29 -0
- package/dist/own-property-CjFw9qwZ.mjs.map +1 -0
- package/dist/{request-trace-C_fvIDv4.mjs → request-trace-BgNykH9M.mjs} +1 -5
- package/dist/{request-trace-C_fvIDv4.mjs.map → request-trace-BgNykH9M.mjs.map} +1 -1
- package/dist/{request-trace-wTJdKp6-.js → request-trace-ByujsUZk.js} +1 -5
- package/dist/{request-trace-wTJdKp6-.js.map → request-trace-ByujsUZk.js.map} +1 -1
- package/dist/{safe-stringify-BMRl3EX3.mjs → safe-stringify-B5p5ktFe.mjs} +37 -12
- package/dist/safe-stringify-B5p5ktFe.mjs.map +1 -0
- package/dist/{safe-stringify-DLz1Kz3o.js → safe-stringify-J3sh-7YM.js} +37 -12
- package/dist/safe-stringify-J3sh-7YM.js.map +1 -0
- package/dist/{search-DUfWuzFP.js → search-CRjhHxe9.js} +269 -25
- package/dist/search-CRjhHxe9.js.map +1 -0
- package/dist/{search-CazwyX5Z.d.ts → search-DA3ft3X5.d.mts} +5 -2
- package/dist/search-DA3ft3X5.d.mts.map +1 -0
- package/dist/{search-CWMVYC-R.mjs → search-DAXKE-P9.mjs} +269 -25
- package/dist/search-DAXKE-P9.mjs.map +1 -0
- package/dist/{search-BH33XhuU.d.mts → search-DEl3Pe47.d.ts} +5 -2
- package/dist/search-DEl3Pe47.d.ts.map +1 -0
- package/dist/search.d.mts +1 -1
- package/dist/search.d.ts +1 -1
- package/dist/search.js +1 -1
- package/dist/search.mjs +1 -1
- package/dist/{secret-config-CBZBs0p1.js → secret-config-CmK2wVkr.js} +6 -5
- package/dist/secret-config-CmK2wVkr.js.map +1 -0
- package/dist/{secret-config-BegMLkYl.mjs → secret-config-Dhb6pqTU.mjs} +6 -5
- package/dist/secret-config-Dhb6pqTU.mjs.map +1 -0
- package/dist/{slack.transport-DxHOXlLu.d.mts → slack.transport-BDyENuR0.d.mts} +2 -2
- package/dist/{slack.transport-DxHOXlLu.d.mts.map → slack.transport-BDyENuR0.d.mts.map} +1 -1
- package/dist/{slack.transport-Ce96JBDk.mjs → slack.transport-BTEwsREY.mjs} +66 -15
- package/dist/slack.transport-BTEwsREY.mjs.map +1 -0
- package/dist/{slack.transport-DrirgDNy.d.ts → slack.transport-C6E0l4kw.d.ts} +2 -2
- package/dist/{slack.transport-DrirgDNy.d.ts.map → slack.transport-C6E0l4kw.d.ts.map} +1 -1
- package/dist/{slack.transport-Dlx3xvb7.js → slack.transport-UbYvOdKx.js} +67 -16
- package/dist/slack.transport-UbYvOdKx.js.map +1 -0
- package/dist/testing.d.mts +11 -4
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.d.ts +11 -4
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +38 -3
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +38 -3
- package/dist/testing.mjs.map +1 -1
- package/dist/{transport.types-BJVL1QQl.d.ts → transport.types-CzJq4IrF.d.mts} +14 -3
- package/dist/transport.types-CzJq4IrF.d.mts.map +1 -0
- package/dist/{transport.types-BJVL1QQl.d.mts → transport.types-CzJq4IrF.d.ts} +14 -3
- package/dist/transport.types-CzJq4IrF.d.ts.map +1 -0
- package/dist/transports.d.mts +25 -13
- package/dist/transports.d.mts.map +1 -1
- package/dist/transports.d.ts +25 -13
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +15 -15
- package/dist/transports.mjs +6 -6
- package/dist/worker-entry.js +105 -24
- package/dist/worker.d.mts +1 -1
- package/dist/worker.d.ts +1 -1
- package/dist/worker.js +1 -1
- package/dist/worker.mjs +1 -1
- package/dist/{worker.transport-BuPwBi3d.d.ts → worker.transport-B9mCQSM1.d.ts} +7 -2
- package/dist/worker.transport-B9mCQSM1.d.ts.map +1 -0
- package/dist/{worker.transport-hJay1wxA.d.mts → worker.transport-Bl8lFRck.d.mts} +7 -2
- package/dist/worker.transport-Bl8lFRck.d.mts.map +1 -0
- package/dist/{worker.transport-DLVA4y2e.mjs → worker.transport-BmmOKb1-.mjs} +13 -10
- package/dist/worker.transport-BmmOKb1-.mjs.map +1 -0
- package/dist/{worker.transport-C6GNl_r2.js → worker.transport-DxxbqQCG.js} +13 -10
- package/dist/worker.transport-DxxbqQCG.js.map +1 -0
- package/package.json +33 -65
- package/dist/async-context-B05ArHgM.mjs.map +0 -1
- package/dist/async-context-DTQgi8f7.js.map +0 -1
- package/dist/azure-monitor.transport-BPbgjATu.mjs.map +0 -1
- package/dist/azure-monitor.transport-CwbOLZHB.js.map +0 -1
- package/dist/builder-D70z6kjj.mjs.map +0 -1
- package/dist/builder-M7NoaugM.js.map +0 -1
- package/dist/cloudwatch.transport-B2wKQFF7.js.map +0 -1
- package/dist/cloudwatch.transport-BTvYfLs9.mjs.map +0 -1
- package/dist/entry-fields-CGuvT2R0.mjs.map +0 -1
- package/dist/entry-fields-RLd1jCoR.js.map +0 -1
- package/dist/gcp.transport-CGKopAhQ.mjs.map +0 -1
- package/dist/gcp.transport-KZe9hCAR.js.map +0 -1
- package/dist/index-DwozbmB4.d.ts.map +0 -1
- package/dist/index-xqaJtAZn.d.mts.map +0 -1
- package/dist/internal-log-b0Vp4qrB.js.map +0 -1
- package/dist/internal-log-uCSd1PMc.mjs.map +0 -1
- package/dist/logitron-logger-D2B75Oc7.d.ts.map +0 -1
- package/dist/logitron-logger-oEd6wNhf.d.mts.map +0 -1
- package/dist/safe-stringify-BMRl3EX3.mjs.map +0 -1
- package/dist/safe-stringify-DLz1Kz3o.js.map +0 -1
- package/dist/search-BH33XhuU.d.mts.map +0 -1
- package/dist/search-CWMVYC-R.mjs.map +0 -1
- package/dist/search-CazwyX5Z.d.ts.map +0 -1
- package/dist/search-DUfWuzFP.js.map +0 -1
- package/dist/secret-config-BegMLkYl.mjs.map +0 -1
- package/dist/secret-config-CBZBs0p1.js.map +0 -1
- package/dist/slack.transport-Ce96JBDk.mjs.map +0 -1
- package/dist/slack.transport-Dlx3xvb7.js.map +0 -1
- package/dist/transport.manager-DkcEOlqV.js.map +0 -1
- package/dist/transport.manager-eZ_EeC00.mjs.map +0 -1
- package/dist/transport.types-BJVL1QQl.d.mts.map +0 -1
- package/dist/transport.types-BJVL1QQl.d.ts.map +0 -1
- package/dist/worker.transport-BuPwBi3d.d.ts.map +0 -1
- package/dist/worker.transport-C6GNl_r2.js.map +0 -1
- package/dist/worker.transport-DLVA4y2e.mjs.map +0 -1
- package/dist/worker.transport-hJay1wxA.d.mts.map +0 -1
package/dist/testing.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as LogixiaLoggerInstance, g as LogEntry } from "./index-BSTtFcQ6.mjs";
|
|
2
2
|
interface MockLogCall {
|
|
3
3
|
level: string;
|
|
4
4
|
message: string;
|
|
@@ -10,8 +10,8 @@ interface MockLogCall {
|
|
|
10
10
|
}
|
|
11
11
|
type LogMatcher = string | RegExp | ((call: MockLogCall) => boolean) | Partial<Record<'message' | 'level' | string, unknown>>;
|
|
12
12
|
interface MockLoggerInstance {
|
|
13
|
-
/** The logger itself — pass this where an IBaseLogger is expected. */
|
|
14
|
-
readonly logger:
|
|
13
|
+
/** The logger itself — pass this where an IBaseLogger or ILogger is expected. */
|
|
14
|
+
readonly logger: LogixiaLoggerInstance;
|
|
15
15
|
/** Every call recorded across all levels, in insertion order. */
|
|
16
16
|
readonly calls: MockLogCall[];
|
|
17
17
|
/**
|
|
@@ -40,6 +40,11 @@ interface MockLoggerInstance {
|
|
|
40
40
|
expectNoLog(level: string, matcher?: LogMatcher): void;
|
|
41
41
|
/** Clear all recorded calls. Call between tests. */
|
|
42
42
|
reset(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Make `logger.healthCheck()` report healthy or unhealthy, to exercise code that
|
|
45
|
+
* reacts to a failing logger. Shared with child loggers.
|
|
46
|
+
*/
|
|
47
|
+
setHealth(healthy: boolean, details?: Record<string, unknown>): void;
|
|
43
48
|
/**
|
|
44
49
|
* Silence — when true, the mock suppresses all console output from the
|
|
45
50
|
* logger. Default: true.
|
|
@@ -49,15 +54,17 @@ interface MockLoggerInstance {
|
|
|
49
54
|
/**
|
|
50
55
|
* Create a mock logger for use in tests.
|
|
51
56
|
*
|
|
52
|
-
* The returned object implements `
|
|
57
|
+
* The returned object implements `ILogger` and additionally exposes `.calls`,
|
|
53
58
|
* `.getCalls()`, `.getLastCall()`, `.expectLog()`, `.expectNoLog()`, and `.reset()`.
|
|
54
59
|
*
|
|
55
60
|
* @param options.silent Suppress console output (default: true)
|
|
56
61
|
* @param options.context Optional context label written into every `entry.context`
|
|
62
|
+
* @param options.healthy Initial `healthCheck()` result (default: true); change later with `setHealth()`
|
|
57
63
|
*/
|
|
58
64
|
export declare function createMockLogger(options?: {
|
|
59
65
|
silent?: boolean;
|
|
60
66
|
context?: string;
|
|
67
|
+
healthy?: boolean;
|
|
61
68
|
}): MockLoggerInstance;
|
|
62
69
|
export type { LogMatcher, MockLogCall, MockLoggerInstance };
|
|
63
70
|
//# sourceMappingURL=testing.d.mts.map
|
package/dist/testing.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.mts","names":[],"sources":["../src/testing/mock-logger.ts"],"mappings":";UAoBiB;EACf;EACA;EACA,OAAO;;EAEP,OAAO,KAAK;IAA+C,OAAO;;;KAGxD,sBAER,WACE,MAAM,2BACR,QAAQ;UAEK;;WAEN,QAAQ;;WAER,OAAO;;;;;EAKhB,SAAS,iBAAiB;;EAE1B,YAAY,iBAAiB;;;;;;;;;;;;;EAa7B,UAAU,eAAe,UAAU;;;;EAInC,YAAY,eAAe,UAAU;;EAErC;;;;;EAKA
|
|
1
|
+
{"version":3,"file":"testing.d.mts","names":[],"sources":["../src/testing/mock-logger.ts"],"mappings":";UAoBiB;EACf;EACA;EACA,OAAO;;EAEP,OAAO,KAAK;IAA+C,OAAO;;;KAGxD,sBAER,WACE,MAAM,2BACR,QAAQ;UAEK;;WAEN,QAAQ;;WAER,OAAO;;;;;EAKhB,SAAS,iBAAiB;;EAE1B,YAAY,iBAAiB;;;;;;;;;;;;;EAa7B,UAAU,eAAe,UAAU;;;;EAInC,YAAY,eAAe,UAAU;;EAErC;;;;;EAKA,UAAU,kBAAkB,UAAU;;;;;EAKtC;;;;;;;;;;;;wBAqDc,iBACd;EAAW;EAAkB;EAAkB;IAC9C"}
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as LogixiaLoggerInstance, g as LogEntry } from "./index-CFDGkI8n.js";
|
|
2
2
|
interface MockLogCall {
|
|
3
3
|
level: string;
|
|
4
4
|
message: string;
|
|
@@ -10,8 +10,8 @@ interface MockLogCall {
|
|
|
10
10
|
}
|
|
11
11
|
type LogMatcher = string | RegExp | ((call: MockLogCall) => boolean) | Partial<Record<'message' | 'level' | string, unknown>>;
|
|
12
12
|
interface MockLoggerInstance {
|
|
13
|
-
/** The logger itself — pass this where an IBaseLogger is expected. */
|
|
14
|
-
readonly logger:
|
|
13
|
+
/** The logger itself — pass this where an IBaseLogger or ILogger is expected. */
|
|
14
|
+
readonly logger: LogixiaLoggerInstance;
|
|
15
15
|
/** Every call recorded across all levels, in insertion order. */
|
|
16
16
|
readonly calls: MockLogCall[];
|
|
17
17
|
/**
|
|
@@ -40,6 +40,11 @@ interface MockLoggerInstance {
|
|
|
40
40
|
expectNoLog(level: string, matcher?: LogMatcher): void;
|
|
41
41
|
/** Clear all recorded calls. Call between tests. */
|
|
42
42
|
reset(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Make `logger.healthCheck()` report healthy or unhealthy, to exercise code that
|
|
45
|
+
* reacts to a failing logger. Shared with child loggers.
|
|
46
|
+
*/
|
|
47
|
+
setHealth(healthy: boolean, details?: Record<string, unknown>): void;
|
|
43
48
|
/**
|
|
44
49
|
* Silence — when true, the mock suppresses all console output from the
|
|
45
50
|
* logger. Default: true.
|
|
@@ -49,15 +54,17 @@ interface MockLoggerInstance {
|
|
|
49
54
|
/**
|
|
50
55
|
* Create a mock logger for use in tests.
|
|
51
56
|
*
|
|
52
|
-
* The returned object implements `
|
|
57
|
+
* The returned object implements `ILogger` and additionally exposes `.calls`,
|
|
53
58
|
* `.getCalls()`, `.getLastCall()`, `.expectLog()`, `.expectNoLog()`, and `.reset()`.
|
|
54
59
|
*
|
|
55
60
|
* @param options.silent Suppress console output (default: true)
|
|
56
61
|
* @param options.context Optional context label written into every `entry.context`
|
|
62
|
+
* @param options.healthy Initial `healthCheck()` result (default: true); change later with `setHealth()`
|
|
57
63
|
*/
|
|
58
64
|
export declare function createMockLogger(options?: {
|
|
59
65
|
silent?: boolean;
|
|
60
66
|
context?: string;
|
|
67
|
+
healthy?: boolean;
|
|
61
68
|
}): MockLoggerInstance;
|
|
62
69
|
export type { LogMatcher, MockLogCall, MockLoggerInstance };
|
|
63
70
|
//# sourceMappingURL=testing.d.ts.map
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","names":[],"sources":["../src/testing/mock-logger.ts"],"mappings":";UAoBiB;EACf;EACA;EACA,OAAO;;EAEP,OAAO,KAAK;IAA+C,OAAO;;;KAGxD,sBAER,WACE,MAAM,2BACR,QAAQ;UAEK;;WAEN,QAAQ;;WAER,OAAO;;;;;EAKhB,SAAS,iBAAiB;;EAE1B,YAAY,iBAAiB;;;;;;;;;;;;;EAa7B,UAAU,eAAe,UAAU;;;;EAInC,YAAY,eAAe,UAAU;;EAErC;;;;;EAKA
|
|
1
|
+
{"version":3,"file":"testing.d.ts","names":[],"sources":["../src/testing/mock-logger.ts"],"mappings":";UAoBiB;EACf;EACA;EACA,OAAO;;EAEP,OAAO,KAAK;IAA+C,OAAO;;;KAGxD,sBAER,WACE,MAAM,2BACR,QAAQ;UAEK;;WAEN,QAAQ;;WAER,OAAO;;;;;EAKhB,SAAS,iBAAiB;;EAE1B,YAAY,iBAAiB;;;;;;;;;;;;;EAa7B,UAAU,eAAe,UAAU;;;;EAInC,YAAY,eAAe,UAAU;;EAErC;;;;;EAKA,UAAU,kBAAkB,UAAU;;;;;EAKtC;;;;;;;;;;;;wBAqDc,iBACd;EAAW;EAAkB;EAAkB;IAC9C"}
|
package/dist/testing.js
CHANGED
|
@@ -31,13 +31,23 @@ function formatCalls(calls) {
|
|
|
31
31
|
/**
|
|
32
32
|
* Create a mock logger for use in tests.
|
|
33
33
|
*
|
|
34
|
-
* The returned object implements `
|
|
34
|
+
* The returned object implements `ILogger` and additionally exposes `.calls`,
|
|
35
35
|
* `.getCalls()`, `.getLastCall()`, `.expectLog()`, `.expectNoLog()`, and `.reset()`.
|
|
36
36
|
*
|
|
37
37
|
* @param options.silent Suppress console output (default: true)
|
|
38
38
|
* @param options.context Optional context label written into every `entry.context`
|
|
39
|
+
* @param options.healthy Initial `healthCheck()` result (default: true); change later with `setHealth()`
|
|
39
40
|
*/
|
|
40
41
|
function createMockLogger(options = {}) {
|
|
42
|
+
return buildMockLogger(options, {
|
|
43
|
+
namespaceLevels: {},
|
|
44
|
+
health: {
|
|
45
|
+
healthy: options.healthy ?? true,
|
|
46
|
+
details: {}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function buildMockLogger(options, shared) {
|
|
41
51
|
const { silent = true, context } = options;
|
|
42
52
|
const _calls = [];
|
|
43
53
|
function record(level, messageOrError, data) {
|
|
@@ -94,6 +104,18 @@ function createMockLogger(options = {}) {
|
|
|
94
104
|
getLevel() {
|
|
95
105
|
return "info";
|
|
96
106
|
},
|
|
107
|
+
setNamespaceLevels(levels) {
|
|
108
|
+
shared.namespaceLevels = { ...levels };
|
|
109
|
+
},
|
|
110
|
+
patchNamespaceLevels(levels) {
|
|
111
|
+
shared.namespaceLevels = {
|
|
112
|
+
...shared.namespaceLevels,
|
|
113
|
+
...levels
|
|
114
|
+
};
|
|
115
|
+
},
|
|
116
|
+
getNamespaceLevels() {
|
|
117
|
+
return { ...shared.namespaceLevels };
|
|
118
|
+
},
|
|
97
119
|
setContext(_ctx) {},
|
|
98
120
|
getContext() {
|
|
99
121
|
return context;
|
|
@@ -116,10 +138,17 @@ function createMockLogger(options = {}) {
|
|
|
116
138
|
return [];
|
|
117
139
|
},
|
|
118
140
|
child(ctx, _data) {
|
|
119
|
-
return
|
|
141
|
+
return buildMockLogger({
|
|
120
142
|
silent,
|
|
121
143
|
context: ctx
|
|
122
|
-
}).logger;
|
|
144
|
+
}, shared).logger;
|
|
145
|
+
},
|
|
146
|
+
async flush() {},
|
|
147
|
+
async healthCheck() {
|
|
148
|
+
return {
|
|
149
|
+
healthy: shared.health.healthy,
|
|
150
|
+
details: { ...shared.health.details }
|
|
151
|
+
};
|
|
123
152
|
},
|
|
124
153
|
async close() {},
|
|
125
154
|
use(_plugin) {
|
|
@@ -160,6 +189,12 @@ function createMockLogger(options = {}) {
|
|
|
160
189
|
reset() {
|
|
161
190
|
_calls.length = 0;
|
|
162
191
|
},
|
|
192
|
+
setHealth(healthy, details = {}) {
|
|
193
|
+
shared.health = {
|
|
194
|
+
healthy,
|
|
195
|
+
details
|
|
196
|
+
};
|
|
197
|
+
},
|
|
163
198
|
silent
|
|
164
199
|
};
|
|
165
200
|
return instance;
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","names":[],"sources":["../src/testing/mock-logger.ts"],"sourcesContent":["/**\n * logixia/testing — Zero-dependency mock logger for Vitest & Jest.\n *\n * @example\n * ```ts\n * import { createMockLogger } from 'logixia/testing';\n *\n * const mock = createMockLogger();\n * await myService.doSomething(mock.logger);\n *\n * mock.expectLog('info', { message: 'order created' });\n * mock.expectLog('error', { message: /failed/ });\n * mock.reset();\n * ```\n */\n\nimport type { IBaseLogger, LogEntry } from '../types';\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface MockLogCall {\n level: string;\n message: string;\n data?: Record<string, unknown>;\n /** Full LogEntry shape for assertions that inspect the complete record. */\n entry: Pick<LogEntry, 'level' | 'message' | 'context'> & { data?: Record<string, unknown> };\n}\n\nexport type LogMatcher =\n | string\n | RegExp\n | ((call: MockLogCall) => boolean)\n | Partial<Record<'message' | 'level' | string, unknown>>;\n\nexport interface MockLoggerInstance {\n /** The logger itself — pass this where an IBaseLogger is expected. */\n readonly logger: IBaseLogger;\n /** Every call recorded across all levels, in insertion order. */\n readonly calls: MockLogCall[];\n /**\n * Get all calls for a specific level (case-insensitive). If `level` is\n * omitted, returns all calls across every level.\n */\n getCalls(level?: string): MockLogCall[];\n /** Return the most recent call, optionally filtered by level. */\n getLastCall(level?: string): MockLogCall | undefined;\n /**\n * Assert that at least one recorded call matches `matcher`.\n *\n * - string → exact message match\n * - RegExp → message test\n * - function → receives the full MockLogCall\n * - object → every key/value must match (supports RegExp values)\n *\n * Throws an Error with a descriptive message if the assertion fails (works\n * with both Vitest `expect` and Jest matchers via `.toThrow()`, or you can\n * let it propagate directly).\n */\n expectLog(level: string, matcher?: LogMatcher): void;\n /**\n * Assert that NO recorded call matches `matcher` at the given level.\n */\n expectNoLog(level: string, matcher?: LogMatcher): void;\n /** Clear all recorded calls. Call between tests. */\n reset(): void;\n /**\n * Silence — when true, the mock suppresses all console output from the\n * logger. Default: true.\n */\n silent: boolean;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveCallField(call: MockLogCall, key: string): unknown {\n if (key === 'message') return call.message;\n if (key === 'level') return call.level;\n return call.data?.[key] ?? (call.entry as Record<string, unknown>)[key];\n}\n\nfunction formatMatcherDescription(matcher: LogMatcher | undefined): string {\n if (matcher === undefined) return '(any)';\n if (matcher instanceof RegExp) return matcher.toString();\n return JSON.stringify(matcher);\n}\n\nfunction matchesCall(call: MockLogCall, matcher?: LogMatcher): boolean {\n if (matcher === undefined) return true;\n if (typeof matcher === 'string') return call.message === matcher;\n if (matcher instanceof RegExp) return matcher.test(call.message);\n if (typeof matcher === 'function') return matcher(call);\n // Object shape: every key/value must match\n for (const [key, expected] of Object.entries(matcher)) {\n const actual = resolveCallField(call, key);\n if (expected instanceof RegExp) {\n if (!expected.test(String(actual ?? ''))) return false;\n } else {\n if (actual !== expected) return false;\n }\n }\n return true;\n}\n\nfunction formatCalls(calls: MockLogCall[]): string {\n if (calls.length === 0) return ' (no calls recorded)';\n return calls\n .map((c) => ` [${c.level}] \"${c.message}\" ${c.data ? JSON.stringify(c.data) : ''}`)\n .join('\\n');\n}\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Create a mock logger for use in tests.\n *\n * The returned object implements `IBaseLogger` and additionally exposes `.calls`,\n * `.getCalls()`, `.getLastCall()`, `.expectLog()`, `.expectNoLog()`, and `.reset()`.\n *\n * @param options.silent Suppress console output (default: true)\n * @param options.context Optional context label written into every `entry.context`\n */\nexport function createMockLogger(\n options: { silent?: boolean; context?: string } = {}\n): MockLoggerInstance {\n const { silent = true, context } = options;\n const _calls: MockLogCall[] = [];\n\n function record(\n level: string,\n messageOrError: string | Error,\n data?: Record<string, unknown>\n ): void {\n const message = messageOrError instanceof Error ? messageOrError.message : messageOrError;\n const extraData =\n messageOrError instanceof Error\n ? { ...data, error: { message: messageOrError.message, stack: messageOrError.stack } }\n : data;\n\n _calls.push({\n level,\n message,\n ...(extraData !== undefined ? { data: extraData } : {}),\n entry: {\n level,\n message,\n ...(context !== undefined ? { context } : {}),\n ...(extraData !== undefined ? { data: extraData } : {}),\n },\n });\n }\n\n const logger: IBaseLogger = {\n async error(messageOrError, data) {\n record('error', messageOrError as string | Error, data);\n },\n async warn(message, data) {\n record('warn', message, data);\n },\n async info(message, data) {\n record('info', message, data);\n },\n async debug(message, data) {\n record('debug', message, data);\n },\n async trace(message, data) {\n record('trace', message, data);\n },\n async verbose(message, data) {\n record('verbose', message, data);\n },\n async logLevel(level, message, data) {\n record(level, message, data);\n },\n\n time(_label) {\n /* no-op in tests */\n },\n async timeEnd(_label) {\n return 0;\n },\n async timeAsync(_label, fn) {\n return fn();\n },\n\n setLevel(_level) {\n /* no-op */\n },\n getLevel() {\n return 'info';\n },\n setContext(_ctx) {\n /* no-op */\n },\n getContext() {\n return context;\n },\n\n enableField(_f) {\n /* no-op */\n },\n disableField(_f) {\n /* no-op */\n },\n isFieldEnabled(_f) {\n return true;\n },\n getFieldState() {\n return {};\n },\n resetFieldState() {\n /* no-op */\n },\n\n enableTransportLevelPrompting() {\n /* no-op */\n },\n disableTransportLevelPrompting() {\n /* no-op */\n },\n setTransportLevels(_id, _levels) {\n /* no-op */\n },\n getTransportLevels(_id): string[] | undefined {\n return undefined;\n },\n clearTransportLevelPreferences() {\n /* no-op */\n },\n getAvailableTransports() {\n return [];\n },\n\n child(ctx, _data) {\n return createMockLogger({ silent, context: ctx }).logger;\n },\n async close() {\n /* no-op */\n },\n\n // Plugin API stubs — mock logger does not run plugins\n use(_plugin) {\n return this;\n },\n unuse(_pluginName) {\n return this;\n },\n };\n\n const instance: MockLoggerInstance = {\n get logger() {\n return logger;\n },\n get calls() {\n return _calls;\n },\n\n getCalls(level?: string): MockLogCall[] {\n if (!level) return [..._calls];\n const l = level.toLowerCase();\n return _calls.filter((c) => c.level.toLowerCase() === l);\n },\n\n getLastCall(level?: string): MockLogCall | undefined {\n const filtered = level\n ? _calls.filter((c) => c.level.toLowerCase() === level.toLowerCase())\n : _calls;\n return filtered[filtered.length - 1];\n },\n\n expectLog(level: string, matcher?: LogMatcher): void {\n const levelCalls = instance.getCalls(level);\n const matched = levelCalls.some((c) => matchesCall(c, matcher));\n if (!matched) {\n const matcherDesc = formatMatcherDescription(matcher);\n throw new Error(\n `Expected at least one [${level}] log matching ${matcherDesc}.\\n` +\n `Recorded calls:\\n${formatCalls(_calls)}`\n );\n }\n },\n\n expectNoLog(level: string, matcher?: LogMatcher): void {\n const levelCalls = instance.getCalls(level);\n const matched = levelCalls.some((c) => matchesCall(c, matcher));\n if (matched) {\n const matcherDesc = formatMatcherDescription(matcher);\n throw new Error(\n `Expected NO [${level}] log matching ${matcherDesc}, but one was found.\\n` +\n `Recorded calls:\\n${formatCalls(_calls)}`\n );\n }\n },\n\n reset(): void {\n _calls.length = 0;\n },\n\n silent,\n };\n\n return instance;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testing.js","names":[],"sources":["../src/testing/mock-logger.ts"],"sourcesContent":["/**\n * logixia/testing — Zero-dependency mock logger for Vitest & Jest.\n *\n * @example\n * ```ts\n * import { createMockLogger } from 'logixia/testing';\n *\n * const mock = createMockLogger();\n * await myService.doSomething(mock.logger);\n *\n * mock.expectLog('info', { message: 'order created' });\n * mock.expectLog('error', { message: /failed/ });\n * mock.reset();\n * ```\n */\n\nimport type { LogEntry, LogixiaLoggerInstance, NamespaceLevels } from '../types';\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface MockLogCall {\n level: string;\n message: string;\n data?: Record<string, unknown>;\n /** Full LogEntry shape for assertions that inspect the complete record. */\n entry: Pick<LogEntry, 'level' | 'message' | 'context'> & { data?: Record<string, unknown> };\n}\n\nexport type LogMatcher =\n | string\n | RegExp\n | ((call: MockLogCall) => boolean)\n | Partial<Record<'message' | 'level' | string, unknown>>;\n\nexport interface MockLoggerInstance {\n /** The logger itself — pass this where an IBaseLogger or ILogger is expected. */\n readonly logger: LogixiaLoggerInstance;\n /** Every call recorded across all levels, in insertion order. */\n readonly calls: MockLogCall[];\n /**\n * Get all calls for a specific level (case-insensitive). If `level` is\n * omitted, returns all calls across every level.\n */\n getCalls(level?: string): MockLogCall[];\n /** Return the most recent call, optionally filtered by level. */\n getLastCall(level?: string): MockLogCall | undefined;\n /**\n * Assert that at least one recorded call matches `matcher`.\n *\n * - string → exact message match\n * - RegExp → message test\n * - function → receives the full MockLogCall\n * - object → every key/value must match (supports RegExp values)\n *\n * Throws an Error with a descriptive message if the assertion fails (works\n * with both Vitest `expect` and Jest matchers via `.toThrow()`, or you can\n * let it propagate directly).\n */\n expectLog(level: string, matcher?: LogMatcher): void;\n /**\n * Assert that NO recorded call matches `matcher` at the given level.\n */\n expectNoLog(level: string, matcher?: LogMatcher): void;\n /** Clear all recorded calls. Call between tests. */\n reset(): void;\n /**\n * Make `logger.healthCheck()` report healthy or unhealthy, to exercise code that\n * reacts to a failing logger. Shared with child loggers.\n */\n setHealth(healthy: boolean, details?: Record<string, unknown>): void;\n /**\n * Silence — when true, the mock suppresses all console output from the\n * logger. Default: true.\n */\n silent: boolean;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveCallField(call: MockLogCall, key: string): unknown {\n if (key === 'message') return call.message;\n if (key === 'level') return call.level;\n return call.data?.[key] ?? (call.entry as Record<string, unknown>)[key];\n}\n\nfunction formatMatcherDescription(matcher: LogMatcher | undefined): string {\n if (matcher === undefined) return '(any)';\n if (matcher instanceof RegExp) return matcher.toString();\n return JSON.stringify(matcher);\n}\n\nfunction matchesCall(call: MockLogCall, matcher?: LogMatcher): boolean {\n if (matcher === undefined) return true;\n if (typeof matcher === 'string') return call.message === matcher;\n if (matcher instanceof RegExp) return matcher.test(call.message);\n if (typeof matcher === 'function') return matcher(call);\n // Object shape: every key/value must match\n for (const [key, expected] of Object.entries(matcher)) {\n const actual = resolveCallField(call, key);\n if (expected instanceof RegExp) {\n if (!expected.test(String(actual ?? ''))) return false;\n } else {\n if (actual !== expected) return false;\n }\n }\n return true;\n}\n\nfunction formatCalls(calls: MockLogCall[]): string {\n if (calls.length === 0) return ' (no calls recorded)';\n return calls\n .map((c) => ` [${c.level}] \"${c.message}\" ${c.data ? JSON.stringify(c.data) : ''}`)\n .join('\\n');\n}\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Create a mock logger for use in tests.\n *\n * The returned object implements `ILogger` and additionally exposes `.calls`,\n * `.getCalls()`, `.getLastCall()`, `.expectLog()`, `.expectNoLog()`, and `.reset()`.\n *\n * @param options.silent Suppress console output (default: true)\n * @param options.context Optional context label written into every `entry.context`\n * @param options.healthy Initial `healthCheck()` result (default: true); change later with `setHealth()`\n */\nexport function createMockLogger(\n options: { silent?: boolean; context?: string; healthy?: boolean } = {}\n): MockLoggerInstance {\n return buildMockLogger(options, {\n namespaceLevels: {},\n health: { healthy: options.healthy ?? true, details: {} },\n });\n}\n\n/** State a mock logger shares with its children, like the real logger. */\ninterface SharedMockState {\n namespaceLevels: NamespaceLevels;\n health: { healthy: boolean; details: Record<string, unknown> };\n}\n\nfunction buildMockLogger(\n options: { silent?: boolean; context?: string },\n shared: SharedMockState\n): MockLoggerInstance {\n const { silent = true, context } = options;\n const _calls: MockLogCall[] = [];\n\n function record(\n level: string,\n messageOrError: string | Error,\n data?: Record<string, unknown>\n ): void {\n const message = messageOrError instanceof Error ? messageOrError.message : messageOrError;\n const extraData =\n messageOrError instanceof Error\n ? { ...data, error: { message: messageOrError.message, stack: messageOrError.stack } }\n : data;\n\n _calls.push({\n level,\n message,\n ...(extraData !== undefined ? { data: extraData } : {}),\n entry: {\n level,\n message,\n ...(context !== undefined ? { context } : {}),\n ...(extraData !== undefined ? { data: extraData } : {}),\n },\n });\n }\n\n const logger: LogixiaLoggerInstance = {\n async error(messageOrError, data) {\n record('error', messageOrError as string | Error, data);\n },\n async warn(message, data) {\n record('warn', message, data);\n },\n async info(message, data) {\n record('info', message, data);\n },\n async debug(message, data) {\n record('debug', message, data);\n },\n async trace(message, data) {\n record('trace', message, data);\n },\n async verbose(message, data) {\n record('verbose', message, data);\n },\n async logLevel(level, message, data) {\n record(level, message, data);\n },\n\n time(_label) {\n /* no-op in tests */\n },\n async timeEnd(_label) {\n return 0;\n },\n async timeAsync(_label, fn) {\n return fn();\n },\n\n setLevel(_level) {\n /* no-op */\n },\n getLevel() {\n return 'info';\n },\n setNamespaceLevels(levels) {\n shared.namespaceLevels = { ...levels };\n },\n patchNamespaceLevels(levels) {\n shared.namespaceLevels = { ...shared.namespaceLevels, ...levels };\n },\n getNamespaceLevels() {\n return { ...shared.namespaceLevels };\n },\n setContext(_ctx) {\n /* no-op */\n },\n getContext() {\n return context;\n },\n\n enableField(_f) {\n /* no-op */\n },\n disableField(_f) {\n /* no-op */\n },\n isFieldEnabled(_f) {\n return true;\n },\n getFieldState() {\n return {};\n },\n resetFieldState() {\n /* no-op */\n },\n\n enableTransportLevelPrompting() {\n /* no-op */\n },\n disableTransportLevelPrompting() {\n /* no-op */\n },\n setTransportLevels(_id, _levels) {\n /* no-op */\n },\n getTransportLevels(_id): string[] | undefined {\n return undefined;\n },\n clearTransportLevelPreferences() {\n /* no-op */\n },\n getAvailableTransports() {\n return [];\n },\n\n child(ctx, _data) {\n return buildMockLogger({ silent, context: ctx }, shared).logger;\n },\n async flush() {\n /* no-op */\n },\n async healthCheck() {\n return { healthy: shared.health.healthy, details: { ...shared.health.details } };\n },\n async close() {\n /* no-op */\n },\n\n // Plugin API stubs — mock logger does not run plugins\n use(_plugin) {\n return this;\n },\n unuse(_pluginName) {\n return this;\n },\n };\n\n const instance: MockLoggerInstance = {\n get logger() {\n return logger;\n },\n get calls() {\n return _calls;\n },\n\n getCalls(level?: string): MockLogCall[] {\n if (!level) return [..._calls];\n const l = level.toLowerCase();\n return _calls.filter((c) => c.level.toLowerCase() === l);\n },\n\n getLastCall(level?: string): MockLogCall | undefined {\n const filtered = level\n ? _calls.filter((c) => c.level.toLowerCase() === level.toLowerCase())\n : _calls;\n return filtered[filtered.length - 1];\n },\n\n expectLog(level: string, matcher?: LogMatcher): void {\n const levelCalls = instance.getCalls(level);\n const matched = levelCalls.some((c) => matchesCall(c, matcher));\n if (!matched) {\n const matcherDesc = formatMatcherDescription(matcher);\n throw new Error(\n `Expected at least one [${level}] log matching ${matcherDesc}.\\n` +\n `Recorded calls:\\n${formatCalls(_calls)}`\n );\n }\n },\n\n expectNoLog(level: string, matcher?: LogMatcher): void {\n const levelCalls = instance.getCalls(level);\n const matched = levelCalls.some((c) => matchesCall(c, matcher));\n if (matched) {\n const matcherDesc = formatMatcherDescription(matcher);\n throw new Error(\n `Expected NO [${level}] log matching ${matcherDesc}, but one was found.\\n` +\n `Recorded calls:\\n${formatCalls(_calls)}`\n );\n }\n },\n\n reset(): void {\n _calls.length = 0;\n },\n\n setHealth(healthy: boolean, details: Record<string, unknown> = {}): void {\n shared.health = { healthy, details };\n },\n\n silent,\n };\n\n return instance;\n}\n"],"mappings":"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"}
|
package/dist/testing.mjs
CHANGED
|
@@ -30,13 +30,23 @@ function formatCalls(calls) {
|
|
|
30
30
|
/**
|
|
31
31
|
* Create a mock logger for use in tests.
|
|
32
32
|
*
|
|
33
|
-
* The returned object implements `
|
|
33
|
+
* The returned object implements `ILogger` and additionally exposes `.calls`,
|
|
34
34
|
* `.getCalls()`, `.getLastCall()`, `.expectLog()`, `.expectNoLog()`, and `.reset()`.
|
|
35
35
|
*
|
|
36
36
|
* @param options.silent Suppress console output (default: true)
|
|
37
37
|
* @param options.context Optional context label written into every `entry.context`
|
|
38
|
+
* @param options.healthy Initial `healthCheck()` result (default: true); change later with `setHealth()`
|
|
38
39
|
*/
|
|
39
40
|
function createMockLogger(options = {}) {
|
|
41
|
+
return buildMockLogger(options, {
|
|
42
|
+
namespaceLevels: {},
|
|
43
|
+
health: {
|
|
44
|
+
healthy: options.healthy ?? true,
|
|
45
|
+
details: {}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function buildMockLogger(options, shared) {
|
|
40
50
|
const { silent = true, context } = options;
|
|
41
51
|
const _calls = [];
|
|
42
52
|
function record(level, messageOrError, data) {
|
|
@@ -93,6 +103,18 @@ function createMockLogger(options = {}) {
|
|
|
93
103
|
getLevel() {
|
|
94
104
|
return "info";
|
|
95
105
|
},
|
|
106
|
+
setNamespaceLevels(levels) {
|
|
107
|
+
shared.namespaceLevels = { ...levels };
|
|
108
|
+
},
|
|
109
|
+
patchNamespaceLevels(levels) {
|
|
110
|
+
shared.namespaceLevels = {
|
|
111
|
+
...shared.namespaceLevels,
|
|
112
|
+
...levels
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
getNamespaceLevels() {
|
|
116
|
+
return { ...shared.namespaceLevels };
|
|
117
|
+
},
|
|
96
118
|
setContext(_ctx) {},
|
|
97
119
|
getContext() {
|
|
98
120
|
return context;
|
|
@@ -115,10 +137,17 @@ function createMockLogger(options = {}) {
|
|
|
115
137
|
return [];
|
|
116
138
|
},
|
|
117
139
|
child(ctx, _data) {
|
|
118
|
-
return
|
|
140
|
+
return buildMockLogger({
|
|
119
141
|
silent,
|
|
120
142
|
context: ctx
|
|
121
|
-
}).logger;
|
|
143
|
+
}, shared).logger;
|
|
144
|
+
},
|
|
145
|
+
async flush() {},
|
|
146
|
+
async healthCheck() {
|
|
147
|
+
return {
|
|
148
|
+
healthy: shared.health.healthy,
|
|
149
|
+
details: { ...shared.health.details }
|
|
150
|
+
};
|
|
122
151
|
},
|
|
123
152
|
async close() {},
|
|
124
153
|
use(_plugin) {
|
|
@@ -159,6 +188,12 @@ function createMockLogger(options = {}) {
|
|
|
159
188
|
reset() {
|
|
160
189
|
_calls.length = 0;
|
|
161
190
|
},
|
|
191
|
+
setHealth(healthy, details = {}) {
|
|
192
|
+
shared.health = {
|
|
193
|
+
healthy,
|
|
194
|
+
details
|
|
195
|
+
};
|
|
196
|
+
},
|
|
162
197
|
silent
|
|
163
198
|
};
|
|
164
199
|
return instance;
|
package/dist/testing.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.mjs","names":[],"sources":["../src/testing/mock-logger.ts"],"sourcesContent":["/**\n * logixia/testing — Zero-dependency mock logger for Vitest & Jest.\n *\n * @example\n * ```ts\n * import { createMockLogger } from 'logixia/testing';\n *\n * const mock = createMockLogger();\n * await myService.doSomething(mock.logger);\n *\n * mock.expectLog('info', { message: 'order created' });\n * mock.expectLog('error', { message: /failed/ });\n * mock.reset();\n * ```\n */\n\nimport type { IBaseLogger, LogEntry } from '../types';\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface MockLogCall {\n level: string;\n message: string;\n data?: Record<string, unknown>;\n /** Full LogEntry shape for assertions that inspect the complete record. */\n entry: Pick<LogEntry, 'level' | 'message' | 'context'> & { data?: Record<string, unknown> };\n}\n\nexport type LogMatcher =\n | string\n | RegExp\n | ((call: MockLogCall) => boolean)\n | Partial<Record<'message' | 'level' | string, unknown>>;\n\nexport interface MockLoggerInstance {\n /** The logger itself — pass this where an IBaseLogger is expected. */\n readonly logger: IBaseLogger;\n /** Every call recorded across all levels, in insertion order. */\n readonly calls: MockLogCall[];\n /**\n * Get all calls for a specific level (case-insensitive). If `level` is\n * omitted, returns all calls across every level.\n */\n getCalls(level?: string): MockLogCall[];\n /** Return the most recent call, optionally filtered by level. */\n getLastCall(level?: string): MockLogCall | undefined;\n /**\n * Assert that at least one recorded call matches `matcher`.\n *\n * - string → exact message match\n * - RegExp → message test\n * - function → receives the full MockLogCall\n * - object → every key/value must match (supports RegExp values)\n *\n * Throws an Error with a descriptive message if the assertion fails (works\n * with both Vitest `expect` and Jest matchers via `.toThrow()`, or you can\n * let it propagate directly).\n */\n expectLog(level: string, matcher?: LogMatcher): void;\n /**\n * Assert that NO recorded call matches `matcher` at the given level.\n */\n expectNoLog(level: string, matcher?: LogMatcher): void;\n /** Clear all recorded calls. Call between tests. */\n reset(): void;\n /**\n * Silence — when true, the mock suppresses all console output from the\n * logger. Default: true.\n */\n silent: boolean;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveCallField(call: MockLogCall, key: string): unknown {\n if (key === 'message') return call.message;\n if (key === 'level') return call.level;\n return call.data?.[key] ?? (call.entry as Record<string, unknown>)[key];\n}\n\nfunction formatMatcherDescription(matcher: LogMatcher | undefined): string {\n if (matcher === undefined) return '(any)';\n if (matcher instanceof RegExp) return matcher.toString();\n return JSON.stringify(matcher);\n}\n\nfunction matchesCall(call: MockLogCall, matcher?: LogMatcher): boolean {\n if (matcher === undefined) return true;\n if (typeof matcher === 'string') return call.message === matcher;\n if (matcher instanceof RegExp) return matcher.test(call.message);\n if (typeof matcher === 'function') return matcher(call);\n // Object shape: every key/value must match\n for (const [key, expected] of Object.entries(matcher)) {\n const actual = resolveCallField(call, key);\n if (expected instanceof RegExp) {\n if (!expected.test(String(actual ?? ''))) return false;\n } else {\n if (actual !== expected) return false;\n }\n }\n return true;\n}\n\nfunction formatCalls(calls: MockLogCall[]): string {\n if (calls.length === 0) return ' (no calls recorded)';\n return calls\n .map((c) => ` [${c.level}] \"${c.message}\" ${c.data ? JSON.stringify(c.data) : ''}`)\n .join('\\n');\n}\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Create a mock logger for use in tests.\n *\n * The returned object implements `IBaseLogger` and additionally exposes `.calls`,\n * `.getCalls()`, `.getLastCall()`, `.expectLog()`, `.expectNoLog()`, and `.reset()`.\n *\n * @param options.silent Suppress console output (default: true)\n * @param options.context Optional context label written into every `entry.context`\n */\nexport function createMockLogger(\n options: { silent?: boolean; context?: string } = {}\n): MockLoggerInstance {\n const { silent = true, context } = options;\n const _calls: MockLogCall[] = [];\n\n function record(\n level: string,\n messageOrError: string | Error,\n data?: Record<string, unknown>\n ): void {\n const message = messageOrError instanceof Error ? messageOrError.message : messageOrError;\n const extraData =\n messageOrError instanceof Error\n ? { ...data, error: { message: messageOrError.message, stack: messageOrError.stack } }\n : data;\n\n _calls.push({\n level,\n message,\n ...(extraData !== undefined ? { data: extraData } : {}),\n entry: {\n level,\n message,\n ...(context !== undefined ? { context } : {}),\n ...(extraData !== undefined ? { data: extraData } : {}),\n },\n });\n }\n\n const logger: IBaseLogger = {\n async error(messageOrError, data) {\n record('error', messageOrError as string | Error, data);\n },\n async warn(message, data) {\n record('warn', message, data);\n },\n async info(message, data) {\n record('info', message, data);\n },\n async debug(message, data) {\n record('debug', message, data);\n },\n async trace(message, data) {\n record('trace', message, data);\n },\n async verbose(message, data) {\n record('verbose', message, data);\n },\n async logLevel(level, message, data) {\n record(level, message, data);\n },\n\n time(_label) {\n /* no-op in tests */\n },\n async timeEnd(_label) {\n return 0;\n },\n async timeAsync(_label, fn) {\n return fn();\n },\n\n setLevel(_level) {\n /* no-op */\n },\n getLevel() {\n return 'info';\n },\n setContext(_ctx) {\n /* no-op */\n },\n getContext() {\n return context;\n },\n\n enableField(_f) {\n /* no-op */\n },\n disableField(_f) {\n /* no-op */\n },\n isFieldEnabled(_f) {\n return true;\n },\n getFieldState() {\n return {};\n },\n resetFieldState() {\n /* no-op */\n },\n\n enableTransportLevelPrompting() {\n /* no-op */\n },\n disableTransportLevelPrompting() {\n /* no-op */\n },\n setTransportLevels(_id, _levels) {\n /* no-op */\n },\n getTransportLevels(_id): string[] | undefined {\n return undefined;\n },\n clearTransportLevelPreferences() {\n /* no-op */\n },\n getAvailableTransports() {\n return [];\n },\n\n child(ctx, _data) {\n return createMockLogger({ silent, context: ctx }).logger;\n },\n async close() {\n /* no-op */\n },\n\n // Plugin API stubs — mock logger does not run plugins\n use(_plugin) {\n return this;\n },\n unuse(_pluginName) {\n return this;\n },\n };\n\n const instance: MockLoggerInstance = {\n get logger() {\n return logger;\n },\n get calls() {\n return _calls;\n },\n\n getCalls(level?: string): MockLogCall[] {\n if (!level) return [..._calls];\n const l = level.toLowerCase();\n return _calls.filter((c) => c.level.toLowerCase() === l);\n },\n\n getLastCall(level?: string): MockLogCall | undefined {\n const filtered = level\n ? _calls.filter((c) => c.level.toLowerCase() === level.toLowerCase())\n : _calls;\n return filtered[filtered.length - 1];\n },\n\n expectLog(level: string, matcher?: LogMatcher): void {\n const levelCalls = instance.getCalls(level);\n const matched = levelCalls.some((c) => matchesCall(c, matcher));\n if (!matched) {\n const matcherDesc = formatMatcherDescription(matcher);\n throw new Error(\n `Expected at least one [${level}] log matching ${matcherDesc}.\\n` +\n `Recorded calls:\\n${formatCalls(_calls)}`\n );\n }\n },\n\n expectNoLog(level: string, matcher?: LogMatcher): void {\n const levelCalls = instance.getCalls(level);\n const matched = levelCalls.some((c) => matchesCall(c, matcher));\n if (matched) {\n const matcherDesc = formatMatcherDescription(matcher);\n throw new Error(\n `Expected NO [${level}] log matching ${matcherDesc}, but one was found.\\n` +\n `Recorded calls:\\n${formatCalls(_calls)}`\n );\n }\n },\n\n reset(): void {\n _calls.length = 0;\n },\n\n silent,\n };\n\n return instance;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testing.mjs","names":[],"sources":["../src/testing/mock-logger.ts"],"sourcesContent":["/**\n * logixia/testing — Zero-dependency mock logger for Vitest & Jest.\n *\n * @example\n * ```ts\n * import { createMockLogger } from 'logixia/testing';\n *\n * const mock = createMockLogger();\n * await myService.doSomething(mock.logger);\n *\n * mock.expectLog('info', { message: 'order created' });\n * mock.expectLog('error', { message: /failed/ });\n * mock.reset();\n * ```\n */\n\nimport type { LogEntry, LogixiaLoggerInstance, NamespaceLevels } from '../types';\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface MockLogCall {\n level: string;\n message: string;\n data?: Record<string, unknown>;\n /** Full LogEntry shape for assertions that inspect the complete record. */\n entry: Pick<LogEntry, 'level' | 'message' | 'context'> & { data?: Record<string, unknown> };\n}\n\nexport type LogMatcher =\n | string\n | RegExp\n | ((call: MockLogCall) => boolean)\n | Partial<Record<'message' | 'level' | string, unknown>>;\n\nexport interface MockLoggerInstance {\n /** The logger itself — pass this where an IBaseLogger or ILogger is expected. */\n readonly logger: LogixiaLoggerInstance;\n /** Every call recorded across all levels, in insertion order. */\n readonly calls: MockLogCall[];\n /**\n * Get all calls for a specific level (case-insensitive). If `level` is\n * omitted, returns all calls across every level.\n */\n getCalls(level?: string): MockLogCall[];\n /** Return the most recent call, optionally filtered by level. */\n getLastCall(level?: string): MockLogCall | undefined;\n /**\n * Assert that at least one recorded call matches `matcher`.\n *\n * - string → exact message match\n * - RegExp → message test\n * - function → receives the full MockLogCall\n * - object → every key/value must match (supports RegExp values)\n *\n * Throws an Error with a descriptive message if the assertion fails (works\n * with both Vitest `expect` and Jest matchers via `.toThrow()`, or you can\n * let it propagate directly).\n */\n expectLog(level: string, matcher?: LogMatcher): void;\n /**\n * Assert that NO recorded call matches `matcher` at the given level.\n */\n expectNoLog(level: string, matcher?: LogMatcher): void;\n /** Clear all recorded calls. Call between tests. */\n reset(): void;\n /**\n * Make `logger.healthCheck()` report healthy or unhealthy, to exercise code that\n * reacts to a failing logger. Shared with child loggers.\n */\n setHealth(healthy: boolean, details?: Record<string, unknown>): void;\n /**\n * Silence — when true, the mock suppresses all console output from the\n * logger. Default: true.\n */\n silent: boolean;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveCallField(call: MockLogCall, key: string): unknown {\n if (key === 'message') return call.message;\n if (key === 'level') return call.level;\n return call.data?.[key] ?? (call.entry as Record<string, unknown>)[key];\n}\n\nfunction formatMatcherDescription(matcher: LogMatcher | undefined): string {\n if (matcher === undefined) return '(any)';\n if (matcher instanceof RegExp) return matcher.toString();\n return JSON.stringify(matcher);\n}\n\nfunction matchesCall(call: MockLogCall, matcher?: LogMatcher): boolean {\n if (matcher === undefined) return true;\n if (typeof matcher === 'string') return call.message === matcher;\n if (matcher instanceof RegExp) return matcher.test(call.message);\n if (typeof matcher === 'function') return matcher(call);\n // Object shape: every key/value must match\n for (const [key, expected] of Object.entries(matcher)) {\n const actual = resolveCallField(call, key);\n if (expected instanceof RegExp) {\n if (!expected.test(String(actual ?? ''))) return false;\n } else {\n if (actual !== expected) return false;\n }\n }\n return true;\n}\n\nfunction formatCalls(calls: MockLogCall[]): string {\n if (calls.length === 0) return ' (no calls recorded)';\n return calls\n .map((c) => ` [${c.level}] \"${c.message}\" ${c.data ? JSON.stringify(c.data) : ''}`)\n .join('\\n');\n}\n\n// ── Implementation ────────────────────────────────────────────────────────────\n\n/**\n * Create a mock logger for use in tests.\n *\n * The returned object implements `ILogger` and additionally exposes `.calls`,\n * `.getCalls()`, `.getLastCall()`, `.expectLog()`, `.expectNoLog()`, and `.reset()`.\n *\n * @param options.silent Suppress console output (default: true)\n * @param options.context Optional context label written into every `entry.context`\n * @param options.healthy Initial `healthCheck()` result (default: true); change later with `setHealth()`\n */\nexport function createMockLogger(\n options: { silent?: boolean; context?: string; healthy?: boolean } = {}\n): MockLoggerInstance {\n return buildMockLogger(options, {\n namespaceLevels: {},\n health: { healthy: options.healthy ?? true, details: {} },\n });\n}\n\n/** State a mock logger shares with its children, like the real logger. */\ninterface SharedMockState {\n namespaceLevels: NamespaceLevels;\n health: { healthy: boolean; details: Record<string, unknown> };\n}\n\nfunction buildMockLogger(\n options: { silent?: boolean; context?: string },\n shared: SharedMockState\n): MockLoggerInstance {\n const { silent = true, context } = options;\n const _calls: MockLogCall[] = [];\n\n function record(\n level: string,\n messageOrError: string | Error,\n data?: Record<string, unknown>\n ): void {\n const message = messageOrError instanceof Error ? messageOrError.message : messageOrError;\n const extraData =\n messageOrError instanceof Error\n ? { ...data, error: { message: messageOrError.message, stack: messageOrError.stack } }\n : data;\n\n _calls.push({\n level,\n message,\n ...(extraData !== undefined ? { data: extraData } : {}),\n entry: {\n level,\n message,\n ...(context !== undefined ? { context } : {}),\n ...(extraData !== undefined ? { data: extraData } : {}),\n },\n });\n }\n\n const logger: LogixiaLoggerInstance = {\n async error(messageOrError, data) {\n record('error', messageOrError as string | Error, data);\n },\n async warn(message, data) {\n record('warn', message, data);\n },\n async info(message, data) {\n record('info', message, data);\n },\n async debug(message, data) {\n record('debug', message, data);\n },\n async trace(message, data) {\n record('trace', message, data);\n },\n async verbose(message, data) {\n record('verbose', message, data);\n },\n async logLevel(level, message, data) {\n record(level, message, data);\n },\n\n time(_label) {\n /* no-op in tests */\n },\n async timeEnd(_label) {\n return 0;\n },\n async timeAsync(_label, fn) {\n return fn();\n },\n\n setLevel(_level) {\n /* no-op */\n },\n getLevel() {\n return 'info';\n },\n setNamespaceLevels(levels) {\n shared.namespaceLevels = { ...levels };\n },\n patchNamespaceLevels(levels) {\n shared.namespaceLevels = { ...shared.namespaceLevels, ...levels };\n },\n getNamespaceLevels() {\n return { ...shared.namespaceLevels };\n },\n setContext(_ctx) {\n /* no-op */\n },\n getContext() {\n return context;\n },\n\n enableField(_f) {\n /* no-op */\n },\n disableField(_f) {\n /* no-op */\n },\n isFieldEnabled(_f) {\n return true;\n },\n getFieldState() {\n return {};\n },\n resetFieldState() {\n /* no-op */\n },\n\n enableTransportLevelPrompting() {\n /* no-op */\n },\n disableTransportLevelPrompting() {\n /* no-op */\n },\n setTransportLevels(_id, _levels) {\n /* no-op */\n },\n getTransportLevels(_id): string[] | undefined {\n return undefined;\n },\n clearTransportLevelPreferences() {\n /* no-op */\n },\n getAvailableTransports() {\n return [];\n },\n\n child(ctx, _data) {\n return buildMockLogger({ silent, context: ctx }, shared).logger;\n },\n async flush() {\n /* no-op */\n },\n async healthCheck() {\n return { healthy: shared.health.healthy, details: { ...shared.health.details } };\n },\n async close() {\n /* no-op */\n },\n\n // Plugin API stubs — mock logger does not run plugins\n use(_plugin) {\n return this;\n },\n unuse(_pluginName) {\n return this;\n },\n };\n\n const instance: MockLoggerInstance = {\n get logger() {\n return logger;\n },\n get calls() {\n return _calls;\n },\n\n getCalls(level?: string): MockLogCall[] {\n if (!level) return [..._calls];\n const l = level.toLowerCase();\n return _calls.filter((c) => c.level.toLowerCase() === l);\n },\n\n getLastCall(level?: string): MockLogCall | undefined {\n const filtered = level\n ? _calls.filter((c) => c.level.toLowerCase() === level.toLowerCase())\n : _calls;\n return filtered[filtered.length - 1];\n },\n\n expectLog(level: string, matcher?: LogMatcher): void {\n const levelCalls = instance.getCalls(level);\n const matched = levelCalls.some((c) => matchesCall(c, matcher));\n if (!matched) {\n const matcherDesc = formatMatcherDescription(matcher);\n throw new Error(\n `Expected at least one [${level}] log matching ${matcherDesc}.\\n` +\n `Recorded calls:\\n${formatCalls(_calls)}`\n );\n }\n },\n\n expectNoLog(level: string, matcher?: LogMatcher): void {\n const levelCalls = instance.getCalls(level);\n const matched = levelCalls.some((c) => matchesCall(c, matcher));\n if (matched) {\n const matcherDesc = formatMatcherDescription(matcher);\n throw new Error(\n `Expected NO [${level}] log matching ${matcherDesc}, but one was found.\\n` +\n `Recorded calls:\\n${formatCalls(_calls)}`\n );\n }\n },\n\n reset(): void {\n _calls.length = 0;\n },\n\n setHealth(healthy: boolean, details: Record<string, unknown> = {}): void {\n shared.health = { healthy, details };\n },\n\n silent,\n };\n\n return instance;\n}\n"],"mappings":";AA+EA,SAAS,iBAAiB,MAAmB,KAAsB;;CACjE,IAAI,QAAQ,WAAW,OAAO,KAAK;CACnC,IAAI,QAAQ,SAAS,OAAO,KAAK;CACjC,SAAA,aAAO,KAAK,UAAA,QAAA,eAAA,KAAA,IAAA,KAAA,IAAA,WAAO,SAAS,KAAK,MAAkC;AACrE;AAEA,SAAS,yBAAyB,SAAyC;CACzE,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,mBAAmB,QAAQ,OAAO,QAAQ,SAAS;CACvD,OAAO,KAAK,UAAU,OAAO;AAC/B;AAEA,SAAS,YAAY,MAAmB,SAA+B;CACrE,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,OAAO,YAAY,UAAU,OAAO,KAAK,YAAY;CACzD,IAAI,mBAAmB,QAAQ,OAAO,QAAQ,KAAK,KAAK,OAAO;CAC/D,IAAI,OAAO,YAAY,YAAY,OAAO,QAAQ,IAAI;CAEtD,KAAK,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,OAAO,GAAG;EACrD,MAAM,SAAS,iBAAiB,MAAM,GAAG;EACzC,IAAI,oBAAoB,QAClB;OAAA,CAAC,SAAS,KAAK,OAAO,UAAU,EAAE,CAAC,GAAG,OAAO;EAAA,OAEjD,IAAI,WAAW,UAAU,OAAO;CAEpC;CACA,OAAO;AACT;AAEA,SAAS,YAAY,OAA8B;CACjD,IAAI,MAAM,WAAW,GAAG,OAAO;CAC/B,OAAO,MACJ,KAAK,MAAM,MAAM,EAAE,MAAM,KAAK,EAAE,QAAQ,IAAI,EAAE,OAAO,KAAK,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,CACnF,KAAK,IAAI;AACd;;;;;;;;;;;AAcA,SAAgB,iBACd,UAAqE,CAAC,GAClD;CACpB,OAAO,gBAAgB,SAAS;EAC9B,iBAAiB,CAAC;EAClB,QAAQ;GAAE,SAAS,QAAQ,WAAW;GAAM,SAAS,CAAC;EAAE;CAC1D,CAAC;AACH;AAQA,SAAS,gBACP,SACA,QACoB;CACpB,MAAM,EAAE,SAAS,MAAM,YAAY;CACnC,MAAM,SAAwB,CAAC;CAE/B,SAAS,OACP,OACA,gBACA,MACM;EACN,MAAM,UAAU,0BAA0B,QAAQ,eAAe,UAAU;EAC3E,MAAM,YACJ,0BAA0B,QACtB;GAAE,GAAG;GAAM,OAAO;IAAE,SAAS,eAAe;IAAS,OAAO,eAAe;GAAM;EAAE,IACnF;EAEN,OAAO,KAAK;GACV;GACA;GACA,GAAI,cAAc,KAAA,IAAY,EAAE,MAAM,UAAU,IAAI,CAAC;GACrD,OAAO;IACL;IACA;IACA,GAAI,YAAY,KAAA,IAAY,EAAE,QAAQ,IAAI,CAAC;IAC3C,GAAI,cAAc,KAAA,IAAY,EAAE,MAAM,UAAU,IAAI,CAAC;GACvD;EACF,CAAC;CACH;CAEA,MAAM,SAAgC;EACpC,MAAM,MAAM,gBAAgB,MAAM;GAChC,OAAO,SAAS,gBAAkC,IAAI;EACxD;EACA,MAAM,KAAK,SAAS,MAAM;GACxB,OAAO,QAAQ,SAAS,IAAI;EAC9B;EACA,MAAM,KAAK,SAAS,MAAM;GACxB,OAAO,QAAQ,SAAS,IAAI;EAC9B;EACA,MAAM,MAAM,SAAS,MAAM;GACzB,OAAO,SAAS,SAAS,IAAI;EAC/B;EACA,MAAM,MAAM,SAAS,MAAM;GACzB,OAAO,SAAS,SAAS,IAAI;EAC/B;EACA,MAAM,QAAQ,SAAS,MAAM;GAC3B,OAAO,WAAW,SAAS,IAAI;EACjC;EACA,MAAM,SAAS,OAAO,SAAS,MAAM;GACnC,OAAO,OAAO,SAAS,IAAI;EAC7B;EAEA,KAAK,QAAQ,CAEb;EACA,MAAM,QAAQ,QAAQ;GACpB,OAAO;EACT;EACA,MAAM,UAAU,QAAQ,IAAI;GAC1B,OAAO,GAAG;EACZ;EAEA,SAAS,QAAQ,CAEjB;EACA,WAAW;GACT,OAAO;EACT;EACA,mBAAmB,QAAQ;GACzB,OAAO,kBAAkB,EAAE,GAAG,OAAO;EACvC;EACA,qBAAqB,QAAQ;GAC3B,OAAO,kBAAkB;IAAE,GAAG,OAAO;IAAiB,GAAG;GAAO;EAClE;EACA,qBAAqB;GACnB,OAAO,EAAE,GAAG,OAAO,gBAAgB;EACrC;EACA,WAAW,MAAM,CAEjB;EACA,aAAa;GACX,OAAO;EACT;EAEA,YAAY,IAAI,CAEhB;EACA,aAAa,IAAI,CAEjB;EACA,eAAe,IAAI;GACjB,OAAO;EACT;EACA,gBAAgB;GACd,OAAO,CAAC;EACV;EACA,kBAAkB,CAElB;EAEA,gCAAgC,CAEhC;EACA,iCAAiC,CAEjC;EACA,mBAAmB,KAAK,SAAS,CAEjC;EACA,mBAAmB,KAA2B,CAE9C;EACA,iCAAiC,CAEjC;EACA,yBAAyB;GACvB,OAAO,CAAC;EACV;EAEA,MAAM,KAAK,OAAO;GAChB,OAAO,gBAAgB;IAAE;IAAQ,SAAS;GAAI,GAAG,MAAM,CAAC,CAAC;EAC3D;EACA,MAAM,QAAQ,CAEd;EACA,MAAM,cAAc;GAClB,OAAO;IAAE,SAAS,OAAO,OAAO;IAAS,SAAS,EAAE,GAAG,OAAO,OAAO,QAAQ;GAAE;EACjF;EACA,MAAM,QAAQ,CAEd;EAGA,IAAI,SAAS;GACX,OAAO;EACT;EACA,MAAM,aAAa;GACjB,OAAO;EACT;CACF;CAEA,MAAM,WAA+B;EACnC,IAAI,SAAS;GACX,OAAO;EACT;EACA,IAAI,QAAQ;GACV,OAAO;EACT;EAEA,SAAS,OAA+B;GACtC,IAAI,CAAC,OAAO,OAAO,CAAC,GAAG,MAAM;GAC7B,MAAM,IAAI,MAAM,YAAY;GAC5B,OAAO,OAAO,QAAQ,MAAM,EAAE,MAAM,YAAY,MAAM,CAAC;EACzD;EAEA,YAAY,OAAyC;GACnD,MAAM,WAAW,QACb,OAAO,QAAQ,MAAM,EAAE,MAAM,YAAY,MAAM,MAAM,YAAY,CAAC,IAClE;GACJ,OAAO,SAAS,SAAS,SAAS;EACpC;EAEA,UAAU,OAAe,SAA4B;GAGnD,IAAI,CAFe,SAAS,SAAS,KACZ,CAAC,CAAC,MAAM,MAAM,YAAY,GAAG,OAAO,CAClD,GAAG;IACZ,MAAM,cAAc,yBAAyB,OAAO;IACpD,MAAM,IAAI,MACR,0BAA0B,MAAM,iBAAiB,YAAY,sBACvC,YAAY,MAAM,GAC1C;GACF;EACF;EAEA,YAAY,OAAe,SAA4B;GAGrD,IAFmB,SAAS,SAAS,KACZ,CAAC,CAAC,MAAM,MAAM,YAAY,GAAG,OAAO,CACnD,GAAG;IACX,MAAM,cAAc,yBAAyB,OAAO;IACpD,MAAM,IAAI,MACR,gBAAgB,MAAM,iBAAiB,YAAY,yCAC7B,YAAY,MAAM,GAC1C;GACF;EACF;EAEA,QAAc;GACZ,OAAO,SAAS;EAClB;EAEA,UAAU,SAAkB,UAAmC,CAAC,GAAS;GACvE,OAAO,SAAS;IAAE;IAAS;GAAQ;EACrC;EAEA;CACF;CAEA,OAAO;AACT"}
|
|
@@ -105,7 +105,11 @@ interface ConsoleTransportConfig {
|
|
|
105
105
|
}
|
|
106
106
|
interface AnalyticsTransportConfig {
|
|
107
107
|
level?: string;
|
|
108
|
-
|
|
108
|
+
/**
|
|
109
|
+
* @deprecated Not used by Mixpanel, Segment or Google Analytics (they use `token`,
|
|
110
|
+
* `writeKey` and `measurementId`/`apiSecret`). Only DataDog reads an API key.
|
|
111
|
+
*/
|
|
112
|
+
apiKey?: string;
|
|
109
113
|
projectId?: string;
|
|
110
114
|
endpoint?: string;
|
|
111
115
|
batchSize?: number;
|
|
@@ -127,6 +131,7 @@ interface MixpanelTransportConfig extends AnalyticsTransportConfig {
|
|
|
127
131
|
superProperties?: Record<string, unknown>;
|
|
128
132
|
}
|
|
129
133
|
interface DataDogTransportConfig extends AnalyticsTransportConfig {
|
|
134
|
+
/** Datadog API key (sent as `DD-API-KEY`). Required. */
|
|
130
135
|
apiKey: string;
|
|
131
136
|
site?: 'datadoghq.com' | 'datadoghq.eu' | 'us3.datadoghq.com' | 'us5.datadoghq.com' | 'ap1.datadoghq.com' | 'ddog-gov.com';
|
|
132
137
|
/** Gzip log request bodies (`Content-Encoding: gzip`). Default false. */
|
|
@@ -186,6 +191,12 @@ interface IAsyncTransport extends ITransport {
|
|
|
186
191
|
flush(): Promise<void>;
|
|
187
192
|
isReady?(): Promise<boolean>;
|
|
188
193
|
}
|
|
194
|
+
interface TransportEvents {
|
|
195
|
+
log: (entry: TransportLogEntry) => void;
|
|
196
|
+
error: (error: Error, transport: string) => void;
|
|
197
|
+
rotate: (oldFile: string, newFile: string) => void;
|
|
198
|
+
flush: (transport: string, count: number) => void;
|
|
199
|
+
}
|
|
189
200
|
interface IBatchTransport extends ITransport {
|
|
190
201
|
readonly batchSize?: number;
|
|
191
202
|
readonly flushInterval?: number;
|
|
@@ -201,5 +212,5 @@ interface TransportMetrics {
|
|
|
201
212
|
lastWrite: Date;
|
|
202
213
|
averageWriteTime: number;
|
|
203
214
|
}
|
|
204
|
-
export {
|
|
205
|
-
//# sourceMappingURL=transport.types-
|
|
215
|
+
export { TransportLogEntry as _, DatabaseTransportConfig as a, TransportType as b, GoogleAnalyticsTransportConfig as c, ITransport as d, MixpanelTransportConfig as f, TransportEvents as g, TransportConfig as h, DataDogTransportConfig as i, IAsyncTransport as l, SegmentTransportConfig as m, AnalyticsTransportConfig as n, FileStats as o, RotationConfig as p, ConsoleTransportConfig as r, FileTransportConfig as s, AnalyticsConfig as t, IBatchTransport as u, TransportMetrics as v, TransportRetryConfig as y };
|
|
216
|
+
//# sourceMappingURL=transport.types-CzJq4IrF.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.types-CzJq4IrF.d.mts","names":[],"sources":["../src/types/transport.types.ts"],"mappings":";;;UAKiB;EACf;EACA;EACA;EACA;EACA,WAAW;EACX,eAAe,OAAO,OAAO,OAAO;;UAGrB;EACf;EACA;;;;;EAKA,UAAU,OAAO;;;;;EAKjB,MAAM,OAAO,2BAA2B;EACxC,UAAU;EACV,QAAQ;;UAGO;EACf,WAAW;EACX;EACA;EACA,OAAO;EACP;EACA;EACA;EACA;;UAGe;EACf;EACA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA,WAAW;;;;;;EAMX;;;;;;EAMA;EACA,UAAU,OAAO;;UAGF;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,OAAO;;;;;EAKjB;;UAGe;EACf;EACA;EACA;EACA;;;;;;EAMA,cAAc;EACd,UAAU,OAAO;;UAGF;EACf;;;;;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;EAKA;EACA,mBAAmB;EACnB,UAAU,OAAO;;UAGF,gCAAgC;EAC/C;EACA;EACA;EACA,kBAAkB;;UAGH,+BAA+B;;EAE9C;EACA;;EAQA;EACA;EACA;EACA;EACA;EACA;;EAEA;;UAGe,uCAAuC;EACtD;EACA;EACA;EACA;EACA;;UAGe,+BAA+B;EAC9C;EACA;;EAEA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;;EAEA,gBAAgB,qBAAqB,OAAO;;UAG7B;EACf;EACA,SAAS;EACT,UAAU;;UAGK;EACf,UAAU;EACV,OAAO,sBAAsB;EAC7B,WAAW,0BAA0B;EACrC,YAAY;EACZ,SAAS;;UAGM;EACf,WAAW,0BAA0B;EACrC,UAAU,yBAAyB;EACnC,kBAAkB,iCAAiC;EACnD,UAAU,yBAAyB;;UAGpB,wBAAwB;EACvC,SAAS;EACT,YAAY;;UAGG;EACf,MAAM,OAAO;EACb,QAAQ,OAAO,OAAO;EACtB,SAAS,iBAAiB;EAC1B,QAAQ,mBAAmB;;UAGZ,wBAAwB;WAC9B;WACA;EACT,WAAW,OAAO;EAClB,SAAS;;KAGC;UAEK;EACf;EACA,MAAM;EACN;EACA;EACA,WAAW;EACX"}
|
|
@@ -105,7 +105,11 @@ interface ConsoleTransportConfig {
|
|
|
105
105
|
}
|
|
106
106
|
interface AnalyticsTransportConfig {
|
|
107
107
|
level?: string;
|
|
108
|
-
|
|
108
|
+
/**
|
|
109
|
+
* @deprecated Not used by Mixpanel, Segment or Google Analytics (they use `token`,
|
|
110
|
+
* `writeKey` and `measurementId`/`apiSecret`). Only DataDog reads an API key.
|
|
111
|
+
*/
|
|
112
|
+
apiKey?: string;
|
|
109
113
|
projectId?: string;
|
|
110
114
|
endpoint?: string;
|
|
111
115
|
batchSize?: number;
|
|
@@ -127,6 +131,7 @@ interface MixpanelTransportConfig extends AnalyticsTransportConfig {
|
|
|
127
131
|
superProperties?: Record<string, unknown>;
|
|
128
132
|
}
|
|
129
133
|
interface DataDogTransportConfig extends AnalyticsTransportConfig {
|
|
134
|
+
/** Datadog API key (sent as `DD-API-KEY`). Required. */
|
|
130
135
|
apiKey: string;
|
|
131
136
|
site?: 'datadoghq.com' | 'datadoghq.eu' | 'us3.datadoghq.com' | 'us5.datadoghq.com' | 'ap1.datadoghq.com' | 'ddog-gov.com';
|
|
132
137
|
/** Gzip log request bodies (`Content-Encoding: gzip`). Default false. */
|
|
@@ -186,6 +191,12 @@ interface IAsyncTransport extends ITransport {
|
|
|
186
191
|
flush(): Promise<void>;
|
|
187
192
|
isReady?(): Promise<boolean>;
|
|
188
193
|
}
|
|
194
|
+
interface TransportEvents {
|
|
195
|
+
log: (entry: TransportLogEntry) => void;
|
|
196
|
+
error: (error: Error, transport: string) => void;
|
|
197
|
+
rotate: (oldFile: string, newFile: string) => void;
|
|
198
|
+
flush: (transport: string, count: number) => void;
|
|
199
|
+
}
|
|
189
200
|
interface IBatchTransport extends ITransport {
|
|
190
201
|
readonly batchSize?: number;
|
|
191
202
|
readonly flushInterval?: number;
|
|
@@ -201,5 +212,5 @@ interface TransportMetrics {
|
|
|
201
212
|
lastWrite: Date;
|
|
202
213
|
averageWriteTime: number;
|
|
203
214
|
}
|
|
204
|
-
export {
|
|
205
|
-
//# sourceMappingURL=transport.types-
|
|
215
|
+
export { TransportLogEntry as _, DatabaseTransportConfig as a, TransportType as b, GoogleAnalyticsTransportConfig as c, ITransport as d, MixpanelTransportConfig as f, TransportEvents as g, TransportConfig as h, DataDogTransportConfig as i, IAsyncTransport as l, SegmentTransportConfig as m, AnalyticsTransportConfig as n, FileStats as o, RotationConfig as p, ConsoleTransportConfig as r, FileTransportConfig as s, AnalyticsConfig as t, IBatchTransport as u, TransportMetrics as v, TransportRetryConfig as y };
|
|
216
|
+
//# sourceMappingURL=transport.types-CzJq4IrF.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.types-CzJq4IrF.d.ts","names":[],"sources":["../src/types/transport.types.ts"],"mappings":";;;UAKiB;EACf;EACA;EACA;EACA;EACA,WAAW;EACX,eAAe,OAAO,OAAO,OAAO;;UAGrB;EACf;EACA;;;;;EAKA,UAAU,OAAO;;;;;EAKjB,MAAM,OAAO,2BAA2B;EACxC,UAAU;EACV,QAAQ;;UAGO;EACf,WAAW;EACX;EACA;EACA,OAAO;EACP;EACA;EACA;EACA;;UAGe;EACf;EACA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA,WAAW;;;;;;EAMX;;;;;;EAMA;EACA,UAAU,OAAO;;UAGF;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,OAAO;;;;;EAKjB;;UAGe;EACf;EACA;EACA;EACA;;;;;;EAMA,cAAc;EACd,UAAU,OAAO;;UAGF;EACf;;;;;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;EAKA;EACA,mBAAmB;EACnB,UAAU,OAAO;;UAGF,gCAAgC;EAC/C;EACA;EACA;EACA,kBAAkB;;UAGH,+BAA+B;;EAE9C;EACA;;EAQA;EACA;EACA;EACA;EACA;EACA;;EAEA;;UAGe,uCAAuC;EACtD;EACA;EACA;EACA;EACA;;UAGe,+BAA+B;EAC9C;EACA;;EAEA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;;EAEA,gBAAgB,qBAAqB,OAAO;;UAG7B;EACf;EACA,SAAS;EACT,UAAU;;UAGK;EACf,UAAU;EACV,OAAO,sBAAsB;EAC7B,WAAW,0BAA0B;EACrC,YAAY;EACZ,SAAS;;UAGM;EACf,WAAW,0BAA0B;EACrC,UAAU,yBAAyB;EACnC,kBAAkB,iCAAiC;EACnD,UAAU,yBAAyB;;UAGpB,wBAAwB;EACvC,SAAS;EACT,YAAY;;UAGG;EACf,MAAM,OAAO;EACb,QAAQ,OAAO,OAAO;EACtB,SAAS,iBAAiB;EAC1B,QAAQ,mBAAmB;;UAGZ,wBAAwB;WAC9B;WACA;EACT,WAAW,OAAO;EAClB,SAAS;;KAGC;UAEK;EACf;EACA,MAAM;EACN;EACA;EACA,WAAW;EACX"}
|
package/dist/transports.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { t as AzureMonitorTransport } from "./azure-monitor.transport-
|
|
3
|
-
import { t as CloudWatchTransport } from "./cloudwatch.transport-
|
|
4
|
-
import { n as GCPTransport } from "./gcp.transport-
|
|
5
|
-
import {
|
|
6
|
-
import { a as DiscordTransport, c as OtlpLogTransportConfig, i as DiscordEmbed, l as toOtelSeverity, n as SlackTransport, o as DiscordTransportConfig, r as SlackTransportConfig, s as OtlpLogTransport, t as SlackMessage } from "./slack.transport-
|
|
7
|
-
import { t as WorkerTransport } from "./worker.transport-
|
|
1
|
+
import { _ as TransportLogEntry, a as DatabaseTransportConfig, b as TransportType, c as GoogleAnalyticsTransportConfig, d as ITransport, f as MixpanelTransportConfig, g as TransportEvents, h as TransportConfig, i as DataDogTransportConfig, l as IAsyncTransport, m as SegmentTransportConfig, n as AnalyticsTransportConfig, o as FileStats, p as RotationConfig, r as ConsoleTransportConfig, s as FileTransportConfig, t as AnalyticsConfig, u as IBatchTransport, v as TransportMetrics, y as TransportRetryConfig } from "./transport.types-CzJq4IrF.mjs";
|
|
2
|
+
import { n as AzureMonitorTransportConfig, t as AzureMonitorTransport } from "./azure-monitor.transport-CbSHOnNX.mjs";
|
|
3
|
+
import { n as CloudWatchTransportConfig, t as CloudWatchTransport } from "./cloudwatch.transport-CjVrI6S4.mjs";
|
|
4
|
+
import { n as GCPTransport, r as GCPTransportConfig } from "./gcp.transport-D9SdLPwP.mjs";
|
|
5
|
+
import { g as LogEntry } from "./index-BSTtFcQ6.mjs";
|
|
6
|
+
import { a as DiscordTransport, c as OtlpLogTransportConfig, i as DiscordEmbed, l as toOtelSeverity, n as SlackTransport, o as DiscordTransportConfig, r as SlackTransportConfig, s as OtlpLogTransport, t as SlackMessage } from "./slack.transport-BDyENuR0.mjs";
|
|
7
|
+
import { n as WorkerTransportConfig, t as WorkerTransport } from "./worker.transport-Bl8lFRck.mjs";
|
|
8
8
|
import { EventEmitter } from "node:events";
|
|
9
9
|
export declare abstract class AnalyticsTransport implements ITransport, IBatchTransport {
|
|
10
10
|
readonly name: string;
|
|
@@ -81,6 +81,7 @@ interface AnalyticsMetric {
|
|
|
81
81
|
export declare class ConsoleTransport implements ITransport {
|
|
82
82
|
private config;
|
|
83
83
|
readonly name = "console";
|
|
84
|
+
readonly level?: string | undefined;
|
|
84
85
|
readonly filter?: (entry: TransportLogEntry) => boolean;
|
|
85
86
|
private static readonly COLORS;
|
|
86
87
|
private static sanitize;
|
|
@@ -108,6 +109,7 @@ export declare class DatabaseTransport implements IAsyncTransport, IBatchTranspo
|
|
|
108
109
|
readonly name = "database";
|
|
109
110
|
readonly batchSize: number;
|
|
110
111
|
readonly flushInterval: number;
|
|
112
|
+
readonly level?: string | undefined;
|
|
111
113
|
readonly filter?: (entry: TransportLogEntry) => boolean;
|
|
112
114
|
private batch;
|
|
113
115
|
private flushTimer?;
|
|
@@ -179,8 +181,12 @@ export declare class DatabaseTransport implements IAsyncTransport, IBatchTranspo
|
|
|
179
181
|
*
|
|
180
182
|
* The API key is transmitted via the `DD-API-KEY` request header — never in the URL.
|
|
181
183
|
*
|
|
184
|
+
* Metric names keep the legacy `logitron.logs.<level>` prefix (kept for
|
|
185
|
+
* dashboards and monitors that already query it; renaming would be a breaking
|
|
186
|
+
* change). Query `logitron.logs.error`, not `logixia.logs.error`.
|
|
187
|
+
*
|
|
182
188
|
* @example
|
|
183
|
-
*
|
|
189
|
+
* analytics: { datadog: { apiKey: process.env.DD_API_KEY, service: 'api', env: 'production' } }
|
|
184
190
|
*/
|
|
185
191
|
export declare class DataDogTransport extends AnalyticsTransport {
|
|
186
192
|
private datadogConfig;
|
|
@@ -335,7 +341,7 @@ export declare class FileTransport implements ITransport, IBatchTransport {
|
|
|
335
341
|
* Sends log entries as Google Analytics 4 Measurement Protocol events.
|
|
336
342
|
*
|
|
337
343
|
* @example
|
|
338
|
-
*
|
|
344
|
+
* analytics: {
|
|
339
345
|
* googleAnalytics: { measurementId: 'G-XXXXXXX', apiSecret: process.env.GA_API_SECRET }
|
|
340
346
|
* }
|
|
341
347
|
*/
|
|
@@ -369,7 +375,7 @@ export declare class GoogleAnalyticsTransport extends AnalyticsTransport {
|
|
|
369
375
|
* Sends log entries as Mixpanel events via the Track and Engage HTTP APIs.
|
|
370
376
|
*
|
|
371
377
|
* @example
|
|
372
|
-
*
|
|
378
|
+
* analytics: { mixpanel: { token: process.env.MIXPANEL_TOKEN } }
|
|
373
379
|
*/
|
|
374
380
|
export declare class MixpanelTransport extends AnalyticsTransport {
|
|
375
381
|
private mixpanelConfig;
|
|
@@ -394,7 +400,7 @@ export declare class MixpanelTransport extends AnalyticsTransport {
|
|
|
394
400
|
* Sends log entries as Segment track/identify events via the HTTP Tracking API.
|
|
395
401
|
*
|
|
396
402
|
* @example
|
|
397
|
-
*
|
|
403
|
+
* analytics: { segment: { writeKey: process.env.SEGMENT_WRITE_KEY } }
|
|
398
404
|
*/
|
|
399
405
|
export declare class SegmentTransport extends AnalyticsTransport {
|
|
400
406
|
private segmentConfig;
|
|
@@ -428,7 +434,13 @@ export declare class TransportManager extends EventEmitter {
|
|
|
428
434
|
private isShuttingDown;
|
|
429
435
|
private transportLevelPreferences;
|
|
430
436
|
private warnedPromptDeprecated;
|
|
431
|
-
|
|
437
|
+
private readonly levelValues;
|
|
438
|
+
/**
|
|
439
|
+
* @param config Transport configuration.
|
|
440
|
+
* @param levels The logger's `levelOptions.levels`; used with the built-in levels
|
|
441
|
+
* to compare entries against each transport's `level`.
|
|
442
|
+
*/
|
|
443
|
+
constructor(config?: TransportConfig, levels?: Record<string, number>);
|
|
432
444
|
private setupTransports;
|
|
433
445
|
addTransport(transport: ITransport, id?: string): void;
|
|
434
446
|
removeTransport(id: string): boolean;
|
|
@@ -482,5 +494,5 @@ export declare class TransportManager extends EventEmitter {
|
|
|
482
494
|
getTransportLevels(transportId: string): string[] | undefined;
|
|
483
495
|
clearTransportLevelPreferences(): void;
|
|
484
496
|
}
|
|
485
|
-
export { AzureMonitorTransport, CloudWatchTransport, type DiscordEmbed, DiscordTransport, type DiscordTransportConfig, GCPTransport, OtlpLogTransport, type OtlpLogTransportConfig, type SlackMessage, SlackTransport, type SlackTransportConfig, WorkerTransport, toOtelSeverity };
|
|
497
|
+
export { type AnalyticsConfig, type AnalyticsTransportConfig, AzureMonitorTransport, type AzureMonitorTransportConfig, CloudWatchTransport, type CloudWatchTransportConfig, type ConsoleTransportConfig, type DataDogTransportConfig, type DatabaseTransportConfig, type DiscordEmbed, DiscordTransport, type DiscordTransportConfig, type FileStats, type FileTransportConfig, GCPTransport, type GCPTransportConfig, type GoogleAnalyticsTransportConfig, type IAsyncTransport, type IBatchTransport, type ITransport, type MixpanelTransportConfig, OtlpLogTransport, type OtlpLogTransportConfig, type RotationConfig, type SegmentTransportConfig, type SlackMessage, SlackTransport, type SlackTransportConfig, type TransportConfig, type TransportEvents, type TransportLogEntry, type TransportMetrics, type TransportRetryConfig, type TransportType, WorkerTransport, type WorkerTransportConfig, toOtelSeverity };
|
|
486
498
|
//# sourceMappingURL=transports.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.d.mts","names":[],"sources":["../src/transports/analytics.transport.ts","../src/transports/console.transport.ts","../src/transports/database.transport.ts","../src/transports/datadog.transport.ts","../src/transports/file.transport.ts","../src/transports/google-analytics.transport.ts","../src/transports/mixpanel.transport.ts","../src/transports/segment.transport.ts","../src/transports/transport.manager.ts"],"mappings":";;;;;;;;8BA0BsB,8BAA8B,YAAY;WAC9C;WACA;WACA;WACA;YAEN,QAAQ;YACR,OAAO;YACP,aAAa,OAAO;YACpB;;;;;;;;;UASF;;UAEA;mBACS;EAEL,YAAA,cAAc,QAAQ;;YAiBxB;EAIJ,MAAM,OAAO,oBAAoB;EAkBvC,WAAW,OAAO;EAgBZ,SAAS;;;;;;;;UAyBD;EAkBR,SAAS;YA4BL,gBAAgB,OAAO;YAMvB,eAAe,OAAO,oBAAoB;;YAwB1C;;;;;YAQA,eAAe;;YAST,gBAAgB;qBAKb,cAAc;qBACd,UAAU,OAAO,oBAAoB;qBACrC,UAAU,SAAS,sBAAsB;qBACzC,WAAW;;UAYf;EACf;EACA,aAAa;EACb,SAAS;;UAGM;EACf;EACA;EACA;EACA,OAAO;EACP,YAAY;;;;;;;;;;qBC3OD,4BAA4B;
|
|
1
|
+
{"version":3,"file":"transports.d.mts","names":[],"sources":["../src/transports/analytics.transport.ts","../src/transports/console.transport.ts","../src/transports/database.transport.ts","../src/transports/datadog.transport.ts","../src/transports/file.transport.ts","../src/transports/google-analytics.transport.ts","../src/transports/mixpanel.transport.ts","../src/transports/segment.transport.ts","../src/transports/transport.manager.ts"],"mappings":"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"}
|