@verdaccio/logger 6.0.0-6-next.10 → 6.0.0-6-next.11

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,38 @@
1
1
  # @verdaccio/logger
2
2
 
3
+ ## 6.0.0-6-next.11
4
+
5
+ ### Major Changes
6
+
7
+ - 82cb0f2b: feat!: config.logs throw an error, logging config not longer accept array or logs property
8
+
9
+ ### 💥 Breaking change
10
+
11
+ This is valid
12
+
13
+ ```yaml
14
+ log: { type: stdout, format: pretty, level: http }
15
+ ```
16
+
17
+ This is invalid
18
+
19
+ ```yaml
20
+ logs: { type: stdout, format: pretty, level: http }
21
+ ```
22
+
23
+ or
24
+
25
+ ```yaml
26
+ logs:
27
+ - [{ type: stdout, format: pretty, level: http }]
28
+ ```
29
+
30
+ ### Patch Changes
31
+
32
+ - Updated dependencies [82cb0f2b]
33
+ - Updated dependencies [5167bb52]
34
+ - @verdaccio/core@6.0.0-6-next.5
35
+
3
36
  ## 6.0.0-6-next.10
4
37
 
5
38
  ### Patch Changes
package/build/logger.js CHANGED
@@ -36,11 +36,11 @@ const DEFAULT_LOG_FORMAT = isProd() ? 'json' : 'pretty';
36
36
 
