@beignet/provider-logger-pino 0.0.33 → 0.0.35

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @beignet/provider-logger-pino
2
2
 
3
+ ## 0.0.35
4
+
5
+ ### Patch Changes
6
+
7
+ - 397f106: Standardize framework-owned operational errors, degrade opaque OpenAPI path parameters safely, and add direct Redis, Pino, and Upstash adapters.
8
+ - 7d0c795: Expose stable named provider types while keeping private config schemas out of package declarations and preserving validated config and contributed-port inference. Drizzle's Postgres and MySQL config schema constants are now internal; use the exported config interfaces for validated shapes.
9
+
10
+ ## 0.0.34
11
+
12
+ ### Patch Changes
13
+
14
+ - 9345cc9: Stabilize the pre-1.0 public surface around factory-only providers, canonical server and testing imports, consistent memory naming, and the removal of deprecated aliases.
15
+
3
16
  ## 0.0.33
4
17
 
5
18
  ## 0.0.32
package/README.md CHANGED
@@ -10,6 +10,10 @@ Use this package when you want `ctx.ports.logger` backed by Pino while keeping
10
10
  application code dependent on the stable `LoggerPort` interface from
11
11
  `@beignet/core/ports`.
12
12
 
13
+ `createPinoLoggerProvider(...)` returns the stable `PinoLoggerProvider` type.
14
+ `LoggerPinoConfig` describes its validated config; the Zod schema remains
15
+ internal.
16
+
13
17
  ## Install
14
18
 
15
19
  ```bash
@@ -26,13 +30,13 @@ bun add -d pino-pretty
26
30
 
27
31
  ```ts
28
32
  import { createNextServer, createNextServerLoader } from "@beignet/next";
29
- import { pinoLoggerProvider } from "@beignet/provider-logger-pino";
33
+ import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";
30
34
  import { appPorts } from "@/infra/app-ports";
31
35
 
