@rosen-bridge/fastify-enhanced 3.0.0 → 3.1.0-d5b86d3e
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 +6 -0
- package/README.md +144 -39
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/logger.d.ts +94 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +142 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -32,37 +32,26 @@ yarn add zod@^3.21.4
|
|
|
32
32
|
|
|
33
33
|
## Usage
|
|
34
34
|
|
|
35
|
-
To use the enhanced Fastify, import `
|
|
35
|
+
To use the enhanced Fastify, import `makeFastify` and use it to create a fastify instance and register routes. Install and use zod to define schemas for validating requests and responses:
|
|
36
|
+
|
|
37
|
+
> Note: For **BigInt** field types, since JSON does not support the BigInt data type, you should use `z.coerce.bigint()` in the schema, and the value in the data transfer object (DTO) should be either a **number** or a **string**; `coerce` allows Zod to validate and transform the number or string value into a BigInt. Also its preferred to use string for bigint types in the response schemas.
|
|
36
38
|
|
|
37
39
|
```ts
|
|
38
|
-
import {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const addTokenPaymentRoute = (
|
|
48
|
-
fastify: FastifyInstance<
|
|
49
|
-
Server<typeof IncomingMessage, typeof ServerResponse>,
|
|
50
|
-
IncomingMessage,
|
|
51
|
-
ServerResponse<IncomingMessage>,
|
|
52
|
-
FastifyBaseLogger,
|
|
53
|
-
ZodTypeProvider
|
|
54
|
-
>,
|
|
55
|
-
) => {
|
|
56
|
-
const bodySchema = types.object({
|
|
57
|
-
tokenName: types.string(),
|
|
58
|
-
tokenAmount: types.bigint(),
|
|
59
|
-
tokenDecimals: types.number(),
|
|
40
|
+
import { z } from 'zod';
|
|
41
|
+
|
|
42
|
+
import { FastifyWithZod, makeFastify } from '@rosen-bridge/fastify-enhanced';
|
|
43
|
+
|
|
44
|
+
const addTokenPaymentRoute = (fastify: FastifyWithZod) => {
|
|
45
|
+
const bodySchema = z.object({
|
|
46
|
+
tokenName: z.string(),
|
|
47
|
+
tokenAmount: z.coerce.bigint(),
|
|
48
|
+
tokenDecimals: z.number(),
|
|
60
49
|
});
|
|
61
50
|
|
|
62
|
-
const res200Schema =
|
|
63
|
-
name:
|
|
64
|
-
amount:
|
|
65
|
-
decimal:
|
|
51
|
+
const res200Schema = z.object({
|
|
52
|
+
name: z.string(),
|
|
53
|
+
amount: z.string(),
|
|
54
|
+
decimal: z.number(),
|
|
66
55
|
});
|
|
67
56
|
|
|
68
57
|
const payTokenOpts = {
|
|
@@ -77,15 +66,89 @@ const addTokenPaymentRoute = (
|
|
|
77
66
|
fastify.post('/payToken', payTokenOpts, async (request, reply) => {
|
|
78
67
|
return reply.status(200).send({
|
|
79
68
|
name: request.body.tokenName,
|
|
80
|
-
amount: request.body.tokenAmount,
|
|
69
|
+
amount: request.body.tokenAmount.toString(),
|
|
81
70
|
decimal: request.body.tokenDecimals,
|
|
82
71
|
});
|
|
83
72
|
});
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const addDemoRoute = (fastify: FastifyWithZod) => {
|
|
76
|
+
const bodySchema = z.object({
|
|
77
|
+
numberField: z.number(),
|
|
78
|
+
bigintField: z.coerce.bigint(),
|
|
79
|
+
booleanField: z.boolean(),
|
|
80
|
+
stringField: z.string(),
|
|
81
|
+
optionalStringField: z.optional(z.string()),
|
|
82
|
+
objectField: z.object({
|
|
83
|
+
bigintField: z.coerce.bigint(),
|
|
84
|
+
// ...
|
|
85
|
+
}),
|
|
86
|
+
numberArrayField: z.array(z.number()),
|
|
87
|
+
stringArrayField: z.array(z.string()),
|
|
88
|
+
unionField: z.union([
|
|
89
|
+
z.string(),
|
|
90
|
+
z.object({
|
|
91
|
+
stringArrayField: z.array(z.string()),
|
|
92
|
+
// ...
|
|
93
|
+
}),
|
|
94
|
+
]),
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const qsSchema = z.object({
|
|
98
|
+
qs: z.union([z.string().transform((i) => [i]), z.array(z.string())]),
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
const res200Schema = z.object({
|
|
102
|
+
qs: z.array(z.string()),
|
|
103
|
+
numberField: z.number(),
|
|
104
|
+
bigintField: z.string(),
|
|
105
|
+
booleanField: z.boolean(),
|
|
106
|
+
stringField: z.string(),
|
|
107
|
+
optionalStringField: z.optional(z.string()),
|
|
108
|
+
objectField: z.object({
|
|
109
|
+
bigintField: z.string(),
|
|
110
|
+
// ...
|
|
111
|
+
}),
|
|
112
|
+
numberArrayField: z.array(z.number()),
|
|
113
|
+
stringArrayField: z.array(z.string()),
|
|
114
|
+
unionField: z.union([
|
|
115
|
+
z.string(),
|
|
116
|
+
z.object({
|
|
117
|
+
stringArrayField: z.array(z.string()),
|
|
118
|
+
// ...
|
|
119
|
+
}),
|
|
120
|
+
]),
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
const routeOpts = {
|
|
124
|
+
schema: {
|
|
125
|
+
querystring: qsSchema,
|
|
126
|
+
body: bodySchema,
|
|
127
|
+
response: {
|
|
128
|
+
200: res200Schema,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
};
|
|
84
132
|
|
|
85
|
-
|
|
133
|
+
fastify.post('/demo', routeOpts, async (request, reply) => {
|
|
134
|
+
return reply.status(200).send({
|
|
135
|
+
qs: request.query.qs,
|
|
136
|
+
numberField: request.body.numberField,
|
|
137
|
+
bigintField: request.body.bigintField.toString(),
|
|
138
|
+
booleanField: request.body.booleanField,
|
|
139
|
+
stringField: request.body.stringField,
|
|
140
|
+
optionalStringField: request.body.optionalStringField,
|
|
141
|
+
objectField: {
|
|
142
|
+
bigintField: request.body.objectField.bigintField.toString(),
|
|
143
|
+
},
|
|
144
|
+
numberArrayField: request.body.numberArrayField,
|
|
145
|
+
stringArrayField: request.body.stringArrayField,
|
|
146
|
+
unionField: request.body.unionField,
|
|
147
|
+
});
|
|
148
|
+
});
|
|
86
149
|
};
|
|
87
150
|
|
|
88
|
-
const fastify = await
|
|
151
|
+
const fastify = await makeFastify(
|
|
89
152
|
{
|
|
90
153
|
path: '/swagger',
|
|
91
154
|
title: '',
|
|
@@ -95,27 +158,69 @@ const fastify = await createFastify(
|
|
|
95
158
|
{ logger: false },
|
|
96
159
|
);
|
|
97
160
|
addTokenPaymentRoute(fastify);
|
|
161
|
+
// Or fastify.register(addTokenPaymentRoute);
|
|
162
|
+
addDemoRoute(fastify);
|
|
98
163
|
|
|
99
164
|
const start = async () => {
|
|
100
165
|
try {
|
|
101
|
-
await fastify.
|
|
166
|
+
await fastify.ready();
|
|
167
|
+
await fastify.listen({ host: '127.0.0.1', port: 8000 });
|
|
168
|
+
console.log(`listening http://127.0.0.1:8000`);
|
|
102
169
|
} catch (err) {
|
|
103
|
-
console.
|
|
170
|
+
console.error(err);
|
|
104
171
|
process.exit(1);
|
|
105
172
|
}
|
|
106
173
|
};
|
|
174
|
+
|
|
107
175
|
start();
|
|
176
|
+
|
|
177
|
+
/*
|
|
178
|
+
curl --request POST \
|
|
179
|
+
--url 'http://localhost:8000/demo?qs=key1&qs=key2' \
|
|
180
|
+
--header 'content-type: application/json' \
|
|
181
|
+
--data '{
|
|
182
|
+
"numberField": 10,
|
|
183
|
+
"bigintField": "10000",
|
|
184
|
+
"booleanField": true,
|
|
185
|
+
"stringField": "str",
|
|
186
|
+
"objectField": {
|
|
187
|
+
"bigintField": 10
|
|
188
|
+
},
|
|
189
|
+
"numberArrayField": [
|
|
190
|
+
0,
|
|
191
|
+
100,
|
|
192
|
+
1000
|
|
193
|
+
],
|
|
194
|
+
"stringArrayField": [
|
|
195
|
+
"str1",
|
|
196
|
+
"str2"
|
|
197
|
+
],
|
|
198
|
+
"unionField": {
|
|
199
|
+
"stringArrayField": [
|
|
200
|
+
"str1",
|
|
201
|
+
"str2"
|
|
202
|
+
]
|
|
203
|
+
}
|
|
204
|
+
}'
|
|
205
|
+
*/
|
|
108
206
|
```
|
|
109
207
|
|
|
110
|
-
|
|
208
|
+
In order to use an instance of **AbstractLogger** instead of the default fastify logger, set the `logger` property of the fastify options to `false` and pass the **AbstractLogger** instance (wrapped in **FastifyLogger** class) to the `loggerInstance` property. **FastifyLogger** is an adapter for Pino interface compliance used in fastify.
|
|
111
209
|
|
|
112
210
|
```ts
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
211
|
+
import { ConsoleLogger } from '@rosen-bridge/abstract-logger';
|
|
212
|
+
import { makeFastify, FastifyLogger } from '@rosen-bridge/fastify-enhanced';
|
|
213
|
+
|
|
214
|
+
const fastify = await makeFastify(
|
|
215
|
+
{
|
|
216
|
+
path: '/swagger',
|
|
217
|
+
title: '',
|
|
218
|
+
description: '',
|
|
219
|
+
version: '0.0.1',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
logger: false,
|
|
223
|
+
loggerInstance: new FastifyLogger(new ConsoleLogger()),
|
|
118
224
|
},
|
|
119
|
-
{ prefix: 'subroute' },
|
|
120
225
|
);
|
|
121
226
|
```
|
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export type { FastifyZodOpenApiTypeProvider } from 'fastify-zod-openapi';
|
|
|
2
2
|
export * from './fastify';
|
|
3
3
|
export * from './types';
|
|
4
4
|
export type { FastifyRequest, FastifyReply, HookHandlerDoneFunction, } from 'fastify';
|
|
5
|
+
export * from './logger';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACzE,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,YAAY,EACV,cAAc,EACd,YAAY,EACZ,uBAAuB,GACxB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACzE,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,YAAY,EACV,cAAc,EACd,YAAY,EACZ,uBAAuB,GACxB,MAAM,SAAS,CAAC;AACjB,cAAc,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './fastify';
|
|
2
2
|
export * from './types';
|
|
3
|
-
|
|
3
|
+
export * from './logger';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUM7QUFNeEIsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IEZhc3RpZnlab2RPcGVuQXBpVHlwZVByb3ZpZGVyIH0gZnJvbSAnZmFzdGlmeS16b2Qtb3BlbmFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2Zhc3RpZnknO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgdHlwZSB7XG4gIEZhc3RpZnlSZXF1ZXN0LFxuICBGYXN0aWZ5UmVwbHksXG4gIEhvb2tIYW5kbGVyRG9uZUZ1bmN0aW9uLFxufSBmcm9tICdmYXN0aWZ5JztcbmV4cG9ydCAqIGZyb20gJy4vbG9nZ2VyJztcbiJdfQ==
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { FastifyBaseLogger, LogLevel } from 'fastify';
|
|
2
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
3
|
+
export declare class FastifyLogger implements FastifyBaseLogger {
|
|
4
|
+
protected logger: AbstractLogger;
|
|
5
|
+
level: LogLevel;
|
|
6
|
+
/**
|
|
7
|
+
* creates a new instance
|
|
8
|
+
*
|
|
9
|
+
* @param logger - the underlying logger to delegate to
|
|
10
|
+
* @param level - for FastifyBaseLogger interface compliance
|
|
11
|
+
*/
|
|
12
|
+
constructor(logger: AbstractLogger, level?: LogLevel);
|
|
13
|
+
/**
|
|
14
|
+
* no-op silent logger method (for Pino interface compliance)
|
|
15
|
+
* logs nothing regardless of input
|
|
16
|
+
*/
|
|
17
|
+
silent: () => void;
|
|
18
|
+
/**
|
|
19
|
+
* logs a trace-level message
|
|
20
|
+
*
|
|
21
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
22
|
+
* more info see {@link FastifyLogFn}
|
|
23
|
+
*
|
|
24
|
+
* @param obj: object to be serialized
|
|
25
|
+
* @param msg: the log message to write
|
|
26
|
+
*/
|
|
27
|
+
trace: (...args: unknown[]) => void;
|
|
28
|
+
/**
|
|
29
|
+
* logs a debug-level message
|
|
30
|
+
*
|
|
31
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
32
|
+
* more info see {@link FastifyLogFn}
|
|
33
|
+
*
|
|
34
|
+
* @param obj: object to be serialized
|
|
35
|
+
* @param msg: the log message to write
|
|
36
|
+
*/
|
|
37
|
+
debug: (...args: unknown[]) => void;
|
|
38
|
+
/**
|
|
39
|
+
* logs an info-level message
|
|
40
|
+
*
|
|
41
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
42
|
+
* more info see {@link FastifyLogFn}
|
|
43
|
+
*
|
|
44
|
+
* @param obj: object to be serialized
|
|
45
|
+
* @param msg: the log message to write
|
|
46
|
+
*/
|
|
47
|
+
info: (...args: unknown[]) => void;
|
|
48
|
+
/**
|
|
49
|
+
* logs a warning-level message
|
|
50
|
+
*
|
|
51
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
52
|
+
* more info see {@link FastifyLogFn}
|
|
53
|
+
*
|
|
54
|
+
* @param obj: object to be serialized
|
|
55
|
+
* @param msg: the log message to write
|
|
56
|
+
*/
|
|
57
|
+
warn: (...args: unknown[]) => void;
|
|
58
|
+
/**
|
|
59
|
+
* logs an error-level message
|
|
60
|
+
*
|
|
61
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
62
|
+
* more info see {@link FastifyLogFn}
|
|
63
|
+
*
|
|
64
|
+
* @param obj: object to be serialized
|
|
65
|
+
* @param msg: the log message to write
|
|
66
|
+
*/
|
|
67
|
+
error: (...args: unknown[]) => void;
|
|
68
|
+
/**
|
|
69
|
+
* logs a critical/fatal-level message
|
|
70
|
+
*
|
|
71
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
72
|
+
* more info see {@link FastifyLogFn}
|
|
73
|
+
*
|
|
74
|
+
* @param obj: object to be serialized
|
|
75
|
+
* @param msg: the log message to write
|
|
76
|
+
*/
|
|
77
|
+
fatal: (...args: unknown[]) => void;
|
|
78
|
+
/**
|
|
79
|
+
* creates a child logger with bindings and optional configuration
|
|
80
|
+
* conforms to the Pino/Fastify logger interface
|
|
81
|
+
*
|
|
82
|
+
* @param bindings - Key-value pairs to attach to all logs from the child logger
|
|
83
|
+
* @returns A new FastifyBaseLogger instance (child logger)
|
|
84
|
+
*/
|
|
85
|
+
child: (bindings: Record<string, unknown>) => FastifyBaseLogger;
|
|
86
|
+
/**
|
|
87
|
+
* utility function to map and serialize the arguments of fastify logger functions
|
|
88
|
+
*
|
|
89
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
90
|
+
* more info see {@link FastifyLogFn}
|
|
91
|
+
*/
|
|
92
|
+
private parseArgs;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,qBAAa,aAAc,YAAW,iBAAiB;IAQnD,SAAS,CAAC,MAAM,EAAE,cAAc;IACzB,KAAK,EAAE,QAAQ;IARxB;;;;;OAKG;gBAES,MAAM,EAAE,cAAc,EACzB,KAAK,GAAE,QAAiB;IAGjC;;;OAGG;IACH,MAAM,aAEJ;IAEF;;;;;;;;OAQG;IACH,KAAK,GAAI,GAAG,MAAM,OAAO,EAAE,UAGzB;IAEF;;;;;;;;OAQG;IACH,KAAK,GAAI,GAAG,MAAM,OAAO,EAAE,UAGzB;IAEF;;;;;;;;OAQG;IACH,IAAI,GAAI,GAAG,MAAM,OAAO,EAAE,UAGxB;IAEF;;;;;;;;OAQG;IACH,IAAI,GAAI,GAAG,MAAM,OAAO,EAAE,UAGxB;IAEF;;;;;;;;OAQG;IACH,KAAK,GAAI,GAAG,MAAM,OAAO,EAAE,UAGzB;IAEF;;;;;;;;OAQG;IACH,KAAK,GAAI,GAAG,MAAM,OAAO,EAAE,UAGzB;IAEF;;;;;;OAMG;IACH,KAAK,GAAI,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,iBAAiB,CAG5D;IAEF;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAwBf;CACH"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { serializers } from 'fastify/lib/logger-pino.js';
|
|
2
|
+
export class FastifyLogger {
|
|
3
|
+
logger;
|
|
4
|
+
level;
|
|
5
|
+
/**
|
|
6
|
+
* creates a new instance
|
|
7
|
+
*
|
|
8
|
+
* @param logger - the underlying logger to delegate to
|
|
9
|
+
* @param level - for FastifyBaseLogger interface compliance
|
|
10
|
+
*/
|
|
11
|
+
constructor(logger, level = 'info') {
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
this.level = level;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* no-op silent logger method (for Pino interface compliance)
|
|
17
|
+
* logs nothing regardless of input
|
|
18
|
+
*/
|
|
19
|
+
silent = () => {
|
|
20
|
+
// No-op
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* logs a trace-level message
|
|
24
|
+
*
|
|
25
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
26
|
+
* more info see {@link FastifyLogFn}
|
|
27
|
+
*
|
|
28
|
+
* @param obj: object to be serialized
|
|
29
|
+
* @param msg: the log message to write
|
|
30
|
+
*/
|
|
31
|
+
trace = (...args) => {
|
|
32
|
+
const { message, ...context } = this.parseArgs(...args);
|
|
33
|
+
this.logger.trace(message, context);
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* logs a debug-level message
|
|
37
|
+
*
|
|
38
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
39
|
+
* more info see {@link FastifyLogFn}
|
|
40
|
+
*
|
|
41
|
+
* @param obj: object to be serialized
|
|
42
|
+
* @param msg: the log message to write
|
|
43
|
+
*/
|
|
44
|
+
debug = (...args) => {
|
|
45
|
+
const { message, ...context } = this.parseArgs(...args);
|
|
46
|
+
this.logger.debug(message, context);
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* logs an info-level message
|
|
50
|
+
*
|
|
51
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
52
|
+
* more info see {@link FastifyLogFn}
|
|
53
|
+
*
|
|
54
|
+
* @param obj: object to be serialized
|
|
55
|
+
* @param msg: the log message to write
|
|
56
|
+
*/
|
|
57
|
+
info = (...args) => {
|
|
58
|
+
const { message, ...context } = this.parseArgs(...args);
|
|
59
|
+
this.logger.info(message, context);
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* logs a warning-level message
|
|
63
|
+
*
|
|
64
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
65
|
+
* more info see {@link FastifyLogFn}
|
|
66
|
+
*
|
|
67
|
+
* @param obj: object to be serialized
|
|
68
|
+
* @param msg: the log message to write
|
|
69
|
+
*/
|
|
70
|
+
warn = (...args) => {
|
|
71
|
+
const { message, ...context } = this.parseArgs(...args);
|
|
72
|
+
this.logger.warn(message, context);
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* logs an error-level message
|
|
76
|
+
*
|
|
77
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
78
|
+
* more info see {@link FastifyLogFn}
|
|
79
|
+
*
|
|
80
|
+
* @param obj: object to be serialized
|
|
81
|
+
* @param msg: the log message to write
|
|
82
|
+
*/
|
|
83
|
+
error = (...args) => {
|
|
84
|
+
const { message, ...context } = this.parseArgs(...args);
|
|
85
|
+
this.logger.error(message, context);
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* logs a critical/fatal-level message
|
|
89
|
+
*
|
|
90
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
91
|
+
* more info see {@link FastifyLogFn}
|
|
92
|
+
*
|
|
93
|
+
* @param obj: object to be serialized
|
|
94
|
+
* @param msg: the log message to write
|
|
95
|
+
*/
|
|
96
|
+
fatal = (...args) => {
|
|
97
|
+
const { message, ...context } = this.parseArgs(...args);
|
|
98
|
+
this.logger.critical(message, context);
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* creates a child logger with bindings and optional configuration
|
|
102
|
+
* conforms to the Pino/Fastify logger interface
|
|
103
|
+
*
|
|
104
|
+
* @param bindings - Key-value pairs to attach to all logs from the child logger
|
|
105
|
+
* @returns A new FastifyBaseLogger instance (child logger)
|
|
106
|
+
*/
|
|
107
|
+
child = (bindings) => {
|
|
108
|
+
const childLogger = this.logger.child(JSON.stringify(bindings));
|
|
109
|
+
return new FastifyLogger(childLogger, this.level);
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* utility function to map and serialize the arguments of fastify logger functions
|
|
113
|
+
*
|
|
114
|
+
* the LogFn used in fastify logger has multiple signatures, for
|
|
115
|
+
* more info see {@link FastifyLogFn}
|
|
116
|
+
*/
|
|
117
|
+
parseArgs = (...args) => {
|
|
118
|
+
const [arg0, arg1] = args;
|
|
119
|
+
if (!arg0)
|
|
120
|
+
throw new Error('Fastify log parse failed');
|
|
121
|
+
let info = {};
|
|
122
|
+
if (typeof arg0 === 'string') {
|
|
123
|
+
// format: message [...splat]
|
|
124
|
+
info.message = arg0;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// format: meta [message] [...splat]
|
|
128
|
+
info = arg0;
|
|
129
|
+
if (arg0 instanceof Error)
|
|
130
|
+
info = { err: arg0, message: arg0.message };
|
|
131
|
+
// serialize fastify req, res, err
|
|
132
|
+
for (const key in info) {
|
|
133
|
+
if (serializers[key])
|
|
134
|
+
info[key] = serializers[key](info[key]);
|
|
135
|
+
}
|
|
136
|
+
if (arg1)
|
|
137
|
+
info.message = arg1;
|
|
138
|
+
}
|
|
139
|
+
return info;
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJekQsTUFBTSxPQUFPLGFBQWE7SUFRWjtJQUNIO0lBUlQ7Ozs7O09BS0c7SUFDSCxZQUNZLE1BQXNCLEVBQ3pCLFFBQWtCLE1BQU07UUFEckIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDekIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7SUFDOUIsQ0FBQztJQUVKOzs7T0FHRztJQUNILE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDWixRQUFRO0lBQ1YsQ0FBQyxDQUFDO0lBRUY7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFO1FBQzdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUM7SUFFRjs7Ozs7Ozs7T0FRRztJQUNILEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBZSxFQUFFLEVBQUU7UUFDN0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQztJQUVGOzs7Ozs7OztPQVFHO0lBQ0gsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFlLEVBQUUsRUFBRTtRQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxD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c3RpZnknO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5TG9nRm4gfSBmcm9tICdmYXN0aWZ5JztcbmltcG9ydCB7IHNlcmlhbGl6ZXJzIH0gZnJvbSAnZmFzdGlmeS9saWIvbG9nZ2VyLXBpbm8uanMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcblxuZXhwb3J0IGNsYXNzIEZhc3RpZnlMb2dnZXIgaW1wbGVtZW50cyBGYXN0aWZ5QmFzZUxvZ2dlciB7XG4gIC8qKlxuICAgKiBjcmVhdGVzIGEgbmV3IGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSBsb2dnZXIgLSB0aGUgdW5kZXJseWluZyBsb2dnZXIgdG8gZGVsZWdhdGUgdG9cbiAgICogQHBhcmFtIGxldmVsIC0gZm9yIEZhc3RpZnlCYXNlTG9nZ2VyIGludGVyZmFjZSBjb21wbGlhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcixcbiAgICBwdWJsaWMgbGV2ZWw6IExvZ0xldmVsID0gJ2luZm8nLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIG5vLW9wIHNpbGVudCBsb2dnZXIgbWV0aG9kIChmb3IgUGlubyBpbnRlcmZhY2UgY29tcGxpYW5jZSlcbiAgICogbG9ncyBub3RoaW5nIHJlZ2FyZGxlc3Mgb2YgaW5wdXRcbiAgICovXG4gIHNpbGVudCA9ICgpID0+IHtcbiAgICAvLyBOby1vcFxuICB9O1xuXG4gIC8qKlxuICAgKiBsb2dzIGEgdHJhY2UtbGV2ZWwgbWVzc2FnZVxuICAgKlxuICAgKiB0aGUgTG9nRm4gdXNlZCBpbiBmYXN0aWZ5IGxvZ2dlciBoYXMgbXVsdGlwbGUgc2lnbmF0dXJlcywgZm9yXG4gICAqICBtb3JlIGluZm8gc2VlIHtAbGluayBGYXN0aWZ5TG9nRm59XG4gICAqXG4gICAqIEBwYXJhbSBvYmo6IG9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gICAqIEBwYXJhbSBtc2c6IHRoZSBsb2cgbWVzc2FnZSB0byB3cml0ZVxuICAgKi9cbiAgdHJhY2UgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCAuLi5jb250ZXh0IH0gPSB0aGlzLnBhcnNlQXJncyguLi5hcmdzKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShtZXNzYWdlIGFzIHN0cmluZywgY29udGV4dCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGxvZ3MgYSBkZWJ1Zy1sZXZlbCBtZXNzYWdlXG4gICAqXG4gICAqIHRoZSBMb2dGbiB1c2VkIGluIGZhc3RpZnkgbG9nZ2VyIGhhcyBtdWx0aXBsZSBzaWduYXR1cmVzLCBmb3JcbiAgICogIG1vcmUgaW5mbyBzZWUge0BsaW5rIEZhc3RpZnlMb2dGbn1cbiAgICpcbiAgICogQHBhcmFtIG9iajogb2JqZWN0IHRvIGJlIHNlcmlhbGl6ZWRcbiAgICogQHBhcmFtIG1zZzogdGhlIGxvZyBtZXNzYWdlIHRvIHdyaXRlXG4gICAqL1xuICBkZWJ1ZyA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIC4uLmNvbnRleHQgfSA9IHRoaXMucGFyc2VBcmdzKC4uLmFyZ3MpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKG1lc3NhZ2UgYXMgc3RyaW5nLCBjb250ZXh0KTtcbiAgfTtcblxuICAvKipcbiAgICogbG9ncyBhbiBpbmZvLWxldmVsIG1lc3NhZ2VcbiAgICpcbiAgICogdGhlIExvZ0ZuIHVzZWQgaW4gZmFzdGlmeSBsb2dnZXIgaGFzIG11bHRpcGxlIHNpZ25hdHVyZXMsIGZvclxuICAgKiAgbW9yZSBpbmZvIHNlZSB7QGxpbmsgRmFzdGlmeUxvZ0ZufVxuICAgKlxuICAgKiBAcGFyYW0gb2JqOiBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICAgKiBAcGFyYW0gbXNnOiB0aGUgbG9nIG1lc3NhZ2UgdG8gd3JpdGVcbiAgICovXG4gIGluZm8gPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCAuLi5jb250ZXh0IH0gPSB0aGlzLnBhcnNlQXJncyguLi5hcmdzKTtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKG1lc3NhZ2UgYXMgc3RyaW5nLCBjb250ZXh0KTtcbiAgfTtcblxuICAvKipcbiAgICogbG9ncyBhIHdhcm5pbmctbGV2ZWwgbWVzc2FnZVxuICAgKlxuICAgKiB0aGUgTG9nRm4gdXNlZCBpbiBmYXN0aWZ5IGxvZ2dlciBoYXMgbXVsdGlwbGUgc2lnbmF0dXJlcywgZm9yXG4gICAqICBtb3JlIGluZm8gc2VlIHtAbGluayBGYXN0aWZ5TG9nRm59XG4gICAqXG4gICAqIEBwYXJhbSBvYmo6IG9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gICAqIEBwYXJhbSBtc2c6IHRoZSBsb2cgbWVzc2FnZSB0byB3cml0ZVxuICAgKi9cbiAgd2FybiA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCB7IG1lc3NhZ2UsIC4uLmNvbnRleHQgfSA9IHRoaXMucGFyc2VBcmdzKC4uLmFyZ3MpO1xuICAgIHRoaXMubG9nZ2VyLndhcm4obWVzc2FnZSBhcyBzdHJpbmcsIGNvbnRleHQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBsb2dzIGFuIGVycm9yLWxldmVsIG1lc3NhZ2VcbiAgICpcbiAgICogdGhlIExvZ0ZuIHVzZWQgaW4gZmFzdGlmeSBsb2dnZXIgaGFzIG11bHRpcGxlIHNpZ25hdHVyZXMsIGZvclxuICAgKiAgbW9yZSBpbmZvIHNlZSB7QGxpbmsgRmFzdGlmeUxvZ0ZufVxuICAgKlxuICAgKiBAcGFyYW0gb2JqOiBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICAgKiBAcGFyYW0gbXNnOiB0aGUgbG9nIG1lc3NhZ2UgdG8gd3JpdGVcbiAgICovXG4gIGVycm9yID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbnN0IHsgbWVzc2FnZSwgLi4uY29udGV4dCB9ID0gdGhpcy5wYXJzZUFyZ3MoLi4uYXJncyk7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSBhcyBzdHJpbmcsIGNvbnRleHQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBsb2dzIGEgY3JpdGljYWwvZmF0YWwtbGV2ZWwgbWVzc2FnZVxuICAgKlxuICAgKiB0aGUgTG9nRm4gdXNlZCBpbiBmYXN0aWZ5IGxvZ2dlciBoYXMgbXVsdGlwbGUgc2lnbmF0dXJlcywgZm9yXG4gICAqICBtb3JlIGluZm8gc2VlIHtAbGluayBGYXN0aWZ5TG9nRm59XG4gICAqXG4gICAqIEBwYXJhbSBvYmo6IG9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gICAqIEBwYXJhbSBtc2c6IHRoZSBsb2cgbWVzc2FnZSB0byB3cml0ZVxuICAgKi9cbiAgZmF0YWwgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgeyBtZXNzYWdlLCAuLi5jb250ZXh0IH0gPSB0aGlzLnBhcnNlQXJncyguLi5hcmdzKTtcbiAgICB0aGlzLmxvZ2dlci5jcml0aWNhbChtZXNzYWdlIGFzIHN0cmluZywgY29udGV4dCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYSBjaGlsZCBsb2dnZXIgd2l0aCBiaW5kaW5ncyBhbmQgb3B0aW9uYWwgY29uZmlndXJhdGlvblxuICAgKiBjb25mb3JtcyB0byB0aGUgUGluby9GYXN0aWZ5IGxvZ2dlciBpbnRlcmZhY2VcbiAgICpcbiAgICogQHBhcmFtIGJpbmRpbmdzIC0gS2V5LXZhbHVlIHBhaXJzIHRvIGF0dGFjaCB0byBhbGwgbG9ncyBmcm9tIHRoZSBjaGlsZCBsb2dnZXJcbiAgICogQHJldHVybnMgQSBuZXcgRmFzdGlmeUJhc2VMb2dnZXIgaW5zdGFuY2UgKGNoaWxkIGxvZ2dlcilcbiAgICovXG4gIGNoaWxkID0gKGJpbmRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEZhc3RpZnlCYXNlTG9nZ2VyID0+IHtcbiAgICBjb25zdCBjaGlsZExvZ2dlciA9IHRoaXMubG9nZ2VyLmNoaWxkKEpTT04uc3RyaW5naWZ5KGJpbmRpbmdzKSk7XG4gICAgcmV0dXJuIG5ldyBGYXN0aWZ5TG9nZ2VyKGNoaWxkTG9nZ2VyLCB0aGlzLmxldmVsKTtcbiAgfTtcblxuICAvKipcbiAgICogdXRpbGl0eSBmdW5jdGlvbiB0byBtYXAgYW5kIHNlcmlhbGl6ZSB0aGUgYXJndW1lbnRzIG9mIGZhc3RpZnkgbG9nZ2VyIGZ1bmN0aW9uc1xuICAgKlxuICAgKiB0aGUgTG9nRm4gdXNlZCBpbiBmYXN0aWZ5IGxvZ2dlciBoYXMgbXVsdGlwbGUgc2lnbmF0dXJlcywgZm9yXG4gICAqICBtb3JlIGluZm8gc2VlIHtAbGluayBGYXN0aWZ5TG9nRm59XG4gICAqL1xuICBwcml2YXRlIHBhcnNlQXJncyA9ICguLi5hcmdzOiB1bmtub3duW10pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gICAgY29uc3QgW2FyZzAsIGFyZzFdID0gYXJncztcbiAgICBpZiAoIWFyZzApIHRocm93IG5ldyBFcnJvcignRmFzdGlmeSBsb2cgcGFyc2UgZmFpbGVkJyk7XG5cbiAgICBsZXQgaW5mbzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmICh0eXBlb2YgYXJnMCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGZvcm1hdDogbWVzc2FnZSBbLi4uc3BsYXRdXG4gICAgICBpbmZvLm1lc3NhZ2UgPSBhcmcwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3JtYXQ6IG1ldGEgW21lc3NhZ2VdIFsuLi5zcGxhdF1cbiAgICAgIGluZm8gPSBhcmcwIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICBpZiAoYXJnMCBpbnN0YW5jZW9mIEVycm9yKSBpbmZvID0geyBlcnI6IGFyZzAsIG1lc3NhZ2U6IGFyZzAubWVzc2FnZSB9O1xuXG4gICAgICAvLyBzZXJpYWxpemUgZmFzdGlmeSByZXEsIHJlcywgZXJyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbmZvKSB7XG4gICAgICAgIGlmIChzZXJpYWxpemVyc1trZXldKSBpbmZvW2tleV0gPSBzZXJpYWxpemVyc1trZXldKGluZm9ba2V5XSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmcxKSBpbmZvLm1lc3NhZ2UgPSBhcmcxO1xuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9O1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosen-bridge/fastify-enhanced",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0-d5b86d3e",
|
|
4
4
|
"description": "a wrapper around fastify web framework to make it even better",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@fastify/swagger": "^9.5.1",
|
|
32
32
|
"@fastify/swagger-ui": "^5.2.3",
|
|
33
|
+
"@rosen-bridge/abstract-logger": "^4.0.0",
|
|
33
34
|
"fastify": "^5.3.3",
|
|
34
35
|
"fastify-zod-openapi": "^4.1.2",
|
|
35
36
|
"zod-openapi": "^4.2.4"
|