@restura/core 1.1.1 → 1.2.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.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { SerializerFn } from 'pino';
1
+ import { TransportTargetOptions, SerializerFn, DestinationStream } from 'pino';
2
2
  import { z } from 'zod';
3
3
  import { UUID } from 'crypto';
4
4
  import * as express from 'express';
@@ -32,14 +32,11 @@ declare const loggerConfigSchema: z.ZodObject<{
32
32
  silly: "silly";
33
33
  trace: "trace";
34
34
  }>>;
35
- transports: z.ZodOptional<z.ZodArray<z.ZodObject<{
36
- target: z.ZodString;
37
- level: z.ZodOptional<z.ZodString>;
38
- options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
39
- }, z.core.$strip>>>;
35
+ transports: z.ZodOptional<z.ZodArray<z.ZodCustom<TransportTargetOptions<Record<string, any>>, TransportTargetOptions<Record<string, any>>>>>;
40
36
  serializers: z.ZodOptional<z.ZodObject<{
41
37
  err: z.ZodOptional<z.ZodCustom<ErrorSerializerFactory, ErrorSerializerFactory>>;
42
38
  }, z.core.$strip>>;
39
+ stream: z.ZodOptional<z.ZodCustom<DestinationStream, DestinationStream>>;
43
40
  }, z.core.$strip>;
44
41
  type LoggerConfigSchema = z.infer<typeof loggerConfigSchema>;
45
42
 
package/dist/index.js CHANGED
@@ -12,21 +12,20 @@ var __decorateClass = (decorators, target, key, kind) => {
12
12
  // src/logger/logger.ts
13
13
  import { config } from "@restura/internal";
14
14
  import pino from "pino";
15
+ import pinoPretty from "pino-pretty";
15
16
 
16
17
  // src/logger/loggerConfigSchema.ts
17
18
  import { z } from "zod";
18
19
  var loggerConfigSchema = z.object({
19
20
  level: z.enum(["fatal", "error", "warn", "info", "debug", "silly", "trace"]).default("info"),
20
- transports: z.array(
21
- z.object({
22
- target: z.string(),
23
- level: z.string().optional(),
24
- options: z.record(z.string(), z.unknown()).optional()
25
- })
26
- ).optional(),
21
+ transports: z.array(z.custom()).optional(),
27
22
  serializers: z.object({
28
23
  err: z.custom().optional()
29
- }).optional()
24
+ }).optional(),
25
+ stream: z.custom().optional()
26
+ }).refine((data) => !(data.transports && data.stream), {
27
+ message: "You must provide either a transports array or a stream object, but not both",
28
+ path: ["transports"]
30
29
  });
31
30
 
32
31
  // src/logger/logger.ts
@@ -41,38 +40,54 @@ var logLevelMap = {
41
40
  trace: "trace"
42
41
  };
43
42
  var currentLogLevel = logLevelMap[loggerConfig.level];
44
- var defaultTransports = [
45
- {
46
- target: "pino-pretty",
47
- options: {
48
- colorize: true,
49
- translateTime: "yyyy-mm-dd HH:MM:ss.l",
50
- ignore: "pid,hostname,_meta",
51
- // _meta allows a user to pass in metadata for JSON but not print it to the console
52
- messageFormat: "{msg}",
53
- levelFirst: true,
54
- customColors: "error:red,warn:yellow,info:green,debug:blue,trace:magenta"
55
- }
56
- }
57
- ];
58
- var baseErrSerializer = pino.stdSerializers.err;
43
+ var defaultStream = pinoPretty({
44
+ colorize: true,
45
+ translateTime: "yyyy-mm-dd HH:MM:ss.l",
46
+ ignore: "pid,hostname,_meta",
47
+ // _meta allows a user to pass in metadata for JSON but not print it to the console
48
+ messageFormat: "{msg}",
49
+ levelFirst: true,
50
+ customColors: "error:red,warn:yellow,info:green,debug:blue,trace:magenta",
51
+ destination: process.stdout
52
+ });
53
+ function isAxiosError(error) {
54
+ const isObject = (error2) => error2 !== null && typeof error2 === "object";
55
+ return isObject(error) && "isAxiosError" in error && error.isAxiosError === true;
56
+ }
57
+ var baseSerializer = pino.stdSerializers.err;
58
+ var defaultSerializer = (error) => {
59
+ if (isAxiosError(error)) {
60
+ const err = error;
61
+ return {
62
+ type: "AxiosError",
63
+ message: err.message,
64
+ stack: err.stack,
65
+ url: err.config?.url,
66
+ method: err.config?.method?.toUpperCase(),
67
+ status: err.response?.status,
68
+ responseData: err.response?.data
69
+ };
70
+ }
71
+ return baseSerializer(error);
72
+ };
59
73
  var errorSerializer = (() => {
60
74
  try {
61
- return loggerConfig.serializers?.err ? loggerConfig.serializers.err(baseErrSerializer) : baseErrSerializer;
75
+ return loggerConfig.serializers?.err ? loggerConfig.serializers.err(baseSerializer) : defaultSerializer;
62
76
  } catch (error) {
63
77
  console.error("Failed to initialize custom error serializer, falling back to default", error);
64
- return baseErrSerializer;
78
+ return defaultSerializer;
65
79
  }
66
80
  })();
67
- var pinoLogger = pino({
68
- level: currentLogLevel,
69
- transport: {
70
- targets: loggerConfig.transports ?? defaultTransports
81
+ var pinoLogger = pino(
82
+ {
83
+ level: currentLogLevel,
84
+ ...loggerConfig.transports ? { transport: { targets: loggerConfig.transports } } : {},
85
+ serializers: {
86
+ err: errorSerializer
87
+ }
71
88
  },
72
- serializers: {
73
- err: errorSerializer
74
- }
75
- });
89
+ loggerConfig.stream ? loggerConfig.stream : defaultStream
90
+ );
76
91
  function buildContext(args) {
77
92
  const ctx = {};
78
93
  const prims = [];