@orion-js/logger 4.0.5 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -32,54 +32,78 @@ __export(index_exports, {
32
32
  addTransport: () => addTransport,
33
33
  configureLogger: () => configureLogger,
34
34
  getLogger: () => getLogger,
35
+ getOrionAsyncContext: () => getOrionAsyncContext,
35
36
  jsonConsoleFormat: () => jsonConsoleFormat,
36
37
  jsonConsoleTransport: () => jsonConsoleTransport,
37
38
  logger: () => logger,
39
+ runWithOrionAsyncContext: () => runWithOrionAsyncContext,
38
40
  sentryFormat: () => sentryFormat,
39
41
  setLogLevel: () => setLogLevel,
40
42
  textConsoleFormat: () => textConsoleFormat,
41
43
  textConsoleTransport: () => textConsoleTransport,
42
- winston: () => import_winston3.default,
44
+ updateOrionAsyncContext: () => updateOrionAsyncContext,
45
+ winston: () => import_winston5.default,
43
46
  winstonLogger: () => winstonLogger
44
47
  });
45
48
  module.exports = __toCommonJS(index_exports);
46
- var import_winston3 = __toESM(require("winston"), 1);
49
+ var import_winston5 = __toESM(require("winston"), 1);
47
50
 
48
- // src/formats.ts
51
+ // src/formats/consoleFormats.ts
52
+ var import_winston3 = require("winston");
53
+
54
+ // src/formats/winstonFormats.ts
49
55
  var import_winston = require("winston");
50
- var import_node_util = __toESM(require("util"), 1);
56
+ var import_api = __toESM(require("@opentelemetry/api"), 1);
51
57
 
