@verdaccio/logger 6.0.0-6-next.24 → 6.0.0-6-next.26

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/.babelrc CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "extends": "../../.babelrc"
2
+ "extends": "../../../.babelrc"
3
3
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @verdaccio/logger
2
2
 
3
+ ## 6.0.0-6-next.26
4
+
5
+ ### Patch Changes
6
+
7
+ - @verdaccio/logger-commons@6.0.0-6-next.26
8
+
9
+ ## 6.0.0-6-next.25
10
+
11
+ ### Patch Changes
12
+
13
+ - @verdaccio/core@6.0.0-6-next.57
14
+
3
15
  ## 6.0.0-6-next.24
4
16
 
5
17
  ### Patch Changes
package/build/index.d.ts CHANGED
@@ -1 +1,3 @@
1
- export { setup, createLogger, logger, prepareSetup } from './logger';
1
+ import { Logger, LoggerConfigItem } from '@verdaccio/types';
2
+ export declare function setup(options: LoggerConfigItem): Logger;
3
+ export declare let logger: Logger;
package/build/index.js CHANGED
@@ -3,29 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "createLogger", {
7
- enumerable: true,
8
- get: function () {
9
- return _logger.createLogger;
6
+ exports.logger = void 0;
7
+ exports.setup = setup;
8
+ var _pino = _interopRequireDefault(require("pino"));
9
+ var _loggerCommons = require("@verdaccio/logger-commons");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function setup(options) {
12
+ if (typeof logger !== 'undefined') {
13
+ return logger;
10
14
  }
11
- });
12
- Object.defineProperty(exports, "logger", {
13
- enumerable: true,
14
- get: function () {
15
- return _logger.logger;
16
- }
17
- });
18
- Object.defineProperty(exports, "prepareSetup", {
19
- enumerable: true,
20
- get: function () {
21
- return _logger.prepareSetup;
22
- }
23
- });
24
- Object.defineProperty(exports, "setup", {
25
- enumerable: true,
26
- get: function () {
27
- return _logger.setup;
28
- }
29
- });
30
- var _logger = require("./logger");
15
+ exports.logger = logger = (0, _loggerCommons.prepareSetup)(options, _pino.default);
16
+ return logger;
17
+ }
18
+ let logger;
19
+ exports.logger = logger;
31
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export { setup, createLogger, logger, prepareSetup } from './logger';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA"}
1
+ {"version":3,"file":"index.js","names":["setup","options","logger","prepareSetup","pino"],"sources":["../src/index.ts"],"sourcesContent":["import pino from 'pino';\n\nimport { prepareSetup } from '@verdaccio/logger-commons';\nimport { Logger, LoggerConfigItem } from '@verdaccio/types';\n\nexport function setup(options: LoggerConfigItem) {\n if (typeof logger !== 'undefined') {\n return logger;\n }\n\n logger = prepareSetup(options, pino);\n return logger;\n}\n\nexport let logger: Logger;\n"],"mappings":";;;;;;;AAAA;AAEA;AAAyD;AAGlD,SAASA,KAAK,CAACC,OAAyB,EAAE;EAC/C,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM;EACf;EAEA,iBAAAA,MAAM,GAAG,IAAAC,2BAAY,EAACF,OAAO,EAAEG,aAAI,CAAC;EACpC,OAAOF,MAAM;AACf;AAEO,IAAIA,MAAc;AAAC"}
package/jest.config.js CHANGED
@@ -1,4 +1,4 @@
1
- const config = require('../../jest/config');
1
+ const config = require('../../../jest/config');
2
2
 
