@nestjs-labs/nestjs-pino-extra 1.0.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestjs-labs/nestjs-pino-extra",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "Enhanced nestjs-pino with OpenTelemetry, Loki, file rotation and enterprise features",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -9,20 +9,16 @@
9
9
  ".": {
10
10
  "import": "./dist/index.js",
11
11
  "require": "./dist/index.js"
12
+ },
13
+ "./module-option": {
14
+ "import": "./dist/module-option.js",
15
+ "require": "./dist/module-option.js"
12
16
  }
13
17
  },
14
- "scripts": {
15
- "build": "tsc",
16
- "lint": "eslint .",
17
- "lint:fix": "eslint . --fix && prettier --write .",
18
- "format": "prettier --write .",
19
- "dry-run": "npm publish --dry-run",
20
- "prepublishOnly": "npm run build",
21
- "semantic-release": "semantic-release"
22
- },
23
18
  "repository": {
24
19
  "type": "git",
25
- "url": "git+https://github.com/nestjs-labs/nestjs-pino-extra.git"
20
+ "url": "git+https://github.com/nestjs-labs/nestjs-pino-extra.git",
21
+ "directory": "packages/nestjs-pino-extra"
26
22
  },
27
23
  "keywords": [
28
24
  "nestjs",
@@ -37,27 +33,18 @@
37
33
  "bugs": {
38
34
  "url": "https://github.com/nestjs-labs/nestjs-pino-extra/issues"
39
35
  },
40
- "homepage": "https://github.com/nestjs-labs/nestjs-pino-extra#readme",
36
+ "homepage": "https://nestjs-labs.github.io/nestjs-pino-extra",
37
+ "docs": "https://nestjs-labs.github.io/nestjs-pino-extra",
41
38
  "files": [
42
39
  "dist"
43
40
  ],
44
- "dependencies": {
45
- "@opentelemetry/api": "^1.9.0",
46
- "nestjs-pino": "^4.4.0",
47
- "pino": "^9.7.0",
48
- "pino-http": "^10.5.0",
49
- "pino-loki": "^2.6.0",
50
- "pino-pretty": "^13.0.0",
51
- "pino-std-serializers": "^7.0.0",
52
- "rotating-file-stream": "^3.2.6"
53
- },
54
41
  "devDependencies": {
55
42
  "@commitlint/cli": "^19.4.1",
56
43
  "@commitlint/config-conventional": "^19.4.1",
57
44
  "@nestjs-labs/eslint-config": "^1.0.1",
58
- "@nestjs/config": "^4.0.2",
45
+ "@nestjs/config": "^4.0.0",
59
46
  "@semantic-release/changelog": "^6.0.3",
60
- "@semantic-release/commit-analyzer": "^9.0.2",
47
+ "@semantic-release/commit-analyzer": "^13.0.1",
61
48
  "@semantic-release/git": "^10.0.1",
62
49
  "@semantic-release/github": "^11.0.3",
63
50
  "@semantic-release/npm": "^12.0.2",
@@ -67,10 +54,27 @@
67
54
  "semantic-release": "^24.2.7",
68
55
  "tslib": "^2.8.0",
69
56
  "typedoc": "^0.28.7",
70
- "typescript": "^5.5.4"
57
+ "typescript": "^5.5.4",
58
+ "@nestjs-labs/pino-http-extra": "1.0.2"
71
59
  },
72
60
  "peerDependencies": {
73
- "@nestjs/config": "^4.0.2"
61
+ "@nestjs/config": "^4.0.0",
62
+ "nestjs-pino": "^4.4.0",
63
+ "@nestjs-labs/pino-http-extra": "1.0.2"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "@nestjs/config": {
67
+ "optional": false,
68
+ "description": "Required for configuration management"
69
+ },
70
+ "@nestjs-labs/pino-http-extra": {
71
+ "optional": false,
72
+ "description": "Required for enhanced pino-http functionality"
73
+ },
74
+ "nestjs-pino": {
75
+ "optional": false,
76
+ "description": "Required for NestJS Pino integration"
77
+ }
74
78
  },
75
79
  "config": {
76
80
  "commitizen": {
@@ -81,5 +85,16 @@
81
85
  "extends": [
82
86
  "@commitlint/config-conventional"
83
87
  ]
88
+ },
89
+ "dependencies": {
90
+ "@anolilab/semantic-release-pnpm": "^2.0.2"
91
+ },
92
+ "scripts": {
93
+ "build": "tsc",
94
+ "lint": "eslint .",
95
+ "lint:fix": "eslint . --fix && prettier --write .",
96
+ "format": "prettier --write .",
97
+ "dry-run": "npm publish --dry-run",
98
+ "semantic-release": "semantic-release"
84
99
  }
85
- }
100
+ }
@@ -1,6 +0,0 @@
1
- export declare function getOtelFormatters(spanIdKey?: string, traceIdKey?: string): {
2
- level: (label: string) => {
3
- level: string;
4
- };
5
- log(object: Record<string, unknown>): Record<string, unknown>;
6
- };
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOtelFormatters = getOtelFormatters;
4
- const api_1 = require("@opentelemetry/api");
5
- function getOtelFormatters(spanIdKey = 'spanId', traceIdKey = 'traceId') {
6
- return {
7
- level: (label) => {
8
- return { level: label };
9
- },
10
- log(object) {
11
- const span = api_1.trace.getSpan(api_1.context.active());
12
- if (!span)
13
- return object;
14
- const spanContext = api_1.trace.getSpan(api_1.context.active())?.spanContext();
15
- if (!spanContext)
16
- return object;
17
- const { spanId, traceId } = spanContext;
18
- return { ...object, [spanIdKey]: spanId, [traceIdKey]: traceId };
19
- },
20
- };
21
- }
22
- //# sourceMappingURL=formatters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":";;AAMA,8CAsBC;AA5BD,4CAAoD;AAMpD,SAAgB,iBAAiB,CAC/B,SAAS,GAAG,QAAQ,EACpB,UAAU,GAAG,SAAS;IAEtB,OAAO;QACL,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE;YACvB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;QAED,GAAG,CAAC,MAA+B;YACjC,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAE7C,IAAI,CAAC,IAAI;gBAAE,OAAO,MAAM,CAAC;YACzB,MAAM,WAAW,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;YAEnE,IAAI,CAAC,WAAW;gBAAE,OAAO,MAAM,CAAC;YAEhC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;YAExC,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACnE,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/options.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import type { Options } from 'pino-http';
2
- export declare function getPinoHttpOption(level?: string, spanIdKey?: string, traceIdKey?: string): Options;
package/dist/options.js DELETED
@@ -1,54 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getPinoHttpOption = getPinoHttpOption;
7
- const node_crypto_1 = require("node:crypto");
8
- const pino_1 = __importDefault(require("pino"));
9
- const formatters_js_1 = require("./formatters.js");
10
- const serializers_js_1 = require("./serializers.js");
11
- function getPinoHttpOption(level = 'info', spanIdKey = 'spanId', traceIdKey = 'traceId') {
12
- return {
13
- level,
14
- quietReqLogger: false,
15
- timestamp: pino_1.default.stdTimeFunctions.isoTime,
16
- customAttributeKeys: {
17
- req: 'req',
18
- res: 'res',
19
- err: 'err',
20
- responseTime: 'taken(ms)',
21
- },
22
- formatters: (0, formatters_js_1.getOtelFormatters)(spanIdKey, traceIdKey),
23
- serializers: (0, serializers_js_1.getSerializers)(),
24
- redact: {
25
- paths: [
26
- 'password',
27
- 'reqBody.password',
28
- 'user.password',
29
- 'reqBody.user.password',
30
- ],
31
- },
32
- genReqId: function (req, res) {
33
- const reqId = req.id ?? req.headers['x-request-id'];
34
- if (reqId)
35
- return reqId;
36
- const id = (0, node_crypto_1.randomUUID)();
37
- res.setHeader('X-Request-Id', id);
38
- return id;
39
- },
40
- customLogLevel(_, res, err) {
41
- if (res.statusCode >= 400 && res.statusCode < 500) {
42
- return 'warn';
43
- }
44
- else if (res.statusCode >= 500 || err) {
45
- return 'error';
46
- }
47
- else if (res.statusCode >= 300 && res.statusCode < 400) {
48
- return 'silent';
49
- }
50
- return 'info';
51
- },
52
- };
53
- }
54
- //# sourceMappingURL=options.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";;;;;AAcA,8CAuDC;AApED,6CAAyC;AAKzC,gDAAwB;AAExB,mDAAoD;AACpD,qDAAkD;AAKlD,SAAgB,iBAAiB,CAC/B,KAAK,GAAG,MAAM,EACd,SAAS,GAAG,QAAQ,EACpB,UAAU,GAAG,SAAS;IAEtB,OAAO;QAIL,KAAK;QACL,cAAc,EAAE,KAAK;QACrB,SAAS,EAAE,cAAI,CAAC,gBAAgB,CAAC,OAAO;QACxC,mBAAmB,EAAE;YACnB,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;YACV,YAAY,EAAE,WAAW;SAC1B;QACD,UAAU,EAAE,IAAA,iCAAiB,EAAC,SAAS,EAAE,UAAU,CAAC;QACpD,WAAW,EAAE,IAAA,+BAAc,GAAE;QAC7B,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,UAAU;gBACV,kBAAkB;gBAClB,eAAe;gBACf,uBAAuB;aACxB;SACF;QACD,QAAQ,EAAE,UAAU,GAAG,EAAE,GAAG;YAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAEpD,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;YACxB,MAAM,EAAE,GAAG,IAAA,wBAAU,GAAE,CAAC;YAExB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAElC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,cAAc,CACZ,CAAkB,EAClB,GAAoC,EACpC,GAAW;YAEX,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAClD,OAAO,MAAM,CAAC;YAChB,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;gBACxC,OAAO,OAAO,CAAC;YACjB,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBACzD,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { SerializerFn } from 'pino';
2
- export declare function getSerializers(): Record<string, SerializerFn>;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSerializers = getSerializers;
4
- function getSerializers() {
5
- return {
6
- req(req) {
7
- const request = req.raw;
8
- return {
9
- id: req.id,
10
- method: req.method,
11
- url: req.url,
12
- headers: request.headers,
13
- query: request.query,
14
- body: request.body,
15
- };
16
- },
17
- res(response) {
18
- const { statusCode: status, ...serialized } = response;
19
- return Object.assign({ status }, serialized);
20
- },
21
- err(err) {
22
- return err;
23
- },
24
- };
25
- }
26
- //# sourceMappingURL=serializers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serializers.js","sourceRoot":"","sources":["../src/serializers.ts"],"names":[],"mappings":";;AAYA,wCAyBC;AAzBD,SAAgB,cAAc;IAC5B,OAAO;QACL,GAAG,CAAC,GAAsB;YACxB,MAAM,OAAO,GAAG,GAAG,CAAC,GAEnB,CAAC;YAEF,OAAO;gBACL,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,QAA4B;YAC9B,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC;YAEvD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC;QACD,GAAG,CAAC,GAAoB;YACtB,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/streams.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import pino from 'pino';
2
- export declare function createPrettyStreamEntry(_app: string, level: pino.Level): pino.StreamEntry;
3
- export declare function createLokiStreamEntry(app: string, level: pino.Level, host: string): pino.StreamEntry;
4
- export declare function createFileStreamEntry(_app: string, level: pino.Level, filepath: string): pino.StreamEntry;
5
- export declare function getMultiDestinationStream(app: string, level?: pino.Level, filepath?: string, loki?: string): pino.MultiStreamRes;
package/dist/streams.js DELETED
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createPrettyStreamEntry = createPrettyStreamEntry;
7
- exports.createLokiStreamEntry = createLokiStreamEntry;
8
- exports.createFileStreamEntry = createFileStreamEntry;
9
- exports.getMultiDestinationStream = getMultiDestinationStream;
10
- const node_path_1 = __importDefault(require("node:path"));
11
- const pino_1 = __importDefault(require("pino"));
12
- const pino_loki_1 = require("pino-loki");
13
- const pino_pretty_1 = __importDefault(require("pino-pretty"));
14
- const rotating_file_stream_1 = require("rotating-file-stream");
15
- function createPrettyStreamEntry(_app, level) {
16
- const stream = (0, pino_pretty_1.default)({
17
- translateTime: false,
18
- hideObject: false,
19
- colorize: true,
20
- });
21
- return { level, stream };
22
- }
23
- function createLokiStreamEntry(app, level, host) {
24
- const stream = (0, pino_loki_1.pinoLoki)({
25
- replaceTimestamp: true,
26
- batching: true,
27
- interval: 5,
28
- host,
29
- labels: { app },
30
- });
31
- return { level, stream };
32
- }
33
- function createFileStreamEntry(_app, level, filepath) {
34
- const { base, dir } = node_path_1.default.parse(filepath);
35
- const stream = (0, rotating_file_stream_1.createStream)(base, {
36
- size: '1G',
37
- interval: '1d',
38
- compress: 'gzip',
39
- path: dir,
40
- });
41
- return { level, stream };
42
- }
43
- function getMultiDestinationStream(app, level = 'info', filepath, loki) {
44
- const entries = [createPrettyStreamEntry(app, level)];
45
- if (filepath)
46
- entries.push(createFileStreamEntry(app, level, filepath));
47
- if (loki)
48
- entries.push(createLokiStreamEntry(app, level, loki));
49
- return pino_1.default.multistream(entries);
50
- }
51
- //# sourceMappingURL=streams.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streams.js","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":";;;;;AAWA,0DAWC;AAMD,sDAcC;AAMD,sDAeC;AAMD,8DAYC;AAhFD,0DAA6B;AAE7B,gDAAwB;AACxB,yCAAqC;AACrC,8DAAqC;AACrC,+DAAoD;AAKpD,SAAgB,uBAAuB,CACrC,IAAY,EACZ,KAAiB;IAEjB,MAAM,MAAM,GAAG,IAAA,qBAAU,EAAC;QACxB,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAMD,SAAgB,qBAAqB,CACnC,GAAW,EACX,KAAiB,EACjB,IAAY;IAEZ,MAAM,MAAM,GAAG,IAAA,oBAAQ,EAAC;QACtB,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,CAAC;QACX,IAAI;QACJ,MAAM,EAAE,EAAE,GAAG,EAAE;KAChB,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAMD,SAAgB,qBAAqB,CACnC,IAAY,EACZ,KAAiB,EACjB,QAAgB;IAEhB,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,mBAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,IAAA,mCAAY,EAAC,IAAI,EAAE;QAChC,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAMD,SAAgB,yBAAyB,CACvC,GAAW,EACX,QAAoB,MAAM,EAC1B,QAAiB,EACjB,IAAa;IAEb,MAAM,OAAO,GAAuB,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1E,IAAI,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxE,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAEhE,OAAO,cAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}