32
36
  export const getServer = createNextServerLoader(() =>
33
37
  createNextServer({
34
38
  ports: appPorts,
35
- providers: [pinoLoggerProvider],
39
+ providers: [createPinoLoggerProvider()],
36
40
  context: ({ ports }) => ({
37
41
  requestId: crypto.randomUUID(),
38
42
  ports,
@@ -77,6 +81,23 @@ export const providers = [
77
81
  ];
78
82
  ```
79
83
 
84
+ ### Direct adapter
85
+
86
+ Use `createPinoLogger(...)` when the app owns Pino configuration, transports,
87
+ or destinations:
88
+
89
+ ```ts
90
+ import { createPinoLogger } from "@beignet/provider-logger-pino";
91
+ import pino from "pino";
92
+
93
+ const destination = pino.destination("./app.log");
94
+ const pinoLogger = pino({ level: "info" }, destination);
95
+ const logger = createPinoLogger({ logger: pinoLogger });
96
+ ```
97
+
98
+ The direct factory only adapts the supplied Pino logger to `LoggerPort`; the
99
+ caller owns flushing and destination shutdown.
100
+
80
101
  ## Usage
81
102
 
82
103
  ```ts
@@ -93,9 +114,10 @@ log.error("Failed to publish post", { error });
93
114
 
94
115
  | Export | Purpose |
95
116
  | --- | --- |
96
- | `pinoLoggerProvider` | Default env-backed Beignet provider |
97
- | `createPinoLoggerProvider` | Provider factory; options override `LOG_*` env values |
98
- | `CreatePinoLoggerProviderOptions` | Options for `createPinoLoggerProvider` |
117
+ | `createPinoLogger(options)` | Adapt an app-owned Pino logger to `LoggerPort` |
118
+ | `CreatePinoLoggerOptions` | Options for `createPinoLogger()` |
119
+ | `createPinoLoggerProvider(options?)` | Provider factory; omitted options use `LOG_*` env values |
120
+ | `CreatePinoLoggerProviderOptions` | Options for `createPinoLoggerProvider()` |
99
121
  | `LoggerPinoConfig` | Validated provider config type |
100
122
  | `LoggerPort` | Re-export from `@beignet/core/ports` |
101
123
  | `LogLevel` | Re-export from `@beignet/core/ports` |
@@ -103,8 +125,9 @@ log.error("Failed to publish post", { error });
103
125
  ## Installed ports
104
126
 
105
127
  The provider contributes `ctx.ports.logger`, the standard Beignet
106
- `LoggerPort`. It does not expose a provider-specific escape hatch because child
107
- loggers and bindings are available through the stable port.
128
+ `LoggerPort`. Use `createPinoLogger(...)` when app infrastructure needs to own
129
+ the underlying Pino logger; application workflows should continue to depend on
130
+ the stable port.
108
131
 
109
132
  ## Instrumentation
110
133
 
package/dist/index.d.ts CHANGED
@@ -12,11 +12,11 @@
12
12
  * @example
13
13
  * ```ts
14
14
  * import { createNextServer } from "@beignet/next";
15
- * import { pinoLoggerProvider } from "@beignet/provider-logger-pino";
15
+ * import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";
16
16
  *
17
17
  * const server = await createNextServer({
18
18
  * ports: basePorts,
19
- * providers: [pinoLoggerProvider],
19
+ * providers: [createPinoLoggerProvider()],
20
20
  * // ...
21
21
  * });
22
22
  *
@@ -29,38 +29,41 @@
29
29
  * ```
30
30
  */
31
31
  import type { LoggerPort } from "@beignet/core/ports";
32
- import { z } from "zod";
32
+ import { type AnyProviderConfigSchema, type ServiceProvider } from "@beignet/core/providers";
33
+ import { type Logger as PinoLogger } from "pino";
33
34
  /**
34
35
  * Logger port types re-exported for provider consumers.
35
36
  */
36
37
  export type { LoggerPort, LogLevel } from "@beignet/core/ports";
37
38
  /**
38
- * Configuration schema for the Pino logger provider.
39
- * Validates environment variables with LOG_ prefix.
39
+ * Validated configuration for the Pino logger provider.
40
40
  */
41
- declare const LoggerPinoConfigSchema: z.ZodObject<{
42
- LEVEL: z.ZodDefault<z.ZodEnum<{
43
- trace: "trace";
44
- debug: "debug";
45
- info: "info";
46
- warn: "warn";
47
- error: "error";
48
- fatal: "fatal";
49
- }>>;
50
- FORMAT: z.ZodDefault<z.ZodEnum<{
51
- json: "json";
52
- pretty: "pretty";
53
- }>>;
54
- SERVICE: z.ZodOptional<z.ZodString>;
55
- TIMESTAMP: z.ZodDefault<z.ZodPipe<z.ZodEnum<{
56
- true: "true";
57
- false: "false";
58
- }>, z.ZodTransform<boolean, "true" | "false">>>;
59
- }, z.core.$strip>;
41
+ export interface LoggerPinoConfig {
42
+ LEVEL: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
43
+ FORMAT: "json" | "pretty";
44
+ SERVICE?: string;
45
+ TIMESTAMP: boolean;
46
+ }
47
+ export interface PinoLoggerProviderPorts {
48
+ logger: LoggerPort;
49
+ }
50
+ /**
51
+ * Pino logger lifecycle provider with stable contributed-port typing.
52
+ */
53
+ export type PinoLoggerProvider = ServiceProvider<unknown, AnyProviderConfigSchema<LoggerPinoConfig>, Pick<PinoLoggerProviderPorts, keyof PinoLoggerProviderPorts>>;
54
+ /**
55
+ * Options for adapting an app-owned Pino logger directly.
56
+ */
57
+ export interface CreatePinoLoggerOptions {
58
+ /**
59
+ * Configured Pino logger. The caller owns its destination and lifecycle.
60
+ */
61
+ logger: PinoLogger;
62
+ }
60
63
  /**
61
- * Inferred configuration type for Pino logger provider.
64
+ * Adapt an app-owned Pino logger to Beignet's stable LoggerPort.
62
65
  */
63
- export type LoggerPinoConfig = z.infer<typeof LoggerPinoConfigSchema>;
66
+ export declare function createPinoLogger(options: CreatePinoLoggerOptions): LoggerPort;
64
67
  /**
65
68
  * Options for the Pino logger provider factory.
66
69
  */
@@ -87,64 +90,5 @@ export interface CreatePinoLoggerProviderOptions {
87
90
  *
88
91
  * Options override the corresponding `LOG_*` env values.
89
92
  */
90
- export declare function createPinoLoggerProvider(options?: CreatePinoLoggerProviderOptions): import("@beignet/core/providers").ServiceProvider<unknown, z.ZodObject<{
91
- LEVEL: z.ZodDefault<z.ZodEnum<{
92
- trace: "trace";
93
- debug: "debug";
94
- info: "info";
95
- warn: "warn";
96
- error: "error";
97
- fatal: "fatal";
98
- }>>;
99
- FORMAT: z.ZodDefault<z.ZodEnum<{
100
- json: "json";
101
- pretty: "pretty";
102
- }>>;
103
- SERVICE: z.ZodOptional<z.ZodString>;
104
- TIMESTAMP: z.ZodDefault<z.ZodPipe<z.ZodEnum<{
105
- true: "true";
106
- false: "false";
107
- }>, z.ZodTransform<boolean, "true" | "false">>>;
108
- }, z.core.$strip>, {
109
- logger: LoggerPort;
110
- }, unknown, void>;
111
- /**
112
- * Default env-backed Pino logger provider.
113
- *
114
- * Configuration via environment variables:
115
- * - LOG_LEVEL: Minimum log level (trace/debug/info/warn/error/fatal, default: info)
116
- * - LOG_FORMAT: Log format (json/pretty, default: json)
117
- * - LOG_SERVICE: Optional service name for log enrichment
118
- * - LOG_TIMESTAMP: Whether to include timestamps (true/false, default: true)
119
- *
120
- * @example
121
- * ```ts
122
- * const server = await createNextServer({
123
- * ports: basePorts,
124
- * providers: [pinoLoggerProvider],
125
- * // ...
126
- * });
127
- * ```
128
- */
129
- export declare const pinoLoggerProvider: import("@beignet/core/providers").ServiceProvider<unknown, z.ZodObject<{
130
- LEVEL: z.ZodDefault<z.ZodEnum<{
131
- trace: "trace";
132
- debug: "debug";
133
- info: "info";
134
- warn: "warn";
135
- error: "error";
136
- fatal: "fatal";
137
- }>>;
138
- FORMAT: z.ZodDefault<z.ZodEnum<{
139
- json: "json";
140
- pretty: "pretty";
141
- }>>;
142
- SERVICE: z.ZodOptional<z.ZodString>;
143
- TIMESTAMP: z.ZodDefault<z.ZodPipe<z.ZodEnum<{
144
- true: "true";
145
- false: "false";
146
- }>, z.ZodTransform<boolean, "true" | "false">>>;
147
- }, z.core.$strip>, {
148
- logger: LoggerPort;
149
- }, unknown, void>;
93
+ export declare function createPinoLoggerProvider(options?: CreatePinoLoggerProviderOptions): PinoLoggerProvider;
150
94
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAYhE;;;GAGG;AACH,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;iBA8B1B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AA8EtE;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC;;;;;;;;;;;;;;;;;;;;kBA8C9C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;iBAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAa,EAAE,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAGvD;;GAEG;AACH,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAgDhE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/D,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAC9C,OAAO,EACP,uBAAuB,CAAC,gBAAgB,CAAC,EACzC,IAAI,CAAC,uBAAuB,EAAE,MAAM,uBAAuB,CAAC,CAC7D,CAAC;AA8EF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,UAAU,CAE7E;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,kBAAkB,CA+CpB"}
package/dist/index.js CHANGED
@@ -12,11 +12,11 @@
12
12
  * @example
13
13
  * ```ts
14
14
  * import { createNextServer } from "@beignet/next";
15
- * import { pinoLoggerProvider } from "@beignet/provider-logger-pino";
15
+ * import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";
16
16
  *
17
17
  * const server = await createNextServer({
18
18
  * ports: basePorts,
19
- * providers: [pinoLoggerProvider],
19
+ * providers: [createPinoLoggerProvider()],
20
20
  * // ...
21
21
  * });
22
22
  *
@@ -28,7 +28,7 @@
28
28
  * log.info("Processing request");
29
29
  * ```
30
30
  */
31
- import { createProvider } from "@beignet/core/providers";
31
+ import { createProvider, } from "@beignet/core/providers";
32
32
  import pino from "pino";
33
33
  import { z } from "zod";
34
34
  /**
@@ -79,7 +79,7 @@ const LoggerPinoConfigSchema = z.object({
79
79
  * @param bindings - Optional base bindings to add to all log entries
80
80
  * @returns Configured Pino logger instance
81
81
  */
82
- function createPinoLogger(config, bindings = {}) {
82
+ function createPinoInstance(config, bindings = {}) {
83
83
  const pinoOptions = {
84
84
  level: config.LEVEL,
85
85
  timestamp: config.TIMESTAMP ? pino.stdTimeFunctions.isoTime : false,
@@ -123,7 +123,7 @@ function createPinoLogger(config, bindings = {}) {
123
123
  * @param logger - Pino logger instance to wrap
124
124
  * @returns LoggerPort implementation
125
125
  */
126
- function wrapPino(logger) {
126
+ function adaptPinoLogger(logger) {
127
127
  return {
128
128
  trace: (message, meta) => meta ? logger.trace(meta, message) : logger.trace(message),
129
129
  debug: (message, meta) => meta ? logger.debug(meta, message) : logger.debug(message),
@@ -131,9 +131,15 @@ function wrapPino(logger) {
131
131
  warn: (message, meta) => meta ? logger.warn(meta, message) : logger.warn(message),
132
132
  error: (message, meta) => meta ? logger.error(meta, message) : logger.error(message),
133
133
  fatal: (message, meta) => meta ? logger.fatal(meta, message) : logger.fatal(message),
134
- child: (bindings) => wrapPino(logger.child(bindings)),
134
+ child: (bindings) => adaptPinoLogger(logger.child(bindings)),
135
135
  };
136
136
  }
137
+ /**
138
+ * Adapt an app-owned Pino logger to Beignet's stable LoggerPort.
139
+ */
140
+ export function createPinoLogger(options) {
141
+ return adaptPinoLogger(options.logger);
142
+ }
137
143
  /**
138
144
  * Create an env-backed Pino logger provider.
139
145
  *
@@ -157,7 +163,7 @@ export function createPinoLoggerProvider(options = {}) {
157
163
  if (!config) {
158
164
  // Every schema field has a default, so a declared config always
159
165
  // parses; this only guards the typing.
160
- throw new Error("[pinoLoggerProvider] Provider config was not loaded.");
166
+ throw new Error("[createPinoLoggerProvider] Provider config was not loaded.");
161
167
  }
162
168
  const resolvedConfig = {
163
169
  LEVEL: config.LEVEL,
@@ -171,30 +177,11 @@ export function createPinoLoggerProvider(options = {}) {
171
177
  baseBindings.service = service;
172
178
  }
173
179
  // Create and configure Pino logger
174
- const logger = createPinoLogger(resolvedConfig, baseBindings);
180
+ const logger = createPinoInstance(resolvedConfig, baseBindings);
175
181
  // Wrap logger to match LoggerPort interface
176
- const port = wrapPino(logger);
182
+ const port = createPinoLogger({ logger });
177
183
  return { ports: { logger: port } };
178
184
  },
179
185
  });
180
186
  }
181
- /**
182
- * Default env-backed Pino logger provider.
183
- *
184
- * Configuration via environment variables:
185
- * - LOG_LEVEL: Minimum log level (trace/debug/info/warn/error/fatal, default: info)
186
- * - LOG_FORMAT: Log format (json/pretty, default: json)
187
- * - LOG_SERVICE: Optional service name for log enrichment
188
- * - LOG_TIMESTAMP: Whether to include timestamps (true/false, default: true)
189
- *
190
- * @example
191
- * ```ts
192
- * const server = await createNextServer({
193
- * ports: basePorts,
194
- * providers: [pinoLoggerProvider],
195
- * // ...
196
- * });
197
- * ```
198
- */
199
- export const pinoLoggerProvider = createPinoLoggerProvider();
200
187
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/provider-logger-pino",
3
- "version": "0.0.33",
3
+ "version": "0.0.35",
4
4
  "type": "module",
5
5
  "description": "Pino logger provider for Beignet - adds logger port using pino",
6
6
  "main": "./dist/index.js",
@@ -88,7 +88,7 @@
88
88
  "registration": {
89
89
  "required": true,
90
90
  "tokens": [
91
- "pinoLoggerProvider"
91
+ "createPinoLoggerProvider"
92
92
  ]
93
93
  }
94
94
  }
package/src/index.ts CHANGED
@@ -12,11 +12,11 @@
12
12
  * @example
13
13
  * ```ts
14
14
  * import { createNextServer } from "@beignet/next";
15
- * import { pinoLoggerProvider } from "@beignet/provider-logger-pino";
15
+ * import { createPinoLoggerProvider } from "@beignet/provider-logger-pino";
16
16
  *
17
17
  * const server = await createNextServer({
18
18
  * ports: basePorts,
19
- * providers: [pinoLoggerProvider],
19
+ * providers: [createPinoLoggerProvider()],
20
20
  * // ...
21
21
  * });
22
22
  *
@@ -30,7 +30,11 @@
30
30
  */
31
31
 
32
32
  import type { LoggerPort } from "@beignet/core/ports";
33
- import { createProvider } from "@beignet/core/providers";
33
+ import {
34
+ type AnyProviderConfigSchema,
35
+ createProvider,
36
+ type ServiceProvider,
37
+ } from "@beignet/core/providers";
34
38
  import pino, { type Logger as PinoLogger } from "pino";
35
39
  import { z } from "zod";
36
40
 
@@ -83,12 +87,30 @@ const LoggerPinoConfigSchema = z.object({
83
87
  * Default: true
84
88
  */
85
89
  TIMESTAMP: BooleanString.default(true),
86
- });
90
+ }) satisfies z.ZodType<LoggerPinoConfig>;
87
91
 
88
92
  /**
89
- * Inferred configuration type for Pino logger provider.
93
+ * Validated configuration for the Pino logger provider.
90
94
  */
91
- export type LoggerPinoConfig = z.infer<typeof LoggerPinoConfigSchema>;
95
+ export interface LoggerPinoConfig {
96
+ LEVEL: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
97
+ FORMAT: "json" | "pretty";
98
+ SERVICE?: string;
99
+ TIMESTAMP: boolean;
100
+ }
101
+
102
+ export interface PinoLoggerProviderPorts {
103
+ logger: LoggerPort;
104
+ }
105
+
106
+ /**
107
+ * Pino logger lifecycle provider with stable contributed-port typing.
108
+ */
109
+ export type PinoLoggerProvider = ServiceProvider<
110
+ unknown,
111
+ AnyProviderConfigSchema<LoggerPinoConfig>,
112
+ Pick<PinoLoggerProviderPorts, keyof PinoLoggerProviderPorts>
113
+ >;
92
114
 
93
115
  /**
94
116
  * Create a Pino logger instance with the given configuration.
@@ -97,7 +119,7 @@ export type LoggerPinoConfig = z.infer<typeof LoggerPinoConfigSchema>;
97
119
  * @param bindings - Optional base bindings to add to all log entries
98
120
  * @returns Configured Pino logger instance
99
121
  */
100
- function createPinoLogger(
122
+ function createPinoInstance(
101
123
  config: LoggerPinoConfig,
102
124
  bindings: Record<string, unknown> = {},
103
125
  ): PinoLogger {
@@ -148,7 +170,7 @@ function createPinoLogger(
148
170
  * @param logger - Pino logger instance to wrap
149
171
  * @returns LoggerPort implementation
150
172
  */
151
- function wrapPino(logger: PinoLogger): LoggerPort {
173
+ function adaptPinoLogger(logger: PinoLogger): LoggerPort {
152
174
  return {
153
175
  trace: (message, meta) =>
154
176
  meta ? logger.trace(meta, message) : logger.trace(message),
@@ -162,10 +184,27 @@ function wrapPino(logger: PinoLogger): LoggerPort {
162
184
  meta ? logger.error(meta, message) : logger.error(message),
163
185
  fatal: (message, meta) =>
164
186
  meta ? logger.fatal(meta, message) : logger.fatal(message),
165
- child: (bindings) => wrapPino(logger.child(bindings)),
187
+ child: (bindings) => adaptPinoLogger(logger.child(bindings)),
166
188
  };
167
189
  }
168
190
 
191
+ /**
192
+ * Options for adapting an app-owned Pino logger directly.
193
+ */
194
+ export interface CreatePinoLoggerOptions {
195
+ /**
196
+ * Configured Pino logger. The caller owns its destination and lifecycle.
197
+ */
198
+ logger: PinoLogger;
199
+ }
200
+
201
+ /**
202
+ * Adapt an app-owned Pino logger to Beignet's stable LoggerPort.
203
+ */
204
+ export function createPinoLogger(options: CreatePinoLoggerOptions): LoggerPort {
205
+ return adaptPinoLogger(options.logger);
206
+ }
207
+
169
208
  /**
170
209
  * Options for the Pino logger provider factory.
171
210
  */
@@ -195,7 +234,7 @@ export interface CreatePinoLoggerProviderOptions {
195
234
  */
196
235
  export function createPinoLoggerProvider(
197
236
  options: CreatePinoLoggerProviderOptions = {},
198
- ) {
237
+ ): PinoLoggerProvider {
199
238
  return createProvider({
200
239
  name: "logger-pino",
201
240
 
@@ -215,7 +254,9 @@ export function createPinoLoggerProvider(
215
254
  if (!config) {
216
255
  // Every schema field has a default, so a declared config always
217
256
  // parses; this only guards the typing.
218
- throw new Error("[pinoLoggerProvider] Provider config was not loaded.");
257
+ throw new Error(
258
+ "[createPinoLoggerProvider] Provider config was not loaded.",
259
+ );
219
260
  }
220
261
 
221
262
  const resolvedConfig: LoggerPinoConfig = {
@@ -232,32 +273,12 @@ export function createPinoLoggerProvider(
232
273
  }
233
274
 
234
275
  // Create and configure Pino logger
235
- const logger = createPinoLogger(resolvedConfig, baseBindings);
276
+ const logger = createPinoInstance(resolvedConfig, baseBindings);
236
277
 
237
278
  // Wrap logger to match LoggerPort interface
238
- const port = wrapPino(logger);
279
+ const port = createPinoLogger({ logger });
239
280
 
240
- return { ports: { logger: port } };
281
+ return { ports: { logger: port } satisfies PinoLoggerProviderPorts };
241
282
  },
242
283
  });
243
284
  }
244
-
245
- /**
246
- * Default env-backed Pino logger provider.
247
- *
248
- * Configuration via environment variables:
249
- * - LOG_LEVEL: Minimum log level (trace/debug/info/warn/error/fatal, default: info)
250
- * - LOG_FORMAT: Log format (json/pretty, default: json)
251
- * - LOG_SERVICE: Optional service name for log enrichment
252
- * - LOG_TIMESTAMP: Whether to include timestamps (true/false, default: true)
253
- *
254
- * @example
255
- * ```ts
256
- * const server = await createNextServer({
257
- * ports: basePorts,
258
- * providers: [pinoLoggerProvider],
259
- * // ...
260
- * });
261
- * ```
262
- */
263
- export const pinoLoggerProvider = createPinoLoggerProvider();