3
3
  module.exports = Object.assign({}, config, {
4
4
  coverageThreshold: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/logger",
3
- "version": "6.0.0-6-next.24",
3
+ "version": "6.0.0-6-next.26",
4
4
  "description": "logger",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -29,10 +29,7 @@
29
29
  "node": ">=12"
30
30
  },
31
31
  "dependencies": {
32
- "@verdaccio/core": "6.0.0-6-next.56",
33
- "@verdaccio/logger-prettify": "6.0.0-6-next.8",
34
- "debug": "4.3.4",
35
- "colorette": "2.0.19",
32
+ "@verdaccio/logger-commons": "6.0.0-6-next.26",
36
33
  "pino": "8.8.0"
37
34
  },
38
35
  "devDependencies": {
@@ -44,7 +41,7 @@
44
41
  },
45
42
  "scripts": {
46
43
  "clean": "rimraf ./build",
47
- "test": "cross-env TZ=utc jest",
44
+ "test": "echo 1",
48
45
  "type-check": "tsc --noEmit -p tsconfig.build.json",
49
46
  "build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
50
47
  "build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
package/src/index.ts CHANGED
@@ -1 +1,15 @@
1
- export { setup, createLogger, logger, prepareSetup } from './logger';
1
+ import pino from 'pino';
2
+
3
+ import { prepareSetup } from '@verdaccio/logger-commons';
4
+ import { Logger, LoggerConfigItem } from '@verdaccio/types';
5
+
6
+ export function setup(options: LoggerConfigItem) {
7
+ if (typeof logger !== 'undefined') {
8
+ return logger;
9
+ }
10
+
11
+ logger = prepareSetup(options, pino);
12
+ return logger;
13
+ }
14
+
15
+ export let logger: Logger;
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "../../tsconfig.base",
2
+ "extends": "../../../tsconfig.base",
3
3
  "compilerOptions": {
4
4
  "rootDir": "./src",
5
5
  "outDir": "./build"
package/tsconfig.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "../../tsconfig.reference.json",
2
+ "extends": "../../../tsconfig.reference.json",
3
3
  "compilerOptions": {
4
4
  "rootDir": "./src",
5
5
  "outDir": "./build"
@@ -8,6 +8,9 @@
8
8
  "references": [
9
9
  {
10
10
  "path": "../logger-prettify"
11
+ },
12
+ {
13
+ "path": "../logger-commons"
11
14
  }
12
15
  ]
13
16
  }
package/build/logger.d.ts DELETED
@@ -1,18 +0,0 @@
1
- /// <reference types="node" />
2
- import { Logger, LoggerConfigItem, LoggerFormat } from '@verdaccio/types';
3
- export type LogPlugin = {
4
- dest: string;
5
- options?: any[];
6
- };
7
- type LoggerOptions = {
8
- level?: string;
9
- path?: string;
10
- colors?: boolean;
11
- sync?: boolean;
12
- };
13
- export declare function createLogger(options?: LoggerOptions, destination?: NodeJS.WritableStream, format?: LoggerFormat): any;
14
- export type LoggerConfig = LoggerConfigItem;
15
- export declare function prepareSetup(options?: LoggerConfigItem): Logger;
16
- export declare let logger: Logger;
17
- export declare function setup(options: LoggerConfigItem): Logger;
18
- export {};
package/build/logger.js DELETED
@@ -1,142 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createLogger = createLogger;
7
- exports.logger = void 0;
8
- exports.prepareSetup = prepareSetup;
9
- exports.setup = setup;
10
- var _colorette = require("colorette");
11
- var _debug = _interopRequireDefault(require("debug"));
12
- var _pino = _interopRequireDefault(require("pino"));
13
- var _loggerPrettify = require("@verdaccio/logger-prettify");
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
- // <reference types="node" />
16
-
17
- const debug = (0, _debug.default)('verdaccio:logger');
18
- function isProd() {
19
- return process.env.NODE_ENV === 'production';
20
- }
21
- function hasColors(colors) {
22
- if (colors) {
23
- return _colorette.isColorSupported;
24
- }
25
- return typeof colors === 'undefined' ? true : colors;
26
- }
27
- const DEFAULT_LOG_FORMAT = isProd() ? 'json' : 'pretty';
28
- function createLogger(options = {
29
- level: 'http'
30
- },
31
- // eslint-disable-next-line no-undef
32
- // @ts-ignore
33
- destination = _pino.default.destination(1), format = DEFAULT_LOG_FORMAT) {
34
- debug('setup logger');
35
- let pinoConfig = {
36
- customLevels: {
37
- http: 25
38
- },
39
- level: options.level,
40
- serializers: {
41
- err: _pino.default.stdSerializers.err,
42
- req: _pino.default.stdSerializers.req,
43
- res: _pino.default.stdSerializers.res
44
- }
45
- };
46
- debug('has prettifier? %o', !isProd());
47
- // pretty logs are not allowed in production for performance reasons
48
- if (['pretty-timestamped', 'pretty'].includes(format) && isProd() === false) {
49
- pinoConfig = Object.assign({}, pinoConfig, {
50
- transport: {
51
- target: '@verdaccio/logger-prettify',
52
- options: {
53
- // string or 1 (file descriptor for process.stdout)
54
- destination: options.path || 1,
55
- colors: hasColors(options.colors),
56
- prettyStamp: format === 'pretty-timestamped'
57
- }
58
- }
59
- });
60
- } else {
61
- pinoConfig = {
62
- ...pinoConfig,
63
- // more info
64
- // https://github.com/pinojs/pino/blob/v7.1.0/docs/api.md#hooks-object
65
- // TODO: improve typings here
66
- // @ts-ignore
67
- hooks: {
68
- logMethod(inputArgs, method) {
69
- const [templateObject, message, ...otherArgs] = inputArgs;
70
- const templateVars = !!templateObject && typeof templateObject === 'object' ? Object.getOwnPropertyNames(templateObject) : [];
71
- if (!message || !templateVars.length) return method.apply(this, inputArgs);
72
- const hydratedMessage = (0, _loggerPrettify.fillInMsgTemplate)(message, templateObject, false);
73
- return method.apply(this, [templateObject, hydratedMessage, ...otherArgs]);
74
- }
75
- }
76
- };
77
- }
78
- const logger = (0, _pino.default)(pinoConfig, destination);
79
-
80
- /* eslint-disable */
81
- /* istanbul ignore next */
82
- if (process.env.DEBUG) {
83
- logger.on('level-change', (lvl, val, prevLvl, prevVal) => {
84
- debug('%s (%d) was changed to %s (%d)', lvl, val, prevLvl, prevVal);
85
- });
86
- }
87
- return logger;
88
- }
89
- const DEFAULT_LOGGER_CONF = {
90
- type: 'stdout',
91
- format: 'pretty',
92
- level: 'http'
93
- };
94
- function prepareSetup(options = DEFAULT_LOGGER_CONF) {
95
- var _loggerConfig;
96
- let logger;
97
- let loggerConfig = options;
98
- if (!((_loggerConfig = loggerConfig) !== null && _loggerConfig !== void 0 && _loggerConfig.level)) {
99
- loggerConfig = Object.assign({}, {
100
- level: 'http'
101
- }, loggerConfig);
102
- }
103
- const pinoConfig = {
104
- level: loggerConfig.level
105
- };
106
- if (loggerConfig.type === 'file') {
107
- debug('logging file enabled');
108
- const destination = _pino.default.destination(loggerConfig.path);
109
- /* eslint-disable */
110
- /* istanbul ignore next */
111
- process.on('SIGUSR2', () => destination.reopen());
112
- // @ts-ignore
113
- logger = createLogger({
114
- level: loggerConfig.level,
115
- path: loggerConfig.path,
116
- colors: loggerConfig.colors
117
- },
118
- // @ts-ignore
119
- destination, loggerConfig.format);
120
- return logger;
121
- } else {
122
- debug('logging stdout enabled');
123
- // @ts-ignore
124
- logger = createLogger({
125
- level: loggerConfig.level,
126
- colors: loggerConfig.colors
127
- },
128
- // @ts-ignore
129
- _pino.default.destination(1), loggerConfig.format);
130
- return logger;
131
- }
132
- }
133
- let logger;
134
- exports.logger = logger;
135
- function setup(options) {
136
- if (typeof logger !== 'undefined') {
137
- return logger;
138
- }
139
- exports.logger = logger = prepareSetup(options);
140
- return logger;
141
- }
142
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","names":["debug","buildDebug","isProd","process","env","NODE_ENV","hasColors","colors","isColorSupported","DEFAULT_LOG_FORMAT","createLogger","options","level","destination","pino","format","pinoConfig","customLevels","http","serializers","err","stdSerializers","req","res","includes","Object","assign","transport","target","path","prettyStamp","hooks","logMethod","inputArgs","method","templateObject","message","otherArgs","templateVars","getOwnPropertyNames","length","apply","hydratedMessage","fillInMsgTemplate","logger","DEBUG","on","lvl","val","prevLvl","prevVal","DEFAULT_LOGGER_CONF","type","prepareSetup","loggerConfig","reopen","setup"],"sources":["../src/logger.ts"],"sourcesContent":["// <reference types=\"node\" />\nimport { isColorSupported } from 'colorette';\nimport buildDebug from 'debug';\nimport pino from 'pino';\n\nimport { fillInMsgTemplate } from '@verdaccio/logger-prettify';\nimport { Logger, LoggerConfigItem, LoggerFormat } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:logger');\n\nfunction isProd() {\n return process.env.NODE_ENV === 'production';\n}\n\nfunction hasColors(colors: boolean | undefined) {\n if (colors) {\n return isColorSupported;\n }\n return typeof colors === 'undefined' ? true : colors;\n}\n\nconst DEFAULT_LOG_FORMAT = isProd() ? 'json' : 'pretty';\n\nexport type LogPlugin = {\n dest: string;\n options?: any[];\n};\n\ntype LoggerOptions = { level?: string; path?: string; colors?: boolean; sync?: boolean };\n\nexport function createLogger(\n options: LoggerOptions = { level: 'http' },\n // eslint-disable-next-line no-undef\n // @ts-ignore\n destination: NodeJS.WritableStream = pino.destination(1),\n format: LoggerFormat = DEFAULT_LOG_FORMAT\n): any {\n debug('setup logger');\n let pinoConfig = {\n customLevels: {\n http: 25,\n },\n level: options.level,\n serializers: {\n err: pino.stdSerializers.err,\n req: pino.stdSerializers.req,\n res: pino.stdSerializers.res,\n },\n };\n\n debug('has prettifier? %o', !isProd());\n // pretty logs are not allowed in production for performance reasons\n if (['pretty-timestamped', 'pretty'].includes(format) && isProd() === false) {\n pinoConfig = Object.assign({}, pinoConfig, {\n transport: {\n target: '@verdaccio/logger-prettify',\n options: {\n // string or 1 (file descriptor for process.stdout)\n destination: options.path || 1,\n colors: hasColors(options.colors),\n prettyStamp: format === 'pretty-timestamped',\n },\n },\n });\n } else {\n pinoConfig = {\n ...pinoConfig,\n // more info\n // https://github.com/pinojs/pino/blob/v7.1.0/docs/api.md#hooks-object\n // TODO: improve typings here\n // @ts-ignore\n hooks: {\n logMethod(\n inputArgs: [any, any, ...any[]],\n method: {\n apply: (arg0: { logMethod: (inputArgs: any, method: any) => any }, arg1: any[]) => any;\n }\n ) {\n const [templateObject, message, ...otherArgs] = inputArgs;\n const templateVars =\n !!templateObject && typeof templateObject === 'object'\n ? Object.getOwnPropertyNames(templateObject)\n : [];\n if (!message || !templateVars.length) return method.apply(this, inputArgs);\n const hydratedMessage = fillInMsgTemplate(message, templateObject, false);\n return method.apply(this, [templateObject, hydratedMessage, ...otherArgs]);\n },\n },\n };\n }\n const logger = pino(pinoConfig, destination);\n\n /* eslint-disable */\n /* istanbul ignore next */\n if (process.env.DEBUG) {\n logger.on('level-change', (lvl, val, prevLvl, prevVal) => {\n debug('%s (%d) was changed to %s (%d)', lvl, val, prevLvl, prevVal);\n });\n }\n\n return logger;\n}\n\nconst DEFAULT_LOGGER_CONF: LoggerConfigItem = {\n type: 'stdout',\n format: 'pretty',\n level: 'http',\n};\n\nexport type LoggerConfig = LoggerConfigItem;\n\nexport function prepareSetup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF) {\n let logger: Logger;\n let loggerConfig = options;\n if (!loggerConfig?.level) {\n loggerConfig = Object.assign(\n {},\n {\n level: 'http',\n },\n loggerConfig\n );\n }\n const pinoConfig = { level: loggerConfig.level };\n if (loggerConfig.type === 'file') {\n debug('logging file enabled');\n const destination = pino.destination(loggerConfig.path);\n /* eslint-disable */\n /* istanbul ignore next */\n process.on('SIGUSR2', () => destination.reopen());\n // @ts-ignore\n logger = createLogger(\n { level: loggerConfig.level, path: loggerConfig.path, colors: loggerConfig.colors },\n // @ts-ignore\n destination,\n loggerConfig.format\n );\n return logger;\n } else {\n debug('logging stdout enabled');\n // @ts-ignore\n logger = createLogger(\n { level: loggerConfig.level, colors: loggerConfig.colors },\n // @ts-ignore\n pino.destination(1),\n loggerConfig.format\n );\n return logger;\n }\n}\n\nexport let logger: Logger;\n\nexport function setup(options: LoggerConfigItem) {\n if (typeof logger !== 'undefined') {\n return logger;\n }\n\n logger = prepareSetup(options);\n return logger;\n}\n"],"mappings":"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"}
package/src/logger.ts DELETED
@@ -1,161 +0,0 @@
1
- // <reference types="node" />
2
- import { isColorSupported } from 'colorette';
3
- import buildDebug from 'debug';
4
- import pino from 'pino';
5
-
6
- import { fillInMsgTemplate } from '@verdaccio/logger-prettify';
7
- import { Logger, LoggerConfigItem, LoggerFormat } from '@verdaccio/types';
8
-
9
- const debug = buildDebug('verdaccio:logger');
10
-
11
- function isProd() {
12
- return process.env.NODE_ENV === 'production';
13
- }
14
-
15
- function hasColors(colors: boolean | undefined) {
16
- if (colors) {
17
- return isColorSupported;
18
- }
19
- return typeof colors === 'undefined' ? true : colors;
20
- }
21
-
22
- const DEFAULT_LOG_FORMAT = isProd() ? 'json' : 'pretty';
23
-
24
- export type LogPlugin = {
25
- dest: string;
26
- options?: any[];
27
- };
28
-
29
- type LoggerOptions = { level?: string; path?: string; colors?: boolean; sync?: boolean };
30
-
31
- export function createLogger(
32
- options: LoggerOptions = { level: 'http' },
33
- // eslint-disable-next-line no-undef
34
- // @ts-ignore
35
- destination: NodeJS.WritableStream = pino.destination(1),
36
- format: LoggerFormat = DEFAULT_LOG_FORMAT
37
- ): any {
38
- debug('setup logger');
39
- let pinoConfig = {
40
- customLevels: {
41
- http: 25,
42
- },
43
- level: options.level,
44
- serializers: {
45
- err: pino.stdSerializers.err,
46
- req: pino.stdSerializers.req,
47
- res: pino.stdSerializers.res,
48
- },
49
- };
50
-
51
- debug('has prettifier? %o', !isProd());
52
- // pretty logs are not allowed in production for performance reasons
53
- if (['pretty-timestamped', 'pretty'].includes(format) && isProd() === false) {
54
- pinoConfig = Object.assign({}, pinoConfig, {
55
- transport: {
56
- target: '@verdaccio/logger-prettify',
57
- options: {
58
- // string or 1 (file descriptor for process.stdout)
59
- destination: options.path || 1,
60
- colors: hasColors(options.colors),
61
- prettyStamp: format === 'pretty-timestamped',
62
- },
63
- },
64
- });
65
- } else {
66
- pinoConfig = {
67
- ...pinoConfig,
68
- // more info
69
- // https://github.com/pinojs/pino/blob/v7.1.0/docs/api.md#hooks-object
70
- // TODO: improve typings here
71
- // @ts-ignore
72
- hooks: {
73
- logMethod(
74
- inputArgs: [any, any, ...any[]],
75
- method: {
76
- apply: (arg0: { logMethod: (inputArgs: any, method: any) => any }, arg1: any[]) => any;
77
- }
78
- ) {
79
- const [templateObject, message, ...otherArgs] = inputArgs;
80
- const templateVars =
81
- !!templateObject && typeof templateObject === 'object'
82
- ? Object.getOwnPropertyNames(templateObject)
83
- : [];
84
- if (!message || !templateVars.length) return method.apply(this, inputArgs);
85
- const hydratedMessage = fillInMsgTemplate(message, templateObject, false);
86
- return method.apply(this, [templateObject, hydratedMessage, ...otherArgs]);
87
- },
88
- },
89
- };
90
- }
91
- const logger = pino(pinoConfig, destination);
92
-
93
- /* eslint-disable */
94
- /* istanbul ignore next */
95
- if (process.env.DEBUG) {
96
- logger.on('level-change', (lvl, val, prevLvl, prevVal) => {
97
- debug('%s (%d) was changed to %s (%d)', lvl, val, prevLvl, prevVal);
98
- });
99
- }
100
-
101
- return logger;
102
- }
103
-
104
- const DEFAULT_LOGGER_CONF: LoggerConfigItem = {
105
- type: 'stdout',
106
- format: 'pretty',
107
- level: 'http',
108
- };
109
-
110
- export type LoggerConfig = LoggerConfigItem;
111
-
112
- export function prepareSetup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF) {
113
- let logger: Logger;
114
- let loggerConfig = options;
115
- if (!loggerConfig?.level) {
116
- loggerConfig = Object.assign(
117
- {},
118
- {
119
- level: 'http',
120
- },
121
- loggerConfig
122
- );
123
- }
124
- const pinoConfig = { level: loggerConfig.level };
125
- if (loggerConfig.type === 'file') {
126
- debug('logging file enabled');
127
- const destination = pino.destination(loggerConfig.path);
128
- /* eslint-disable */
129
- /* istanbul ignore next */
130
- process.on('SIGUSR2', () => destination.reopen());
131
- // @ts-ignore
132
- logger = createLogger(
133
- { level: loggerConfig.level, path: loggerConfig.path, colors: loggerConfig.colors },
134
- // @ts-ignore
135
- destination,
136
- loggerConfig.format
137
- );
138
- return logger;
139
- } else {
140
- debug('logging stdout enabled');
141
- // @ts-ignore
142
- logger = createLogger(
143
- { level: loggerConfig.level, colors: loggerConfig.colors },
144
- // @ts-ignore
145
- pino.destination(1),
146
- loggerConfig.format
147
- );
148
- return logger;
149
- }
150
- }
151
-
152
- export let logger: Logger;
153
-
154
- export function setup(options: LoggerConfigItem) {
155
- if (typeof logger !== 'undefined') {
156
- return logger;
157
- }
158
-
159
- logger = prepareSetup(options);
160
- return logger;
161
- }
@@ -1,20 +0,0 @@
1
- import { Writable } from 'stream';
2
-
3
- import { createLogger } from '../src';
4
-
5
- describe('logger test', () => {
6
- describe('json format', () => {
7
- test('should write json to a stream', () => {
8
- const stream = new Writable({
9
- write(chunk, encoding, callback) {
10
- expect(JSON.parse(chunk.toString())).toEqual(
11
- expect.objectContaining({ level: 30, msg: 'test' })
12
- );
13
- callback();
14
- },
15
- });
16
- const logger = createLogger({ level: 'http' }, stream, 'json');
17
- logger.info('test');
18
- });
19
- });
20
- });
@@ -1,115 +0,0 @@
1
- import { readFile } from 'fs/promises';
2
- import { join } from 'path';
3
- import { setTimeout } from 'timers/promises';
4
-
5
- import { fileUtils } from '@verdaccio/core';
6
-
7
- import { prepareSetup } from '../src';
8
-
9
- async function readLogFile(path: string) {
10
- await setTimeout(1000, 'resolved');
11
- return readFile(path, 'utf8');
12
- }
13
-
14
- async function createLogFile() {
15
- const folder = await fileUtils.createTempFolder('logger-1');
16
- const file = join(folder, 'logger.log');
17
- return file;
18
- }
19
-
20
- const defaultOptions = {
21
- format: 'json',
22
- level: 'http',
23
- colors: false,
24
- };
25
-
26
- describe('logger test', () => {
27
- describe('basic', () => {
28
- test('should include default level', async () => {
29
- const file = await createLogFile();
30
- const logger = prepareSetup({ type: 'file', path: file, colors: false });
31
- logger.info({ packageName: 'test' }, `testing @{packageName}`);
32
- // Note: this should not be logged
33
- logger.debug(`this should not be logged`);
34
- // Note: this should not be logged
35
- logger.trace(`this should not be logged`);
36
- logger.error(`this should logged`);
37
- const content = await readLogFile(file);
38
- expect(content).toBe('info --- testing test \nerror--- this should logged \n');
39
- });
40
-
41
- test('should include all logging level', async () => {
42
- const file = await createLogFile();
43
- const logger = prepareSetup({ type: 'file', level: 'trace', path: file, colors: false });
44
- logger.info({ packageName: 'test' }, `testing @{packageName}`);
45
- logger.debug(`this should not be logged`);
46
- logger.trace(`this should not be logged`);
47
- logger.error(`this should logged`);
48
- const content = await readLogFile(file);
49
- expect(content).toBe(
50
- 'info --- testing test \ndebug--- this should not be logged \ntrace--- this should not be logged \nerror--- this should logged \n'
51
- );
52
- });
53
- });
54
-
55
- describe('json format', () => {
56
- test('should log into a file with json format', async () => {
57
- const file = await createLogFile();
58
- const logger = prepareSetup({
59
- ...defaultOptions,
60
- format: 'json',
61
- type: 'file',
62
- path: file,
63
- level: 'info',
64
- });
65
- logger.info(
66
- { packageName: 'test' },
67
- `publishing or updating a new version for @{packageName}`
68
- );
69
- const content = await readLogFile(file);
70
- expect(JSON.parse(content)).toEqual(
71
- expect.objectContaining({
72
- level: 30,
73
- msg: 'publishing or updating a new version for test',
74
- })
75
- );
76
- });
77
- });
78
-
79
- describe('pretty format', () => {
80
- test('should log into a file with pretty', async () => {
81
- const file = await createLogFile();
82
- const logger = prepareSetup({
83
- format: 'pretty',
84
- type: 'file',
85
- path: file,
86
- level: 'trace',
87
- colors: false,
88
- });
89
- logger.info(
90
- { packageName: 'test' },
91
- `publishing or updating a new version for @{packageName}`
92
- );
93
- const content = await readLogFile(file);
94
- expect(content).toEqual('info --- publishing or updating a new version for test \n');
95
- });
96
-
97
- test('should log into a file with pretty-timestamped', async () => {
98
- const file = await createLogFile();
99
- const logger = prepareSetup({
100
- format: 'pretty-timestamped',
101
- type: 'file',
102
- path: file,
103
- level: 'trace',
104
- colors: false,
105
- });
106
- logger.info(
107
- { packageName: 'test' },
108
- `publishing or updating a new version for @{packageName}`
109
- );
110
- const content = await readLogFile(file);
111
- // TODO: we might want mock time for testing
112
- expect(content).toMatch('info --- publishing or updating a new version for test \n');
113
- });
114
- });
115
- });