52
- // ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js
53
- function type(input) {
54
- if (input === null) {
55
- return "Null";
56
- } else if (input === void 0) {
57
- return "Undefined";
58
- } else if (Number.isNaN(input)) {
59
- return "NaN";
60
- }
61
- const typeResult = Object.prototype.toString.call(input).slice(8, -1);
62
- return typeResult === "AsyncFunction" ? "Promise" : typeResult;
58
+ // src/asyncContext.ts
59
+ var import_node_async_hooks = require("async_hooks");
60
+ var import_node_crypto = require("crypto");
61
+ var storage = new import_node_async_hooks.AsyncLocalStorage();
62
+ async function runWithOrionAsyncContext(context, callback) {
63
+ const contextWithId = {
64
+ contextId: (0, import_node_crypto.randomUUID)(),
65
+ ...context
66
+ };
67
+ return await storage.run(contextWithId, async () => {
68
+ return await callback();
69
+ });
63
70
  }
64
-
65
- // ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js
66
- function isEmpty(input) {
67
- const inputType = type(input);
68
- if (["Undefined", "NaN", "Number", "Null"].includes(inputType))
69
- return false;
70
- if (!input) return true;
71
- if (inputType === "Object") {
72
- return Object.keys(input).length === 0;
71
+ var getOrionAsyncContext = () => {
72
+ return storage.getStore();
73
+ };
74
+ var updateOrionAsyncContext = (context) => {
75
+ const currentContext = storage.getStore();
76
+ if (!currentContext) {
77
+ return void 0;
73
78
  }
74
- if (inputType === "Array") {
75
- return input.length === 0;
79
+ Object.assign(currentContext, context);
80
+ return currentContext;
81
+ };
82
+
83
+ // src/formats/getAsyncContextLabel.ts
84
+ function getAsyncContextLabel() {
85
+ const asyncContext = getOrionAsyncContext();
86
+ if (!asyncContext) return "";
87
+ const { controllerType } = asyncContext;
88
+ switch (controllerType) {
89
+ case "job":
90
+ return `${controllerType}:${asyncContext.jobName}`;
91
+ case "route":
92
+ return `${controllerType}:${asyncContext.pathname}`;
93
+ case "resolver":
94
+ return asyncContext.resolverName ? `${controllerType}:${asyncContext.resolverName}` : controllerType;
95
+ case "modelResolver":
96
+ return asyncContext.modelResolverName ? `${controllerType}:${asyncContext.modelName}:${asyncContext.modelResolverName}` : controllerType;
97
+ case "subscription":
98
+ return `${controllerType}:${asyncContext.subscriptionName}`;
99
+ case "echo":
100
+ return `${controllerType}:${asyncContext.echoName}`;
101
+ default:
102
+ return controllerType;
76
103
  }
77
- return false;
78
104
  }
79
105
 
80
- // src/formats.ts
81
- var import_api = __toESM(require("@opentelemetry/api"), 1);
82
- var { metadata, timestamp, json, colorize, combine, printf } = import_winston.format;
106
+ // src/formats/winstonFormats.ts
83
107
  var opentelemetryContext = (0, import_winston.format)((info) => {
84
108
  const activeSpan = import_api.default.trace.getActiveSpan();
85
109
  if (activeSpan) {
@@ -110,6 +134,12 @@ var metaError = (0, import_winston.format)((info) => {
110
134
  }
111
135
  return info;
112
136
  });
137
+ var asyncContextFormat = (0, import_winston.format)((info) => {
138
+ if (!info.context) {
139
+ info.context = getAsyncContextLabel();
140
+ }
141
+ return info;
142
+ });
113
143
  var sentryFormat = (0, import_winston.format)((info) => {
114
144
  const { path, label, ...extra } = info;
115
145
  return {
@@ -120,26 +150,147 @@ var sentryFormat = (0, import_winston.format)((info) => {
120
150
  }
121
151
  };
122
152
  });
153
+
154
+ // src/formats/getMetadataText.ts
155
+ var import_node_util = __toESM(require("util"), 1);
156
+
157
+ // ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js
158
+ function type(input) {
159
+ if (input === null) {
160
+ return "Null";
161
+ } else if (input === void 0) {
162
+ return "Undefined";
163
+ } else if (Number.isNaN(input)) {
164
+ return "NaN";
165
+ }
166
+ const typeResult = Object.prototype.toString.call(input).slice(8, -1);
167
+ return typeResult === "AsyncFunction" ? "Promise" : typeResult;
168
+ }
169
+
170
+ // ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js
171
+ function isEmpty(input) {
172
+ const inputType = type(input);
173
+ if (["Undefined", "NaN", "Number", "Null"].includes(inputType))
174
+ return false;
175
+ if (!input) return true;
176
+ if (inputType === "Object") {
177
+ return Object.keys(input).length === 0;
178
+ }
179
+ if (inputType === "Array") {
180
+ return input.length === 0;
181
+ }
182
+ return false;
183
+ }
184
+
185
+ // src/formats/getMetadataText.ts
123
186
  function getMetadataText(metadata2) {
124
187
  const { value, ...rest } = metadata2;
125
188
  if (isEmpty(rest)) {
126
189
  if (typeof value === "undefined") return "";
127
- return import_node_util.default.inspect(value);
190
+ return import_node_util.default.inspect(value, { colors: true });
128
191
  }
129
- return `${import_node_util.default.inspect(value)} ${import_node_util.default.inspect(rest)}`;
192
+ return `${import_node_util.default.inspect(value, { colors: true })} ${import_node_util.default.inspect(rest, { colors: true })}`;
193
+ }
194
+
195
+ // src/formats/formatStack.ts
196
+ function formatStack(stack) {
197
+ if (!stack) return "";
198
+ const lines = stack.split("\n");
199
+ const errorLine = lines[0];
200
+ const stackLines = lines.slice(1);
201
+ const dim = "\x1B[2m";
202
+ const reset = "\x1B[0m";
203
+ const cyan = "\x1B[36m";
204
+ const yellow = "\x1B[33m";
205
+ const gray = "\x1B[90m";
206
+ const formattedStackLines = stackLines.map((line) => {
207
+ if (!line.trim()) return "";
208
+ const match1 = line.match(/^(\s+at\s+)(.+?)(\s+\()([^)]+)(\))/);
209
+ if (match1) {
210
+ const [, atSpace, funcName, openParen, filePath, closeParen] = match1;
211
+ const fileMatch = filePath.match(/^(.*):(\d+):(\d+)$/);
212
+ if (fileMatch) {
213
+ const [, file, lineNum, colNum] = fileMatch;
214
+ return `${gray} ${atSpace}${reset}${dim}${funcName}${reset} ${gray}${openParen}${cyan}${file}${gray}:${yellow}${lineNum}:${colNum}${gray}${closeParen}${reset}`;
215
+ }
216
+ }
217
+ const match2 = line.match(/^(\s+at\s+)([^(]+):(\d+):(\d+)/);
218
+ if (match2) {
219
+ const [, atSpace, file, lineNum, colNum] = match2;
220
+ return `${gray} ${atSpace}${cyan}${file}${gray}:${yellow}${lineNum}:${colNum}${reset}`;
221
+ }
222
+ return `${gray} ${line.trim()}${reset}`;
223
+ });
224
+ return `
225
+ ${errorLine}
226
+ ${formattedStackLines.filter(Boolean).join("\n")}`;
130
227
  }
228
+
229
+ // src/formats/enrichWithAsyncContext.ts
230
+ var import_winston2 = require("winston");
231
+ var enrichWithAsyncContext = (0, import_winston2.format)((info) => {
232
+ const asyncContext = getOrionAsyncContext();
233
+ if (!asyncContext) return info;
234
+ const contextData = {
235
+ controllerType: asyncContext.controllerType,
236
+ contextId: asyncContext.contextId
237
+ };
238
+ switch (asyncContext.controllerType) {
239
+ case "job":
240
+ contextData.jobName = asyncContext.jobName;
241
+ break;
242
+ case "route":
243
+ contextData.routeName = asyncContext.routeName;
244
+ contextData.pathname = asyncContext.pathname;
245
+ break;
246
+ case "resolver":
247
+ if (asyncContext.resolverName) {
248
+ contextData.resolverName = asyncContext.resolverName;
249
+ }
250
+ break;
251
+ case "modelResolver":
252
+ if (asyncContext.modelName) {
253
+ contextData.modelName = asyncContext.modelName;
254
+ }
255
+ if (asyncContext.modelResolverName) {
256
+ contextData.modelResolverName = asyncContext.modelResolverName;
257
+ }
258
+ break;
259
+ case "subscription":
260
+ contextData.subscriptionName = asyncContext.subscriptionName;
261
+ break;
262
+ case "echo":
263
+ contextData.echoName = asyncContext.echoName;
264
+ break;
265
+ }
266
+ if (asyncContext.viewer && typeof asyncContext.viewer === "object") {
267
+ const viewer = asyncContext.viewer;
268
+ if (viewer.userId) {
269
+ contextData.userId = viewer.userId;
270
+ } else if (viewer._id) {
271
+ contextData.userId = viewer._id;
272
+ } else if (viewer.id) {
273
+ contextData.userId = viewer.id;
274
+ }
275
+ }
276
+ info.asyncContext = contextData;
277
+ return info;
278
+ });
279
+
280
+ // src/formats/consoleFormats.ts
281
+ var { metadata, timestamp, json, colorize, combine, printf } = import_winston3.format;
131
282
  var textConsoleFormat = combine(
132
283
  colorize(),
133
284
  metadata({ fillExcept: ["fileName", "level", "message", "stack"] }),
134
285
  opentelemetryContext(),
286
+ asyncContextFormat(),
135
287
  metaError(),
136
288
  timestamp(),
137
289
  printf((info) => {
138
290
  const date = new Date(info.timestamp);
139
291
  const timeLabel = `${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${date.getSeconds().toString().padStart(2, "0")}`;
140
292
  const fileNameLabel = info.fileName ? `[${info.fileName}]` : "";
141
- const stack = info.stack ? `
142
- ${info.stack}` : "";
293
+ const stack = info.stack ? formatStack(info.stack) : "";
143
294
  const value = getMetadataText(info.metadata);
144
295
  const traceId = info.trace_id ? `${String(info.trace_id).substring(0, 8)}@${String(info.span_id).substring(0, 8)}` : "";
145
296
  const context = [info.context, traceId].filter(Boolean).join(" ").trim();
@@ -155,24 +306,25 @@ ${info.stack}` : "";
155
306
  ].filter(Boolean).join(" ");
156
307
  })
157
308
  );
158
- var textConsoleTransport = new import_winston.transports.Console({
309
+ var textConsoleTransport = new import_winston3.transports.Console({
159
310
  handleExceptions: true,
160
311
  format: textConsoleFormat
161
312
  });
162
313
  var jsonConsoleFormat = combine(
163
314
  metadata({ fillExcept: ["fileName", "level", "message"] }),
164
315
  opentelemetryContext(),
316
+ enrichWithAsyncContext(),
165
317
  metaError(),
166
318
  timestamp(),
167
319
  json()
168
320
  );
169
- var jsonConsoleTransport = new import_winston.transports.Console({
321
+ var jsonConsoleTransport = new import_winston3.transports.Console({
170
322
  handleExceptions: true,
171
323
  format: jsonConsoleFormat
172
324
  });
173
325
 
174
326
  // src/logger.ts
175
- var import_winston2 = require("winston");
327
+ var import_winston4 = require("winston");
176
328
 
177
329
  // src/helpers/getFileName.ts
178
330
  var getFileName = () => {
@@ -218,10 +370,10 @@ var improveFileName = (path) => {
218
370
  var transports2 = [
219
371
  process.env.NODE_ENV !== "production" || process.env.ORION_DEV || process.env.JEST_WORKER_ID ? textConsoleTransport : jsonConsoleTransport
220
372
  ];
221
- var winstonLogger = (0, import_winston2.createLogger)({
222
- levels: import_winston2.config.npm.levels,
373
+ var winstonLogger = (0, import_winston4.createLogger)({
374
+ levels: import_winston4.config.npm.levels,
223
375
  handleExceptions: true,
224
- format: import_winston2.format.errors({ stack: true }),
376
+ format: import_winston4.format.errors({ stack: true }),
225
377
  transports: transports2
226
378
  });
227
379
  var configureLogger = (options) => {
@@ -273,13 +425,16 @@ var logger = createLogger(winstonLogger);
273
425
  addTransport,
274
426
  configureLogger,
275
427
  getLogger,
428
+ getOrionAsyncContext,
276
429
  jsonConsoleFormat,
277
430
  jsonConsoleTransport,
278
431
  logger,
432
+ runWithOrionAsyncContext,
279
433
  sentryFormat,
280
434
  setLogLevel,
281
435
  textConsoleFormat,
282
436
  textConsoleTransport,
437
+ updateOrionAsyncContext,
283
438
  winston,
284
439
  winstonLogger
285
440
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/formats.ts","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js","../src/logger.ts","../src/helpers/getFileName.ts"],"sourcesContent":["import winston from 'winston'\n\nexport * from './formats'\nexport * from './logger'\nexport * from './types'\n\nexport {winston}\n","import {format, transports} from 'winston'\nimport util from 'node:util'\nimport {isEmpty} from 'rambdax'\nimport opentelemetry, {Span} from '@opentelemetry/api'\n\nconst {metadata, timestamp, json, colorize, combine, printf} = format\n\nconst opentelemetryContext = format(info => {\n const activeSpan: Span & {name?: string} = opentelemetry.trace.getActiveSpan()\n if (activeSpan) {\n const spanContex = activeSpan.spanContext()\n if (activeSpan.name && !info.context) {\n info.context = activeSpan.name\n }\n const fields = {\n trace_id: spanContex.traceId,\n span_id: spanContex.spanId,\n trace_flags: `0${spanContex.traceFlags.toString(16)}`,\n }\n Object.assign(info, fields)\n }\n return info\n})\n\nconst metaError = format((info: any) => {\n if (info?.metadata?.value?.error instanceof Error) {\n info.stack = info?.metadata?.value?.error.stack\n info.errorMessage = info?.metadata?.value?.error.message\n delete info?.metadata?.value?.error\n }\n\n if (info?.metadata?.value instanceof Error) {\n info.stack = info?.metadata?.value.stack\n info.errorMessage = info?.metadata?.value.message\n delete info?.metadata?.value\n }\n\n return info\n})\n\nexport const sentryFormat: any = format(info => {\n const {path, label, ...extra} = info\n return {\n ...extra,\n tags: {\n path: path || '',\n request_id: label,\n },\n }\n})\n\nfunction getMetadataText(metadata: any) {\n const {value, ...rest} = metadata\n if (isEmpty(rest)) {\n if (typeof value === 'undefined') return ''\n return util.inspect(value)\n }\n return `${util.inspect(value)} ${util.inspect(rest)}`\n}\n\nexport const textConsoleFormat: any = combine(\n colorize(),\n metadata({fillExcept: ['fileName', 'level', 'message', 'stack']}),\n opentelemetryContext(),\n metaError(),\n timestamp(),\n printf((info: any) => {\n // console.log(info)\n\n const date = new Date(info.timestamp)\n const timeLabel = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`\n const fileNameLabel = info.fileName ? `[${info.fileName}]` : ''\n const stack = info.stack ? `\\n${info.stack}` : ''\n const value = getMetadataText(info.metadata)\n const traceId = info.trace_id\n ? `${String(info.trace_id).substring(0, 8)}@${String(info.span_id).substring(0, 8)}`\n : ''\n const context = [info.context, traceId].filter(Boolean).join(' ').trim()\n const contextLabel = context ? `[${context}]` : ''\n return [\n `[${info.level}]`,\n `[${timeLabel}]`,\n contextLabel,\n fileNameLabel,\n info.message,\n value,\n stack,\n ]\n .filter(Boolean)\n .join(' ')\n }),\n)\n\nexport const textConsoleTransport = new transports.Console({\n handleExceptions: true,\n format: textConsoleFormat,\n})\n\nexport const jsonConsoleFormat: any = combine(\n metadata({fillExcept: ['fileName', 'level', 'message']}),\n opentelemetryContext(),\n metaError(),\n timestamp(),\n json(),\n)\n\nexport const jsonConsoleTransport = new transports.Console({\n handleExceptions: true,\n format: jsonConsoleFormat,\n})\n","export function type(input){\n if (input === null){\n return 'Null'\n } else if (input === undefined){\n return 'Undefined'\n } else if (Number.isNaN(input)){\n return 'NaN'\n }\n const typeResult = Object.prototype.toString.call(input).slice(8, -1)\n\n return typeResult === 'AsyncFunction' ? 'Promise' : typeResult\n}\n","import { type } from './type.js'\n\nexport function isEmpty(input){\n const inputType = type(input)\n if ([ 'Undefined', 'NaN', 'Number', 'Null' ].includes(inputType))\n return false\n if (!input) return true\n\n if (inputType === 'Object'){\n return Object.keys(input).length === 0\n }\n\n if (inputType === 'Array'){\n return input.length === 0\n }\n\n return false\n}\n","import winston, {createLogger as winstonCreateLogger, config, format} from 'winston'\nimport {jsonConsoleTransport, textConsoleTransport} from './formats'\nimport {getFileName} from './helpers/getFileName'\nimport {OrionLogger} from './types'\n\nconst transports: winston.transport[] = [\n process.env.NODE_ENV !== 'production' || process.env.ORION_DEV || process.env.JEST_WORKER_ID\n ? textConsoleTransport\n : jsonConsoleTransport,\n]\n\nexport const winstonLogger = winstonCreateLogger({\n levels: config.npm.levels,\n handleExceptions: true,\n format: format.errors({stack: true}),\n transports: transports,\n})\n\nexport const configureLogger = (options: winston.LoggerOptions) => {\n return winstonLogger.configure(options)\n}\n\nexport const setLogLevel = (level: string) => {\n winstonLogger.level = level\n}\n\nexport const addTransport = (transport: winston.transport) => {\n return winstonLogger.add(transport)\n}\n\nexport const getLogger = (context: string) => {\n return winstonLogger.child({context})\n}\n\nconst createLogger = (logger: winston.Logger): OrionLogger => {\n return {\n debug: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.debug({message, fileName, value})\n },\n info: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.info({message, fileName, value})\n },\n warn: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.warn({message, fileName, value})\n },\n error: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.error({message, fileName, value})\n },\n addContext: (module: NodeJS.Module) => {\n if (module.id) {\n const split = String(module.id).split('.orion/build/')\n const fileName = split.length > 1 ? split[1] : split[0]\n return createLogger(logger.child({fileName}))\n }\n return createLogger(logger.child({}))\n },\n addMetadata: (metadata: any) => {\n return createLogger(logger.child(metadata))\n },\n }\n}\n\nexport const logger = createLogger(winstonLogger)\n","export const getFileName = () => {\n try {\n const stack = new Error().stack\n const lines = stack.split('\\n')\n const filePath = lines[3].split('(')[1].split(')')[0]\n return improveFileName(filePath)\n } catch {\n return\n }\n}\n\nexport const improveFileName = (path: string) => {\n path = path.replace(`${process.cwd()}/`, '')\n if (path.includes('orionjs/packages')) {\n return path.replace(/^.+\\/orionjs\\/packages\\//, '@orion-js/')\n }\n\n if (path.includes('node_modules/@orion-js/')) {\n const after = path.split('node_modules/@orion-js/')[1]\n const onlyPackageName = after.split('/')[0]\n return `@orion-js/${onlyPackageName}`\n }\n\n if (path.includes('.orion/build')) {\n return path.replace(/^.+\\.orion\\/build\\//, '')\n }\n if (path.includes('.pnpm/@orion-js+')) {\n return `@orion-js/${path.split('.pnpm/@orion-js+')[1].split('@')[0]}`\n }\n if (path.includes('/node_modules/@')) {\n const after = path.split('/node_modules/')[1]\n const parts = after.split('/')\n return `${parts[0]}/${parts[1]}`\n }\n if (path.includes('/node_modules/')) {\n const after = path.split('/node_modules/')[1]\n const parts = after.split('/')\n return `${parts[0]}`\n }\n return path\n}\n"],"mappings":"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","names":["winston","import_winston","opentelemetry","metadata","util","import_winston","transports","winstonCreateLogger","logger","module","metadata"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/formats/consoleFormats.ts","../src/formats/winstonFormats.ts","../src/asyncContext.ts","../src/formats/getAsyncContextLabel.ts","../src/formats/getMetadataText.ts","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js","../src/formats/formatStack.ts","../src/formats/enrichWithAsyncContext.ts","../src/logger.ts","../src/helpers/getFileName.ts"],"sourcesContent":["import winston from 'winston'\n\nexport * from './formats'\nexport * from './logger'\nexport * from './types'\nexport * from './asyncContext'\n\nexport {winston}\n","import {format, transports} from 'winston'\nimport {opentelemetryContext, metaError, asyncContextFormat} from './winstonFormats'\nimport {getMetadataText} from './getMetadataText'\nimport {formatStack} from './formatStack'\nimport {enrichWithAsyncContext} from './enrichWithAsyncContext'\n\nconst {metadata, timestamp, json, colorize, combine, printf} = format\n\nexport const textConsoleFormat: any = combine(\n colorize(),\n metadata({fillExcept: ['fileName', 'level', 'message', 'stack']}),\n opentelemetryContext(),\n asyncContextFormat(),\n metaError(),\n timestamp(),\n printf((info: any) => {\n const date = new Date(info.timestamp)\n const timeLabel = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`\n const fileNameLabel = info.fileName ? `[${info.fileName}]` : ''\n const stack = info.stack ? formatStack(info.stack) : ''\n const value = getMetadataText(info.metadata)\n const traceId = info.trace_id\n ? `${String(info.trace_id).substring(0, 8)}@${String(info.span_id).substring(0, 8)}`\n : ''\n const context = [info.context, traceId].filter(Boolean).join(' ').trim()\n const contextLabel = context ? `[${context}]` : ''\n return [\n `[${info.level}]`,\n `[${timeLabel}]`,\n contextLabel,\n fileNameLabel,\n info.message,\n value,\n stack,\n ]\n .filter(Boolean)\n .join(' ')\n }),\n)\n\nexport const textConsoleTransport = new transports.Console({\n handleExceptions: true,\n format: textConsoleFormat,\n})\n\nexport const jsonConsoleFormat: any = combine(\n metadata({fillExcept: ['fileName', 'level', 'message']}),\n opentelemetryContext(),\n enrichWithAsyncContext(),\n metaError(),\n timestamp(),\n json(),\n)\n\nexport const jsonConsoleTransport = new transports.Console({\n handleExceptions: true,\n format: jsonConsoleFormat,\n})\n","import {format, Logform} from 'winston'\nimport opentelemetry, {Span} from '@opentelemetry/api'\nimport {getAsyncContextLabel} from './getAsyncContextLabel'\n\nexport const opentelemetryContext: Logform.FormatWrap = format(info => {\n const activeSpan: Span & {name?: string} = opentelemetry.trace.getActiveSpan()\n if (activeSpan) {\n const spanContex = activeSpan.spanContext()\n if (activeSpan.name && !info.context) {\n info.context = activeSpan.name\n }\n const fields = {\n trace_id: spanContex.traceId,\n span_id: spanContex.spanId,\n trace_flags: `0${spanContex.traceFlags.toString(16)}`,\n }\n Object.assign(info, fields)\n }\n return info\n})\n\nexport const metaError: Logform.FormatWrap = format((info: any) => {\n if (info?.metadata?.value?.error instanceof Error) {\n info.stack = info?.metadata?.value?.error.stack\n info.errorMessage = info?.metadata?.value?.error.message\n delete info?.metadata?.value?.error\n }\n\n if (info?.metadata?.value instanceof Error) {\n info.stack = info?.metadata?.value.stack\n info.errorMessage = info?.metadata?.value.message\n delete info?.metadata?.value\n }\n\n return info\n})\n\nexport const asyncContextFormat: Logform.FormatWrap = format(info => {\n if (!info.context) {\n info.context = getAsyncContextLabel()\n }\n return info\n})\n\nexport const sentryFormat: Logform.FormatWrap = format(info => {\n const {path, label, ...extra} = info\n return {\n ...extra,\n tags: {\n path: path || '',\n request_id: label,\n },\n }\n})\n","import {AsyncLocalStorage} from 'node:async_hooks'\nimport {randomUUID} from 'node:crypto'\n\ninterface BaseOrionAsyncContext {\n contextId: string\n viewer?: unknown\n params?: unknown\n}\n\nexport interface JobAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'job'\n jobName: string\n}\n\nexport interface RouteAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'route'\n routeName: string\n pathname: string\n}\n\nexport interface ResolverAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'resolver'\n resolverName?: string\n}\n\nexport interface ModelResolverAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'modelResolver'\n modelName?: string\n modelResolverName?: string\n parentData?: unknown\n}\n\nexport interface SubscriptionAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'subscription'\n subscriptionName: string\n}\n\nexport interface EchoAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'echo'\n echoName: string\n}\n\nexport type OrionAsyncContext =\n | JobAsyncContext\n | RouteAsyncContext\n | ResolverAsyncContext\n | ModelResolverAsyncContext\n | SubscriptionAsyncContext\n | EchoAsyncContext\n\nconst storage: AsyncLocalStorage<OrionAsyncContext> = new AsyncLocalStorage()\n\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<JobAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<RouteAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<ResolverAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<ModelResolverAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<SubscriptionAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<EchoAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<OrionAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn> {\n const contextWithId = {\n contextId: randomUUID(),\n ...context,\n } as OrionAsyncContext\n return await storage.run(contextWithId, async () => {\n return await callback()\n })\n}\n\nexport const getOrionAsyncContext = (): OrionAsyncContext | undefined => {\n return storage.getStore()\n}\n\nexport const updateOrionAsyncContext = (\n context: Partial<OrionAsyncContext>,\n): OrionAsyncContext | undefined => {\n const currentContext: OrionAsyncContext | undefined = storage.getStore()\n if (!currentContext) {\n return undefined\n }\n\n Object.assign(currentContext, context)\n return currentContext\n}\n","import {getOrionAsyncContext} from '../asyncContext'\n\nexport function getAsyncContextLabel(): string {\n const asyncContext = getOrionAsyncContext()\n if (!asyncContext) return ''\n\n const {controllerType} = asyncContext\n\n switch (controllerType) {\n case 'job':\n return `${controllerType}:${asyncContext.jobName}`\n case 'route':\n return `${controllerType}:${asyncContext.pathname}`\n case 'resolver':\n return asyncContext.resolverName\n ? `${controllerType}:${asyncContext.resolverName}`\n : controllerType\n case 'modelResolver':\n return asyncContext.modelResolverName\n ? `${controllerType}:${asyncContext.modelName}:${asyncContext.modelResolverName}`\n : controllerType\n case 'subscription':\n return `${controllerType}:${asyncContext.subscriptionName}`\n case 'echo':\n return `${controllerType}:${asyncContext.echoName}`\n default:\n return controllerType\n }\n}\n","import util from 'node:util'\nimport {isEmpty} from 'rambdax'\n\nexport function getMetadataText(metadata: any): string {\n const {value, ...rest} = metadata\n if (isEmpty(rest)) {\n if (typeof value === 'undefined') return ''\n return util.inspect(value, {colors: true})\n }\n return `${util.inspect(value, {colors: true})} ${util.inspect(rest, {colors: true})}`\n}\n","export function type(input){\n if (input === null){\n return 'Null'\n } else if (input === undefined){\n return 'Undefined'\n } else if (Number.isNaN(input)){\n return 'NaN'\n }\n const typeResult = Object.prototype.toString.call(input).slice(8, -1)\n\n return typeResult === 'AsyncFunction' ? 'Promise' : typeResult\n}\n","import { type } from './type.js'\n\nexport function isEmpty(input){\n const inputType = type(input)\n if ([ 'Undefined', 'NaN', 'Number', 'Null' ].includes(inputType))\n return false\n if (!input) return true\n\n if (inputType === 'Object'){\n return Object.keys(input).length === 0\n }\n\n if (inputType === 'Array'){\n return input.length === 0\n }\n\n return false\n}\n","export function formatStack(stack: string): string {\n if (!stack) return ''\n\n const lines = stack.split('\\n')\n const errorLine = lines[0]\n const stackLines = lines.slice(1)\n\n // ANSI codes\n const dim = '\\x1b[2m'\n const reset = '\\x1b[0m'\n const cyan = '\\x1b[36m'\n const yellow = '\\x1b[33m'\n const gray = '\\x1b[90m'\n\n const formattedStackLines = stackLines.map(line => {\n if (!line.trim()) return ''\n\n // Match different stack trace formats\n // Format: at functionName (path/file.ts:line:col)\n const match1 = line.match(/^(\\s+at\\s+)(.+?)(\\s+\\()([^)]+)(\\))/)\n if (match1) {\n const [, atSpace, funcName, openParen, filePath, closeParen] = match1\n const fileMatch = filePath.match(/^(.*):(\\d+):(\\d+)$/)\n if (fileMatch) {\n const [, file, lineNum, colNum] = fileMatch\n return `${gray} ${atSpace}${reset}${dim}${funcName}${reset} ${gray}${openParen}${cyan}${file}${gray}:${yellow}${lineNum}:${colNum}${gray}${closeParen}${reset}`\n }\n }\n\n // Format: at path/file.ts:line:col\n const match2 = line.match(/^(\\s+at\\s+)([^(]+):(\\d+):(\\d+)/)\n if (match2) {\n const [, atSpace, file, lineNum, colNum] = match2\n return `${gray} ${atSpace}${cyan}${file}${gray}:${yellow}${lineNum}:${colNum}${reset}`\n }\n\n // Default: just dim the whole line\n return `${gray} ${line.trim()}${reset}`\n })\n\n return `\\n${errorLine}\\n${formattedStackLines.filter(Boolean).join('\\n')}`\n}\n","import {format, Logform} from 'winston'\nimport {getOrionAsyncContext} from '../asyncContext'\n\nexport const enrichWithAsyncContext: Logform.FormatWrap = format(info => {\n const asyncContext = getOrionAsyncContext()\n if (!asyncContext) return info\n\n const contextData: any = {\n controllerType: asyncContext.controllerType,\n contextId: asyncContext.contextId,\n }\n\n // Add controller-specific fields\n switch (asyncContext.controllerType) {\n case 'job':\n contextData.jobName = asyncContext.jobName\n break\n case 'route':\n contextData.routeName = asyncContext.routeName\n contextData.pathname = asyncContext.pathname\n break\n case 'resolver':\n if (asyncContext.resolverName) {\n contextData.resolverName = asyncContext.resolverName\n }\n break\n case 'modelResolver':\n if (asyncContext.modelName) {\n contextData.modelName = asyncContext.modelName\n }\n if (asyncContext.modelResolverName) {\n contextData.modelResolverName = asyncContext.modelResolverName\n }\n break\n case 'subscription':\n contextData.subscriptionName = asyncContext.subscriptionName\n break\n case 'echo':\n contextData.echoName = asyncContext.echoName\n break\n }\n\n // Extract userId from viewer if available\n if (asyncContext.viewer && typeof asyncContext.viewer === 'object') {\n const viewer = asyncContext.viewer as any\n if (viewer.userId) {\n contextData.userId = viewer.userId\n } else if (viewer._id) {\n contextData.userId = viewer._id\n } else if (viewer.id) {\n contextData.userId = viewer.id\n }\n }\n\n info.asyncContext = contextData\n\n return info\n})\n","import winston, {createLogger as winstonCreateLogger, config, format} from 'winston'\nimport {jsonConsoleTransport, textConsoleTransport} from './formats'\nimport {getFileName} from './helpers/getFileName'\nimport {OrionLogger} from './types'\n\nconst transports: winston.transport[] = [\n process.env.NODE_ENV !== 'production' || process.env.ORION_DEV || process.env.JEST_WORKER_ID\n ? textConsoleTransport\n : jsonConsoleTransport,\n]\n\nexport const winstonLogger = winstonCreateLogger({\n levels: config.npm.levels,\n handleExceptions: true,\n format: format.errors({stack: true}),\n transports: transports,\n})\n\nexport const configureLogger = (options: winston.LoggerOptions) => {\n return winstonLogger.configure(options)\n}\n\nexport const setLogLevel = (level: string) => {\n winstonLogger.level = level\n}\n\nexport const addTransport = (transport: winston.transport) => {\n return winstonLogger.add(transport)\n}\n\nexport const getLogger = (context: string) => {\n return winstonLogger.child({context})\n}\n\nconst createLogger = (logger: winston.Logger): OrionLogger => {\n return {\n debug: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.debug({message, fileName, value})\n },\n info: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.info({message, fileName, value})\n },\n warn: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.warn({message, fileName, value})\n },\n error: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.error({message, fileName, value})\n },\n addContext: (module: NodeJS.Module) => {\n if (module.id) {\n const split = String(module.id).split('.orion/build/')\n const fileName = split.length > 1 ? split[1] : split[0]\n return createLogger(logger.child({fileName}))\n }\n return createLogger(logger.child({}))\n },\n addMetadata: (metadata: any) => {\n return createLogger(logger.child(metadata))\n },\n }\n}\n\nexport const logger = createLogger(winstonLogger)\n","export const getFileName = () => {\n try {\n const stack = new Error().stack\n const lines = stack.split('\\n')\n const filePath = lines[3].split('(')[1].split(')')[0]\n return improveFileName(filePath)\n } catch {\n return\n }\n}\n\nexport const improveFileName = (path: string) => {\n path = path.replace(`${process.cwd()}/`, '')\n if (path.includes('orionjs/packages')) {\n return path.replace(/^.+\\/orionjs\\/packages\\//, '@orion-js/')\n }\n\n if (path.includes('node_modules/@orion-js/')) {\n const after = path.split('node_modules/@orion-js/')[1]\n const onlyPackageName = after.split('/')[0]\n return `@orion-js/${onlyPackageName}`\n }\n\n if (path.includes('.orion/build')) {\n return path.replace(/^.+\\.orion\\/build\\//, '')\n }\n if (path.includes('.pnpm/@orion-js+')) {\n return `@orion-js/${path.split('.pnpm/@orion-js+')[1].split('@')[0]}`\n }\n if (path.includes('/node_modules/@')) {\n const after = path.split('/node_modules/')[1]\n const parts = after.split('/')\n return `${parts[0]}/${parts[1]}`\n }\n if (path.includes('/node_modules/')) {\n const after = path.split('/node_modules/')[1]\n const parts = after.split('/')\n return `${parts[0]}`\n }\n return path\n}\n"],"mappings":"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","names":["winston","import_winston","import_winston","opentelemetry","metadata","util","import_winston","import_winston","transports","winstonCreateLogger","logger","module","metadata"]}
package/dist/index.d.cts CHANGED
@@ -1,12 +1,13 @@
1
- import winston, { transports } from 'winston';
1
+ import winston, { transports, Logform } from 'winston';
2
2
  export { default as winston } from 'winston';
3
3
 
4
- declare const sentryFormat: any;
5
4
  declare const textConsoleFormat: any;
6
5
  declare const textConsoleTransport: transports.ConsoleTransportInstance;
7
6
  declare const jsonConsoleFormat: any;
8
7
  declare const jsonConsoleTransport: transports.ConsoleTransportInstance;
9
8
 
9
+ declare const sentryFormat: Logform.FormatWrap;
10
+
10
11
  type LogFunction = (message: string, metadata?: any) => void;
11
12
  interface OrionLogger {
12
13
  debug: LogFunction;
@@ -24,4 +25,46 @@ declare const addTransport: (transport: winston.transport) => winston.Logger;
24
25
  declare const getLogger: (context: string) => winston.Logger;
25
26
  declare const logger: OrionLogger;
26
27
 
27
- export { type LogFunction, type OrionLogger, addTransport, configureLogger, getLogger, jsonConsoleFormat, jsonConsoleTransport, logger, sentryFormat, setLogLevel, textConsoleFormat, textConsoleTransport, winstonLogger };
28
+ interface BaseOrionAsyncContext {
29
+ contextId: string;
30
+ viewer?: unknown;
31
+ params?: unknown;
32
+ }
33
+ interface JobAsyncContext extends BaseOrionAsyncContext {
34
+ controllerType: 'job';
35
+ jobName: string;
36
+ }
37
+ interface RouteAsyncContext extends BaseOrionAsyncContext {
38
+ controllerType: 'route';
39
+ routeName: string;
40
+ pathname: string;
41
+ }
42
+ interface ResolverAsyncContext extends BaseOrionAsyncContext {
43
+ controllerType: 'resolver';
44
+ resolverName?: string;
45
+ }
46
+ interface ModelResolverAsyncContext extends BaseOrionAsyncContext {
47
+ controllerType: 'modelResolver';
48
+ modelName?: string;
49
+ modelResolverName?: string;
50
+ parentData?: unknown;
51
+ }
52
+ interface SubscriptionAsyncContext extends BaseOrionAsyncContext {
53
+ controllerType: 'subscription';
54
+ subscriptionName: string;
55
+ }
56
+ interface EchoAsyncContext extends BaseOrionAsyncContext {
57
+ controllerType: 'echo';
58
+ echoName: string;
59
+ }
60
+ type OrionAsyncContext = JobAsyncContext | RouteAsyncContext | ResolverAsyncContext | ModelResolverAsyncContext | SubscriptionAsyncContext | EchoAsyncContext;
61
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<JobAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
62
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<RouteAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
63
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<ResolverAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
64
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<ModelResolverAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
65
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<SubscriptionAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
66
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<EchoAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
67
+ declare const getOrionAsyncContext: () => OrionAsyncContext | undefined;
68
+ declare const updateOrionAsyncContext: (context: Partial<OrionAsyncContext>) => OrionAsyncContext | undefined;
69
+
70
+ export { type EchoAsyncContext, type JobAsyncContext, type LogFunction, type ModelResolverAsyncContext, type OrionAsyncContext, type OrionLogger, type ResolverAsyncContext, type RouteAsyncContext, type SubscriptionAsyncContext, addTransport, configureLogger, getLogger, getOrionAsyncContext, jsonConsoleFormat, jsonConsoleTransport, logger, runWithOrionAsyncContext, sentryFormat, setLogLevel, textConsoleFormat, textConsoleTransport, updateOrionAsyncContext, winstonLogger };
package/dist/index.d.ts CHANGED
@@ -1,12 +1,13 @@
1
- import winston, { transports } from 'winston';
1
+ import winston, { transports, Logform } from 'winston';
2
2
  export { default as winston } from 'winston';
3
3
 
4
- declare const sentryFormat: any;
5
4
  declare const textConsoleFormat: any;
6
5
  declare const textConsoleTransport: transports.ConsoleTransportInstance;
7
6
  declare const jsonConsoleFormat: any;
8
7
  declare const jsonConsoleTransport: transports.ConsoleTransportInstance;
9
8
 
9
+ declare const sentryFormat: Logform.FormatWrap;
10
+
10
11
  type LogFunction = (message: string, metadata?: any) => void;
11
12
  interface OrionLogger {
12
13
  debug: LogFunction;
@@ -24,4 +25,46 @@ declare const addTransport: (transport: winston.transport) => winston.Logger;
24
25
  declare const getLogger: (context: string) => winston.Logger;
25
26
  declare const logger: OrionLogger;
26
27
 
27
- export { type LogFunction, type OrionLogger, addTransport, configureLogger, getLogger, jsonConsoleFormat, jsonConsoleTransport, logger, sentryFormat, setLogLevel, textConsoleFormat, textConsoleTransport, winstonLogger };
28
+ interface BaseOrionAsyncContext {
29
+ contextId: string;
30
+ viewer?: unknown;
31
+ params?: unknown;
32
+ }
33
+ interface JobAsyncContext extends BaseOrionAsyncContext {
34
+ controllerType: 'job';
35
+ jobName: string;
36
+ }
37
+ interface RouteAsyncContext extends BaseOrionAsyncContext {
38
+ controllerType: 'route';
39
+ routeName: string;
40
+ pathname: string;
41
+ }
42
+ interface ResolverAsyncContext extends BaseOrionAsyncContext {
43
+ controllerType: 'resolver';
44
+ resolverName?: string;
45
+ }
46
+ interface ModelResolverAsyncContext extends BaseOrionAsyncContext {
47
+ controllerType: 'modelResolver';
48
+ modelName?: string;
49
+ modelResolverName?: string;
50
+ parentData?: unknown;
51
+ }
52
+ interface SubscriptionAsyncContext extends BaseOrionAsyncContext {
53
+ controllerType: 'subscription';
54
+ subscriptionName: string;
55
+ }
56
+ interface EchoAsyncContext extends BaseOrionAsyncContext {
57
+ controllerType: 'echo';
58
+ echoName: string;
59
+ }
60
+ type OrionAsyncContext = JobAsyncContext | RouteAsyncContext | ResolverAsyncContext | ModelResolverAsyncContext | SubscriptionAsyncContext | EchoAsyncContext;
61
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<JobAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
62
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<RouteAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
63
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<ResolverAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
64
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<ModelResolverAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
65
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<SubscriptionAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
66
+ declare function runWithOrionAsyncContext<TReturn>(context: Omit<EchoAsyncContext, 'contextId'>, callback: () => Promise<TReturn> | TReturn): Promise<TReturn>;
67
+ declare const getOrionAsyncContext: () => OrionAsyncContext | undefined;
68
+ declare const updateOrionAsyncContext: (context: Partial<OrionAsyncContext>) => OrionAsyncContext | undefined;
69
+
70
+ export { type EchoAsyncContext, type JobAsyncContext, type LogFunction, type ModelResolverAsyncContext, type OrionAsyncContext, type OrionLogger, type ResolverAsyncContext, type RouteAsyncContext, type SubscriptionAsyncContext, addTransport, configureLogger, getLogger, getOrionAsyncContext, jsonConsoleFormat, jsonConsoleTransport, logger, runWithOrionAsyncContext, sentryFormat, setLogLevel, textConsoleFormat, textConsoleTransport, updateOrionAsyncContext, winstonLogger };
package/dist/index.js CHANGED
@@ -1,41 +1,62 @@
1
1
  // src/index.ts
2
2
  import winston2 from "winston";
3
3
 
4
- // src/formats.ts
5
- import { format, transports } from "winston";
6
- import util from "util";
4
+ // src/formats/consoleFormats.ts
5
+ import { format as format3, transports } from "winston";
7
6
 
8
- // ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js
9
- function type(input) {
10
- if (input === null) {
11
- return "Null";
12
- } else if (input === void 0) {
13
- return "Undefined";
14
- } else if (Number.isNaN(input)) {
15
- return "NaN";
16
- }
17
- const typeResult = Object.prototype.toString.call(input).slice(8, -1);
18
- return typeResult === "AsyncFunction" ? "Promise" : typeResult;
19
- }
7
+ // src/formats/winstonFormats.ts
8
+ import { format } from "winston";
9
+ import opentelemetry from "@opentelemetry/api";
20
10
 
21
- // ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js
22
- function isEmpty(input) {
23
- const inputType = type(input);
24
- if (["Undefined", "NaN", "Number", "Null"].includes(inputType))
25
- return false;
26
- if (!input) return true;
27
- if (inputType === "Object") {
28
- return Object.keys(input).length === 0;
11
+ // src/asyncContext.ts
12
+ import { AsyncLocalStorage } from "async_hooks";
13
+ import { randomUUID } from "crypto";
14
+ var storage = new AsyncLocalStorage();
15
+ async function runWithOrionAsyncContext(context, callback) {
16
+ const contextWithId = {
17
+ contextId: randomUUID(),
18
+ ...context
19
+ };
20
+ return await storage.run(contextWithId, async () => {
21
+ return await callback();
22
+ });
23
+ }
24
+ var getOrionAsyncContext = () => {
25
+ return storage.getStore();
26
+ };
27
+ var updateOrionAsyncContext = (context) => {
28
+ const currentContext = storage.getStore();
29
+ if (!currentContext) {
30
+ return void 0;
29
31
  }
30
- if (inputType === "Array") {
31
- return input.length === 0;
32
+ Object.assign(currentContext, context);
33
+ return currentContext;
34
+ };
35
+
36
+ // src/formats/getAsyncContextLabel.ts
37
+ function getAsyncContextLabel() {
38
+ const asyncContext = getOrionAsyncContext();
39
+ if (!asyncContext) return "";
40
+ const { controllerType } = asyncContext;
41
+ switch (controllerType) {
42
+ case "job":
43
+ return `${controllerType}:${asyncContext.jobName}`;
44
+ case "route":
45
+ return `${controllerType}:${asyncContext.pathname}`;
46
+ case "resolver":
47
+ return asyncContext.resolverName ? `${controllerType}:${asyncContext.resolverName}` : controllerType;
48
+ case "modelResolver":
49
+ return asyncContext.modelResolverName ? `${controllerType}:${asyncContext.modelName}:${asyncContext.modelResolverName}` : controllerType;
50
+ case "subscription":
51
+ return `${controllerType}:${asyncContext.subscriptionName}`;
52
+ case "echo":
53
+ return `${controllerType}:${asyncContext.echoName}`;
54
+ default:
55
+ return controllerType;
32
56
  }
33
- return false;
34
57
  }
35
58
 
36
- // src/formats.ts
37
- import opentelemetry from "@opentelemetry/api";
38
- var { metadata, timestamp, json, colorize, combine, printf } = format;
59
+ // src/formats/winstonFormats.ts
39
60
  var opentelemetryContext = format((info) => {
40
61
  const activeSpan = opentelemetry.trace.getActiveSpan();
41
62
  if (activeSpan) {
@@ -66,6 +87,12 @@ var metaError = format((info) => {
66
87
  }
67
88
  return info;
68
89
  });
90
+ var asyncContextFormat = format((info) => {
91
+ if (!info.context) {
92
+ info.context = getAsyncContextLabel();
93
+ }
94
+ return info;
95
+ });
69
96
  var sentryFormat = format((info) => {
70
97
  const { path, label, ...extra } = info;
71
98
  return {
@@ -76,26 +103,147 @@ var sentryFormat = format((info) => {
76
103
  }
77
104
  };
78
105
  });
106
+
107
+ // src/formats/getMetadataText.ts
108
+ import util from "util";
109
+
110
+ // ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js
111
+ function type(input) {
112
+ if (input === null) {
113
+ return "Null";
114
+ } else if (input === void 0) {
115
+ return "Undefined";
116
+ } else if (Number.isNaN(input)) {
117
+ return "NaN";
118
+ }
119
+ const typeResult = Object.prototype.toString.call(input).slice(8, -1);
120
+ return typeResult === "AsyncFunction" ? "Promise" : typeResult;
121
+ }
122
+
123
+ // ../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js
124
+ function isEmpty(input) {
125
+ const inputType = type(input);
126
+ if (["Undefined", "NaN", "Number", "Null"].includes(inputType))
127
+ return false;
128
+ if (!input) return true;
129
+ if (inputType === "Object") {
130
+ return Object.keys(input).length === 0;
131
+ }
132
+ if (inputType === "Array") {
133
+ return input.length === 0;
134
+ }
135
+ return false;
136
+ }
137
+
138
+ // src/formats/getMetadataText.ts
79
139
  function getMetadataText(metadata2) {
80
140
  const { value, ...rest } = metadata2;
81
141
  if (isEmpty(rest)) {
82
142
  if (typeof value === "undefined") return "";
83
- return util.inspect(value);
143
+ return util.inspect(value, { colors: true });
84
144
  }
85
- return `${util.inspect(value)} ${util.inspect(rest)}`;
145
+ return `${util.inspect(value, { colors: true })} ${util.inspect(rest, { colors: true })}`;
146
+ }
147
+
148
+ // src/formats/formatStack.ts
149
+ function formatStack(stack) {
150
+ if (!stack) return "";
151
+ const lines = stack.split("\n");
152
+ const errorLine = lines[0];
153
+ const stackLines = lines.slice(1);
154
+ const dim = "\x1B[2m";
155
+ const reset = "\x1B[0m";
156
+ const cyan = "\x1B[36m";
157
+ const yellow = "\x1B[33m";
158
+ const gray = "\x1B[90m";
159
+ const formattedStackLines = stackLines.map((line) => {
160
+ if (!line.trim()) return "";
161
+ const match1 = line.match(/^(\s+at\s+)(.+?)(\s+\()([^)]+)(\))/);
162
+ if (match1) {
163
+ const [, atSpace, funcName, openParen, filePath, closeParen] = match1;
164
+ const fileMatch = filePath.match(/^(.*):(\d+):(\d+)$/);
165
+ if (fileMatch) {
166
+ const [, file, lineNum, colNum] = fileMatch;
167
+ return `${gray} ${atSpace}${reset}${dim}${funcName}${reset} ${gray}${openParen}${cyan}${file}${gray}:${yellow}${lineNum}:${colNum}${gray}${closeParen}${reset}`;
168
+ }
169
+ }
170
+ const match2 = line.match(/^(\s+at\s+)([^(]+):(\d+):(\d+)/);
171
+ if (match2) {
172
+ const [, atSpace, file, lineNum, colNum] = match2;
173
+ return `${gray} ${atSpace}${cyan}${file}${gray}:${yellow}${lineNum}:${colNum}${reset}`;
174
+ }
175
+ return `${gray} ${line.trim()}${reset}`;
176
+ });
177
+ return `
178
+ ${errorLine}
179
+ ${formattedStackLines.filter(Boolean).join("\n")}`;
86
180
  }
181
+
182
+ // src/formats/enrichWithAsyncContext.ts
183
+ import { format as format2 } from "winston";
184
+ var enrichWithAsyncContext = format2((info) => {
185
+ const asyncContext = getOrionAsyncContext();
186
+ if (!asyncContext) return info;
187
+ const contextData = {
188
+ controllerType: asyncContext.controllerType,
189
+ contextId: asyncContext.contextId
190
+ };
191
+ switch (asyncContext.controllerType) {
192
+ case "job":
193
+ contextData.jobName = asyncContext.jobName;
194
+ break;
195
+ case "route":
196
+ contextData.routeName = asyncContext.routeName;
197
+ contextData.pathname = asyncContext.pathname;
198
+ break;
199
+ case "resolver":
200
+ if (asyncContext.resolverName) {
201
+ contextData.resolverName = asyncContext.resolverName;
202
+ }
203
+ break;
204
+ case "modelResolver":
205
+ if (asyncContext.modelName) {
206
+ contextData.modelName = asyncContext.modelName;
207
+ }
208
+ if (asyncContext.modelResolverName) {
209
+ contextData.modelResolverName = asyncContext.modelResolverName;
210
+ }
211
+ break;
212
+ case "subscription":
213
+ contextData.subscriptionName = asyncContext.subscriptionName;
214
+ break;
215
+ case "echo":
216
+ contextData.echoName = asyncContext.echoName;
217
+ break;
218
+ }
219
+ if (asyncContext.viewer && typeof asyncContext.viewer === "object") {
220
+ const viewer = asyncContext.viewer;
221
+ if (viewer.userId) {
222
+ contextData.userId = viewer.userId;
223
+ } else if (viewer._id) {
224
+ contextData.userId = viewer._id;
225
+ } else if (viewer.id) {
226
+ contextData.userId = viewer.id;
227
+ }
228
+ }
229
+ info.asyncContext = contextData;
230
+ return info;
231
+ });
232
+
233
+ // src/formats/consoleFormats.ts
234
+ var { metadata, timestamp, json, colorize, combine, printf } = format3;
87
235
  var textConsoleFormat = combine(
88
236
  colorize(),
89
237
  metadata({ fillExcept: ["fileName", "level", "message", "stack"] }),
90
238
  opentelemetryContext(),
239
+ asyncContextFormat(),
91
240
  metaError(),
92
241
  timestamp(),
93
242
  printf((info) => {
94
243
  const date = new Date(info.timestamp);
95
244
  const timeLabel = `${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${date.getSeconds().toString().padStart(2, "0")}`;
96
245
  const fileNameLabel = info.fileName ? `[${info.fileName}]` : "";
97
- const stack = info.stack ? `
98
- ${info.stack}` : "";
246
+ const stack = info.stack ? formatStack(info.stack) : "";
99
247
  const value = getMetadataText(info.metadata);
100
248
  const traceId = info.trace_id ? `${String(info.trace_id).substring(0, 8)}@${String(info.span_id).substring(0, 8)}` : "";
101
249
  const context = [info.context, traceId].filter(Boolean).join(" ").trim();
@@ -118,6 +266,7 @@ var textConsoleTransport = new transports.Console({
118
266
  var jsonConsoleFormat = combine(
119
267
  metadata({ fillExcept: ["fileName", "level", "message"] }),
120
268
  opentelemetryContext(),
269
+ enrichWithAsyncContext(),
121
270
  metaError(),
122
271
  timestamp(),
123
272
  json()
@@ -128,7 +277,7 @@ var jsonConsoleTransport = new transports.Console({
128
277
  });
129
278
 
130
279
  // src/logger.ts
131
- import { createLogger as winstonCreateLogger, config, format as format2 } from "winston";
280
+ import { createLogger as winstonCreateLogger, config, format as format4 } from "winston";
132
281
 
133
282
  // src/helpers/getFileName.ts
134
283
  var getFileName = () => {
@@ -177,7 +326,7 @@ var transports2 = [
177
326
  var winstonLogger = winstonCreateLogger({
178
327
  levels: config.npm.levels,
179
328
  handleExceptions: true,
180
- format: format2.errors({ stack: true }),
329
+ format: format4.errors({ stack: true }),
181
330
  transports: transports2
182
331
  });
183
332
  var configureLogger = (options) => {
@@ -228,13 +377,16 @@ export {
228
377
  addTransport,
229
378
  configureLogger,
230
379
  getLogger,
380
+ getOrionAsyncContext,
231
381
  jsonConsoleFormat,
232
382
  jsonConsoleTransport,
233
383
  logger,
384
+ runWithOrionAsyncContext,
234
385
  sentryFormat,
235
386
  setLogLevel,
236
387
  textConsoleFormat,
237
388
  textConsoleTransport,
389
+ updateOrionAsyncContext,
238
390
  winston2 as winston,
239
391
  winstonLogger
240
392
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/formats.ts","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js","../src/logger.ts","../src/helpers/getFileName.ts"],"sourcesContent":["import winston from 'winston'\n\nexport * from './formats'\nexport * from './logger'\nexport * from './types'\n\nexport {winston}\n","import {format, transports} from 'winston'\nimport util from 'node:util'\nimport {isEmpty} from 'rambdax'\nimport opentelemetry, {Span} from '@opentelemetry/api'\n\nconst {metadata, timestamp, json, colorize, combine, printf} = format\n\nconst opentelemetryContext = format(info => {\n const activeSpan: Span & {name?: string} = opentelemetry.trace.getActiveSpan()\n if (activeSpan) {\n const spanContex = activeSpan.spanContext()\n if (activeSpan.name && !info.context) {\n info.context = activeSpan.name\n }\n const fields = {\n trace_id: spanContex.traceId,\n span_id: spanContex.spanId,\n trace_flags: `0${spanContex.traceFlags.toString(16)}`,\n }\n Object.assign(info, fields)\n }\n return info\n})\n\nconst metaError = format((info: any) => {\n if (info?.metadata?.value?.error instanceof Error) {\n info.stack = info?.metadata?.value?.error.stack\n info.errorMessage = info?.metadata?.value?.error.message\n delete info?.metadata?.value?.error\n }\n\n if (info?.metadata?.value instanceof Error) {\n info.stack = info?.metadata?.value.stack\n info.errorMessage = info?.metadata?.value.message\n delete info?.metadata?.value\n }\n\n return info\n})\n\nexport const sentryFormat: any = format(info => {\n const {path, label, ...extra} = info\n return {\n ...extra,\n tags: {\n path: path || '',\n request_id: label,\n },\n }\n})\n\nfunction getMetadataText(metadata: any) {\n const {value, ...rest} = metadata\n if (isEmpty(rest)) {\n if (typeof value === 'undefined') return ''\n return util.inspect(value)\n }\n return `${util.inspect(value)} ${util.inspect(rest)}`\n}\n\nexport const textConsoleFormat: any = combine(\n colorize(),\n metadata({fillExcept: ['fileName', 'level', 'message', 'stack']}),\n opentelemetryContext(),\n metaError(),\n timestamp(),\n printf((info: any) => {\n // console.log(info)\n\n const date = new Date(info.timestamp)\n const timeLabel = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`\n const fileNameLabel = info.fileName ? `[${info.fileName}]` : ''\n const stack = info.stack ? `\\n${info.stack}` : ''\n const value = getMetadataText(info.metadata)\n const traceId = info.trace_id\n ? `${String(info.trace_id).substring(0, 8)}@${String(info.span_id).substring(0, 8)}`\n : ''\n const context = [info.context, traceId].filter(Boolean).join(' ').trim()\n const contextLabel = context ? `[${context}]` : ''\n return [\n `[${info.level}]`,\n `[${timeLabel}]`,\n contextLabel,\n fileNameLabel,\n info.message,\n value,\n stack,\n ]\n .filter(Boolean)\n .join(' ')\n }),\n)\n\nexport const textConsoleTransport = new transports.Console({\n handleExceptions: true,\n format: textConsoleFormat,\n})\n\nexport const jsonConsoleFormat: any = combine(\n metadata({fillExcept: ['fileName', 'level', 'message']}),\n opentelemetryContext(),\n metaError(),\n timestamp(),\n json(),\n)\n\nexport const jsonConsoleTransport = new transports.Console({\n handleExceptions: true,\n format: jsonConsoleFormat,\n})\n","export function type(input){\n if (input === null){\n return 'Null'\n } else if (input === undefined){\n return 'Undefined'\n } else if (Number.isNaN(input)){\n return 'NaN'\n }\n const typeResult = Object.prototype.toString.call(input).slice(8, -1)\n\n return typeResult === 'AsyncFunction' ? 'Promise' : typeResult\n}\n","import { type } from './type.js'\n\nexport function isEmpty(input){\n const inputType = type(input)\n if ([ 'Undefined', 'NaN', 'Number', 'Null' ].includes(inputType))\n return false\n if (!input) return true\n\n if (inputType === 'Object'){\n return Object.keys(input).length === 0\n }\n\n if (inputType === 'Array'){\n return input.length === 0\n }\n\n return false\n}\n","import winston, {createLogger as winstonCreateLogger, config, format} from 'winston'\nimport {jsonConsoleTransport, textConsoleTransport} from './formats'\nimport {getFileName} from './helpers/getFileName'\nimport {OrionLogger} from './types'\n\nconst transports: winston.transport[] = [\n process.env.NODE_ENV !== 'production' || process.env.ORION_DEV || process.env.JEST_WORKER_ID\n ? textConsoleTransport\n : jsonConsoleTransport,\n]\n\nexport const winstonLogger = winstonCreateLogger({\n levels: config.npm.levels,\n handleExceptions: true,\n format: format.errors({stack: true}),\n transports: transports,\n})\n\nexport const configureLogger = (options: winston.LoggerOptions) => {\n return winstonLogger.configure(options)\n}\n\nexport const setLogLevel = (level: string) => {\n winstonLogger.level = level\n}\n\nexport const addTransport = (transport: winston.transport) => {\n return winstonLogger.add(transport)\n}\n\nexport const getLogger = (context: string) => {\n return winstonLogger.child({context})\n}\n\nconst createLogger = (logger: winston.Logger): OrionLogger => {\n return {\n debug: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.debug({message, fileName, value})\n },\n info: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.info({message, fileName, value})\n },\n warn: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.warn({message, fileName, value})\n },\n error: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.error({message, fileName, value})\n },\n addContext: (module: NodeJS.Module) => {\n if (module.id) {\n const split = String(module.id).split('.orion/build/')\n const fileName = split.length > 1 ? split[1] : split[0]\n return createLogger(logger.child({fileName}))\n }\n return createLogger(logger.child({}))\n },\n addMetadata: (metadata: any) => {\n return createLogger(logger.child(metadata))\n },\n }\n}\n\nexport const logger = createLogger(winstonLogger)\n","export const getFileName = () => {\n try {\n const stack = new Error().stack\n const lines = stack.split('\\n')\n const filePath = lines[3].split('(')[1].split(')')[0]\n return improveFileName(filePath)\n } catch {\n return\n }\n}\n\nexport const improveFileName = (path: string) => {\n path = path.replace(`${process.cwd()}/`, '')\n if (path.includes('orionjs/packages')) {\n return path.replace(/^.+\\/orionjs\\/packages\\//, '@orion-js/')\n }\n\n if (path.includes('node_modules/@orion-js/')) {\n const after = path.split('node_modules/@orion-js/')[1]\n const onlyPackageName = after.split('/')[0]\n return `@orion-js/${onlyPackageName}`\n }\n\n if (path.includes('.orion/build')) {\n return path.replace(/^.+\\.orion\\/build\\//, '')\n }\n if (path.includes('.pnpm/@orion-js+')) {\n return `@orion-js/${path.split('.pnpm/@orion-js+')[1].split('@')[0]}`\n }\n if (path.includes('/node_modules/@')) {\n const after = path.split('/node_modules/')[1]\n const parts = after.split('/')\n return `${parts[0]}/${parts[1]}`\n }\n if (path.includes('/node_modules/')) {\n const after = path.split('/node_modules/')[1]\n const parts = after.split('/')\n return `${parts[0]}`\n }\n return path\n}\n"],"mappings":";AAAA,OAAOA,cAAa;;;ACApB,SAAQ,QAAQ,kBAAiB;AACjC,OAAO,UAAU;;;ACDV,SAAS,KAAK,OAAM;AACzB,MAAI,UAAU,MAAK;AACjB,WAAO;AAAA,EACT,WAAW,UAAU,QAAU;AAC7B,WAAO;AAAA,EACT,WAAW,OAAO,MAAM,KAAK,GAAE;AAC7B,WAAO;AAAA,EACT;AACA,QAAM,aAAa,OAAO,UAAU,SAAS,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE;AAEpE,SAAO,eAAe,kBAAkB,YAAY;AACtD;;;ACTO,SAAS,QAAQ,OAAM;AAC5B,QAAM,YAAY,KAAK,KAAK;AAC5B,MAAI,CAAE,aAAa,OAAO,UAAU,MAAO,EAAE,SAAS,SAAS;AAC7D,WAAO;AACT,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,cAAc,UAAS;AACzB,WAAO,OAAO,KAAK,KAAK,EAAE,WAAW;AAAA,EACvC;AAEA,MAAI,cAAc,SAAQ;AACxB,WAAO,MAAM,WAAW;AAAA,EAC1B;AAEA,SAAO;AACT;;;AFdA,OAAO,mBAA2B;AAElC,IAAM,EAAC,UAAU,WAAW,MAAM,UAAU,SAAS,OAAM,IAAI;AAE/D,IAAM,uBAAuB,OAAO,UAAQ;AAC1C,QAAM,aAAqC,cAAc,MAAM,cAAc;AAC7E,MAAI,YAAY;AACd,UAAM,aAAa,WAAW,YAAY;AAC1C,QAAI,WAAW,QAAQ,CAAC,KAAK,SAAS;AACpC,WAAK,UAAU,WAAW;AAAA,IAC5B;AACA,UAAM,SAAS;AAAA,MACb,UAAU,WAAW;AAAA,MACrB,SAAS,WAAW;AAAA,MACpB,aAAa,IAAI,WAAW,WAAW,SAAS,EAAE,CAAC;AAAA,IACrD;AACA,WAAO,OAAO,MAAM,MAAM;AAAA,EAC5B;AACA,SAAO;AACT,CAAC;AAED,IAAM,YAAY,OAAO,CAAC,SAAc;AAxBxC;AAyBE,QAAI,wCAAM,aAAN,mBAAgB,UAAhB,mBAAuB,kBAAiB,OAAO;AACjD,SAAK,SAAQ,wCAAM,aAAN,mBAAgB,UAAhB,mBAAuB,MAAM;AAC1C,SAAK,gBAAe,wCAAM,aAAN,mBAAgB,UAAhB,mBAAuB,MAAM;AACjD,WAAO,kCAAM,aAAN,mBAAgB,UAAvB,wBAA8B;AAAA,EAChC;AAEA,QAAI,kCAAM,aAAN,mBAAgB,kBAAiB,OAAO;AAC1C,SAAK,SAAQ,kCAAM,aAAN,mBAAgB,MAAM;AACnC,SAAK,gBAAe,kCAAM,aAAN,mBAAgB,MAAM;AAC1C,UAAO,6BAAM,aAAb,wBAAuB;AAAA,EACzB;AAEA,SAAO;AACT,CAAC;AAEM,IAAM,eAAoB,OAAO,UAAQ;AAC9C,QAAM,EAAC,MAAM,OAAO,GAAG,MAAK,IAAI;AAChC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM;AAAA,MACJ,MAAM,QAAQ;AAAA,MACd,YAAY;AAAA,IACd;AAAA,EACF;AACF,CAAC;AAED,SAAS,gBAAgBC,WAAe;AACtC,QAAM,EAAC,OAAO,GAAG,KAAI,IAAIA;AACzB,MAAI,QAAQ,IAAI,GAAG;AACjB,QAAI,OAAO,UAAU,YAAa,QAAO;AACzC,WAAO,KAAK,QAAQ,KAAK;AAAA,EAC3B;AACA,SAAO,GAAG,KAAK,QAAQ,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC;AACrD;AAEO,IAAM,oBAAyB;AAAA,EACpC,SAAS;AAAA,EACT,SAAS,EAAC,YAAY,CAAC,YAAY,SAAS,WAAW,OAAO,EAAC,CAAC;AAAA,EAChE,qBAAqB;AAAA,EACrB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO,CAAC,SAAc;AAGpB,UAAM,OAAO,IAAI,KAAK,KAAK,SAAS;AACpC,UAAM,YAAY,GAAG,KAAK,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAClK,UAAM,gBAAgB,KAAK,WAAW,IAAI,KAAK,QAAQ,MAAM;AAC7D,UAAM,QAAQ,KAAK,QAAQ;AAAA,EAAK,KAAK,KAAK,KAAK;AAC/C,UAAM,QAAQ,gBAAgB,KAAK,QAAQ;AAC3C,UAAM,UAAU,KAAK,WACjB,GAAG,OAAO,KAAK,QAAQ,EAAE,UAAU,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,KAChF;AACJ,UAAM,UAAU,CAAC,KAAK,SAAS,OAAO,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK;AACvE,UAAM,eAAe,UAAU,IAAI,OAAO,MAAM;AAChD,WAAO;AAAA,MACL,IAAI,KAAK,KAAK;AAAA,MACd,IAAI,SAAS;AAAA,MACb;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,EACb,CAAC;AACH;AAEO,IAAM,uBAAuB,IAAI,WAAW,QAAQ;AAAA,EACzD,kBAAkB;AAAA,EAClB,QAAQ;AACV,CAAC;AAEM,IAAM,oBAAyB;AAAA,EACpC,SAAS,EAAC,YAAY,CAAC,YAAY,SAAS,SAAS,EAAC,CAAC;AAAA,EACvD,qBAAqB;AAAA,EACrB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,KAAK;AACP;AAEO,IAAM,uBAAuB,IAAI,WAAW,QAAQ;AAAA,EACzD,kBAAkB;AAAA,EAClB,QAAQ;AACV,CAAC;;;AG7GD,SAAiB,gBAAgB,qBAAqB,QAAQ,UAAAC,eAAa;;;ACApE,IAAM,cAAc,MAAM;AAC/B,MAAI;AACF,UAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,UAAM,QAAQ,MAAM,MAAM,IAAI;AAC9B,UAAM,WAAW,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AACpD,WAAO,gBAAgB,QAAQ;AAAA,EACjC,QAAQ;AACN;AAAA,EACF;AACF;AAEO,IAAM,kBAAkB,CAAC,SAAiB;AAC/C,SAAO,KAAK,QAAQ,GAAG,QAAQ,IAAI,CAAC,KAAK,EAAE;AAC3C,MAAI,KAAK,SAAS,kBAAkB,GAAG;AACrC,WAAO,KAAK,QAAQ,4BAA4B,YAAY;AAAA,EAC9D;AAEA,MAAI,KAAK,SAAS,yBAAyB,GAAG;AAC5C,UAAM,QAAQ,KAAK,MAAM,yBAAyB,EAAE,CAAC;AACrD,UAAM,kBAAkB,MAAM,MAAM,GAAG,EAAE,CAAC;AAC1C,WAAO,aAAa,eAAe;AAAA,EACrC;AAEA,MAAI,KAAK,SAAS,cAAc,GAAG;AACjC,WAAO,KAAK,QAAQ,uBAAuB,EAAE;AAAA,EAC/C;AACA,MAAI,KAAK,SAAS,kBAAkB,GAAG;AACrC,WAAO,aAAa,KAAK,MAAM,kBAAkB,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA,EACrE;AACA,MAAI,KAAK,SAAS,iBAAiB,GAAG;AACpC,UAAM,QAAQ,KAAK,MAAM,gBAAgB,EAAE,CAAC;AAC5C,UAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,WAAO,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAAA,EAChC;AACA,MAAI,KAAK,SAAS,gBAAgB,GAAG;AACnC,UAAM,QAAQ,KAAK,MAAM,gBAAgB,EAAE,CAAC;AAC5C,UAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,WAAO,GAAG,MAAM,CAAC,CAAC;AAAA,EACpB;AACA,SAAO;AACT;;;ADnCA,IAAMC,cAAkC;AAAA,EACtC,QAAQ,IAAI,aAAa,gBAAgB,QAAQ,IAAI,aAAa,QAAQ,IAAI,iBAC1E,uBACA;AACN;AAEO,IAAM,gBAAgB,oBAAoB;AAAA,EAC/C,QAAQ,OAAO,IAAI;AAAA,EACnB,kBAAkB;AAAA,EAClB,QAAQC,QAAO,OAAO,EAAC,OAAO,KAAI,CAAC;AAAA,EACnC,YAAYD;AACd,CAAC;AAEM,IAAM,kBAAkB,CAAC,YAAmC;AACjE,SAAO,cAAc,UAAU,OAAO;AACxC;AAEO,IAAM,cAAc,CAAC,UAAkB;AAC5C,gBAAc,QAAQ;AACxB;AAEO,IAAM,eAAe,CAAC,cAAiC;AAC5D,SAAO,cAAc,IAAI,SAAS;AACpC;AAEO,IAAM,YAAY,CAAC,YAAoB;AAC5C,SAAO,cAAc,MAAM,EAAC,QAAO,CAAC;AACtC;AAEA,IAAM,eAAe,CAACE,YAAwC;AAC5D,SAAO;AAAA,IACL,OAAO,CAAC,SAAiB,UAAe;AACtC,YAAM,WAAW,YAAY;AAC7B,aAAOA,QAAO,MAAM,EAAC,SAAS,UAAU,MAAK,CAAC;AAAA,IAChD;AAAA,IACA,MAAM,CAAC,SAAiB,UAAe;AACrC,YAAM,WAAW,YAAY;AAC7B,aAAOA,QAAO,KAAK,EAAC,SAAS,UAAU,MAAK,CAAC;AAAA,IAC/C;AAAA,IACA,MAAM,CAAC,SAAiB,UAAe;AACrC,YAAM,WAAW,YAAY;AAC7B,aAAOA,QAAO,KAAK,EAAC,SAAS,UAAU,MAAK,CAAC;AAAA,IAC/C;AAAA,IACA,OAAO,CAAC,SAAiB,UAAe;AACtC,YAAM,WAAW,YAAY;AAC7B,aAAOA,QAAO,MAAM,EAAC,SAAS,UAAU,MAAK,CAAC;AAAA,IAChD;AAAA,IACA,YAAY,CAAC,WAA0B;AACrC,UAAI,OAAO,IAAI;AACb,cAAM,QAAQ,OAAO,OAAO,EAAE,EAAE,MAAM,eAAe;AACrD,cAAM,WAAW,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC;AACtD,eAAO,aAAaA,QAAO,MAAM,EAAC,SAAQ,CAAC,CAAC;AAAA,MAC9C;AACA,aAAO,aAAaA,QAAO,MAAM,CAAC,CAAC,CAAC;AAAA,IACtC;AAAA,IACA,aAAa,CAACC,cAAkB;AAC9B,aAAO,aAAaD,QAAO,MAAMC,SAAQ,CAAC;AAAA,IAC5C;AAAA,EACF;AACF;AAEO,IAAM,SAAS,aAAa,aAAa;","names":["winston","metadata","format","transports","format","logger","metadata"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/formats/consoleFormats.ts","../src/formats/winstonFormats.ts","../src/asyncContext.ts","../src/formats/getAsyncContextLabel.ts","../src/formats/getMetadataText.ts","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/type.js","../../../node_modules/.pnpm/rambdax@11.3.1/node_modules/rambdax/src/isEmpty.js","../src/formats/formatStack.ts","../src/formats/enrichWithAsyncContext.ts","../src/logger.ts","../src/helpers/getFileName.ts"],"sourcesContent":["import winston from 'winston'\n\nexport * from './formats'\nexport * from './logger'\nexport * from './types'\nexport * from './asyncContext'\n\nexport {winston}\n","import {format, transports} from 'winston'\nimport {opentelemetryContext, metaError, asyncContextFormat} from './winstonFormats'\nimport {getMetadataText} from './getMetadataText'\nimport {formatStack} from './formatStack'\nimport {enrichWithAsyncContext} from './enrichWithAsyncContext'\n\nconst {metadata, timestamp, json, colorize, combine, printf} = format\n\nexport const textConsoleFormat: any = combine(\n colorize(),\n metadata({fillExcept: ['fileName', 'level', 'message', 'stack']}),\n opentelemetryContext(),\n asyncContextFormat(),\n metaError(),\n timestamp(),\n printf((info: any) => {\n const date = new Date(info.timestamp)\n const timeLabel = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`\n const fileNameLabel = info.fileName ? `[${info.fileName}]` : ''\n const stack = info.stack ? formatStack(info.stack) : ''\n const value = getMetadataText(info.metadata)\n const traceId = info.trace_id\n ? `${String(info.trace_id).substring(0, 8)}@${String(info.span_id).substring(0, 8)}`\n : ''\n const context = [info.context, traceId].filter(Boolean).join(' ').trim()\n const contextLabel = context ? `[${context}]` : ''\n return [\n `[${info.level}]`,\n `[${timeLabel}]`,\n contextLabel,\n fileNameLabel,\n info.message,\n value,\n stack,\n ]\n .filter(Boolean)\n .join(' ')\n }),\n)\n\nexport const textConsoleTransport = new transports.Console({\n handleExceptions: true,\n format: textConsoleFormat,\n})\n\nexport const jsonConsoleFormat: any = combine(\n metadata({fillExcept: ['fileName', 'level', 'message']}),\n opentelemetryContext(),\n enrichWithAsyncContext(),\n metaError(),\n timestamp(),\n json(),\n)\n\nexport const jsonConsoleTransport = new transports.Console({\n handleExceptions: true,\n format: jsonConsoleFormat,\n})\n","import {format, Logform} from 'winston'\nimport opentelemetry, {Span} from '@opentelemetry/api'\nimport {getAsyncContextLabel} from './getAsyncContextLabel'\n\nexport const opentelemetryContext: Logform.FormatWrap = format(info => {\n const activeSpan: Span & {name?: string} = opentelemetry.trace.getActiveSpan()\n if (activeSpan) {\n const spanContex = activeSpan.spanContext()\n if (activeSpan.name && !info.context) {\n info.context = activeSpan.name\n }\n const fields = {\n trace_id: spanContex.traceId,\n span_id: spanContex.spanId,\n trace_flags: `0${spanContex.traceFlags.toString(16)}`,\n }\n Object.assign(info, fields)\n }\n return info\n})\n\nexport const metaError: Logform.FormatWrap = format((info: any) => {\n if (info?.metadata?.value?.error instanceof Error) {\n info.stack = info?.metadata?.value?.error.stack\n info.errorMessage = info?.metadata?.value?.error.message\n delete info?.metadata?.value?.error\n }\n\n if (info?.metadata?.value instanceof Error) {\n info.stack = info?.metadata?.value.stack\n info.errorMessage = info?.metadata?.value.message\n delete info?.metadata?.value\n }\n\n return info\n})\n\nexport const asyncContextFormat: Logform.FormatWrap = format(info => {\n if (!info.context) {\n info.context = getAsyncContextLabel()\n }\n return info\n})\n\nexport const sentryFormat: Logform.FormatWrap = format(info => {\n const {path, label, ...extra} = info\n return {\n ...extra,\n tags: {\n path: path || '',\n request_id: label,\n },\n }\n})\n","import {AsyncLocalStorage} from 'node:async_hooks'\nimport {randomUUID} from 'node:crypto'\n\ninterface BaseOrionAsyncContext {\n contextId: string\n viewer?: unknown\n params?: unknown\n}\n\nexport interface JobAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'job'\n jobName: string\n}\n\nexport interface RouteAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'route'\n routeName: string\n pathname: string\n}\n\nexport interface ResolverAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'resolver'\n resolverName?: string\n}\n\nexport interface ModelResolverAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'modelResolver'\n modelName?: string\n modelResolverName?: string\n parentData?: unknown\n}\n\nexport interface SubscriptionAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'subscription'\n subscriptionName: string\n}\n\nexport interface EchoAsyncContext extends BaseOrionAsyncContext {\n controllerType: 'echo'\n echoName: string\n}\n\nexport type OrionAsyncContext =\n | JobAsyncContext\n | RouteAsyncContext\n | ResolverAsyncContext\n | ModelResolverAsyncContext\n | SubscriptionAsyncContext\n | EchoAsyncContext\n\nconst storage: AsyncLocalStorage<OrionAsyncContext> = new AsyncLocalStorage()\n\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<JobAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<RouteAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<ResolverAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<ModelResolverAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<SubscriptionAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<EchoAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn>\nexport async function runWithOrionAsyncContext<TReturn>(\n context: Omit<OrionAsyncContext, 'contextId'>,\n callback: () => Promise<TReturn> | TReturn,\n): Promise<TReturn> {\n const contextWithId = {\n contextId: randomUUID(),\n ...context,\n } as OrionAsyncContext\n return await storage.run(contextWithId, async () => {\n return await callback()\n })\n}\n\nexport const getOrionAsyncContext = (): OrionAsyncContext | undefined => {\n return storage.getStore()\n}\n\nexport const updateOrionAsyncContext = (\n context: Partial<OrionAsyncContext>,\n): OrionAsyncContext | undefined => {\n const currentContext: OrionAsyncContext | undefined = storage.getStore()\n if (!currentContext) {\n return undefined\n }\n\n Object.assign(currentContext, context)\n return currentContext\n}\n","import {getOrionAsyncContext} from '../asyncContext'\n\nexport function getAsyncContextLabel(): string {\n const asyncContext = getOrionAsyncContext()\n if (!asyncContext) return ''\n\n const {controllerType} = asyncContext\n\n switch (controllerType) {\n case 'job':\n return `${controllerType}:${asyncContext.jobName}`\n case 'route':\n return `${controllerType}:${asyncContext.pathname}`\n case 'resolver':\n return asyncContext.resolverName\n ? `${controllerType}:${asyncContext.resolverName}`\n : controllerType\n case 'modelResolver':\n return asyncContext.modelResolverName\n ? `${controllerType}:${asyncContext.modelName}:${asyncContext.modelResolverName}`\n : controllerType\n case 'subscription':\n return `${controllerType}:${asyncContext.subscriptionName}`\n case 'echo':\n return `${controllerType}:${asyncContext.echoName}`\n default:\n return controllerType\n }\n}\n","import util from 'node:util'\nimport {isEmpty} from 'rambdax'\n\nexport function getMetadataText(metadata: any): string {\n const {value, ...rest} = metadata\n if (isEmpty(rest)) {\n if (typeof value === 'undefined') return ''\n return util.inspect(value, {colors: true})\n }\n return `${util.inspect(value, {colors: true})} ${util.inspect(rest, {colors: true})}`\n}\n","export function type(input){\n if (input === null){\n return 'Null'\n } else if (input === undefined){\n return 'Undefined'\n } else if (Number.isNaN(input)){\n return 'NaN'\n }\n const typeResult = Object.prototype.toString.call(input).slice(8, -1)\n\n return typeResult === 'AsyncFunction' ? 'Promise' : typeResult\n}\n","import { type } from './type.js'\n\nexport function isEmpty(input){\n const inputType = type(input)\n if ([ 'Undefined', 'NaN', 'Number', 'Null' ].includes(inputType))\n return false\n if (!input) return true\n\n if (inputType === 'Object'){\n return Object.keys(input).length === 0\n }\n\n if (inputType === 'Array'){\n return input.length === 0\n }\n\n return false\n}\n","export function formatStack(stack: string): string {\n if (!stack) return ''\n\n const lines = stack.split('\\n')\n const errorLine = lines[0]\n const stackLines = lines.slice(1)\n\n // ANSI codes\n const dim = '\\x1b[2m'\n const reset = '\\x1b[0m'\n const cyan = '\\x1b[36m'\n const yellow = '\\x1b[33m'\n const gray = '\\x1b[90m'\n\n const formattedStackLines = stackLines.map(line => {\n if (!line.trim()) return ''\n\n // Match different stack trace formats\n // Format: at functionName (path/file.ts:line:col)\n const match1 = line.match(/^(\\s+at\\s+)(.+?)(\\s+\\()([^)]+)(\\))/)\n if (match1) {\n const [, atSpace, funcName, openParen, filePath, closeParen] = match1\n const fileMatch = filePath.match(/^(.*):(\\d+):(\\d+)$/)\n if (fileMatch) {\n const [, file, lineNum, colNum] = fileMatch\n return `${gray} ${atSpace}${reset}${dim}${funcName}${reset} ${gray}${openParen}${cyan}${file}${gray}:${yellow}${lineNum}:${colNum}${gray}${closeParen}${reset}`\n }\n }\n\n // Format: at path/file.ts:line:col\n const match2 = line.match(/^(\\s+at\\s+)([^(]+):(\\d+):(\\d+)/)\n if (match2) {\n const [, atSpace, file, lineNum, colNum] = match2\n return `${gray} ${atSpace}${cyan}${file}${gray}:${yellow}${lineNum}:${colNum}${reset}`\n }\n\n // Default: just dim the whole line\n return `${gray} ${line.trim()}${reset}`\n })\n\n return `\\n${errorLine}\\n${formattedStackLines.filter(Boolean).join('\\n')}`\n}\n","import {format, Logform} from 'winston'\nimport {getOrionAsyncContext} from '../asyncContext'\n\nexport const enrichWithAsyncContext: Logform.FormatWrap = format(info => {\n const asyncContext = getOrionAsyncContext()\n if (!asyncContext) return info\n\n const contextData: any = {\n controllerType: asyncContext.controllerType,\n contextId: asyncContext.contextId,\n }\n\n // Add controller-specific fields\n switch (asyncContext.controllerType) {\n case 'job':\n contextData.jobName = asyncContext.jobName\n break\n case 'route':\n contextData.routeName = asyncContext.routeName\n contextData.pathname = asyncContext.pathname\n break\n case 'resolver':\n if (asyncContext.resolverName) {\n contextData.resolverName = asyncContext.resolverName\n }\n break\n case 'modelResolver':\n if (asyncContext.modelName) {\n contextData.modelName = asyncContext.modelName\n }\n if (asyncContext.modelResolverName) {\n contextData.modelResolverName = asyncContext.modelResolverName\n }\n break\n case 'subscription':\n contextData.subscriptionName = asyncContext.subscriptionName\n break\n case 'echo':\n contextData.echoName = asyncContext.echoName\n break\n }\n\n // Extract userId from viewer if available\n if (asyncContext.viewer && typeof asyncContext.viewer === 'object') {\n const viewer = asyncContext.viewer as any\n if (viewer.userId) {\n contextData.userId = viewer.userId\n } else if (viewer._id) {\n contextData.userId = viewer._id\n } else if (viewer.id) {\n contextData.userId = viewer.id\n }\n }\n\n info.asyncContext = contextData\n\n return info\n})\n","import winston, {createLogger as winstonCreateLogger, config, format} from 'winston'\nimport {jsonConsoleTransport, textConsoleTransport} from './formats'\nimport {getFileName} from './helpers/getFileName'\nimport {OrionLogger} from './types'\n\nconst transports: winston.transport[] = [\n process.env.NODE_ENV !== 'production' || process.env.ORION_DEV || process.env.JEST_WORKER_ID\n ? textConsoleTransport\n : jsonConsoleTransport,\n]\n\nexport const winstonLogger = winstonCreateLogger({\n levels: config.npm.levels,\n handleExceptions: true,\n format: format.errors({stack: true}),\n transports: transports,\n})\n\nexport const configureLogger = (options: winston.LoggerOptions) => {\n return winstonLogger.configure(options)\n}\n\nexport const setLogLevel = (level: string) => {\n winstonLogger.level = level\n}\n\nexport const addTransport = (transport: winston.transport) => {\n return winstonLogger.add(transport)\n}\n\nexport const getLogger = (context: string) => {\n return winstonLogger.child({context})\n}\n\nconst createLogger = (logger: winston.Logger): OrionLogger => {\n return {\n debug: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.debug({message, fileName, value})\n },\n info: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.info({message, fileName, value})\n },\n warn: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.warn({message, fileName, value})\n },\n error: (message: string, value: any) => {\n const fileName = getFileName()\n return logger.error({message, fileName, value})\n },\n addContext: (module: NodeJS.Module) => {\n if (module.id) {\n const split = String(module.id).split('.orion/build/')\n const fileName = split.length > 1 ? split[1] : split[0]\n return createLogger(logger.child({fileName}))\n }\n return createLogger(logger.child({}))\n },\n addMetadata: (metadata: any) => {\n return createLogger(logger.child(metadata))\n },\n }\n}\n\nexport const logger = createLogger(winstonLogger)\n","export const getFileName = () => {\n try {\n const stack = new Error().stack\n const lines = stack.split('\\n')\n const filePath = lines[3].split('(')[1].split(')')[0]\n return improveFileName(filePath)\n } catch {\n return\n }\n}\n\nexport const improveFileName = (path: string) => {\n path = path.replace(`${process.cwd()}/`, '')\n if (path.includes('orionjs/packages')) {\n return path.replace(/^.+\\/orionjs\\/packages\\//, '@orion-js/')\n }\n\n if (path.includes('node_modules/@orion-js/')) {\n const after = path.split('node_modules/@orion-js/')[1]\n const onlyPackageName = after.split('/')[0]\n return `@orion-js/${onlyPackageName}`\n }\n\n if (path.includes('.orion/build')) {\n return path.replace(/^.+\\.orion\\/build\\//, '')\n }\n if (path.includes('.pnpm/@orion-js+')) {\n return `@orion-js/${path.split('.pnpm/@orion-js+')[1].split('@')[0]}`\n }\n if (path.includes('/node_modules/@')) {\n const after = path.split('/node_modules/')[1]\n const parts = after.split('/')\n return `${parts[0]}/${parts[1]}`\n }\n if (path.includes('/node_modules/')) {\n const after = path.split('/node_modules/')[1]\n const parts = after.split('/')\n return `${parts[0]}`\n }\n return path\n}\n"],"mappings":"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","names":["winston","format","metadata","format","format","format","format","transports","format","logger","metadata"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-js/logger",
3
- "version": "4.0.5",
3
+ "version": "4.1.0",
4
4
  "main": "./dist/index.cjs",
5
5
  "author": "nicolaslopezj",
6
6
  "license": "MIT",