@jaypie/logger 1.2.1 → 1.2.2
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/dist/cjs/__tests__/datadogTransport.spec.d.ts +1 -0
- package/dist/cjs/constants.d.ts +16 -0
- package/dist/cjs/datadogTransport.d.ts +18 -0
- package/dist/cjs/index.cjs +167 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/esm/__tests__/datadogTransport.spec.d.ts +1 -0
- package/dist/esm/constants.d.ts +16 -0
- package/dist/esm/datadogTransport.d.ts +18 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +166 -1
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/cjs/constants.d.ts
CHANGED
|
@@ -26,4 +26,20 @@ export declare const LEVEL: {
|
|
|
26
26
|
readonly WARN: "warn";
|
|
27
27
|
};
|
|
28
28
|
export declare const LEVEL_VALUES: Record<string, number>;
|
|
29
|
+
export declare const DATADOG_TRANSPORT: {
|
|
30
|
+
readonly ENV: {
|
|
31
|
+
readonly API_KEY: "DATADOG_API_KEY";
|
|
32
|
+
readonly DD_ENV: "DD_ENV";
|
|
33
|
+
readonly DD_HOST: "DD_HOST";
|
|
34
|
+
readonly DD_SERVICE: "DD_SERVICE";
|
|
35
|
+
readonly DD_SITE: "DD_SITE";
|
|
36
|
+
readonly FORWARDING: "DATADOG_LOCAL_FORWARDING";
|
|
37
|
+
readonly PROJECT_ENV: "PROJECT_ENV";
|
|
38
|
+
readonly PROJECT_HOST: "PROJECT_HOST";
|
|
39
|
+
readonly PROJECT_SERVICE: "PROJECT_SERVICE";
|
|
40
|
+
};
|
|
41
|
+
readonly FLUSH_INTERVAL_MS: 5000;
|
|
42
|
+
readonly INTAKE_PATH: "/api/v2/logs";
|
|
43
|
+
readonly MAX_BATCH_SIZE: 100;
|
|
44
|
+
};
|
|
29
45
|
export declare const PSEUDO_LEVELS: string[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function isDatadogForwardingEnabled(): boolean;
|
|
2
|
+
declare class DatadogLogTransport {
|
|
3
|
+
private _beforeExitHandler;
|
|
4
|
+
private _buffer;
|
|
5
|
+
private _flushTimer;
|
|
6
|
+
private _ddsource;
|
|
7
|
+
private _env;
|
|
8
|
+
private _hostname;
|
|
9
|
+
private _service;
|
|
10
|
+
private _site;
|
|
11
|
+
constructor();
|
|
12
|
+
send(line: string, level: string): void;
|
|
13
|
+
flush(): void;
|
|
14
|
+
destroy(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function getDatadogTransport(): DatadogLogTransport | null;
|
|
17
|
+
export declare function _resetDatadogTransport(): void;
|
|
18
|
+
export {};
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var node_os = require('node:os');
|
|
6
|
+
var node_https = require('node:https');
|
|
7
|
+
|
|
5
8
|
const DEFAULT = {
|
|
6
9
|
LEVEL: "debug",
|
|
7
10
|
VAR_LEVEL: "debug",
|
|
@@ -40,6 +43,158 @@ const LEVEL_VALUES = {
|
|
|
40
43
|
trace: 90,
|
|
41
44
|
warn: 30,
|
|
42
45
|
};
|
|
46
|
+
const DATADOG_TRANSPORT = {
|
|
47
|
+
ENV: {
|
|
48
|
+
API_KEY: "DATADOG_API_KEY",
|
|
49
|
+
DD_ENV: "DD_ENV",
|
|
50
|
+
DD_HOST: "DD_HOST",
|
|
51
|
+
DD_SERVICE: "DD_SERVICE",
|
|
52
|
+
DD_SITE: "DD_SITE",
|
|
53
|
+
FORWARDING: "DATADOG_LOCAL_FORWARDING",
|
|
54
|
+
PROJECT_ENV: "PROJECT_ENV",
|
|
55
|
+
PROJECT_HOST: "PROJECT_HOST",
|
|
56
|
+
PROJECT_SERVICE: "PROJECT_SERVICE",
|
|
57
|
+
},
|
|
58
|
+
FLUSH_INTERVAL_MS: 5000,
|
|
59
|
+
INTAKE_PATH: "/api/v2/logs",
|
|
60
|
+
MAX_BATCH_SIZE: 100,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Level-to-Datadog status mapping
|
|
64
|
+
const LEVEL_TO_STATUS = {
|
|
65
|
+
[LEVEL.TRACE]: "debug",
|
|
66
|
+
[LEVEL.DEBUG]: "debug",
|
|
67
|
+
[LEVEL.INFO]: "info",
|
|
68
|
+
[LEVEL.WARN]: "warn",
|
|
69
|
+
[LEVEL.ERROR]: "error",
|
|
70
|
+
[LEVEL.FATAL]: "critical",
|
|
71
|
+
};
|
|
72
|
+
function envBoolean$1(key, { defaultValue }) {
|
|
73
|
+
const value = process.env[key];
|
|
74
|
+
if (value === undefined)
|
|
75
|
+
return defaultValue;
|
|
76
|
+
const lower = value.toLowerCase();
|
|
77
|
+
return !(lower === "" ||
|
|
78
|
+
lower === "0" ||
|
|
79
|
+
lower === "f" ||
|
|
80
|
+
lower === "false" ||
|
|
81
|
+
lower === "n" ||
|
|
82
|
+
lower === "no");
|
|
83
|
+
}
|
|
84
|
+
function isDatadogForwardingEnabled() {
|
|
85
|
+
return (envBoolean$1(DATADOG_TRANSPORT.ENV.FORWARDING, { defaultValue: false }) &&
|
|
86
|
+
!!process.env[DATADOG_TRANSPORT.ENV.API_KEY]);
|
|
87
|
+
}
|
|
88
|
+
class DatadogLogTransport {
|
|
89
|
+
constructor() {
|
|
90
|
+
this._beforeExitHandler = null;
|
|
91
|
+
this._buffer = [];
|
|
92
|
+
this._flushTimer = null;
|
|
93
|
+
this._ddsource = "nodejs";
|
|
94
|
+
const env = process.env;
|
|
95
|
+
this._env =
|
|
96
|
+
env[DATADOG_TRANSPORT.ENV.DD_ENV] ||
|
|
97
|
+
env[DATADOG_TRANSPORT.ENV.PROJECT_ENV] ||
|
|
98
|
+
"local";
|
|
99
|
+
this._hostname =
|
|
100
|
+
env[DATADOG_TRANSPORT.ENV.DD_HOST] ||
|
|
101
|
+
env[DATADOG_TRANSPORT.ENV.PROJECT_HOST] ||
|
|
102
|
+
node_os.hostname();
|
|
103
|
+
this._service =
|
|
104
|
+
env[DATADOG_TRANSPORT.ENV.DD_SERVICE] ||
|
|
105
|
+
env[DATADOG_TRANSPORT.ENV.PROJECT_SERVICE] ||
|
|
106
|
+
"unknown";
|
|
107
|
+
this._site = env[DATADOG_TRANSPORT.ENV.DD_SITE] || "datadoghq.com";
|
|
108
|
+
this._flushTimer = setInterval(() => {
|
|
109
|
+
this.flush();
|
|
110
|
+
}, DATADOG_TRANSPORT.FLUSH_INTERVAL_MS);
|
|
111
|
+
// Unref so timer doesn't keep process alive
|
|
112
|
+
if (this._flushTimer && typeof this._flushTimer.unref === "function") {
|
|
113
|
+
this._flushTimer.unref();
|
|
114
|
+
}
|
|
115
|
+
// Best-effort flush on exit
|
|
116
|
+
this._beforeExitHandler = () => this.flush();
|
|
117
|
+
process.on("beforeExit", this._beforeExitHandler);
|
|
118
|
+
}
|
|
119
|
+
send(line, level) {
|
|
120
|
+
const entry = {
|
|
121
|
+
ddsource: this._ddsource,
|
|
122
|
+
ddtags: `env:${this._env}`,
|
|
123
|
+
hostname: this._hostname,
|
|
124
|
+
message: line,
|
|
125
|
+
service: this._service,
|
|
126
|
+
status: LEVEL_TO_STATUS[level] || "info",
|
|
127
|
+
};
|
|
128
|
+
this._buffer.push(entry);
|
|
129
|
+
if (this._buffer.length >= DATADOG_TRANSPORT.MAX_BATCH_SIZE) {
|
|
130
|
+
this.flush();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
flush() {
|
|
134
|
+
if (this._buffer.length === 0)
|
|
135
|
+
return;
|
|
136
|
+
// Atomic swap
|
|
137
|
+
const batch = this._buffer;
|
|
138
|
+
this._buffer = [];
|
|
139
|
+
const apiKey = process.env[DATADOG_TRANSPORT.ENV.API_KEY];
|
|
140
|
+
if (!apiKey)
|
|
141
|
+
return;
|
|
142
|
+
const body = JSON.stringify(batch);
|
|
143
|
+
const options = {
|
|
144
|
+
headers: {
|
|
145
|
+
"Content-Type": "application/json",
|
|
146
|
+
"DD-API-KEY": apiKey,
|
|
147
|
+
},
|
|
148
|
+
hostname: `http-intake.logs.${this._site}`,
|
|
149
|
+
method: "POST",
|
|
150
|
+
path: DATADOG_TRANSPORT.INTAKE_PATH,
|
|
151
|
+
};
|
|
152
|
+
try {
|
|
153
|
+
const req = node_https.request(options, () => {
|
|
154
|
+
// Response intentionally ignored
|
|
155
|
+
});
|
|
156
|
+
req.on("error", () => {
|
|
157
|
+
// Silently swallow transport errors
|
|
158
|
+
});
|
|
159
|
+
req.write(body);
|
|
160
|
+
req.end();
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Transport must never throw
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
destroy() {
|
|
167
|
+
if (this._flushTimer) {
|
|
168
|
+
clearInterval(this._flushTimer);
|
|
169
|
+
this._flushTimer = null;
|
|
170
|
+
}
|
|
171
|
+
if (this._beforeExitHandler) {
|
|
172
|
+
process.removeListener("beforeExit", this._beforeExitHandler);
|
|
173
|
+
this._beforeExitHandler = null;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
this.flush();
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// Best-effort
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
let _instance = null;
|
|
184
|
+
function getDatadogTransport() {
|
|
185
|
+
if (!isDatadogForwardingEnabled())
|
|
186
|
+
return null;
|
|
187
|
+
if (!_instance) {
|
|
188
|
+
_instance = new DatadogLogTransport();
|
|
189
|
+
}
|
|
190
|
+
return _instance;
|
|
191
|
+
}
|
|
192
|
+
function _resetDatadogTransport() {
|
|
193
|
+
if (_instance) {
|
|
194
|
+
_instance.destroy();
|
|
195
|
+
_instance = null;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
43
198
|
|
|
44
199
|
function forceString(value, defaultValue = "") {
|
|
45
200
|
if (value === null)
|
|
@@ -135,6 +290,15 @@ function out(line, { level = "debug" } = {}) {
|
|
|
135
290
|
console.warn(error);
|
|
136
291
|
console.log(lineStr);
|
|
137
292
|
}
|
|
293
|
+
try {
|
|
294
|
+
const transport = getDatadogTransport();
|
|
295
|
+
if (transport) {
|
|
296
|
+
transport.send(lineStr, level);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
// Transport errors must never affect logging
|
|
301
|
+
}
|
|
138
302
|
}
|
|
139
303
|
function parse(message) {
|
|
140
304
|
if (typeof message !== "string") {
|
|
@@ -490,6 +654,7 @@ class JaypieLogger {
|
|
|
490
654
|
this.var = (messageObject, messageValue) => this._logger.var(logVar(messageObject, messageValue));
|
|
491
655
|
}
|
|
492
656
|
init() {
|
|
657
|
+
_resetDatadogTransport();
|
|
493
658
|
for (const logger of this._loggers) {
|
|
494
659
|
if ("init" in logger && typeof logger.init === "function") {
|
|
495
660
|
logger.init();
|
|
@@ -601,7 +766,9 @@ const log = createLogger();
|
|
|
601
766
|
exports.FORMAT = FORMAT;
|
|
602
767
|
exports.LEVEL = LEVEL;
|
|
603
768
|
exports.Logger = Logger;
|
|
769
|
+
exports._resetDatadogTransport = _resetDatadogTransport;
|
|
604
770
|
exports.createLogger = createLogger;
|
|
605
771
|
exports.default = log;
|
|
772
|
+
exports.isDatadogForwardingEnabled = isDatadogForwardingEnabled;
|
|
606
773
|
exports.log = log;
|
|
607
774
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/constants.ts","../../../src/utils.ts","../../../src/Logger.ts","../../../src/logTags.ts","../../../src/forceVar.ts","../../../src/pipelines.ts","../../../src/logVar.ts","../../../src/JaypieLogger.ts","../../../src/index.ts"],"sourcesContent":["export const DEFAULT = {\n LEVEL: \"debug\",\n VAR_LEVEL: \"debug\",\n};\n\nexport const ERROR_PREFIX = \"[logger]\";\n\nexport const ERROR = {\n VAR: {\n EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,\n MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,\n NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,\n UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \\`undefined\\` message`,\n },\n};\n\nexport const FORMAT = {\n JSON: \"json\",\n TEXT: \"text\",\n} as const;\n\nexport const LEVEL = {\n ALL: \"all\",\n DEBUG: \"debug\",\n ERROR: \"error\",\n FATAL: \"fatal\",\n INFO: \"info\",\n SILENT: \"silent\",\n TRACE: \"trace\",\n WARN: \"warn\",\n} as const;\n\nexport const LEVEL_VALUES: Record<string, number> = {\n all: 100,\n debug: 70,\n error: 10,\n fatal: 1,\n info: 50,\n none: 0,\n silent: 0,\n trace: 90,\n warn: 30,\n};\n\nexport const PSEUDO_LEVELS = [\"ALL\", \"SILENT\"];\n","import { LEVEL } from \"./constants\";\n\nexport function forceString(value: unknown, defaultValue = \"\"): string {\n if (value === null) return \"null\";\n if (value === undefined) return String(defaultValue);\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nexport function formatAsJsonString(subject: unknown): string {\n const SPACES = 0;\n const UNUSED_PARAM = null;\n\n switch (typeof subject) {\n case \"string\":\n if (subject === \"\") return `\"\"`;\n try {\n return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);\n } catch {\n return subject;\n }\n\n case \"object\":\n try {\n if (\n subject &&\n subject instanceof Object &&\n !Array.isArray(subject) &&\n subject.constructor &&\n subject.constructor !== Object &&\n \"toString\" in subject &&\n typeof subject.toString === \"function\"\n ) {\n return subject.toString();\n }\n return JSON.stringify(subject, UNUSED_PARAM, SPACES);\n } catch (error) {\n if (error instanceof TypeError) {\n const truncatedSubject = Object.keys(subject as object).reduce(\n (newSubject: Record<string, string>, key: string) => {\n const nextSubject = { ...newSubject };\n nextSubject[key] = String(\n (subject as Record<string, unknown>)[key],\n );\n return nextSubject;\n },\n {},\n );\n return formatAsJsonString(truncatedSubject);\n }\n throw error;\n }\n\n default:\n return String(subject);\n }\n}\n\nexport function stringify(...params: unknown[]): string {\n if (params.length === 0) return \"\";\n if (params.length === 1) {\n return formatAsJsonString(params[0]);\n }\n\n const formatted = params.map(formatAsJsonString);\n return formatted.join(\" \");\n}\n\nexport function out(\n line: string | unknown,\n { level = \"debug\" }: { level?: string } = {},\n): void {\n let lineStr: string;\n if (typeof line !== \"string\") {\n lineStr = stringify(line);\n } else {\n lineStr = line;\n }\n\n let outputFunction: (...args: unknown[]) => void;\n\n switch (level) {\n case LEVEL.INFO:\n outputFunction = console.info;\n break;\n case LEVEL.WARN:\n outputFunction = console.warn;\n break;\n case LEVEL.ERROR:\n case LEVEL.FATAL:\n outputFunction = console.error;\n break;\n case LEVEL.TRACE:\n case LEVEL.DEBUG:\n outputFunction = console.debug;\n break;\n default:\n outputFunction = console.log;\n break;\n }\n\n try {\n outputFunction(lineStr);\n } catch (error) {\n console.warn(error);\n console.log(lineStr);\n }\n}\n\nexport function parse(message: unknown): unknown {\n if (typeof message !== \"string\") {\n return message;\n }\n try {\n return JSON.parse(message);\n } catch {\n return message;\n }\n}\n\nexport function parsesTo(message: unknown): {\n parses: boolean;\n message: unknown;\n} {\n if (typeof message !== \"string\") {\n return {\n parses: false,\n message,\n };\n }\n try {\n return {\n parses: true,\n message: JSON.parse(message),\n };\n } catch {\n return {\n parses: false,\n message,\n };\n }\n}\n","import {\n DEFAULT,\n ERROR,\n FORMAT,\n LEVEL,\n LEVEL_VALUES,\n PSEUDO_LEVELS,\n} from \"./constants\";\nimport { forceString, out, parse, parsesTo, stringify } from \"./utils\";\n\ntype LogLevel = string;\ntype LogFormat = \"json\" | \"text\";\ntype Tags = Record<string, string>;\n\ninterface LoggerOptions {\n format?: LogFormat;\n level?: LogLevel;\n tags?: Tags;\n varLevel?: LogLevel;\n}\n\ninterface LogJson {\n data?: unknown;\n dataType?: string;\n log: string;\n message: string;\n var?: string;\n [key: string]: unknown;\n}\n\ntype LogMethod = {\n (...messages: unknown[]): void;\n var: (messageObject: unknown, messageValue?: unknown) => void;\n};\n\nclass Logger {\n public debug: LogMethod;\n public error: LogMethod;\n public fatal: LogMethod;\n public info: LogMethod;\n public options: LoggerOptions;\n public tags: Tags;\n public trace: LogMethod;\n public var: (messageObject: unknown, messageValue?: unknown) => void;\n public warn: LogMethod;\n\n constructor({\n format = (process.env.LOG_FORMAT as LogFormat) || DEFAULT.LEVEL,\n level = process.env.LOG_LEVEL || DEFAULT.LEVEL,\n tags = {},\n varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL,\n }: LoggerOptions = {}) {\n this.options = {\n format,\n level,\n varLevel,\n };\n\n this.tags = {};\n Object.keys(tags).forEach((key) => {\n this.tags[key] = forceString(tags[key]);\n });\n\n this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);\n this.error = this.createLogMethod(LEVEL.ERROR, format, level);\n this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);\n this.info = this.createLogMethod(LEVEL.INFO, format, level);\n this.trace = this.createLogMethod(LEVEL.TRACE, format, level);\n this.warn = this.createLogMethod(LEVEL.WARN, format, level);\n\n const varLevelMethod =\n this[varLevel as \"debug\" | \"error\" | \"fatal\" | \"info\" | \"trace\" | \"warn\"];\n this.var = (varLevelMethod as LogMethod)?.var || this.debug.var;\n }\n\n private createLogMethod(\n logLevel: string,\n format: LogFormat,\n checkLevel: string,\n ): LogMethod {\n const logFn = (...messages: unknown[]): void => {\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n if (format === FORMAT.JSON) {\n const message = stringify(...messages);\n const parses = parsesTo(message);\n const json: LogJson = {\n log: logLevel,\n message,\n ...this.tags,\n };\n if (parses.parses) {\n json.data = parses.message;\n }\n out(json, { level: logLevel });\n } else {\n const message = stringify(...messages);\n out(message, { level: logLevel });\n }\n }\n };\n\n logFn.var = (messageObject: unknown, messageValue?: unknown): void => {\n if (messageObject === undefined) {\n this.warn(ERROR.VAR.UNDEFINED_MESSAGE);\n }\n\n let msgObj: Record<string, unknown>;\n\n if (typeof messageObject !== \"object\" || messageObject === null) {\n if (typeof messageObject !== \"object\") {\n if (messageValue === undefined) messageValue = \"undefined\";\n msgObj = { [String(messageObject)]: messageValue };\n } else {\n this.warn(ERROR.VAR.NULL_OBJECT);\n return logFn(messageObject);\n }\n } else {\n msgObj = messageObject as Record<string, unknown>;\n }\n\n const keys = Object.keys(msgObj);\n if (keys.length === 0) {\n this.warn(ERROR.VAR.EMPTY_OBJECT);\n return logFn(msgObj);\n }\n\n if (keys.length > 1) {\n this.warn(ERROR.VAR.MULTIPLE_KEYS);\n return logFn(msgObj);\n }\n\n if (format === FORMAT.JSON) {\n const messageKey = keys[0];\n const messageVal = msgObj[messageKey];\n\n const json: LogJson = {\n data: parse(messageVal),\n dataType: typeof messageVal,\n log: logLevel,\n message: stringify(messageVal),\n var: messageKey,\n ...this.tags,\n };\n\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n out(json, { level: logLevel });\n }\n } else {\n return logFn(msgObj);\n }\n };\n\n return logFn as LogMethod;\n }\n\n public tag(key: unknown, value?: unknown): void {\n if (value) {\n this.tags[forceString(key)] = forceString(value);\n return;\n }\n\n if (Array.isArray(key)) {\n key.forEach((k) => {\n this.tags[forceString(k)] = \"\";\n });\n return;\n }\n\n if (key === null) {\n this.tags.null = \"\";\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key).forEach((k) => {\n this.tags[forceString(k)] = forceString(\n (key as Record<string, unknown>)[k],\n );\n });\n } else {\n this.tags[forceString(key)] = \"\";\n }\n }\n\n public untag(key: unknown): void {\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this.tags[forceString(k)];\n });\n return;\n }\n\n if (key === null) {\n delete this.tags.null;\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key as object).forEach((k) => {\n delete this.tags[forceString(k)];\n });\n } else {\n delete this.tags[forceString(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): Logger {\n const logger = new Logger(this.options);\n logger.tag(this.tags);\n logger.tag(key, value);\n return logger;\n }\n}\n\nexport default Logger;\n","export function logTags(\n withTags?: Record<string, string>,\n): Record<string, string> {\n if (withTags && typeof withTags !== \"object\") {\n withTags = {};\n }\n\n const {\n PROJECT_COMMIT,\n PROJECT_ENV,\n PROJECT_KEY,\n PROJECT_SERVICE,\n PROJECT_SPONSOR,\n PROJECT_VERSION,\n } = process.env;\n\n const tags: Record<string, string> = {};\n\n if (PROJECT_COMMIT) {\n tags.commit = PROJECT_COMMIT;\n }\n if (PROJECT_ENV) {\n tags.env = PROJECT_ENV;\n }\n if (PROJECT_KEY) {\n tags.project = PROJECT_KEY;\n }\n if (PROJECT_SERVICE) {\n tags.service = PROJECT_SERVICE;\n }\n if (PROJECT_SPONSOR) {\n tags.sponsor = PROJECT_SPONSOR;\n }\n if (process.env.npm_package_version || PROJECT_VERSION) {\n tags.version = (process.env.npm_package_version ||\n PROJECT_VERSION) as string;\n }\n\n return {\n ...tags,\n ...withTags,\n };\n}\n","import { forceString } from \"./utils\";\n\nexport function forceVar(\n key: unknown,\n value?: unknown,\n): Record<string, unknown> {\n if (typeof key === \"undefined\") {\n return {};\n }\n if (typeof key === \"object\" && key !== null) {\n if (Object.keys(key).length === 1) {\n return key as Record<string, unknown>;\n } else {\n return { value: key };\n }\n }\n const keyStr = forceString(key);\n if (typeof value === \"undefined\") {\n return { [keyStr]: \"\" };\n } else {\n return { [keyStr]: value };\n }\n}\n","interface Pipeline {\n key: string;\n filter: (value: unknown) => unknown;\n}\n\nfunction isAxiosResponse(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) {\n return false;\n }\n const r = response as Record<string, unknown>;\n return !!(\n r &&\n r.config &&\n r.data &&\n r.headers &&\n r.request &&\n r.status &&\n r.statusText\n );\n}\n\nfunction filterAxiosResponse(response: unknown): unknown {\n if (!isAxiosResponse(response)) {\n return response;\n }\n const r = response as Record<string, unknown>;\n const newResponse: Record<string, unknown> = {\n data: r.data,\n headers: r.headers,\n status: r.status,\n statusText: r.statusText,\n };\n if (r.isAxiosError) {\n newResponse.isAxiosError = r.isAxiosError;\n }\n return newResponse;\n}\n\nexport const axiosResponseVarPipeline: Pipeline = {\n filter: filterAxiosResponse,\n key: \"response\",\n};\n\nfunction isError(item: unknown): boolean {\n if (typeof item !== \"object\" || item === null) {\n return false;\n }\n if (item instanceof Error) {\n return true;\n }\n const i = item as Record<string, unknown>;\n if (i.isProjectError) {\n return true;\n }\n return false;\n}\n\nfunction filterErrorVar(item: unknown): unknown {\n if (!isError(item)) {\n return item;\n }\n const e = item as Error & Record<string, unknown>;\n const newItem: Record<string, unknown> = {\n message: e.message,\n name: e.name,\n };\n if (e.cause) {\n newItem.cause = e.cause;\n }\n if (e.stack) {\n newItem.stack = e.stack;\n }\n if (e.isProjectError) {\n newItem.isProjectError = e.isProjectError;\n newItem.title = e.title;\n newItem.detail = e.detail;\n newItem.status = e.status;\n }\n return newItem;\n}\n\nexport const errorVarPipeline: Pipeline = {\n filter: filterErrorVar,\n key: \"error\",\n};\n\nexport const pipelines = [axiosResponseVarPipeline, errorVarPipeline];\n","import { forceVar } from \"./forceVar\";\nimport { pipelines } from \"./pipelines\";\n\nfunction keyValueToArray(keyValue: Record<string, unknown>): [string, unknown] {\n const key = Object.keys(keyValue)[0];\n return [key, keyValue[key]];\n}\n\nexport function logVar(key: unknown, value?: unknown): Record<string, unknown> {\n let [k, v] = keyValueToArray(forceVar(key, value));\n\n for (const pipeline of pipelines) {\n if (k === pipeline.key) {\n v = pipeline.filter(v);\n }\n }\n\n return { [k]: v };\n}\n","import Logger from \"./Logger\";\nimport { DEFAULT, FORMAT, LEVEL } from \"./constants\";\nimport { logTags } from \"./logTags\";\nimport { logVar } from \"./logVar\";\n\ninterface JaypieLoggerOptions {\n level?: string;\n tags?: Record<string, string>;\n}\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nclass JaypieLogger {\n public debug: Logger[\"debug\"];\n public error: Logger[\"error\"];\n public fatal: Logger[\"fatal\"];\n public info: Logger[\"info\"];\n public level: string;\n public trace: Logger[\"trace\"];\n public var: Logger[\"var\"];\n public warn: Logger[\"warn\"];\n\n private _logger: Logger;\n private _loggers: Logger[];\n private _params: JaypieLoggerOptions;\n private _tags: Record<string, string>;\n private _withLoggers: Record<string, JaypieLogger>;\n\n constructor({\n level = process.env.LOG_LEVEL,\n tags = {},\n }: JaypieLoggerOptions = {}) {\n this._params = { level, tags };\n this._loggers = [];\n this._tags = {};\n this._withLoggers = {};\n\n this.level = level || DEFAULT.LEVEL;\n\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n\n this.debug = ((...args: any[]) =>\n this._logger.debug(...args)) as Logger[\"debug\"];\n this.debug.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.debug.var(messageObject, messageValue);\n\n this.error = ((...args: any[]) =>\n this._logger.error(...args)) as Logger[\"error\"];\n this.error.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.error.var(messageObject, messageValue);\n\n this.fatal = ((...args: any[]) =>\n this._logger.fatal(...args)) as Logger[\"fatal\"];\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.fatal.var(messageObject, messageValue);\n\n this.info = ((...args: any[]) =>\n this._logger.info(...args)) as Logger[\"info\"];\n this.info.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.info.var(messageObject, messageValue);\n\n this.trace = ((...args: any[]) =>\n this._logger.trace(...args)) as Logger[\"trace\"];\n this.trace.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.trace.var(messageObject, messageValue);\n\n this.warn = ((...args: any[]) =>\n this._logger.warn(...args)) as Logger[\"warn\"];\n this.warn.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.warn.var(messageObject, messageValue);\n\n this.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.var(logVar(messageObject, messageValue));\n }\n\n public init(): void {\n for (const logger of this._loggers) {\n if (\"init\" in logger && typeof logger.init === \"function\") {\n (logger as Logger & { init: () => void }).init();\n }\n }\n const level = this._params.level;\n const tags = this._params.tags;\n this.level = level || DEFAULT.LEVEL;\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n this._withLoggers = {};\n\n const levels = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"trace\",\n \"warn\",\n ] as const;\n levels.forEach((lvl) => {\n this[lvl] = ((...args: any[]) => {\n this._logger[lvl](...args);\n }) as any;\n this[lvl].var = (messageObject: unknown, messageValue?: unknown) => {\n this._logger[lvl].var(messageObject, messageValue);\n };\n });\n }\n\n public lib({\n level,\n lib,\n tags = {},\n }: {\n level?: string;\n lib?: string;\n tags?: Record<string, string>;\n } = {}): JaypieLogger {\n const newTags = Object.assign({}, this._tags, tags);\n if (lib) {\n newTags.lib = lib;\n }\n\n const logger = new JaypieLogger({\n level: (() => {\n if (level) {\n return level;\n }\n if (process.env.MODULE_LOG_LEVEL) {\n return process.env.MODULE_LOG_LEVEL;\n }\n if (envBoolean(\"MODULE_LOGGER\", { defaultValue: false })) {\n return process.env.LOG_LEVEL;\n }\n return LEVEL.SILENT;\n })(),\n tags: newTags,\n });\n this._loggers.push(logger._logger);\n return logger;\n }\n\n public tag(tags: Record<string, unknown>): void {\n for (const logger of this._loggers) {\n logger.tag(tags);\n }\n Object.assign(this._tags, tags);\n }\n\n public untag(key: unknown): void {\n for (const logger of this._loggers) {\n logger.untag(key);\n }\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this._tags[String(k)];\n });\n } else if (typeof key === \"object\" && key !== null) {\n Object.keys(key).forEach((k) => {\n delete this._tags[k];\n });\n } else {\n delete this._tags[String(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): JaypieLogger {\n if (!key || (typeof key !== \"object\" && value === undefined)) {\n throw new Error(\n \"ConfigurationError: with() requires an object argument or key-value pair\",\n );\n }\n const loggerKey = JSON.stringify([key, value]);\n if (Object.keys(this._withLoggers).includes(loggerKey)) {\n return this._withLoggers[loggerKey];\n }\n const logger = new JaypieLogger({\n level: this.level,\n tags: { ...this._tags },\n });\n logger._logger = this._logger.with(key, value);\n logger._loggers = [logger._logger];\n this._withLoggers[loggerKey] = logger;\n this._loggers.push(logger._logger);\n return logger;\n }\n}\n\nexport function createLogger(tags: Record<string, string> = {}): JaypieLogger {\n const jaypieLogger = new JaypieLogger({\n tags,\n });\n return jaypieLogger;\n}\n\nexport default JaypieLogger;\n","import Logger from \"./Logger\";\nimport { createLogger } from \"./JaypieLogger\";\nimport { FORMAT, LEVEL } from \"./constants\";\n\nexport { FORMAT, LEVEL, Logger, createLogger };\n\nexport const log = createLogger();\n\nexport default log;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/constants.ts","../../../src/datadogTransport.ts","../../../src/utils.ts","../../../src/Logger.ts","../../../src/logTags.ts","../../../src/forceVar.ts","../../../src/pipelines.ts","../../../src/logVar.ts","../../../src/JaypieLogger.ts","../../../src/index.ts"],"sourcesContent":["export const DEFAULT = {\n LEVEL: \"debug\",\n VAR_LEVEL: \"debug\",\n};\n\nexport const ERROR_PREFIX = \"[logger]\";\n\nexport const ERROR = {\n VAR: {\n EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,\n MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,\n NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,\n UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \\`undefined\\` message`,\n },\n};\n\nexport const FORMAT = {\n JSON: \"json\",\n TEXT: \"text\",\n} as const;\n\nexport const LEVEL = {\n ALL: \"all\",\n DEBUG: \"debug\",\n ERROR: \"error\",\n FATAL: \"fatal\",\n INFO: \"info\",\n SILENT: \"silent\",\n TRACE: \"trace\",\n WARN: \"warn\",\n} as const;\n\nexport const LEVEL_VALUES: Record<string, number> = {\n all: 100,\n debug: 70,\n error: 10,\n fatal: 1,\n info: 50,\n none: 0,\n silent: 0,\n trace: 90,\n warn: 30,\n};\n\nexport const DATADOG_TRANSPORT = {\n ENV: {\n API_KEY: \"DATADOG_API_KEY\",\n DD_ENV: \"DD_ENV\",\n DD_HOST: \"DD_HOST\",\n DD_SERVICE: \"DD_SERVICE\",\n DD_SITE: \"DD_SITE\",\n FORWARDING: \"DATADOG_LOCAL_FORWARDING\",\n PROJECT_ENV: \"PROJECT_ENV\",\n PROJECT_HOST: \"PROJECT_HOST\",\n PROJECT_SERVICE: \"PROJECT_SERVICE\",\n },\n FLUSH_INTERVAL_MS: 5000,\n INTAKE_PATH: \"/api/v2/logs\",\n MAX_BATCH_SIZE: 100,\n} as const;\n\nexport const PSEUDO_LEVELS = [\"ALL\", \"SILENT\"];\n","import { hostname } from \"node:os\";\nimport { request } from \"node:https\";\n\nimport { DATADOG_TRANSPORT, LEVEL } from \"./constants\";\n\n// Level-to-Datadog status mapping\nconst LEVEL_TO_STATUS: Record<string, string> = {\n [LEVEL.TRACE]: \"debug\",\n [LEVEL.DEBUG]: \"debug\",\n [LEVEL.INFO]: \"info\",\n [LEVEL.WARN]: \"warn\",\n [LEVEL.ERROR]: \"error\",\n [LEVEL.FATAL]: \"critical\",\n};\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nexport function isDatadogForwardingEnabled(): boolean {\n return (\n envBoolean(DATADOG_TRANSPORT.ENV.FORWARDING, { defaultValue: false }) &&\n !!process.env[DATADOG_TRANSPORT.ENV.API_KEY]\n );\n}\n\ninterface DatadogLogEntry {\n ddsource: string;\n ddtags: string;\n hostname: string;\n message: string;\n service: string;\n status: string;\n}\n\nclass DatadogLogTransport {\n private _beforeExitHandler: (() => void) | null = null;\n private _buffer: DatadogLogEntry[] = [];\n private _flushTimer: ReturnType<typeof setInterval> | null = null;\n private _ddsource = \"nodejs\";\n private _env: string;\n private _hostname: string;\n private _service: string;\n private _site: string;\n\n constructor() {\n const env = process.env;\n this._env =\n env[DATADOG_TRANSPORT.ENV.DD_ENV] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_ENV] ||\n \"local\";\n this._hostname =\n env[DATADOG_TRANSPORT.ENV.DD_HOST] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_HOST] ||\n hostname();\n this._service =\n env[DATADOG_TRANSPORT.ENV.DD_SERVICE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SERVICE] ||\n \"unknown\";\n this._site = env[DATADOG_TRANSPORT.ENV.DD_SITE] || \"datadoghq.com\";\n\n this._flushTimer = setInterval(() => {\n this.flush();\n }, DATADOG_TRANSPORT.FLUSH_INTERVAL_MS);\n // Unref so timer doesn't keep process alive\n if (this._flushTimer && typeof this._flushTimer.unref === \"function\") {\n this._flushTimer.unref();\n }\n\n // Best-effort flush on exit\n this._beforeExitHandler = () => this.flush();\n process.on(\"beforeExit\", this._beforeExitHandler);\n }\n\n send(line: string, level: string): void {\n const entry: DatadogLogEntry = {\n ddsource: this._ddsource,\n ddtags: `env:${this._env}`,\n hostname: this._hostname,\n message: line,\n service: this._service,\n status: LEVEL_TO_STATUS[level] || \"info\",\n };\n this._buffer.push(entry);\n if (this._buffer.length >= DATADOG_TRANSPORT.MAX_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): void {\n if (this._buffer.length === 0) return;\n\n // Atomic swap\n const batch = this._buffer;\n this._buffer = [];\n\n const apiKey = process.env[DATADOG_TRANSPORT.ENV.API_KEY];\n if (!apiKey) return;\n\n const body = JSON.stringify(batch);\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": apiKey,\n },\n hostname: `http-intake.logs.${this._site}`,\n method: \"POST\",\n path: DATADOG_TRANSPORT.INTAKE_PATH,\n };\n\n try {\n const req = request(options, () => {\n // Response intentionally ignored\n });\n req.on(\"error\", () => {\n // Silently swallow transport errors\n });\n req.write(body);\n req.end();\n } catch {\n // Transport must never throw\n }\n }\n\n destroy(): void {\n if (this._flushTimer) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n if (this._beforeExitHandler) {\n process.removeListener(\"beforeExit\", this._beforeExitHandler);\n this._beforeExitHandler = null;\n }\n try {\n this.flush();\n } catch {\n // Best-effort\n }\n }\n}\n\nlet _instance: DatadogLogTransport | null = null;\n\nexport function getDatadogTransport(): DatadogLogTransport | null {\n if (!isDatadogForwardingEnabled()) return null;\n if (!_instance) {\n _instance = new DatadogLogTransport();\n }\n return _instance;\n}\n\nexport function _resetDatadogTransport(): void {\n if (_instance) {\n _instance.destroy();\n _instance = null;\n }\n}\n","import { LEVEL } from \"./constants\";\nimport { getDatadogTransport } from \"./datadogTransport\";\n\nexport function forceString(value: unknown, defaultValue = \"\"): string {\n if (value === null) return \"null\";\n if (value === undefined) return String(defaultValue);\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nexport function formatAsJsonString(subject: unknown): string {\n const SPACES = 0;\n const UNUSED_PARAM = null;\n\n switch (typeof subject) {\n case \"string\":\n if (subject === \"\") return `\"\"`;\n try {\n return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);\n } catch {\n return subject;\n }\n\n case \"object\":\n try {\n if (\n subject &&\n subject instanceof Object &&\n !Array.isArray(subject) &&\n subject.constructor &&\n subject.constructor !== Object &&\n \"toString\" in subject &&\n typeof subject.toString === \"function\"\n ) {\n return subject.toString();\n }\n return JSON.stringify(subject, UNUSED_PARAM, SPACES);\n } catch (error) {\n if (error instanceof TypeError) {\n const truncatedSubject = Object.keys(subject as object).reduce(\n (newSubject: Record<string, string>, key: string) => {\n const nextSubject = { ...newSubject };\n nextSubject[key] = String(\n (subject as Record<string, unknown>)[key],\n );\n return nextSubject;\n },\n {},\n );\n return formatAsJsonString(truncatedSubject);\n }\n throw error;\n }\n\n default:\n return String(subject);\n }\n}\n\nexport function stringify(...params: unknown[]): string {\n if (params.length === 0) return \"\";\n if (params.length === 1) {\n return formatAsJsonString(params[0]);\n }\n\n const formatted = params.map(formatAsJsonString);\n return formatted.join(\" \");\n}\n\nexport function out(\n line: string | unknown,\n { level = \"debug\" }: { level?: string } = {},\n): void {\n let lineStr: string;\n if (typeof line !== \"string\") {\n lineStr = stringify(line);\n } else {\n lineStr = line;\n }\n\n let outputFunction: (...args: unknown[]) => void;\n\n switch (level) {\n case LEVEL.INFO:\n outputFunction = console.info;\n break;\n case LEVEL.WARN:\n outputFunction = console.warn;\n break;\n case LEVEL.ERROR:\n case LEVEL.FATAL:\n outputFunction = console.error;\n break;\n case LEVEL.TRACE:\n case LEVEL.DEBUG:\n outputFunction = console.debug;\n break;\n default:\n outputFunction = console.log;\n break;\n }\n\n try {\n outputFunction(lineStr);\n } catch (error) {\n console.warn(error);\n console.log(lineStr);\n }\n\n try {\n const transport = getDatadogTransport();\n if (transport) {\n transport.send(lineStr, level);\n }\n } catch {\n // Transport errors must never affect logging\n }\n}\n\nexport function parse(message: unknown): unknown {\n if (typeof message !== \"string\") {\n return message;\n }\n try {\n return JSON.parse(message);\n } catch {\n return message;\n }\n}\n\nexport function parsesTo(message: unknown): {\n parses: boolean;\n message: unknown;\n} {\n if (typeof message !== \"string\") {\n return {\n parses: false,\n message,\n };\n }\n try {\n return {\n parses: true,\n message: JSON.parse(message),\n };\n } catch {\n return {\n parses: false,\n message,\n };\n }\n}\n","import {\n DEFAULT,\n ERROR,\n FORMAT,\n LEVEL,\n LEVEL_VALUES,\n PSEUDO_LEVELS,\n} from \"./constants\";\nimport { forceString, out, parse, parsesTo, stringify } from \"./utils\";\n\ntype LogLevel = string;\ntype LogFormat = \"json\" | \"text\";\ntype Tags = Record<string, string>;\n\ninterface LoggerOptions {\n format?: LogFormat;\n level?: LogLevel;\n tags?: Tags;\n varLevel?: LogLevel;\n}\n\ninterface LogJson {\n data?: unknown;\n dataType?: string;\n log: string;\n message: string;\n var?: string;\n [key: string]: unknown;\n}\n\ntype LogMethod = {\n (...messages: unknown[]): void;\n var: (messageObject: unknown, messageValue?: unknown) => void;\n};\n\nclass Logger {\n public debug: LogMethod;\n public error: LogMethod;\n public fatal: LogMethod;\n public info: LogMethod;\n public options: LoggerOptions;\n public tags: Tags;\n public trace: LogMethod;\n public var: (messageObject: unknown, messageValue?: unknown) => void;\n public warn: LogMethod;\n\n constructor({\n format = (process.env.LOG_FORMAT as LogFormat) || DEFAULT.LEVEL,\n level = process.env.LOG_LEVEL || DEFAULT.LEVEL,\n tags = {},\n varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL,\n }: LoggerOptions = {}) {\n this.options = {\n format,\n level,\n varLevel,\n };\n\n this.tags = {};\n Object.keys(tags).forEach((key) => {\n this.tags[key] = forceString(tags[key]);\n });\n\n this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);\n this.error = this.createLogMethod(LEVEL.ERROR, format, level);\n this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);\n this.info = this.createLogMethod(LEVEL.INFO, format, level);\n this.trace = this.createLogMethod(LEVEL.TRACE, format, level);\n this.warn = this.createLogMethod(LEVEL.WARN, format, level);\n\n const varLevelMethod =\n this[varLevel as \"debug\" | \"error\" | \"fatal\" | \"info\" | \"trace\" | \"warn\"];\n this.var = (varLevelMethod as LogMethod)?.var || this.debug.var;\n }\n\n private createLogMethod(\n logLevel: string,\n format: LogFormat,\n checkLevel: string,\n ): LogMethod {\n const logFn = (...messages: unknown[]): void => {\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n if (format === FORMAT.JSON) {\n const message = stringify(...messages);\n const parses = parsesTo(message);\n const json: LogJson = {\n log: logLevel,\n message,\n ...this.tags,\n };\n if (parses.parses) {\n json.data = parses.message;\n }\n out(json, { level: logLevel });\n } else {\n const message = stringify(...messages);\n out(message, { level: logLevel });\n }\n }\n };\n\n logFn.var = (messageObject: unknown, messageValue?: unknown): void => {\n if (messageObject === undefined) {\n this.warn(ERROR.VAR.UNDEFINED_MESSAGE);\n }\n\n let msgObj: Record<string, unknown>;\n\n if (typeof messageObject !== \"object\" || messageObject === null) {\n if (typeof messageObject !== \"object\") {\n if (messageValue === undefined) messageValue = \"undefined\";\n msgObj = { [String(messageObject)]: messageValue };\n } else {\n this.warn(ERROR.VAR.NULL_OBJECT);\n return logFn(messageObject);\n }\n } else {\n msgObj = messageObject as Record<string, unknown>;\n }\n\n const keys = Object.keys(msgObj);\n if (keys.length === 0) {\n this.warn(ERROR.VAR.EMPTY_OBJECT);\n return logFn(msgObj);\n }\n\n if (keys.length > 1) {\n this.warn(ERROR.VAR.MULTIPLE_KEYS);\n return logFn(msgObj);\n }\n\n if (format === FORMAT.JSON) {\n const messageKey = keys[0];\n const messageVal = msgObj[messageKey];\n\n const json: LogJson = {\n data: parse(messageVal),\n dataType: typeof messageVal,\n log: logLevel,\n message: stringify(messageVal),\n var: messageKey,\n ...this.tags,\n };\n\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n out(json, { level: logLevel });\n }\n } else {\n return logFn(msgObj);\n }\n };\n\n return logFn as LogMethod;\n }\n\n public tag(key: unknown, value?: unknown): void {\n if (value) {\n this.tags[forceString(key)] = forceString(value);\n return;\n }\n\n if (Array.isArray(key)) {\n key.forEach((k) => {\n this.tags[forceString(k)] = \"\";\n });\n return;\n }\n\n if (key === null) {\n this.tags.null = \"\";\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key).forEach((k) => {\n this.tags[forceString(k)] = forceString(\n (key as Record<string, unknown>)[k],\n );\n });\n } else {\n this.tags[forceString(key)] = \"\";\n }\n }\n\n public untag(key: unknown): void {\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this.tags[forceString(k)];\n });\n return;\n }\n\n if (key === null) {\n delete this.tags.null;\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key as object).forEach((k) => {\n delete this.tags[forceString(k)];\n });\n } else {\n delete this.tags[forceString(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): Logger {\n const logger = new Logger(this.options);\n logger.tag(this.tags);\n logger.tag(key, value);\n return logger;\n }\n}\n\nexport default Logger;\n","export function logTags(\n withTags?: Record<string, string>,\n): Record<string, string> {\n if (withTags && typeof withTags !== \"object\") {\n withTags = {};\n }\n\n const {\n PROJECT_COMMIT,\n PROJECT_ENV,\n PROJECT_KEY,\n PROJECT_SERVICE,\n PROJECT_SPONSOR,\n PROJECT_VERSION,\n } = process.env;\n\n const tags: Record<string, string> = {};\n\n if (PROJECT_COMMIT) {\n tags.commit = PROJECT_COMMIT;\n }\n if (PROJECT_ENV) {\n tags.env = PROJECT_ENV;\n }\n if (PROJECT_KEY) {\n tags.project = PROJECT_KEY;\n }\n if (PROJECT_SERVICE) {\n tags.service = PROJECT_SERVICE;\n }\n if (PROJECT_SPONSOR) {\n tags.sponsor = PROJECT_SPONSOR;\n }\n if (process.env.npm_package_version || PROJECT_VERSION) {\n tags.version = (process.env.npm_package_version ||\n PROJECT_VERSION) as string;\n }\n\n return {\n ...tags,\n ...withTags,\n };\n}\n","import { forceString } from \"./utils\";\n\nexport function forceVar(\n key: unknown,\n value?: unknown,\n): Record<string, unknown> {\n if (typeof key === \"undefined\") {\n return {};\n }\n if (typeof key === \"object\" && key !== null) {\n if (Object.keys(key).length === 1) {\n return key as Record<string, unknown>;\n } else {\n return { value: key };\n }\n }\n const keyStr = forceString(key);\n if (typeof value === \"undefined\") {\n return { [keyStr]: \"\" };\n } else {\n return { [keyStr]: value };\n }\n}\n","interface Pipeline {\n key: string;\n filter: (value: unknown) => unknown;\n}\n\nfunction isAxiosResponse(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) {\n return false;\n }\n const r = response as Record<string, unknown>;\n return !!(\n r &&\n r.config &&\n r.data &&\n r.headers &&\n r.request &&\n r.status &&\n r.statusText\n );\n}\n\nfunction filterAxiosResponse(response: unknown): unknown {\n if (!isAxiosResponse(response)) {\n return response;\n }\n const r = response as Record<string, unknown>;\n const newResponse: Record<string, unknown> = {\n data: r.data,\n headers: r.headers,\n status: r.status,\n statusText: r.statusText,\n };\n if (r.isAxiosError) {\n newResponse.isAxiosError = r.isAxiosError;\n }\n return newResponse;\n}\n\nexport const axiosResponseVarPipeline: Pipeline = {\n filter: filterAxiosResponse,\n key: \"response\",\n};\n\nfunction isError(item: unknown): boolean {\n if (typeof item !== \"object\" || item === null) {\n return false;\n }\n if (item instanceof Error) {\n return true;\n }\n const i = item as Record<string, unknown>;\n if (i.isProjectError) {\n return true;\n }\n return false;\n}\n\nfunction filterErrorVar(item: unknown): unknown {\n if (!isError(item)) {\n return item;\n }\n const e = item as Error & Record<string, unknown>;\n const newItem: Record<string, unknown> = {\n message: e.message,\n name: e.name,\n };\n if (e.cause) {\n newItem.cause = e.cause;\n }\n if (e.stack) {\n newItem.stack = e.stack;\n }\n if (e.isProjectError) {\n newItem.isProjectError = e.isProjectError;\n newItem.title = e.title;\n newItem.detail = e.detail;\n newItem.status = e.status;\n }\n return newItem;\n}\n\nexport const errorVarPipeline: Pipeline = {\n filter: filterErrorVar,\n key: \"error\",\n};\n\nexport const pipelines = [axiosResponseVarPipeline, errorVarPipeline];\n","import { forceVar } from \"./forceVar\";\nimport { pipelines } from \"./pipelines\";\n\nfunction keyValueToArray(keyValue: Record<string, unknown>): [string, unknown] {\n const key = Object.keys(keyValue)[0];\n return [key, keyValue[key]];\n}\n\nexport function logVar(key: unknown, value?: unknown): Record<string, unknown> {\n let [k, v] = keyValueToArray(forceVar(key, value));\n\n for (const pipeline of pipelines) {\n if (k === pipeline.key) {\n v = pipeline.filter(v);\n }\n }\n\n return { [k]: v };\n}\n","import Logger from \"./Logger\";\nimport { DEFAULT, FORMAT, LEVEL } from \"./constants\";\nimport { _resetDatadogTransport } from \"./datadogTransport\";\nimport { logTags } from \"./logTags\";\nimport { logVar } from \"./logVar\";\n\ninterface JaypieLoggerOptions {\n level?: string;\n tags?: Record<string, string>;\n}\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nclass JaypieLogger {\n public debug: Logger[\"debug\"];\n public error: Logger[\"error\"];\n public fatal: Logger[\"fatal\"];\n public info: Logger[\"info\"];\n public level: string;\n public trace: Logger[\"trace\"];\n public var: Logger[\"var\"];\n public warn: Logger[\"warn\"];\n\n private _logger: Logger;\n private _loggers: Logger[];\n private _params: JaypieLoggerOptions;\n private _tags: Record<string, string>;\n private _withLoggers: Record<string, JaypieLogger>;\n\n constructor({\n level = process.env.LOG_LEVEL,\n tags = {},\n }: JaypieLoggerOptions = {}) {\n this._params = { level, tags };\n this._loggers = [];\n this._tags = {};\n this._withLoggers = {};\n\n this.level = level || DEFAULT.LEVEL;\n\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n\n this.debug = ((...args: any[]) =>\n this._logger.debug(...args)) as Logger[\"debug\"];\n this.debug.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.debug.var(messageObject, messageValue);\n\n this.error = ((...args: any[]) =>\n this._logger.error(...args)) as Logger[\"error\"];\n this.error.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.error.var(messageObject, messageValue);\n\n this.fatal = ((...args: any[]) =>\n this._logger.fatal(...args)) as Logger[\"fatal\"];\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.fatal.var(messageObject, messageValue);\n\n this.info = ((...args: any[]) =>\n this._logger.info(...args)) as Logger[\"info\"];\n this.info.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.info.var(messageObject, messageValue);\n\n this.trace = ((...args: any[]) =>\n this._logger.trace(...args)) as Logger[\"trace\"];\n this.trace.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.trace.var(messageObject, messageValue);\n\n this.warn = ((...args: any[]) =>\n this._logger.warn(...args)) as Logger[\"warn\"];\n this.warn.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.warn.var(messageObject, messageValue);\n\n this.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.var(logVar(messageObject, messageValue));\n }\n\n public init(): void {\n _resetDatadogTransport();\n for (const logger of this._loggers) {\n if (\"init\" in logger && typeof logger.init === \"function\") {\n (logger as Logger & { init: () => void }).init();\n }\n }\n const level = this._params.level;\n const tags = this._params.tags;\n this.level = level || DEFAULT.LEVEL;\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n this._withLoggers = {};\n\n const levels = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"trace\",\n \"warn\",\n ] as const;\n levels.forEach((lvl) => {\n this[lvl] = ((...args: any[]) => {\n this._logger[lvl](...args);\n }) as any;\n this[lvl].var = (messageObject: unknown, messageValue?: unknown) => {\n this._logger[lvl].var(messageObject, messageValue);\n };\n });\n }\n\n public lib({\n level,\n lib,\n tags = {},\n }: {\n level?: string;\n lib?: string;\n tags?: Record<string, string>;\n } = {}): JaypieLogger {\n const newTags = Object.assign({}, this._tags, tags);\n if (lib) {\n newTags.lib = lib;\n }\n\n const logger = new JaypieLogger({\n level: (() => {\n if (level) {\n return level;\n }\n if (process.env.MODULE_LOG_LEVEL) {\n return process.env.MODULE_LOG_LEVEL;\n }\n if (envBoolean(\"MODULE_LOGGER\", { defaultValue: false })) {\n return process.env.LOG_LEVEL;\n }\n return LEVEL.SILENT;\n })(),\n tags: newTags,\n });\n this._loggers.push(logger._logger);\n return logger;\n }\n\n public tag(tags: Record<string, unknown>): void {\n for (const logger of this._loggers) {\n logger.tag(tags);\n }\n Object.assign(this._tags, tags);\n }\n\n public untag(key: unknown): void {\n for (const logger of this._loggers) {\n logger.untag(key);\n }\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this._tags[String(k)];\n });\n } else if (typeof key === \"object\" && key !== null) {\n Object.keys(key).forEach((k) => {\n delete this._tags[k];\n });\n } else {\n delete this._tags[String(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): JaypieLogger {\n if (!key || (typeof key !== \"object\" && value === undefined)) {\n throw new Error(\n \"ConfigurationError: with() requires an object argument or key-value pair\",\n );\n }\n const loggerKey = JSON.stringify([key, value]);\n if (Object.keys(this._withLoggers).includes(loggerKey)) {\n return this._withLoggers[loggerKey];\n }\n const logger = new JaypieLogger({\n level: this.level,\n tags: { ...this._tags },\n });\n logger._logger = this._logger.with(key, value);\n logger._loggers = [logger._logger];\n this._withLoggers[loggerKey] = logger;\n this._loggers.push(logger._logger);\n return logger;\n }\n}\n\nexport function createLogger(tags: Record<string, string> = {}): JaypieLogger {\n const jaypieLogger = new JaypieLogger({\n tags,\n });\n return jaypieLogger;\n}\n\nexport default JaypieLogger;\n","import Logger from \"./Logger\";\nimport { createLogger } from \"./JaypieLogger\";\nimport { FORMAT, LEVEL } from \"./constants\";\nimport {\n _resetDatadogTransport,\n isDatadogForwardingEnabled,\n} from \"./datadogTransport\";\n\nexport {\n FORMAT,\n LEVEL,\n Logger,\n _resetDatadogTransport,\n createLogger,\n isDatadogForwardingEnabled,\n};\n\nexport const log = createLogger();\n\nexport default log;\n"],"names":["envBoolean","hostname","request"],"mappings":";;;;;;;AAAO,MAAM,OAAO,GAAG;AACrB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,SAAS,EAAE,OAAO;CACnB;AAEM,MAAM,YAAY,GAAG,UAAU;AAE/B,MAAM,KAAK,GAAG;AACnB,IAAA,GAAG,EAAE;QACH,YAAY,EAAE,CAAA,EAAG,YAAY,CAAA,sCAAA,CAAwC;QACrE,aAAa,EAAE,CAAA,EAAG,YAAY,CAAA,uCAAA,CAAyC;QACvE,WAAW,EAAE,CAAA,EAAG,YAAY,CAAA,8BAAA,CAAgC;QAC5D,iBAAiB,EAAE,CAAA,EAAG,YAAY,CAAA,+CAAA,CAAiD;AACpF,KAAA;CACF;AAEM,MAAM,MAAM,GAAG;AACpB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,IAAI,EAAE,MAAM;;AAGP,MAAM,KAAK,GAAG;AACnB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,IAAI,EAAE,MAAM;;AAGP,MAAM,YAAY,GAA2B;AAClD,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,IAAI,EAAE,EAAE;CACT;AAEM,MAAM,iBAAiB,GAAG;AAC/B,IAAA,GAAG,EAAE;AACH,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,UAAU,EAAE,0BAA0B;AACtC,QAAA,WAAW,EAAE,aAAa;AAC1B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,eAAe,EAAE,iBAAiB;AACnC,KAAA;AACD,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,cAAc,EAAE,GAAG;CACX;;ACtDV;AACA,MAAM,eAAe,GAA2B;AAC9C,IAAA,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;AACtB,IAAA,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;AACtB,IAAA,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM;AACpB,IAAA,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM;AACpB,IAAA,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;AACtB,IAAA,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU;CAC1B;AAED,SAASA,YAAU,CACjB,GAAW,EACX,EAAE,YAAY,EAA6B,EAAA;IAE3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,YAAY;AAC5C,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;AACjC,IAAA,OAAO,EACL,KAAK,KAAK,EAAE;AACZ,QAAA,KAAK,KAAK,GAAG;AACb,QAAA,KAAK,KAAK,GAAG;AACb,QAAA,KAAK,KAAK,OAAO;AACjB,QAAA,KAAK,KAAK,GAAG;QACb,KAAK,KAAK,IAAI,CACf;AACH;SAEgB,0BAA0B,GAAA;AACxC,IAAA,QACEA,YAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACrE,QAAA,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AAEhD;AAWA,MAAM,mBAAmB,CAAA;AAUvB,IAAA,WAAA,GAAA;QATQ,IAAA,CAAA,kBAAkB,GAAwB,IAAI;QAC9C,IAAA,CAAA,OAAO,GAAsB,EAAE;QAC/B,IAAA,CAAA,WAAW,GAA0C,IAAI;QACzD,IAAA,CAAA,SAAS,GAAG,QAAQ;AAO1B,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;AACvB,QAAA,IAAI,CAAC,IAAI;AACP,YAAA,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC,gBAAA,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC;AACtC,gBAAA,OAAO;AACT,QAAA,IAAI,CAAC,SAAS;AACZ,YAAA,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AAClC,gBAAA,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC;AACvC,gBAAAC,gBAAQ,EAAE;AACZ,QAAA,IAAI,CAAC,QAAQ;AACX,YAAA,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;AACrC,gBAAA,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC;AAC1C,gBAAA,SAAS;AACX,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,eAAe;AAElE,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAK;YAClC,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;;AAEvC,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,UAAU,EAAE;AACpE,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;QAC1B;;QAGA,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;QAC5C,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC;IACnD;IAEA,IAAI,CAAC,IAAY,EAAE,KAAa,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAoB;YAC7B,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,YAAA,MAAM,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,CAAA,CAAE;YAC1B,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,YAAA,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI,CAAC,QAAQ;AACtB,YAAA,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,MAAM;SACzC;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,cAAc,EAAE;YAC3D,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;;AAG/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AAEjB,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AACzD,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAClC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,YAAY,EAAE,MAAM;AACrB,aAAA;AACD,YAAA,QAAQ,EAAE,CAAA,iBAAA,EAAoB,IAAI,CAAC,KAAK,CAAA,CAAE;AAC1C,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,iBAAiB,CAAC,WAAW;SACpC;AAED,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAGC,kBAAO,CAAC,OAAO,EAAE,MAAK;;AAElC,YAAA,CAAC,CAAC;AACF,YAAA,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;;AAErB,YAAA,CAAC,CAAC;AACF,YAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACf,GAAG,CAAC,GAAG,EAAE;QACX;AAAE,QAAA,MAAM;;QAER;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AACA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC7D,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAChC;AACA,QAAA,IAAI;YACF,IAAI,CAAC,KAAK,EAAE;QACd;AAAE,QAAA,MAAM;;QAER;IACF;AACD;AAED,IAAI,SAAS,GAA+B,IAAI;SAEhC,mBAAmB,GAAA;IACjC,IAAI,CAAC,0BAA0B,EAAE;AAAE,QAAA,OAAO,IAAI;IAC9C,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,SAAS,GAAG,IAAI,mBAAmB,EAAE;IACvC;AACA,IAAA,OAAO,SAAS;AAClB;SAEgB,sBAAsB,GAAA;IACpC,IAAI,SAAS,EAAE;QACb,SAAS,CAAC,OAAO,EAAE;QACnB,SAAS,GAAG,IAAI;IAClB;AACF;;SCtKgB,WAAW,CAAC,KAAc,EAAE,YAAY,GAAG,EAAE,EAAA;IAC3D,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,MAAM;IACjC,IAAI,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,MAAM,CAAC,YAAY,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC3D,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB;AAEM,SAAU,kBAAkB,CAAC,OAAgB,EAAA;IACjD,MAAM,MAAM,GAAG,CAAC;IAChB,MAAM,YAAY,GAAG,IAAI;IAEzB,QAAQ,OAAO,OAAO;AACpB,QAAA,KAAK,QAAQ;YACX,IAAI,OAAO,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI;AAC/B,YAAA,IAAI;AACF,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC;YAClE;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,OAAO;YAChB;AAEF,QAAA,KAAK,QAAQ;AACX,YAAA,IAAI;AACF,gBAAA,IACE,OAAO;AACP,oBAAA,OAAO,YAAY,MAAM;AACzB,oBAAA,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACvB,oBAAA,OAAO,CAAC,WAAW;oBACnB,OAAO,CAAC,WAAW,KAAK,MAAM;AAC9B,oBAAA,UAAU,IAAI,OAAO;AACrB,oBAAA,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,EACtC;AACA,oBAAA,OAAO,OAAO,CAAC,QAAQ,EAAE;gBAC3B;gBACA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC;YACtD;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,KAAK,YAAY,SAAS,EAAE;AAC9B,oBAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAiB,CAAC,CAAC,MAAM,CAC5D,CAAC,UAAkC,EAAE,GAAW,KAAI;AAClD,wBAAA,MAAM,WAAW,GAAG,EAAE,GAAG,UAAU,EAAE;wBACrC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CACtB,OAAmC,CAAC,GAAG,CAAC,CAC1C;AACD,wBAAA,OAAO,WAAW;oBACpB,CAAC,EACD,EAAE,CACH;AACD,oBAAA,OAAO,kBAAkB,CAAC,gBAAgB,CAAC;gBAC7C;AACA,gBAAA,MAAM,KAAK;YACb;AAEF,QAAA;AACE,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC;;AAE5B;AAEM,SAAU,SAAS,CAAC,GAAG,MAAiB,EAAA;AAC5C,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;AAClC,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtC;IAEA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAChD,IAAA,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B;AAEM,SAAU,GAAG,CACjB,IAAsB,EACtB,EAAE,KAAK,GAAG,OAAO,EAAA,GAAyB,EAAE,EAAA;AAE5C,IAAA,IAAI,OAAe;AACnB,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;IAC3B;SAAO;QACL,OAAO,GAAG,IAAI;IAChB;AAEA,IAAA,IAAI,cAA4C;IAEhD,QAAQ,KAAK;QACX,KAAK,KAAK,CAAC,IAAI;AACb,YAAA,cAAc,GAAG,OAAO,CAAC,IAAI;YAC7B;QACF,KAAK,KAAK,CAAC,IAAI;AACb,YAAA,cAAc,GAAG,OAAO,CAAC,IAAI;YAC7B;QACF,KAAK,KAAK,CAAC,KAAK;QAChB,KAAK,KAAK,CAAC,KAAK;AACd,YAAA,cAAc,GAAG,OAAO,CAAC,KAAK;YAC9B;QACF,KAAK,KAAK,CAAC,KAAK;QAChB,KAAK,KAAK,CAAC,KAAK;AACd,YAAA,cAAc,GAAG,OAAO,CAAC,KAAK;YAC9B;AACF,QAAA;AACE,YAAA,cAAc,GAAG,OAAO,CAAC,GAAG;YAC5B;;AAGJ,IAAA,IAAI;QACF,cAAc,CAAC,OAAO,CAAC;IACzB;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACtB;AAEA,IAAA,IAAI;AACF,QAAA,MAAM,SAAS,GAAG,mBAAmB,EAAE;QACvC,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAChC;IACF;AAAE,IAAA,MAAM;;IAER;AACF;AAEM,SAAU,KAAK,CAAC,OAAgB,EAAA;AACpC,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,QAAA,OAAO,OAAO;IAChB;AACA,IAAA,IAAI;AACF,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,OAAO;IAChB;AACF;AAEM,SAAU,QAAQ,CAAC,OAAgB,EAAA;AAIvC,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;YACb,OAAO;SACR;IACH;AACA,IAAA,IAAI;QACF,OAAO;AACL,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;SAC7B;IACH;AAAE,IAAA,MAAM;QACN,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;YACb,OAAO;SACR;IACH;AACF;;ACpHA,MAAM,MAAM,CAAA;AAWV,IAAA,WAAA,CAAY,EACV,MAAM,GAAI,OAAO,CAAC,GAAG,CAAC,UAAwB,IAAI,OAAO,CAAC,KAAK,EAC/D,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,EAC9C,IAAI,GAAG,EAAE,EACT,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,SAAS,MACxC,EAAE,EAAA;QACnB,IAAI,CAAC,OAAO,GAAG;YACb,MAAM;YACN,KAAK;YACL,QAAQ;SACT;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;QACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;AAC7D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3D,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;AAC7D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;AAE3D,QAAA,MAAM,cAAc,GAClB,IAAI,CAAC,QAAmE,CAAC;AAC3E,QAAA,IAAI,CAAC,GAAG,GAAI,cAA4B,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG;IACjE;AAEQ,IAAA,eAAe,CACrB,QAAgB,EAChB,MAAiB,EACjB,UAAkB,EAAA;AAElB,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,QAAmB,KAAU;YAC7C,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE;AACtD,gBAAA,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE;AAC1B,oBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC;AACtC,oBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;AAChC,oBAAA,MAAM,IAAI,GAAY;AACpB,wBAAA,GAAG,EAAE,QAAQ;wBACb,OAAO;wBACP,GAAG,IAAI,CAAC,IAAI;qBACb;AACD,oBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,wBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO;oBAC5B;oBACA,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;gBAChC;qBAAO;AACL,oBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC;oBACtC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;gBACnC;YACF;AACF,QAAA,CAAC;QAED,KAAK,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KAAU;AACnE,YAAA,IAAI,aAAa,KAAK,SAAS,EAAE;gBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACxC;AAEA,YAAA,IAAI,MAA+B;YAEnC,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI,EAAE;AAC/D,gBAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;oBACrC,IAAI,YAAY,KAAK,SAAS;wBAAE,YAAY,GAAG,WAAW;oBAC1D,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,YAAY,EAAE;gBACpD;qBAAO;oBACL,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;AAChC,oBAAA,OAAO,KAAK,CAAC,aAAa,CAAC;gBAC7B;YACF;iBAAO;gBACL,MAAM,GAAG,aAAwC;YACnD;YAEA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AACjC,gBAAA,OAAO,KAAK,CAAC,MAAM,CAAC;YACtB;AAEA,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;AAClC,gBAAA,OAAO,KAAK,CAAC,MAAM,CAAC;YACtB;AAEA,YAAA,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE;AAC1B,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1B,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAErC,gBAAA,MAAM,IAAI,GAAY;AACpB,oBAAA,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC;oBACvB,QAAQ,EAAE,OAAO,UAAU;AAC3B,oBAAA,GAAG,EAAE,QAAQ;AACb,oBAAA,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC;AAC9B,oBAAA,GAAG,EAAE,UAAU;oBACf,GAAG,IAAI,CAAC,IAAI;iBACb;gBAED,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE;oBACtD,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;gBAChC;YACF;iBAAO;AACL,gBAAA,OAAO,KAAK,CAAC,MAAM,CAAC;YACtB;AACF,QAAA,CAAC;AAED,QAAA,OAAO,KAAkB;IAC3B;IAEO,GAAG,CAAC,GAAY,EAAE,KAAe,EAAA;QACtC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;YAChD;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAChC,YAAA,CAAC,CAAC;YACF;QACF;AAEA,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC7B,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CACpC,GAA+B,CAAC,CAAC,CAAC,CACpC;AACH,YAAA,CAAC,CAAC;QACJ;aAAO;YACL,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;QAClC;IACF;AAEO,IAAA,KAAK,CAAC,GAAY,EAAA;AACvB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBAChB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAClC,YAAA,CAAC,CAAC;YACF;QACF;AAEA,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;YACrB;QACF;AAEA,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,MAAM,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBACvC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAClC,YAAA,CAAC,CAAC;QACJ;aAAO;YACL,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC;IACF;IAEO,IAAI,CAAC,GAAY,EAAE,KAAe,EAAA;QACvC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACvC,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACtB,QAAA,OAAO,MAAM;IACf;AACD;;ACpNK,SAAU,OAAO,CACrB,QAAiC,EAAA;AAMjC,IAAA,MAAM,EACJ,cAAc,EACd,WAAW,EACX,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,GAChB,GAAG,OAAO,CAAC,GAAG;IAEf,MAAM,IAAI,GAA2B,EAAE;IAEvC,IAAI,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,cAAc;IAC9B;IACA,IAAI,WAAW,EAAE;AACf,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW;IACxB;IACA,IAAI,WAAW,EAAE;AACf,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW;IAC5B;IACA,IAAI,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,eAAe;IAChC;IACA,IAAI,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,eAAe;IAChC;IACA,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,eAAe,EAAE;QACtD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB;AAC7C,YAAA,eAAe,CAAW;IAC9B;IAEA,OAAO;AACL,QAAA,GAAG,IAAI;AACP,QAAA,GAAG,QAAQ;KACZ;AACH;;ACxCM,SAAU,QAAQ,CACtB,GAAY,EACZ,KAAe,EAAA;AAEf,IAAA,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;AAC9B,QAAA,OAAO,EAAE;IACX;IACA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;QAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,OAAO,GAA8B;QACvC;aAAO;AACL,YAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;QACvB;IACF;AACA,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;AAC/B,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAChC,QAAA,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE;IACzB;SAAO;AACL,QAAA,OAAO,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE;IAC5B;AACF;;ACjBA,SAAS,eAAe,CAAC,QAAiB,EAAA;IACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrD,QAAA,OAAO,KAAK;IACd;IACA,MAAM,CAAC,GAAG,QAAmC;IAC7C,OAAO,CAAC,EACN,CAAC;AACD,QAAA,CAAC,CAAC,MAAM;AACR,QAAA,CAAC,CAAC,IAAI;AACN,QAAA,CAAC,CAAC,OAAO;AACT,QAAA,CAAC,CAAC,OAAO;AACT,QAAA,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,UAAU,CACb;AACH;AAEA,SAAS,mBAAmB,CAAC,QAAiB,EAAA;AAC5C,IAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;AAC9B,QAAA,OAAO,QAAQ;IACjB;IACA,MAAM,CAAC,GAAG,QAAmC;AAC7C,IAAA,MAAM,WAAW,GAA4B;QAC3C,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB;AACD,IAAA,IAAI,CAAC,CAAC,YAAY,EAAE;AAClB,QAAA,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;IAC3C;AACA,IAAA,OAAO,WAAW;AACpB;AAEO,MAAM,wBAAwB,GAAa;AAChD,IAAA,MAAM,EAAE,mBAAmB;AAC3B,IAAA,GAAG,EAAE,UAAU;CAChB;AAED,SAAS,OAAO,CAAC,IAAa,EAAA;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AAC7C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,IAAI,YAAY,KAAK,EAAE;AACzB,QAAA,OAAO,IAAI;IACb;IACA,MAAM,CAAC,GAAG,IAA+B;AACzC,IAAA,IAAI,CAAC,CAAC,cAAc,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,cAAc,CAAC,IAAa,EAAA;AACnC,IAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;IACA,MAAM,CAAC,GAAG,IAAuC;AACjD,IAAA,MAAM,OAAO,GAA4B;QACvC,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;KACb;AACD,IAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,QAAA,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;IACzB;AACA,IAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,QAAA,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;IACzB;AACA,IAAA,IAAI,CAAC,CAAC,cAAc,EAAE;AACpB,QAAA,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc;AACzC,QAAA,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACvB,QAAA,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACzB,QAAA,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;IAC3B;AACA,IAAA,OAAO,OAAO;AAChB;AAEO,MAAM,gBAAgB,GAAa;AACxC,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,GAAG,EAAE,OAAO;CACb;AAEM,MAAM,SAAS,GAAG,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;;ACnFrE,SAAS,eAAe,CAAC,QAAiC,EAAA;IACxD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B;AAEM,SAAU,MAAM,CAAC,GAAY,EAAE,KAAe,EAAA;AAClD,IAAA,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAElD,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,QAAA,IAAI,CAAC,KAAK,QAAQ,CAAC,GAAG,EAAE;AACtB,YAAA,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACxB;IACF;AAEA,IAAA,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;AACnB;;ACPA,SAAS,UAAU,CACjB,GAAW,EACX,EAAE,YAAY,EAA6B,EAAA;IAE3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,YAAY;AAC5C,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;AACjC,IAAA,OAAO,EACL,KAAK,KAAK,EAAE;AACZ,QAAA,KAAK,KAAK,GAAG;AACb,QAAA,KAAK,KAAK,GAAG;AACb,QAAA,KAAK,KAAK,OAAO;AACjB,QAAA,KAAK,KAAK,GAAG;QACb,KAAK,KAAK,IAAI,CACf;AACH;AAEA,MAAM,YAAY,CAAA;AAgBhB,IAAA,WAAA,CAAY,EACV,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAC7B,IAAI,GAAG,EAAE,MACc,EAAE,EAAA;QACzB,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QAEtB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK;QAEnC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE;AACtC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAE9B,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAW,KAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAoB;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC;QAErD,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAW,KAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAoB;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC;QAErD,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAW,KAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAoB;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC;QAErD,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAW,KAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAmB;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC;QAEpD,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAW,KAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAoB;QACjD,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC;QAErD,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAW,KAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAmB;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC;QAEpD,IAAI,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACzD;IAEO,IAAI,GAAA;AACT,QAAA,sBAAsB,EAAE;AACxB,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;gBACxD,MAAwC,CAAC,IAAI,EAAE;YAClD;QACF;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK;QACnC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE;AACtC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,KAAK;AACjB,SAAA,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AAEtB,QAAA,MAAM,MAAM,GAAG;YACb,OAAO;YACP,OAAO;YACP,OAAO;YACP,MAAM;YACN,OAAO;YACP,MAAM;SACE;AACV,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAW,KAAI;gBAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAC5B,YAAA,CAAC,CAAQ;YACT,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,aAAsB,EAAE,YAAsB,KAAI;AACjE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC;AACpD,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;IAEO,GAAG,CAAC,EACT,KAAK,EACL,GAAG,EACH,IAAI,GAAG,EAAE,GAAA,GAKP,EAAE,EAAA;AACJ,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QACnD,IAAI,GAAG,EAAE;AACP,YAAA,OAAO,CAAC,GAAG,GAAG,GAAG;QACnB;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;YAC9B,KAAK,EAAE,CAAC,MAAK;gBACX,IAAI,KAAK,EAAE;AACT,oBAAA,OAAO,KAAK;gBACd;AACA,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;AAChC,oBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB;gBACrC;gBACA,IAAI,UAAU,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE;AACxD,oBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS;gBAC9B;gBACA,OAAO,KAAK,CAAC,MAAM;AACrB,YAAA,CAAC,GAAG;AACJ,YAAA,IAAI,EAAE,OAAO;AACd,SAAA,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC,QAAA,OAAO,MAAM;IACf;AAEO,IAAA,GAAG,CAAC,IAA6B,EAAA;AACtC,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClC,YAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAClB;QACA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IACjC;AAEO,IAAA,KAAK,CAAC,GAAY,EAAA;AACvB,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClC,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACnB;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,CAAC,CAAC;QACJ;aAAO,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;YAClD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC7B,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtB,YAAA,CAAC,CAAC;QACJ;aAAO;YACL,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC;IACF;IAEO,IAAI,CAAC,GAAY,EAAE,KAAe,EAAA;AACvC,QAAA,IAAI,CAAC,GAAG,KAAK,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;AAC5D,YAAA,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E;QACH;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9C,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACtD,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QACrC;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;YAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;QAC9C,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,MAAM;QACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC,QAAA,OAAO,MAAM;IACf;AACD;AAEK,SAAU,YAAY,CAAC,IAAA,GAA+B,EAAE,EAAA;AAC5D,IAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;QACpC,IAAI;AACL,KAAA,CAAC;AACF,IAAA,OAAO,YAAY;AACrB;;ACzMO,MAAM,GAAG,GAAG,YAAY;;;;;;;;;;;"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Logger from "./Logger";
|
|
2
2
|
import { createLogger } from "./JaypieLogger";
|
|
3
3
|
import { FORMAT, LEVEL } from "./constants";
|
|
4
|
-
|
|
4
|
+
import { _resetDatadogTransport, isDatadogForwardingEnabled } from "./datadogTransport";
|
|
5
|
+
export { FORMAT, LEVEL, Logger, _resetDatadogTransport, createLogger, isDatadogForwardingEnabled, };
|
|
5
6
|
export declare const log: import("./JaypieLogger").default;
|
|
6
7
|
export default log;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/esm/constants.d.ts
CHANGED
|
@@ -26,4 +26,20 @@ export declare const LEVEL: {
|
|
|
26
26
|
readonly WARN: "warn";
|
|
27
27
|
};
|
|
28
28
|
export declare const LEVEL_VALUES: Record<string, number>;
|
|
29
|
+
export declare const DATADOG_TRANSPORT: {
|
|
30
|
+
readonly ENV: {
|
|
31
|
+
readonly API_KEY: "DATADOG_API_KEY";
|
|
32
|
+
readonly DD_ENV: "DD_ENV";
|
|
33
|
+
readonly DD_HOST: "DD_HOST";
|
|
34
|
+
readonly DD_SERVICE: "DD_SERVICE";
|
|
35
|
+
readonly DD_SITE: "DD_SITE";
|
|
36
|
+
readonly FORWARDING: "DATADOG_LOCAL_FORWARDING";
|
|
37
|
+
readonly PROJECT_ENV: "PROJECT_ENV";
|
|
38
|
+
readonly PROJECT_HOST: "PROJECT_HOST";
|
|
39
|
+
readonly PROJECT_SERVICE: "PROJECT_SERVICE";
|
|
40
|
+
};
|
|
41
|
+
readonly FLUSH_INTERVAL_MS: 5000;
|
|
42
|
+
readonly INTAKE_PATH: "/api/v2/logs";
|
|
43
|
+
readonly MAX_BATCH_SIZE: 100;
|
|
44
|
+
};
|
|
29
45
|
export declare const PSEUDO_LEVELS: string[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function isDatadogForwardingEnabled(): boolean;
|
|
2
|
+
declare class DatadogLogTransport {
|
|
3
|
+
private _beforeExitHandler;
|
|
4
|
+
private _buffer;
|
|
5
|
+
private _flushTimer;
|
|
6
|
+
private _ddsource;
|
|
7
|
+
private _env;
|
|
8
|
+
private _hostname;
|
|
9
|
+
private _service;
|
|
10
|
+
private _site;
|
|
11
|
+
constructor();
|
|
12
|
+
send(line: string, level: string): void;
|
|
13
|
+
flush(): void;
|
|
14
|
+
destroy(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function getDatadogTransport(): DatadogLogTransport | null;
|
|
17
|
+
export declare function _resetDatadogTransport(): void;
|
|
18
|
+
export {};
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Logger from "./Logger";
|
|
2
2
|
import { createLogger } from "./JaypieLogger";
|
|
3
3
|
import { FORMAT, LEVEL } from "./constants";
|
|
4
|
-
|
|
4
|
+
import { _resetDatadogTransport, isDatadogForwardingEnabled } from "./datadogTransport";
|
|
5
|
+
export { FORMAT, LEVEL, Logger, _resetDatadogTransport, createLogger, isDatadogForwardingEnabled, };
|
|
5
6
|
export declare const log: import("./JaypieLogger").default;
|
|
6
7
|
export default log;
|
package/dist/esm/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { hostname } from 'node:os';
|
|
2
|
+
import { request } from 'node:https';
|
|
3
|
+
|
|
1
4
|
const DEFAULT = {
|
|
2
5
|
LEVEL: "debug",
|
|
3
6
|
VAR_LEVEL: "debug",
|
|
@@ -36,6 +39,158 @@ const LEVEL_VALUES = {
|
|
|
36
39
|
trace: 90,
|
|
37
40
|
warn: 30,
|
|
38
41
|
};
|
|
42
|
+
const DATADOG_TRANSPORT = {
|
|
43
|
+
ENV: {
|
|
44
|
+
API_KEY: "DATADOG_API_KEY",
|
|
45
|
+
DD_ENV: "DD_ENV",
|
|
46
|
+
DD_HOST: "DD_HOST",
|
|
47
|
+
DD_SERVICE: "DD_SERVICE",
|
|
48
|
+
DD_SITE: "DD_SITE",
|
|
49
|
+
FORWARDING: "DATADOG_LOCAL_FORWARDING",
|
|
50
|
+
PROJECT_ENV: "PROJECT_ENV",
|
|
51
|
+
PROJECT_HOST: "PROJECT_HOST",
|
|
52
|
+
PROJECT_SERVICE: "PROJECT_SERVICE",
|
|
53
|
+
},
|
|
54
|
+
FLUSH_INTERVAL_MS: 5000,
|
|
55
|
+
INTAKE_PATH: "/api/v2/logs",
|
|
56
|
+
MAX_BATCH_SIZE: 100,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// Level-to-Datadog status mapping
|
|
60
|
+
const LEVEL_TO_STATUS = {
|
|
61
|
+
[LEVEL.TRACE]: "debug",
|
|
62
|
+
[LEVEL.DEBUG]: "debug",
|
|
63
|
+
[LEVEL.INFO]: "info",
|
|
64
|
+
[LEVEL.WARN]: "warn",
|
|
65
|
+
[LEVEL.ERROR]: "error",
|
|
66
|
+
[LEVEL.FATAL]: "critical",
|
|
67
|
+
};
|
|
68
|
+
function envBoolean$1(key, { defaultValue }) {
|
|
69
|
+
const value = process.env[key];
|
|
70
|
+
if (value === undefined)
|
|
71
|
+
return defaultValue;
|
|
72
|
+
const lower = value.toLowerCase();
|
|
73
|
+
return !(lower === "" ||
|
|
74
|
+
lower === "0" ||
|
|
75
|
+
lower === "f" ||
|
|
76
|
+
lower === "false" ||
|
|
77
|
+
lower === "n" ||
|
|
78
|
+
lower === "no");
|
|
79
|
+
}
|
|
80
|
+
function isDatadogForwardingEnabled() {
|
|
81
|
+
return (envBoolean$1(DATADOG_TRANSPORT.ENV.FORWARDING, { defaultValue: false }) &&
|
|
82
|
+
!!process.env[DATADOG_TRANSPORT.ENV.API_KEY]);
|
|
83
|
+
}
|
|
84
|
+
class DatadogLogTransport {
|
|
85
|
+
constructor() {
|
|
86
|
+
this._beforeExitHandler = null;
|
|
87
|
+
this._buffer = [];
|
|
88
|
+
this._flushTimer = null;
|
|
89
|
+
this._ddsource = "nodejs";
|
|
90
|
+
const env = process.env;
|
|
91
|
+
this._env =
|
|
92
|
+
env[DATADOG_TRANSPORT.ENV.DD_ENV] ||
|
|
93
|
+
env[DATADOG_TRANSPORT.ENV.PROJECT_ENV] ||
|
|
94
|
+
"local";
|
|
95
|
+
this._hostname =
|
|
96
|
+
env[DATADOG_TRANSPORT.ENV.DD_HOST] ||
|
|
97
|
+
env[DATADOG_TRANSPORT.ENV.PROJECT_HOST] ||
|
|
98
|
+
hostname();
|
|
99
|
+
this._service =
|
|
100
|
+
env[DATADOG_TRANSPORT.ENV.DD_SERVICE] ||
|
|
101
|
+
env[DATADOG_TRANSPORT.ENV.PROJECT_SERVICE] ||
|
|
102
|
+
"unknown";
|
|
103
|
+
this._site = env[DATADOG_TRANSPORT.ENV.DD_SITE] || "datadoghq.com";
|
|
104
|
+
this._flushTimer = setInterval(() => {
|
|
105
|
+
this.flush();
|
|
106
|
+
}, DATADOG_TRANSPORT.FLUSH_INTERVAL_MS);
|
|
107
|
+
// Unref so timer doesn't keep process alive
|
|
108
|
+
if (this._flushTimer && typeof this._flushTimer.unref === "function") {
|
|
109
|
+
this._flushTimer.unref();
|
|
110
|
+
}
|
|
111
|
+
// Best-effort flush on exit
|
|
112
|
+
this._beforeExitHandler = () => this.flush();
|
|
113
|
+
process.on("beforeExit", this._beforeExitHandler);
|
|
114
|
+
}
|
|
115
|
+
send(line, level) {
|
|
116
|
+
const entry = {
|
|
117
|
+
ddsource: this._ddsource,
|
|
118
|
+
ddtags: `env:${this._env}`,
|
|
119
|
+
hostname: this._hostname,
|
|
120
|
+
message: line,
|
|
121
|
+
service: this._service,
|
|
122
|
+
status: LEVEL_TO_STATUS[level] || "info",
|
|
123
|
+
};
|
|
124
|
+
this._buffer.push(entry);
|
|
125
|
+
if (this._buffer.length >= DATADOG_TRANSPORT.MAX_BATCH_SIZE) {
|
|
126
|
+
this.flush();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
flush() {
|
|
130
|
+
if (this._buffer.length === 0)
|
|
131
|
+
return;
|
|
132
|
+
// Atomic swap
|
|
133
|
+
const batch = this._buffer;
|
|
134
|
+
this._buffer = [];
|
|
135
|
+
const apiKey = process.env[DATADOG_TRANSPORT.ENV.API_KEY];
|
|
136
|
+
if (!apiKey)
|
|
137
|
+
return;
|
|
138
|
+
const body = JSON.stringify(batch);
|
|
139
|
+
const options = {
|
|
140
|
+
headers: {
|
|
141
|
+
"Content-Type": "application/json",
|
|
142
|
+
"DD-API-KEY": apiKey,
|
|
143
|
+
},
|
|
144
|
+
hostname: `http-intake.logs.${this._site}`,
|
|
145
|
+
method: "POST",
|
|
146
|
+
path: DATADOG_TRANSPORT.INTAKE_PATH,
|
|
147
|
+
};
|
|
148
|
+
try {
|
|
149
|
+
const req = request(options, () => {
|
|
150
|
+
// Response intentionally ignored
|
|
151
|
+
});
|
|
152
|
+
req.on("error", () => {
|
|
153
|
+
// Silently swallow transport errors
|
|
154
|
+
});
|
|
155
|
+
req.write(body);
|
|
156
|
+
req.end();
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Transport must never throw
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
destroy() {
|
|
163
|
+
if (this._flushTimer) {
|
|
164
|
+
clearInterval(this._flushTimer);
|
|
165
|
+
this._flushTimer = null;
|
|
166
|
+
}
|
|
167
|
+
if (this._beforeExitHandler) {
|
|
168
|
+
process.removeListener("beforeExit", this._beforeExitHandler);
|
|
169
|
+
this._beforeExitHandler = null;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
this.flush();
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// Best-effort
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
let _instance = null;
|
|
180
|
+
function getDatadogTransport() {
|
|
181
|
+
if (!isDatadogForwardingEnabled())
|
|
182
|
+
return null;
|
|
183
|
+
if (!_instance) {
|
|
184
|
+
_instance = new DatadogLogTransport();
|
|
185
|
+
}
|
|
186
|
+
return _instance;
|
|
187
|
+
}
|
|
188
|
+
function _resetDatadogTransport() {
|
|
189
|
+
if (_instance) {
|
|
190
|
+
_instance.destroy();
|
|
191
|
+
_instance = null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
39
194
|
|
|
40
195
|
function forceString(value, defaultValue = "") {
|
|
41
196
|
if (value === null)
|
|
@@ -131,6 +286,15 @@ function out(line, { level = "debug" } = {}) {
|
|
|
131
286
|
console.warn(error);
|
|
132
287
|
console.log(lineStr);
|
|
133
288
|
}
|
|
289
|
+
try {
|
|
290
|
+
const transport = getDatadogTransport();
|
|
291
|
+
if (transport) {
|
|
292
|
+
transport.send(lineStr, level);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// Transport errors must never affect logging
|
|
297
|
+
}
|
|
134
298
|
}
|
|
135
299
|
function parse(message) {
|
|
136
300
|
if (typeof message !== "string") {
|
|
@@ -486,6 +650,7 @@ class JaypieLogger {
|
|
|
486
650
|
this.var = (messageObject, messageValue) => this._logger.var(logVar(messageObject, messageValue));
|
|
487
651
|
}
|
|
488
652
|
init() {
|
|
653
|
+
_resetDatadogTransport();
|
|
489
654
|
for (const logger of this._loggers) {
|
|
490
655
|
if ("init" in logger && typeof logger.init === "function") {
|
|
491
656
|
logger.init();
|
|
@@ -594,5 +759,5 @@ function createLogger(tags = {}) {
|
|
|
594
759
|
|
|
595
760
|
const log = createLogger();
|
|
596
761
|
|
|
597
|
-
export { FORMAT, LEVEL, Logger, createLogger, log as default, log };
|
|
762
|
+
export { FORMAT, LEVEL, Logger, _resetDatadogTransport, createLogger, log as default, isDatadogForwardingEnabled, log };
|
|
598
763
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/constants.ts","../../../src/utils.ts","../../../src/Logger.ts","../../../src/logTags.ts","../../../src/forceVar.ts","../../../src/pipelines.ts","../../../src/logVar.ts","../../../src/JaypieLogger.ts","../../../src/index.ts"],"sourcesContent":["export const DEFAULT = {\n LEVEL: \"debug\",\n VAR_LEVEL: \"debug\",\n};\n\nexport const ERROR_PREFIX = \"[logger]\";\n\nexport const ERROR = {\n VAR: {\n EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,\n MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,\n NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,\n UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \\`undefined\\` message`,\n },\n};\n\nexport const FORMAT = {\n JSON: \"json\",\n TEXT: \"text\",\n} as const;\n\nexport const LEVEL = {\n ALL: \"all\",\n DEBUG: \"debug\",\n ERROR: \"error\",\n FATAL: \"fatal\",\n INFO: \"info\",\n SILENT: \"silent\",\n TRACE: \"trace\",\n WARN: \"warn\",\n} as const;\n\nexport const LEVEL_VALUES: Record<string, number> = {\n all: 100,\n debug: 70,\n error: 10,\n fatal: 1,\n info: 50,\n none: 0,\n silent: 0,\n trace: 90,\n warn: 30,\n};\n\nexport const PSEUDO_LEVELS = [\"ALL\", \"SILENT\"];\n","import { LEVEL } from \"./constants\";\n\nexport function forceString(value: unknown, defaultValue = \"\"): string {\n if (value === null) return \"null\";\n if (value === undefined) return String(defaultValue);\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nexport function formatAsJsonString(subject: unknown): string {\n const SPACES = 0;\n const UNUSED_PARAM = null;\n\n switch (typeof subject) {\n case \"string\":\n if (subject === \"\") return `\"\"`;\n try {\n return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);\n } catch {\n return subject;\n }\n\n case \"object\":\n try {\n if (\n subject &&\n subject instanceof Object &&\n !Array.isArray(subject) &&\n subject.constructor &&\n subject.constructor !== Object &&\n \"toString\" in subject &&\n typeof subject.toString === \"function\"\n ) {\n return subject.toString();\n }\n return JSON.stringify(subject, UNUSED_PARAM, SPACES);\n } catch (error) {\n if (error instanceof TypeError) {\n const truncatedSubject = Object.keys(subject as object).reduce(\n (newSubject: Record<string, string>, key: string) => {\n const nextSubject = { ...newSubject };\n nextSubject[key] = String(\n (subject as Record<string, unknown>)[key],\n );\n return nextSubject;\n },\n {},\n );\n return formatAsJsonString(truncatedSubject);\n }\n throw error;\n }\n\n default:\n return String(subject);\n }\n}\n\nexport function stringify(...params: unknown[]): string {\n if (params.length === 0) return \"\";\n if (params.length === 1) {\n return formatAsJsonString(params[0]);\n }\n\n const formatted = params.map(formatAsJsonString);\n return formatted.join(\" \");\n}\n\nexport function out(\n line: string | unknown,\n { level = \"debug\" }: { level?: string } = {},\n): void {\n let lineStr: string;\n if (typeof line !== \"string\") {\n lineStr = stringify(line);\n } else {\n lineStr = line;\n }\n\n let outputFunction: (...args: unknown[]) => void;\n\n switch (level) {\n case LEVEL.INFO:\n outputFunction = console.info;\n break;\n case LEVEL.WARN:\n outputFunction = console.warn;\n break;\n case LEVEL.ERROR:\n case LEVEL.FATAL:\n outputFunction = console.error;\n break;\n case LEVEL.TRACE:\n case LEVEL.DEBUG:\n outputFunction = console.debug;\n break;\n default:\n outputFunction = console.log;\n break;\n }\n\n try {\n outputFunction(lineStr);\n } catch (error) {\n console.warn(error);\n console.log(lineStr);\n }\n}\n\nexport function parse(message: unknown): unknown {\n if (typeof message !== \"string\") {\n return message;\n }\n try {\n return JSON.parse(message);\n } catch {\n return message;\n }\n}\n\nexport function parsesTo(message: unknown): {\n parses: boolean;\n message: unknown;\n} {\n if (typeof message !== \"string\") {\n return {\n parses: false,\n message,\n };\n }\n try {\n return {\n parses: true,\n message: JSON.parse(message),\n };\n } catch {\n return {\n parses: false,\n message,\n };\n }\n}\n","import {\n DEFAULT,\n ERROR,\n FORMAT,\n LEVEL,\n LEVEL_VALUES,\n PSEUDO_LEVELS,\n} from \"./constants\";\nimport { forceString, out, parse, parsesTo, stringify } from \"./utils\";\n\ntype LogLevel = string;\ntype LogFormat = \"json\" | \"text\";\ntype Tags = Record<string, string>;\n\ninterface LoggerOptions {\n format?: LogFormat;\n level?: LogLevel;\n tags?: Tags;\n varLevel?: LogLevel;\n}\n\ninterface LogJson {\n data?: unknown;\n dataType?: string;\n log: string;\n message: string;\n var?: string;\n [key: string]: unknown;\n}\n\ntype LogMethod = {\n (...messages: unknown[]): void;\n var: (messageObject: unknown, messageValue?: unknown) => void;\n};\n\nclass Logger {\n public debug: LogMethod;\n public error: LogMethod;\n public fatal: LogMethod;\n public info: LogMethod;\n public options: LoggerOptions;\n public tags: Tags;\n public trace: LogMethod;\n public var: (messageObject: unknown, messageValue?: unknown) => void;\n public warn: LogMethod;\n\n constructor({\n format = (process.env.LOG_FORMAT as LogFormat) || DEFAULT.LEVEL,\n level = process.env.LOG_LEVEL || DEFAULT.LEVEL,\n tags = {},\n varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL,\n }: LoggerOptions = {}) {\n this.options = {\n format,\n level,\n varLevel,\n };\n\n this.tags = {};\n Object.keys(tags).forEach((key) => {\n this.tags[key] = forceString(tags[key]);\n });\n\n this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);\n this.error = this.createLogMethod(LEVEL.ERROR, format, level);\n this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);\n this.info = this.createLogMethod(LEVEL.INFO, format, level);\n this.trace = this.createLogMethod(LEVEL.TRACE, format, level);\n this.warn = this.createLogMethod(LEVEL.WARN, format, level);\n\n const varLevelMethod =\n this[varLevel as \"debug\" | \"error\" | \"fatal\" | \"info\" | \"trace\" | \"warn\"];\n this.var = (varLevelMethod as LogMethod)?.var || this.debug.var;\n }\n\n private createLogMethod(\n logLevel: string,\n format: LogFormat,\n checkLevel: string,\n ): LogMethod {\n const logFn = (...messages: unknown[]): void => {\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n if (format === FORMAT.JSON) {\n const message = stringify(...messages);\n const parses = parsesTo(message);\n const json: LogJson = {\n log: logLevel,\n message,\n ...this.tags,\n };\n if (parses.parses) {\n json.data = parses.message;\n }\n out(json, { level: logLevel });\n } else {\n const message = stringify(...messages);\n out(message, { level: logLevel });\n }\n }\n };\n\n logFn.var = (messageObject: unknown, messageValue?: unknown): void => {\n if (messageObject === undefined) {\n this.warn(ERROR.VAR.UNDEFINED_MESSAGE);\n }\n\n let msgObj: Record<string, unknown>;\n\n if (typeof messageObject !== \"object\" || messageObject === null) {\n if (typeof messageObject !== \"object\") {\n if (messageValue === undefined) messageValue = \"undefined\";\n msgObj = { [String(messageObject)]: messageValue };\n } else {\n this.warn(ERROR.VAR.NULL_OBJECT);\n return logFn(messageObject);\n }\n } else {\n msgObj = messageObject as Record<string, unknown>;\n }\n\n const keys = Object.keys(msgObj);\n if (keys.length === 0) {\n this.warn(ERROR.VAR.EMPTY_OBJECT);\n return logFn(msgObj);\n }\n\n if (keys.length > 1) {\n this.warn(ERROR.VAR.MULTIPLE_KEYS);\n return logFn(msgObj);\n }\n\n if (format === FORMAT.JSON) {\n const messageKey = keys[0];\n const messageVal = msgObj[messageKey];\n\n const json: LogJson = {\n data: parse(messageVal),\n dataType: typeof messageVal,\n log: logLevel,\n message: stringify(messageVal),\n var: messageKey,\n ...this.tags,\n };\n\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n out(json, { level: logLevel });\n }\n } else {\n return logFn(msgObj);\n }\n };\n\n return logFn as LogMethod;\n }\n\n public tag(key: unknown, value?: unknown): void {\n if (value) {\n this.tags[forceString(key)] = forceString(value);\n return;\n }\n\n if (Array.isArray(key)) {\n key.forEach((k) => {\n this.tags[forceString(k)] = \"\";\n });\n return;\n }\n\n if (key === null) {\n this.tags.null = \"\";\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key).forEach((k) => {\n this.tags[forceString(k)] = forceString(\n (key as Record<string, unknown>)[k],\n );\n });\n } else {\n this.tags[forceString(key)] = \"\";\n }\n }\n\n public untag(key: unknown): void {\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this.tags[forceString(k)];\n });\n return;\n }\n\n if (key === null) {\n delete this.tags.null;\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key as object).forEach((k) => {\n delete this.tags[forceString(k)];\n });\n } else {\n delete this.tags[forceString(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): Logger {\n const logger = new Logger(this.options);\n logger.tag(this.tags);\n logger.tag(key, value);\n return logger;\n }\n}\n\nexport default Logger;\n","export function logTags(\n withTags?: Record<string, string>,\n): Record<string, string> {\n if (withTags && typeof withTags !== \"object\") {\n withTags = {};\n }\n\n const {\n PROJECT_COMMIT,\n PROJECT_ENV,\n PROJECT_KEY,\n PROJECT_SERVICE,\n PROJECT_SPONSOR,\n PROJECT_VERSION,\n } = process.env;\n\n const tags: Record<string, string> = {};\n\n if (PROJECT_COMMIT) {\n tags.commit = PROJECT_COMMIT;\n }\n if (PROJECT_ENV) {\n tags.env = PROJECT_ENV;\n }\n if (PROJECT_KEY) {\n tags.project = PROJECT_KEY;\n }\n if (PROJECT_SERVICE) {\n tags.service = PROJECT_SERVICE;\n }\n if (PROJECT_SPONSOR) {\n tags.sponsor = PROJECT_SPONSOR;\n }\n if (process.env.npm_package_version || PROJECT_VERSION) {\n tags.version = (process.env.npm_package_version ||\n PROJECT_VERSION) as string;\n }\n\n return {\n ...tags,\n ...withTags,\n };\n}\n","import { forceString } from \"./utils\";\n\nexport function forceVar(\n key: unknown,\n value?: unknown,\n): Record<string, unknown> {\n if (typeof key === \"undefined\") {\n return {};\n }\n if (typeof key === \"object\" && key !== null) {\n if (Object.keys(key).length === 1) {\n return key as Record<string, unknown>;\n } else {\n return { value: key };\n }\n }\n const keyStr = forceString(key);\n if (typeof value === \"undefined\") {\n return { [keyStr]: \"\" };\n } else {\n return { [keyStr]: value };\n }\n}\n","interface Pipeline {\n key: string;\n filter: (value: unknown) => unknown;\n}\n\nfunction isAxiosResponse(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) {\n return false;\n }\n const r = response as Record<string, unknown>;\n return !!(\n r &&\n r.config &&\n r.data &&\n r.headers &&\n r.request &&\n r.status &&\n r.statusText\n );\n}\n\nfunction filterAxiosResponse(response: unknown): unknown {\n if (!isAxiosResponse(response)) {\n return response;\n }\n const r = response as Record<string, unknown>;\n const newResponse: Record<string, unknown> = {\n data: r.data,\n headers: r.headers,\n status: r.status,\n statusText: r.statusText,\n };\n if (r.isAxiosError) {\n newResponse.isAxiosError = r.isAxiosError;\n }\n return newResponse;\n}\n\nexport const axiosResponseVarPipeline: Pipeline = {\n filter: filterAxiosResponse,\n key: \"response\",\n};\n\nfunction isError(item: unknown): boolean {\n if (typeof item !== \"object\" || item === null) {\n return false;\n }\n if (item instanceof Error) {\n return true;\n }\n const i = item as Record<string, unknown>;\n if (i.isProjectError) {\n return true;\n }\n return false;\n}\n\nfunction filterErrorVar(item: unknown): unknown {\n if (!isError(item)) {\n return item;\n }\n const e = item as Error & Record<string, unknown>;\n const newItem: Record<string, unknown> = {\n message: e.message,\n name: e.name,\n };\n if (e.cause) {\n newItem.cause = e.cause;\n }\n if (e.stack) {\n newItem.stack = e.stack;\n }\n if (e.isProjectError) {\n newItem.isProjectError = e.isProjectError;\n newItem.title = e.title;\n newItem.detail = e.detail;\n newItem.status = e.status;\n }\n return newItem;\n}\n\nexport const errorVarPipeline: Pipeline = {\n filter: filterErrorVar,\n key: \"error\",\n};\n\nexport const pipelines = [axiosResponseVarPipeline, errorVarPipeline];\n","import { forceVar } from \"./forceVar\";\nimport { pipelines } from \"./pipelines\";\n\nfunction keyValueToArray(keyValue: Record<string, unknown>): [string, unknown] {\n const key = Object.keys(keyValue)[0];\n return [key, keyValue[key]];\n}\n\nexport function logVar(key: unknown, value?: unknown): Record<string, unknown> {\n let [k, v] = keyValueToArray(forceVar(key, value));\n\n for (const pipeline of pipelines) {\n if (k === pipeline.key) {\n v = pipeline.filter(v);\n }\n }\n\n return { [k]: v };\n}\n","import Logger from \"./Logger\";\nimport { DEFAULT, FORMAT, LEVEL } from \"./constants\";\nimport { logTags } from \"./logTags\";\nimport { logVar } from \"./logVar\";\n\ninterface JaypieLoggerOptions {\n level?: string;\n tags?: Record<string, string>;\n}\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nclass JaypieLogger {\n public debug: Logger[\"debug\"];\n public error: Logger[\"error\"];\n public fatal: Logger[\"fatal\"];\n public info: Logger[\"info\"];\n public level: string;\n public trace: Logger[\"trace\"];\n public var: Logger[\"var\"];\n public warn: Logger[\"warn\"];\n\n private _logger: Logger;\n private _loggers: Logger[];\n private _params: JaypieLoggerOptions;\n private _tags: Record<string, string>;\n private _withLoggers: Record<string, JaypieLogger>;\n\n constructor({\n level = process.env.LOG_LEVEL,\n tags = {},\n }: JaypieLoggerOptions = {}) {\n this._params = { level, tags };\n this._loggers = [];\n this._tags = {};\n this._withLoggers = {};\n\n this.level = level || DEFAULT.LEVEL;\n\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n\n this.debug = ((...args: any[]) =>\n this._logger.debug(...args)) as Logger[\"debug\"];\n this.debug.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.debug.var(messageObject, messageValue);\n\n this.error = ((...args: any[]) =>\n this._logger.error(...args)) as Logger[\"error\"];\n this.error.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.error.var(messageObject, messageValue);\n\n this.fatal = ((...args: any[]) =>\n this._logger.fatal(...args)) as Logger[\"fatal\"];\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.fatal.var(messageObject, messageValue);\n\n this.info = ((...args: any[]) =>\n this._logger.info(...args)) as Logger[\"info\"];\n this.info.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.info.var(messageObject, messageValue);\n\n this.trace = ((...args: any[]) =>\n this._logger.trace(...args)) as Logger[\"trace\"];\n this.trace.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.trace.var(messageObject, messageValue);\n\n this.warn = ((...args: any[]) =>\n this._logger.warn(...args)) as Logger[\"warn\"];\n this.warn.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.warn.var(messageObject, messageValue);\n\n this.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.var(logVar(messageObject, messageValue));\n }\n\n public init(): void {\n for (const logger of this._loggers) {\n if (\"init\" in logger && typeof logger.init === \"function\") {\n (logger as Logger & { init: () => void }).init();\n }\n }\n const level = this._params.level;\n const tags = this._params.tags;\n this.level = level || DEFAULT.LEVEL;\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n this._withLoggers = {};\n\n const levels = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"trace\",\n \"warn\",\n ] as const;\n levels.forEach((lvl) => {\n this[lvl] = ((...args: any[]) => {\n this._logger[lvl](...args);\n }) as any;\n this[lvl].var = (messageObject: unknown, messageValue?: unknown) => {\n this._logger[lvl].var(messageObject, messageValue);\n };\n });\n }\n\n public lib({\n level,\n lib,\n tags = {},\n }: {\n level?: string;\n lib?: string;\n tags?: Record<string, string>;\n } = {}): JaypieLogger {\n const newTags = Object.assign({}, this._tags, tags);\n if (lib) {\n newTags.lib = lib;\n }\n\n const logger = new JaypieLogger({\n level: (() => {\n if (level) {\n return level;\n }\n if (process.env.MODULE_LOG_LEVEL) {\n return process.env.MODULE_LOG_LEVEL;\n }\n if (envBoolean(\"MODULE_LOGGER\", { defaultValue: false })) {\n return process.env.LOG_LEVEL;\n }\n return LEVEL.SILENT;\n })(),\n tags: newTags,\n });\n this._loggers.push(logger._logger);\n return logger;\n }\n\n public tag(tags: Record<string, unknown>): void {\n for (const logger of this._loggers) {\n logger.tag(tags);\n }\n Object.assign(this._tags, tags);\n }\n\n public untag(key: unknown): void {\n for (const logger of this._loggers) {\n logger.untag(key);\n }\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this._tags[String(k)];\n });\n } else if (typeof key === \"object\" && key !== null) {\n Object.keys(key).forEach((k) => {\n delete this._tags[k];\n });\n } else {\n delete this._tags[String(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): JaypieLogger {\n if (!key || (typeof key !== \"object\" && value === undefined)) {\n throw new Error(\n \"ConfigurationError: with() requires an object argument or key-value pair\",\n );\n }\n const loggerKey = JSON.stringify([key, value]);\n if (Object.keys(this._withLoggers).includes(loggerKey)) {\n return this._withLoggers[loggerKey];\n }\n const logger = new JaypieLogger({\n level: this.level,\n tags: { ...this._tags },\n });\n logger._logger = this._logger.with(key, value);\n logger._loggers = [logger._logger];\n this._withLoggers[loggerKey] = logger;\n this._loggers.push(logger._logger);\n return logger;\n }\n}\n\nexport function createLogger(tags: Record<string, string> = {}): JaypieLogger {\n const jaypieLogger = new JaypieLogger({\n tags,\n });\n return jaypieLogger;\n}\n\nexport default JaypieLogger;\n","import Logger from \"./Logger\";\nimport { createLogger } from \"./JaypieLogger\";\nimport { FORMAT, LEVEL } from \"./constants\";\n\nexport { FORMAT, LEVEL, Logger, createLogger };\n\nexport const log = createLogger();\n\nexport default log;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/constants.ts","../../../src/datadogTransport.ts","../../../src/utils.ts","../../../src/Logger.ts","../../../src/logTags.ts","../../../src/forceVar.ts","../../../src/pipelines.ts","../../../src/logVar.ts","../../../src/JaypieLogger.ts","../../../src/index.ts"],"sourcesContent":["export const DEFAULT = {\n LEVEL: \"debug\",\n VAR_LEVEL: \"debug\",\n};\n\nexport const ERROR_PREFIX = \"[logger]\";\n\nexport const ERROR = {\n VAR: {\n EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,\n MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,\n NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,\n UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \\`undefined\\` message`,\n },\n};\n\nexport const FORMAT = {\n JSON: \"json\",\n TEXT: \"text\",\n} as const;\n\nexport const LEVEL = {\n ALL: \"all\",\n DEBUG: \"debug\",\n ERROR: \"error\",\n FATAL: \"fatal\",\n INFO: \"info\",\n SILENT: \"silent\",\n TRACE: \"trace\",\n WARN: \"warn\",\n} as const;\n\nexport const LEVEL_VALUES: Record<string, number> = {\n all: 100,\n debug: 70,\n error: 10,\n fatal: 1,\n info: 50,\n none: 0,\n silent: 0,\n trace: 90,\n warn: 30,\n};\n\nexport const DATADOG_TRANSPORT = {\n ENV: {\n API_KEY: \"DATADOG_API_KEY\",\n DD_ENV: \"DD_ENV\",\n DD_HOST: \"DD_HOST\",\n DD_SERVICE: \"DD_SERVICE\",\n DD_SITE: \"DD_SITE\",\n FORWARDING: \"DATADOG_LOCAL_FORWARDING\",\n PROJECT_ENV: \"PROJECT_ENV\",\n PROJECT_HOST: \"PROJECT_HOST\",\n PROJECT_SERVICE: \"PROJECT_SERVICE\",\n },\n FLUSH_INTERVAL_MS: 5000,\n INTAKE_PATH: \"/api/v2/logs\",\n MAX_BATCH_SIZE: 100,\n} as const;\n\nexport const PSEUDO_LEVELS = [\"ALL\", \"SILENT\"];\n","import { hostname } from \"node:os\";\nimport { request } from \"node:https\";\n\nimport { DATADOG_TRANSPORT, LEVEL } from \"./constants\";\n\n// Level-to-Datadog status mapping\nconst LEVEL_TO_STATUS: Record<string, string> = {\n [LEVEL.TRACE]: \"debug\",\n [LEVEL.DEBUG]: \"debug\",\n [LEVEL.INFO]: \"info\",\n [LEVEL.WARN]: \"warn\",\n [LEVEL.ERROR]: \"error\",\n [LEVEL.FATAL]: \"critical\",\n};\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nexport function isDatadogForwardingEnabled(): boolean {\n return (\n envBoolean(DATADOG_TRANSPORT.ENV.FORWARDING, { defaultValue: false }) &&\n !!process.env[DATADOG_TRANSPORT.ENV.API_KEY]\n );\n}\n\ninterface DatadogLogEntry {\n ddsource: string;\n ddtags: string;\n hostname: string;\n message: string;\n service: string;\n status: string;\n}\n\nclass DatadogLogTransport {\n private _beforeExitHandler: (() => void) | null = null;\n private _buffer: DatadogLogEntry[] = [];\n private _flushTimer: ReturnType<typeof setInterval> | null = null;\n private _ddsource = \"nodejs\";\n private _env: string;\n private _hostname: string;\n private _service: string;\n private _site: string;\n\n constructor() {\n const env = process.env;\n this._env =\n env[DATADOG_TRANSPORT.ENV.DD_ENV] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_ENV] ||\n \"local\";\n this._hostname =\n env[DATADOG_TRANSPORT.ENV.DD_HOST] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_HOST] ||\n hostname();\n this._service =\n env[DATADOG_TRANSPORT.ENV.DD_SERVICE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SERVICE] ||\n \"unknown\";\n this._site = env[DATADOG_TRANSPORT.ENV.DD_SITE] || \"datadoghq.com\";\n\n this._flushTimer = setInterval(() => {\n this.flush();\n }, DATADOG_TRANSPORT.FLUSH_INTERVAL_MS);\n // Unref so timer doesn't keep process alive\n if (this._flushTimer && typeof this._flushTimer.unref === \"function\") {\n this._flushTimer.unref();\n }\n\n // Best-effort flush on exit\n this._beforeExitHandler = () => this.flush();\n process.on(\"beforeExit\", this._beforeExitHandler);\n }\n\n send(line: string, level: string): void {\n const entry: DatadogLogEntry = {\n ddsource: this._ddsource,\n ddtags: `env:${this._env}`,\n hostname: this._hostname,\n message: line,\n service: this._service,\n status: LEVEL_TO_STATUS[level] || \"info\",\n };\n this._buffer.push(entry);\n if (this._buffer.length >= DATADOG_TRANSPORT.MAX_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): void {\n if (this._buffer.length === 0) return;\n\n // Atomic swap\n const batch = this._buffer;\n this._buffer = [];\n\n const apiKey = process.env[DATADOG_TRANSPORT.ENV.API_KEY];\n if (!apiKey) return;\n\n const body = JSON.stringify(batch);\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": apiKey,\n },\n hostname: `http-intake.logs.${this._site}`,\n method: \"POST\",\n path: DATADOG_TRANSPORT.INTAKE_PATH,\n };\n\n try {\n const req = request(options, () => {\n // Response intentionally ignored\n });\n req.on(\"error\", () => {\n // Silently swallow transport errors\n });\n req.write(body);\n req.end();\n } catch {\n // Transport must never throw\n }\n }\n\n destroy(): void {\n if (this._flushTimer) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n if (this._beforeExitHandler) {\n process.removeListener(\"beforeExit\", this._beforeExitHandler);\n this._beforeExitHandler = null;\n }\n try {\n this.flush();\n } catch {\n // Best-effort\n }\n }\n}\n\nlet _instance: DatadogLogTransport | null = null;\n\nexport function getDatadogTransport(): DatadogLogTransport | null {\n if (!isDatadogForwardingEnabled()) return null;\n if (!_instance) {\n _instance = new DatadogLogTransport();\n }\n return _instance;\n}\n\nexport function _resetDatadogTransport(): void {\n if (_instance) {\n _instance.destroy();\n _instance = null;\n }\n}\n","import { LEVEL } from \"./constants\";\nimport { getDatadogTransport } from \"./datadogTransport\";\n\nexport function forceString(value: unknown, defaultValue = \"\"): string {\n if (value === null) return \"null\";\n if (value === undefined) return String(defaultValue);\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nexport function formatAsJsonString(subject: unknown): string {\n const SPACES = 0;\n const UNUSED_PARAM = null;\n\n switch (typeof subject) {\n case \"string\":\n if (subject === \"\") return `\"\"`;\n try {\n return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);\n } catch {\n return subject;\n }\n\n case \"object\":\n try {\n if (\n subject &&\n subject instanceof Object &&\n !Array.isArray(subject) &&\n subject.constructor &&\n subject.constructor !== Object &&\n \"toString\" in subject &&\n typeof subject.toString === \"function\"\n ) {\n return subject.toString();\n }\n return JSON.stringify(subject, UNUSED_PARAM, SPACES);\n } catch (error) {\n if (error instanceof TypeError) {\n const truncatedSubject = Object.keys(subject as object).reduce(\n (newSubject: Record<string, string>, key: string) => {\n const nextSubject = { ...newSubject };\n nextSubject[key] = String(\n (subject as Record<string, unknown>)[key],\n );\n return nextSubject;\n },\n {},\n );\n return formatAsJsonString(truncatedSubject);\n }\n throw error;\n }\n\n default:\n return String(subject);\n }\n}\n\nexport function stringify(...params: unknown[]): string {\n if (params.length === 0) return \"\";\n if (params.length === 1) {\n return formatAsJsonString(params[0]);\n }\n\n const formatted = params.map(formatAsJsonString);\n return formatted.join(\" \");\n}\n\nexport function out(\n line: string | unknown,\n { level = \"debug\" }: { level?: string } = {},\n): void {\n let lineStr: string;\n if (typeof line !== \"string\") {\n lineStr = stringify(line);\n } else {\n lineStr = line;\n }\n\n let outputFunction: (...args: unknown[]) => void;\n\n switch (level) {\n case LEVEL.INFO:\n outputFunction = console.info;\n break;\n case LEVEL.WARN:\n outputFunction = console.warn;\n break;\n case LEVEL.ERROR:\n case LEVEL.FATAL:\n outputFunction = console.error;\n break;\n case LEVEL.TRACE:\n case LEVEL.DEBUG:\n outputFunction = console.debug;\n break;\n default:\n outputFunction = console.log;\n break;\n }\n\n try {\n outputFunction(lineStr);\n } catch (error) {\n console.warn(error);\n console.log(lineStr);\n }\n\n try {\n const transport = getDatadogTransport();\n if (transport) {\n transport.send(lineStr, level);\n }\n } catch {\n // Transport errors must never affect logging\n }\n}\n\nexport function parse(message: unknown): unknown {\n if (typeof message !== \"string\") {\n return message;\n }\n try {\n return JSON.parse(message);\n } catch {\n return message;\n }\n}\n\nexport function parsesTo(message: unknown): {\n parses: boolean;\n message: unknown;\n} {\n if (typeof message !== \"string\") {\n return {\n parses: false,\n message,\n };\n }\n try {\n return {\n parses: true,\n message: JSON.parse(message),\n };\n } catch {\n return {\n parses: false,\n message,\n };\n }\n}\n","import {\n DEFAULT,\n ERROR,\n FORMAT,\n LEVEL,\n LEVEL_VALUES,\n PSEUDO_LEVELS,\n} from \"./constants\";\nimport { forceString, out, parse, parsesTo, stringify } from \"./utils\";\n\ntype LogLevel = string;\ntype LogFormat = \"json\" | \"text\";\ntype Tags = Record<string, string>;\n\ninterface LoggerOptions {\n format?: LogFormat;\n level?: LogLevel;\n tags?: Tags;\n varLevel?: LogLevel;\n}\n\ninterface LogJson {\n data?: unknown;\n dataType?: string;\n log: string;\n message: string;\n var?: string;\n [key: string]: unknown;\n}\n\ntype LogMethod = {\n (...messages: unknown[]): void;\n var: (messageObject: unknown, messageValue?: unknown) => void;\n};\n\nclass Logger {\n public debug: LogMethod;\n public error: LogMethod;\n public fatal: LogMethod;\n public info: LogMethod;\n public options: LoggerOptions;\n public tags: Tags;\n public trace: LogMethod;\n public var: (messageObject: unknown, messageValue?: unknown) => void;\n public warn: LogMethod;\n\n constructor({\n format = (process.env.LOG_FORMAT as LogFormat) || DEFAULT.LEVEL,\n level = process.env.LOG_LEVEL || DEFAULT.LEVEL,\n tags = {},\n varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL,\n }: LoggerOptions = {}) {\n this.options = {\n format,\n level,\n varLevel,\n };\n\n this.tags = {};\n Object.keys(tags).forEach((key) => {\n this.tags[key] = forceString(tags[key]);\n });\n\n this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);\n this.error = this.createLogMethod(LEVEL.ERROR, format, level);\n this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);\n this.info = this.createLogMethod(LEVEL.INFO, format, level);\n this.trace = this.createLogMethod(LEVEL.TRACE, format, level);\n this.warn = this.createLogMethod(LEVEL.WARN, format, level);\n\n const varLevelMethod =\n this[varLevel as \"debug\" | \"error\" | \"fatal\" | \"info\" | \"trace\" | \"warn\"];\n this.var = (varLevelMethod as LogMethod)?.var || this.debug.var;\n }\n\n private createLogMethod(\n logLevel: string,\n format: LogFormat,\n checkLevel: string,\n ): LogMethod {\n const logFn = (...messages: unknown[]): void => {\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n if (format === FORMAT.JSON) {\n const message = stringify(...messages);\n const parses = parsesTo(message);\n const json: LogJson = {\n log: logLevel,\n message,\n ...this.tags,\n };\n if (parses.parses) {\n json.data = parses.message;\n }\n out(json, { level: logLevel });\n } else {\n const message = stringify(...messages);\n out(message, { level: logLevel });\n }\n }\n };\n\n logFn.var = (messageObject: unknown, messageValue?: unknown): void => {\n if (messageObject === undefined) {\n this.warn(ERROR.VAR.UNDEFINED_MESSAGE);\n }\n\n let msgObj: Record<string, unknown>;\n\n if (typeof messageObject !== \"object\" || messageObject === null) {\n if (typeof messageObject !== \"object\") {\n if (messageValue === undefined) messageValue = \"undefined\";\n msgObj = { [String(messageObject)]: messageValue };\n } else {\n this.warn(ERROR.VAR.NULL_OBJECT);\n return logFn(messageObject);\n }\n } else {\n msgObj = messageObject as Record<string, unknown>;\n }\n\n const keys = Object.keys(msgObj);\n if (keys.length === 0) {\n this.warn(ERROR.VAR.EMPTY_OBJECT);\n return logFn(msgObj);\n }\n\n if (keys.length > 1) {\n this.warn(ERROR.VAR.MULTIPLE_KEYS);\n return logFn(msgObj);\n }\n\n if (format === FORMAT.JSON) {\n const messageKey = keys[0];\n const messageVal = msgObj[messageKey];\n\n const json: LogJson = {\n data: parse(messageVal),\n dataType: typeof messageVal,\n log: logLevel,\n message: stringify(messageVal),\n var: messageKey,\n ...this.tags,\n };\n\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n out(json, { level: logLevel });\n }\n } else {\n return logFn(msgObj);\n }\n };\n\n return logFn as LogMethod;\n }\n\n public tag(key: unknown, value?: unknown): void {\n if (value) {\n this.tags[forceString(key)] = forceString(value);\n return;\n }\n\n if (Array.isArray(key)) {\n key.forEach((k) => {\n this.tags[forceString(k)] = \"\";\n });\n return;\n }\n\n if (key === null) {\n this.tags.null = \"\";\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key).forEach((k) => {\n this.tags[forceString(k)] = forceString(\n (key as Record<string, unknown>)[k],\n );\n });\n } else {\n this.tags[forceString(key)] = \"\";\n }\n }\n\n public untag(key: unknown): void {\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this.tags[forceString(k)];\n });\n return;\n }\n\n if (key === null) {\n delete this.tags.null;\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key as object).forEach((k) => {\n delete this.tags[forceString(k)];\n });\n } else {\n delete this.tags[forceString(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): Logger {\n const logger = new Logger(this.options);\n logger.tag(this.tags);\n logger.tag(key, value);\n return logger;\n }\n}\n\nexport default Logger;\n","export function logTags(\n withTags?: Record<string, string>,\n): Record<string, string> {\n if (withTags && typeof withTags !== \"object\") {\n withTags = {};\n }\n\n const {\n PROJECT_COMMIT,\n PROJECT_ENV,\n PROJECT_KEY,\n PROJECT_SERVICE,\n PROJECT_SPONSOR,\n PROJECT_VERSION,\n } = process.env;\n\n const tags: Record<string, string> = {};\n\n if (PROJECT_COMMIT) {\n tags.commit = PROJECT_COMMIT;\n }\n if (PROJECT_ENV) {\n tags.env = PROJECT_ENV;\n }\n if (PROJECT_KEY) {\n tags.project = PROJECT_KEY;\n }\n if (PROJECT_SERVICE) {\n tags.service = PROJECT_SERVICE;\n }\n if (PROJECT_SPONSOR) {\n tags.sponsor = PROJECT_SPONSOR;\n }\n if (process.env.npm_package_version || PROJECT_VERSION) {\n tags.version = (process.env.npm_package_version ||\n PROJECT_VERSION) as string;\n }\n\n return {\n ...tags,\n ...withTags,\n };\n}\n","import { forceString } from \"./utils\";\n\nexport function forceVar(\n key: unknown,\n value?: unknown,\n): Record<string, unknown> {\n if (typeof key === \"undefined\") {\n return {};\n }\n if (typeof key === \"object\" && key !== null) {\n if (Object.keys(key).length === 1) {\n return key as Record<string, unknown>;\n } else {\n return { value: key };\n }\n }\n const keyStr = forceString(key);\n if (typeof value === \"undefined\") {\n return { [keyStr]: \"\" };\n } else {\n return { [keyStr]: value };\n }\n}\n","interface Pipeline {\n key: string;\n filter: (value: unknown) => unknown;\n}\n\nfunction isAxiosResponse(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) {\n return false;\n }\n const r = response as Record<string, unknown>;\n return !!(\n r &&\n r.config &&\n r.data &&\n r.headers &&\n r.request &&\n r.status &&\n r.statusText\n );\n}\n\nfunction filterAxiosResponse(response: unknown): unknown {\n if (!isAxiosResponse(response)) {\n return response;\n }\n const r = response as Record<string, unknown>;\n const newResponse: Record<string, unknown> = {\n data: r.data,\n headers: r.headers,\n status: r.status,\n statusText: r.statusText,\n };\n if (r.isAxiosError) {\n newResponse.isAxiosError = r.isAxiosError;\n }\n return newResponse;\n}\n\nexport const axiosResponseVarPipeline: Pipeline = {\n filter: filterAxiosResponse,\n key: \"response\",\n};\n\nfunction isError(item: unknown): boolean {\n if (typeof item !== \"object\" || item === null) {\n return false;\n }\n if (item instanceof Error) {\n return true;\n }\n const i = item as Record<string, unknown>;\n if (i.isProjectError) {\n return true;\n }\n return false;\n}\n\nfunction filterErrorVar(item: unknown): unknown {\n if (!isError(item)) {\n return item;\n }\n const e = item as Error & Record<string, unknown>;\n const newItem: Record<string, unknown> = {\n message: e.message,\n name: e.name,\n };\n if (e.cause) {\n newItem.cause = e.cause;\n }\n if (e.stack) {\n newItem.stack = e.stack;\n }\n if (e.isProjectError) {\n newItem.isProjectError = e.isProjectError;\n newItem.title = e.title;\n newItem.detail = e.detail;\n newItem.status = e.status;\n }\n return newItem;\n}\n\nexport const errorVarPipeline: Pipeline = {\n filter: filterErrorVar,\n key: \"error\",\n};\n\nexport const pipelines = [axiosResponseVarPipeline, errorVarPipeline];\n","import { forceVar } from \"./forceVar\";\nimport { pipelines } from \"./pipelines\";\n\nfunction keyValueToArray(keyValue: Record<string, unknown>): [string, unknown] {\n const key = Object.keys(keyValue)[0];\n return [key, keyValue[key]];\n}\n\nexport function logVar(key: unknown, value?: unknown): Record<string, unknown> {\n let [k, v] = keyValueToArray(forceVar(key, value));\n\n for (const pipeline of pipelines) {\n if (k === pipeline.key) {\n v = pipeline.filter(v);\n }\n }\n\n return { [k]: v };\n}\n","import Logger from \"./Logger\";\nimport { DEFAULT, FORMAT, LEVEL } from \"./constants\";\nimport { _resetDatadogTransport } from \"./datadogTransport\";\nimport { logTags } from \"./logTags\";\nimport { logVar } from \"./logVar\";\n\ninterface JaypieLoggerOptions {\n level?: string;\n tags?: Record<string, string>;\n}\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nclass JaypieLogger {\n public debug: Logger[\"debug\"];\n public error: Logger[\"error\"];\n public fatal: Logger[\"fatal\"];\n public info: Logger[\"info\"];\n public level: string;\n public trace: Logger[\"trace\"];\n public var: Logger[\"var\"];\n public warn: Logger[\"warn\"];\n\n private _logger: Logger;\n private _loggers: Logger[];\n private _params: JaypieLoggerOptions;\n private _tags: Record<string, string>;\n private _withLoggers: Record<string, JaypieLogger>;\n\n constructor({\n level = process.env.LOG_LEVEL,\n tags = {},\n }: JaypieLoggerOptions = {}) {\n this._params = { level, tags };\n this._loggers = [];\n this._tags = {};\n this._withLoggers = {};\n\n this.level = level || DEFAULT.LEVEL;\n\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n\n this.debug = ((...args: any[]) =>\n this._logger.debug(...args)) as Logger[\"debug\"];\n this.debug.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.debug.var(messageObject, messageValue);\n\n this.error = ((...args: any[]) =>\n this._logger.error(...args)) as Logger[\"error\"];\n this.error.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.error.var(messageObject, messageValue);\n\n this.fatal = ((...args: any[]) =>\n this._logger.fatal(...args)) as Logger[\"fatal\"];\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.fatal.var(messageObject, messageValue);\n\n this.info = ((...args: any[]) =>\n this._logger.info(...args)) as Logger[\"info\"];\n this.info.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.info.var(messageObject, messageValue);\n\n this.trace = ((...args: any[]) =>\n this._logger.trace(...args)) as Logger[\"trace\"];\n this.trace.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.trace.var(messageObject, messageValue);\n\n this.warn = ((...args: any[]) =>\n this._logger.warn(...args)) as Logger[\"warn\"];\n this.warn.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.warn.var(messageObject, messageValue);\n\n this.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.var(logVar(messageObject, messageValue));\n }\n\n public init(): void {\n _resetDatadogTransport();\n for (const logger of this._loggers) {\n if (\"init\" in logger && typeof logger.init === \"function\") {\n (logger as Logger & { init: () => void }).init();\n }\n }\n const level = this._params.level;\n const tags = this._params.tags;\n this.level = level || DEFAULT.LEVEL;\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n this._withLoggers = {};\n\n const levels = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"trace\",\n \"warn\",\n ] as const;\n levels.forEach((lvl) => {\n this[lvl] = ((...args: any[]) => {\n this._logger[lvl](...args);\n }) as any;\n this[lvl].var = (messageObject: unknown, messageValue?: unknown) => {\n this._logger[lvl].var(messageObject, messageValue);\n };\n });\n }\n\n public lib({\n level,\n lib,\n tags = {},\n }: {\n level?: string;\n lib?: string;\n tags?: Record<string, string>;\n } = {}): JaypieLogger {\n const newTags = Object.assign({}, this._tags, tags);\n if (lib) {\n newTags.lib = lib;\n }\n\n const logger = new JaypieLogger({\n level: (() => {\n if (level) {\n return level;\n }\n if (process.env.MODULE_LOG_LEVEL) {\n return process.env.MODULE_LOG_LEVEL;\n }\n if (envBoolean(\"MODULE_LOGGER\", { defaultValue: false })) {\n return process.env.LOG_LEVEL;\n }\n return LEVEL.SILENT;\n })(),\n tags: newTags,\n });\n this._loggers.push(logger._logger);\n return logger;\n }\n\n public tag(tags: Record<string, unknown>): void {\n for (const logger of this._loggers) {\n logger.tag(tags);\n }\n Object.assign(this._tags, tags);\n }\n\n public untag(key: unknown): void {\n for (const logger of this._loggers) {\n logger.untag(key);\n }\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this._tags[String(k)];\n });\n } else if (typeof key === \"object\" && key !== null) {\n Object.keys(key).forEach((k) => {\n delete this._tags[k];\n });\n } else {\n delete this._tags[String(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): JaypieLogger {\n if (!key || (typeof key !== \"object\" && value === undefined)) {\n throw new Error(\n \"ConfigurationError: with() requires an object argument or key-value pair\",\n );\n }\n const loggerKey = JSON.stringify([key, value]);\n if (Object.keys(this._withLoggers).includes(loggerKey)) {\n return this._withLoggers[loggerKey];\n }\n const logger = new JaypieLogger({\n level: this.level,\n tags: { ...this._tags },\n });\n logger._logger = this._logger.with(key, value);\n logger._loggers = [logger._logger];\n this._withLoggers[loggerKey] = logger;\n this._loggers.push(logger._logger);\n return logger;\n }\n}\n\nexport function createLogger(tags: Record<string, string> = {}): JaypieLogger {\n const jaypieLogger = new JaypieLogger({\n tags,\n });\n return jaypieLogger;\n}\n\nexport default JaypieLogger;\n","import Logger from \"./Logger\";\nimport { createLogger } from \"./JaypieLogger\";\nimport { FORMAT, LEVEL } from \"./constants\";\nimport {\n _resetDatadogTransport,\n isDatadogForwardingEnabled,\n} from \"./datadogTransport\";\n\nexport {\n FORMAT,\n LEVEL,\n Logger,\n _resetDatadogTransport,\n createLogger,\n isDatadogForwardingEnabled,\n};\n\nexport const log = createLogger();\n\nexport default log;\n"],"names":["envBoolean"],"mappings":"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"}
|