37
37
  function createLogger(options = {
38
38
  level: 'http'
39
- }, destination = _pino.default.destination(1), format = DEFAULT_LOG_FORMAT, prettyPrintOptions = {
39
+ }, destination = _pino.default.destination(1), prettyPrintOptions = {
40
40
  // we hide warning since the prettifier should not be used in production
41
41
  // https://getpino.io/#/docs/pretty?id=prettifier-api
42
42
  suppressFlushSyncWarning: true
43
- }) {
43
+ }, format = DEFAULT_LOG_FORMAT) {
44
44
  if (_lodash.default.isNil(format)) {
45
45
  format = DEFAULT_LOG_FORMAT;
46
46
  }
@@ -119,16 +119,7 @@ function setup(options = DEFAULT_LOGGER_CONF) {
119
119
  var _loggerConfig;
120
120
 
121
121
  debug('setup logger');
122
- const isLegacyConf = Array.isArray(options);
123
-
124
- if (isLegacyConf) {
125
- _core.warningUtils.emit(_core.warningUtils.Codes.VERDEP002);
126
- } // verdaccio 5 does not allow multiple logger configuration
127
- // backward compatible, pick only the first option
128
- // next major will thrown an error
129
-
130
-
131
- let loggerConfig = isLegacyConf ? options[0] : options;
122
+ let loggerConfig = options;
132
123
 
133
124
  if (!((_loggerConfig = loggerConfig) !== null && _loggerConfig !== void 0 && _loggerConfig.level)) {
134
125
  loggerConfig = Object.assign({}, {
@@ -145,15 +136,18 @@ function setup(options = DEFAULT_LOGGER_CONF) {
145
136
 
146
137
  const destination = _pino.default.destination(loggerConfig.path);
147
138
 
148
- process.on('SIGUSR2', () => destination.reopen());
149
- exports.logger = logger = createLogger(pinoConfig, destination, loggerConfig.format);
139
+ process.on('SIGUSR2', () => destination.reopen()); // @ts-ignore
140
+
141
+ exports.logger = logger = createLogger(pinoConfig, destination, loggerConfig.format); // @ts-ignore
150
142
  } else if (loggerConfig.type === 'rotating-file') {
151
143
  _core.warningUtils.emit(_core.warningUtils.Codes.VERWAR003);
152
144
 
153
- debug('logging stdout enabled');
145
+ debug('logging stdout enabled'); // @ts-ignore
146
+
154
147
  exports.logger = logger = createLogger(pinoConfig, _pino.default.destination(1), loggerConfig.format);
155
148
  } else {
156
- debug('logging stdout enabled');
149
+ debug('logging stdout enabled'); // @ts-ignore
150
+
157
151
  exports.logger = logger = createLogger(pinoConfig, _pino.default.destination(1), loggerConfig.format);
158
152
  }
159
153
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger.ts"],"names":["debug","logger","isProd","process","env","NODE_ENV","DEFAULT_LOG_FORMAT","createLogger","options","level","destination","pino","format","prettyPrintOptions","suppressFlushSyncWarning","_","isNil","pinoConfig","customLevels","http","serializers","err","stdSerializers","req","res","Object","assign","prettifier","prettyPrint","levelFirst","prettyStamp","hooks","logMethod","inputArgs","method","templateObject","message","otherArgs","templateVars","getOwnPropertyNames","length","apply","hydratedMessage","DEBUG","on","lvl","val","prevLvl","prevVal","getLogger","warningUtils","emit","Codes","VERWAR002","DEFAULT_LOGGER_CONF","type","setup","isLegacyConf","Array","isArray","VERDEP002","loggerConfig","path","reopen","VERWAR003","finalHandler","final","finalLogger","event","info","error","exit"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\nimport pino from 'pino';\n\nimport { warningUtils } from '@verdaccio/core';\nimport prettifier, { fillInMsgTemplate } from '@verdaccio/logger-prettify';\n\nconst debug = buildDebug('verdaccio:logger');\n\nexport let logger;\n\nfunction isProd() {\n return process.env.NODE_ENV === 'production';\n}\n\nconst DEFAULT_LOG_FORMAT = isProd() ? 'json' : 'pretty';\n\nexport type LogPlugin = {\n dest: string;\n options?: any[];\n};\n\nexport type LogType = 'file' | 'stdout';\nexport type LogFormat = 'json' | 'pretty-timestamped' | 'pretty';\n\nexport function createLogger(\n options = { level: 'http' },\n destination = pino.destination(1),\n format: LogFormat = DEFAULT_LOG_FORMAT,\n prettyPrintOptions = {\n // we hide warning since the prettifier should not be used in production\n // https://getpino.io/#/docs/pretty?id=prettifier-api\n suppressFlushSyncWarning: true,\n }\n) {\n if (_.isNil(format)) {\n format = DEFAULT_LOG_FORMAT;\n }\n\n let pinoConfig = {\n customLevels: {\n http: 25,\n },\n ...options,\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 ((format === DEFAULT_LOG_FORMAT || format !== 'json') && isProd() === false) {\n pinoConfig = Object.assign({}, pinoConfig, {\n prettifier,\n // more info\n // https://github.com/pinojs/pino-pretty/issues/37\n prettyPrint: {\n levelFirst: true,\n prettyStamp: format === 'pretty-timestamped',\n ...prettyPrintOptions,\n },\n });\n } else {\n pinoConfig = Object.assign({}, pinoConfig, {\n // more info\n // https://github.com/pinojs/pino/blob/v7.1.0/docs/api.md#hooks-object\n hooks: {\n logMethod(inputArgs, method) {\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 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\nexport function getLogger() {\n if (_.isNil(logger)) {\n // FIXME: not sure about display here a warning\n warningUtils.emit(warningUtils.Codes.VERWAR002);\n return;\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 LoggerConfigItem = {\n type?: LogType;\n plugin?: LogPlugin;\n format?: LogFormat;\n path?: string;\n level?: string;\n};\n\nexport type LoggerConfig = LoggerConfigItem[];\n\nexport function setup(options: LoggerConfig | LoggerConfigItem = DEFAULT_LOGGER_CONF) {\n debug('setup logger');\n const isLegacyConf = Array.isArray(options);\n if (isLegacyConf) {\n warningUtils.emit(warningUtils.Codes.VERDEP002);\n }\n\n // verdaccio 5 does not allow multiple logger configuration\n // backward compatible, pick only the first option\n // next major will thrown an error\n let loggerConfig = isLegacyConf ? options[0] : 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 process.on('SIGUSR2', () => destination.reopen());\n logger = createLogger(pinoConfig, destination, loggerConfig.format);\n } else if (loggerConfig.type === 'rotating-file') {\n warningUtils.emit(warningUtils.Codes.VERWAR003);\n debug('logging stdout enabled');\n logger = createLogger(pinoConfig, pino.destination(1), loggerConfig.format);\n } else {\n debug('logging stdout enabled');\n logger = createLogger(pinoConfig, pino.destination(1), loggerConfig.format);\n }\n\n if (isProd()) {\n // why only on prod? https://github.com/pinojs/pino/issues/920#issuecomment-710807667\n const finalHandler = pino.final(logger, (err, finalLogger, event) => {\n finalLogger.info(`${event} caught`);\n if (err) {\n finalLogger.error(err, 'error caused exit');\n }\n process.exit(err ? 1 : 0);\n });\n\n process.on('uncaughtException', (err) => finalHandler(err, 'uncaughtException'));\n process.on('unhandledRejection', (err) => finalHandler(err as Error, 'unhandledRejection'));\n process.on('beforeExit', () => finalHandler(null, 'beforeExit'));\n process.on('exit', () => finalHandler(null, 'exit'));\n process.on('uncaughtException', (err) => finalHandler(err, 'uncaughtException'));\n process.on('SIGINT', () => finalHandler(null, 'SIGINT'));\n process.on('SIGQUIT', () => finalHandler(null, 'SIGQUIT'));\n process.on('SIGTERM', () => finalHandler(null, 'SIGTERM'));\n }\n\n return logger;\n}\n"],"file":"logger.js"}
1
+ {"version":3,"sources":["../src/logger.ts"],"names":["debug","logger","isProd","process","env","NODE_ENV","DEFAULT_LOG_FORMAT","createLogger","options","level","destination","pino","prettyPrintOptions","suppressFlushSyncWarning","format","_","isNil","pinoConfig","customLevels","http","serializers","err","stdSerializers","req","res","Object","assign","prettifier","prettyPrint","levelFirst","prettyStamp","hooks","logMethod","inputArgs","method","templateObject","message","otherArgs","templateVars","getOwnPropertyNames","length","apply","hydratedMessage","DEBUG","on","lvl","val","prevLvl","prevVal","getLogger","warningUtils","emit","Codes","VERWAR002","DEFAULT_LOGGER_CONF","type","setup","loggerConfig","path","reopen","VERWAR003","finalHandler","final","finalLogger","event","info","error","exit"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\nimport pino from 'pino';\n\nimport { warningUtils } from '@verdaccio/core';\nimport prettifier, { fillInMsgTemplate } from '@verdaccio/logger-prettify';\n\nconst debug = buildDebug('verdaccio:logger');\n\nexport let logger;\n\nfunction isProd() {\n return process.env.NODE_ENV === 'production';\n}\n\nconst DEFAULT_LOG_FORMAT = isProd() ? 'json' : 'pretty';\n\nexport type LogPlugin = {\n dest: string;\n options?: any[];\n};\n\nexport type LogType = 'file' | 'stdout';\nexport type LogFormat = 'json' | 'pretty-timestamped' | 'pretty';\n\nexport function createLogger(\n options = { level: 'http' },\n destination = pino.destination(1),\n prettyPrintOptions = {\n // we hide warning since the prettifier should not be used in production\n // https://getpino.io/#/docs/pretty?id=prettifier-api\n suppressFlushSyncWarning: true,\n },\n format: LogFormat = DEFAULT_LOG_FORMAT\n) {\n if (_.isNil(format)) {\n format = DEFAULT_LOG_FORMAT;\n }\n\n let pinoConfig = {\n customLevels: {\n http: 25,\n },\n ...options,\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 ((format === DEFAULT_LOG_FORMAT || format !== 'json') && isProd() === false) {\n pinoConfig = Object.assign({}, pinoConfig, {\n prettifier,\n // more info\n // https://github.com/pinojs/pino-pretty/issues/37\n prettyPrint: {\n levelFirst: true,\n prettyStamp: format === 'pretty-timestamped',\n ...prettyPrintOptions,\n },\n });\n } else {\n pinoConfig = Object.assign({}, pinoConfig, {\n // more info\n // https://github.com/pinojs/pino/blob/v7.1.0/docs/api.md#hooks-object\n hooks: {\n logMethod(inputArgs, method) {\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 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\nexport function getLogger() {\n if (_.isNil(logger)) {\n // FIXME: not sure about display here a warning\n warningUtils.emit(warningUtils.Codes.VERWAR002);\n return;\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 LoggerConfigItem = {\n type?: LogType;\n plugin?: LogPlugin;\n format?: LogFormat;\n path?: string;\n level?: string;\n};\n\nexport type LoggerConfig = LoggerConfigItem;\n\nexport function setup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF) {\n debug('setup 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 process.on('SIGUSR2', () => destination.reopen());\n // @ts-ignore\n logger = createLogger(pinoConfig, destination, loggerConfig.format);\n // @ts-ignore\n } else if (loggerConfig.type === 'rotating-file') {\n warningUtils.emit(warningUtils.Codes.VERWAR003);\n debug('logging stdout enabled');\n // @ts-ignore\n logger = createLogger(pinoConfig, pino.destination(1), loggerConfig.format);\n } else {\n debug('logging stdout enabled');\n // @ts-ignore\n logger = createLogger(pinoConfig, pino.destination(1), loggerConfig.format);\n }\n\n if (isProd()) {\n // why only on prod? https://github.com/pinojs/pino/issues/920#issuecomment-710807667\n const finalHandler = pino.final(logger, (err, finalLogger, event) => {\n finalLogger.info(`${event} caught`);\n if (err) {\n finalLogger.error(err, 'error caused exit');\n }\n process.exit(err ? 1 : 0);\n });\n\n process.on('uncaughtException', (err) => finalHandler(err, 'uncaughtException'));\n process.on('unhandledRejection', (err) => finalHandler(err as Error, 'unhandledRejection'));\n process.on('beforeExit', () => finalHandler(null, 'beforeExit'));\n process.on('exit', () => finalHandler(null, 'exit'));\n process.on('uncaughtException', (err) => finalHandler(err, 'uncaughtException'));\n process.on('SIGINT', () => finalHandler(null, 'SIGINT'));\n process.on('SIGQUIT', () => finalHandler(null, 'SIGQUIT'));\n process.on('SIGTERM', () => finalHandler(null, 'SIGTERM'));\n }\n\n return logger;\n}\n"],"file":"logger.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/logger",
3
- "version": "6.0.0-6-next.10",
3
+ "version": "6.0.0-6-next.11",
4
4
  "description": "logger",
5
5
  "main": "./build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -30,14 +30,15 @@
30
30
  "npm": ">=6"
31
31
  },
32
32
  "dependencies": {
33
- "@verdaccio/core": "6.0.0-6-next.4",
33
+ "@verdaccio/core": "6.0.0-6-next.5",
34
34
  "@verdaccio/logger-prettify": "6.0.0-6-next.6",
35
+ "pino-pretty": "7.6.0",
35
36
  "debug": "4.3.3",
36
37
  "lodash": "4.17.21",
37
38
  "pino": "7.6.4"
38
39
  },
39
40
  "devDependencies": {
40
- "@verdaccio/types": "11.0.0-6-next.10"
41
+ "@verdaccio/types": "11.0.0-6-next.11"
41
42
  },
42
43
  "funding": {
43
44
  "type": "opencollective",
package/src/logger.ts CHANGED
@@ -26,12 +26,12 @@ export type LogFormat = 'json' | 'pretty-timestamped' | 'pretty';
26
26
  export function createLogger(
27
27
  options = { level: 'http' },
28
28
  destination = pino.destination(1),
29
- format: LogFormat = DEFAULT_LOG_FORMAT,
30
29
  prettyPrintOptions = {
31
30
  // we hide warning since the prettifier should not be used in production
32
31
  // https://getpino.io/#/docs/pretty?id=prettifier-api
33
32
  suppressFlushSyncWarning: true,
34
- }
33
+ },
34
+ format: LogFormat = DEFAULT_LOG_FORMAT
35
35
  ) {
36
36
  if (_.isNil(format)) {
37
37
  format = DEFAULT_LOG_FORMAT;
@@ -116,19 +116,11 @@ export type LoggerConfigItem = {
116
116
  level?: string;
117
117
  };
118
118
 
119
- export type LoggerConfig = LoggerConfigItem[];
119
+ export type LoggerConfig = LoggerConfigItem;
120
120
 
121
- export function setup(options: LoggerConfig | LoggerConfigItem = DEFAULT_LOGGER_CONF) {
121
+ export function setup(options: LoggerConfigItem = DEFAULT_LOGGER_CONF) {
122
122
  debug('setup logger');
123
- const isLegacyConf = Array.isArray(options);
124
- if (isLegacyConf) {
125
- warningUtils.emit(warningUtils.Codes.VERDEP002);
126
- }
127
-
128
- // verdaccio 5 does not allow multiple logger configuration
129
- // backward compatible, pick only the first option
130
- // next major will thrown an error
131
- let loggerConfig = isLegacyConf ? options[0] : options;
123
+ let loggerConfig = options;
132
124
  if (!loggerConfig?.level) {
133
125
  loggerConfig = Object.assign(
134
126
  {},
@@ -143,13 +135,17 @@ export function setup(options: LoggerConfig | LoggerConfigItem = DEFAULT_LOGGER_
143
135
  debug('logging file enabled');
144
136
  const destination = pino.destination(loggerConfig.path);
145
137
  process.on('SIGUSR2', () => destination.reopen());
138
+ // @ts-ignore
146
139
  logger = createLogger(pinoConfig, destination, loggerConfig.format);
140
+ // @ts-ignore
147
141
  } else if (loggerConfig.type === 'rotating-file') {
148
142
  warningUtils.emit(warningUtils.Codes.VERWAR003);
149
143
  debug('logging stdout enabled');
144
+ // @ts-ignore
150
145
  logger = createLogger(pinoConfig, pino.destination(1), loggerConfig.format);
151
146
  } else {
152
147
  debug('logging stdout enabled');
148
+ // @ts-ignore
153
149
  logger = createLogger(pinoConfig, pino.destination(1), loggerConfig.format);
154
150
  }
155
151
 
@@ -1,5 +1,3 @@
1
- import { warningUtils } from '@verdaccio/core';
2
-
3
1
  import { logger, setup } from '../src';
4
2
 
5
3
  const mockWarningUtils = jest.fn();
@@ -34,7 +32,7 @@ describe('logger', () => {
34
32
  // expect(spyOn).toHaveBeenCalledTimes(2);
35
33
  });
36
34
 
37
- test('throw deprecation warning if multiple loggers configured', () => {
35
+ test.skip('throw deprecation warning if multiple loggers configured', () => {
38
36
  setup([
39
37
  {
40
38
  level: 'info',
@@ -43,7 +41,7 @@ describe('logger', () => {
43
41
  level: 'http',
44
42
  },
45
43
  ]);
46
- expect(mockWarningUtils).toHaveBeenCalledWith(warningUtils.Codes.VERDEP002);
44
+ // expect(mockWarningUtils).toHaveBeenCalledWith(warningUtils.Codes.VERDEP002);
47
45
  });
48
46
 
49
47
  test('regression: do not throw deprecation warning if no logger config is provided', () => {