specmatic 0.72.7 → 0.72.8

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.
@@ -23,17 +23,31 @@ function getSpecmaticConfig() {
23
23
  try {
24
24
  packageJsonContent = _fs["default"].readFileSync(packageJsonPath);
25
25
  } catch (error) {
26
- packageJsonContent = "{}";
26
+ packageJsonContent = '{}';
27
27
  }
28
28
  var packageConfig = JSON.parse(packageJsonContent);
29
29
  specmaticConfig = packageConfig.specmatic;
30
30
  }
31
31
  return specmaticConfig || {};
32
32
  }
33
+ function getLogLevel() {
34
+ var logLevel;
35
+ if (process.env.SPECMATIC_LOG_LEVEL) {
36
+ logLevel = process.env.SPECMATIC_LOG_LEVEL;
37
+ }
38
+ if (!logLevel || !_winston.config.syslog.levels[logLevel]) {
39
+ var specmaticConfig = getSpecmaticConfig();
40
+ logLevel = specmaticConfig.logLevel;
41
+ }
42
+ if (!logLevel || !_winston.config.syslog.levels[logLevel]) {
43
+ logLevel = 'warn';
44
+ }
45
+ return logLevel;
46
+ }
33
47
  function initLogger() {
34
- var specmaticConfig = getSpecmaticConfig();
48
+ var logLevel = getLogLevel();
35
49
  var logger = (0, _winston.createLogger)({
36
- level: specmaticConfig.logLevel || 'warn',
50
+ level: logLevel,
37
51
  format: _winston.format.combine(_winston.format.label({
38
52
  label: 'specmatic'
39
53
  }), _winston.format.timestamp({
@@ -45,4 +59,4 @@ function initLogger() {
45
59
  }
46
60
  var _default = initLogger();
47
61
  exports["default"] = _default;
48
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luc3RvbiIsInJlcXVpcmUiLCJfZnMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwib2JqIiwiX19lc01vZHVsZSIsImxvZ0Zvcm1hdCIsImZvcm1hdCIsInByaW50ZiIsIl9yZWYiLCJsZXZlbCIsIm1lc3NhZ2UiLCJsYWJlbCIsInRpbWVzdGFtcCIsImNvbmNhdCIsImdldFNwZWNtYXRpY0NvbmZpZyIsInBhY2thZ2VKc29uUGF0aCIsInNwZWNtYXRpY0NvbmZpZyIsImZzIiwiZXhpc3RzU3luYyIsInBhY2thZ2VKc29uQ29udGVudCIsInJlYWRGaWxlU3luYyIsImVycm9yIiwicGFja2FnZUNvbmZpZyIsIkpTT04iLCJwYXJzZSIsInNwZWNtYXRpYyIsImluaXRMb2dnZXIiLCJsb2dnZXIiLCJjcmVhdGVMb2dnZXIiLCJsb2dMZXZlbCIsImNvbWJpbmUiLCJ0cmFuc3BvcnRzIiwiQ29uc29sZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vbG9nZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgZm9ybWF0LCB0cmFuc3BvcnRzIH0gZnJvbSAnd2luc3Rvbic7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuXG5jb25zdCBsb2dGb3JtYXQgPSBmb3JtYXQucHJpbnRmKCh7IGxldmVsLCBtZXNzYWdlLCBsYWJlbCwgdGltZXN0YW1wIH0pID0+IHtcbiAgICByZXR1cm4gYFske2xhYmVsfV0gJHt0aW1lc3RhbXB9ICR7bGV2ZWx9OiAke21lc3NhZ2V9YDtcbn0pO1xuXG5mdW5jdGlvbiBnZXRTcGVjbWF0aWNDb25maWcoKSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gJy4vcGFja2FnZS5qc29uJztcbiAgICB2YXIgc3BlY21hdGljQ29uZmlnO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICAgICAgbGV0IHBhY2thZ2VKc29uQ29udGVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBhY2thZ2VKc29uQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcGFja2FnZUpzb25Db250ZW50ID0gXCJ7fVwiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhY2thZ2VDb25maWcgPSBKU09OLnBhcnNlKHBhY2thZ2VKc29uQ29udGVudCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG4gICAgICAgIHNwZWNtYXRpY0NvbmZpZyA9IHBhY2thZ2VDb25maWcuc3BlY21hdGljO1xuICAgIH1cbiAgICByZXR1cm4gc3BlY21hdGljQ29uZmlnIHx8IHt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdExvZ2dlcigpIHtcbiAgICBjb25zdCBzcGVjbWF0aWNDb25maWcgPSBnZXRTcGVjbWF0aWNDb25maWcoKTtcbiAgICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgICAgICBsZXZlbDogc3BlY21hdGljQ29uZmlnLmxvZ0xldmVsIHx8ICd3YXJuJyxcbiAgICAgICAgZm9ybWF0OiBmb3JtYXQuY29tYmluZShmb3JtYXQubGFiZWwoeyBsYWJlbDogJ3NwZWNtYXRpYycgfSksIGZvcm1hdC50aW1lc3RhbXAoeyBmb3JtYXQ6ICdERC1NTS1ZWVlZIEhIOm1tOnNzJyB9KSwgbG9nRm9ybWF0KSxcbiAgICAgICAgdHJhbnNwb3J0czogW25ldyB0cmFuc3BvcnRzLkNvbnNvbGUoKV0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGxvZ2dlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdExvZ2dlcigpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsR0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQW9CLFNBQUFFLHVCQUFBQyxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsZ0JBQUFBLEdBQUE7QUFFcEIsSUFBTUUsU0FBUyxHQUFHQyxlQUFNLENBQUNDLE1BQU0sQ0FBQyxVQUFBQyxJQUFBLEVBQTBDO0VBQUEsSUFBdkNDLEtBQUssR0FBQUQsSUFBQSxDQUFMQyxLQUFLO0lBQUVDLE9BQU8sR0FBQUYsSUFBQSxDQUFQRSxPQUFPO0lBQUVDLEtBQUssR0FBQUgsSUFBQSxDQUFMRyxLQUFLO0lBQUVDLFNBQVMsR0FBQUosSUFBQSxDQUFUSSxTQUFTO0VBQy9ELFdBQUFDLE1BQUEsQ0FBV0YsS0FBSyxRQUFBRSxNQUFBLENBQUtELFNBQVMsT0FBQUMsTUFBQSxDQUFJSixLQUFLLFFBQUFJLE1BQUEsQ0FBS0gsT0FBTztBQUN2RCxDQUFDLENBQUM7QUFFRixTQUFTSSxrQkFBa0JBLENBQUEsRUFBRztFQUMxQixJQUFNQyxlQUFlLEdBQUcsZ0JBQWdCO0VBQ3hDLElBQUlDLGVBQWU7RUFDbkIsSUFBSUMsY0FBRSxDQUFDQyxVQUFVLENBQUNILGVBQWUsQ0FBQyxFQUFFO0lBQ2hDLElBQUlJLGtCQUFrQjtJQUN0QixJQUFJO01BQ0FBLGtCQUFrQixHQUFHRixjQUFFLENBQUNHLFlBQVksQ0FBQ0wsZUFBZSxDQUFDO0lBQ3pELENBQUMsQ0FBQyxPQUFPTSxLQUFLLEVBQUU7TUFDWkYsa0JBQWtCLEdBQUcsSUFBSTtJQUM3QjtJQUNBLElBQU1HLGFBQWEsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNMLGtCQUF1QyxDQUFDO0lBQ3pFSCxlQUFlLEdBQUdNLGFBQWEsQ0FBQ0csU0FBUztFQUM3QztFQUNBLE9BQU9ULGVBQWUsSUFBSSxDQUFDLENBQUM7QUFDaEM7QUFFTyxTQUFTVSxVQUFVQSxDQUFBLEVBQUc7RUFDekIsSUFBTVYsZUFBZSxHQUFHRixrQkFBa0IsQ0FBQyxDQUFDO0VBQzVDLElBQU1hLE1BQU0sR0FBRyxJQUFBQyxxQkFBWSxFQUFDO0lBQ3hCbkIsS0FBSyxFQUFFTyxlQUFlLENBQUNhLFFBQVEsSUFBSSxNQUFNO0lBQ3pDdkIsTUFBTSxFQUFFQSxlQUFNLENBQUN3QixPQUFPLENBQUN4QixlQUFNLENBQUNLLEtBQUssQ0FBQztNQUFFQSxLQUFLLEVBQUU7SUFBWSxDQUFDLENBQUMsRUFBRUwsZUFBTSxDQUFDTSxTQUFTLENBQUM7TUFBRU4sTUFBTSxFQUFFO0lBQXNCLENBQUMsQ0FBQyxFQUFFRCxTQUFTLENBQUM7SUFDNUgwQixVQUFVLEVBQUUsQ0FBQyxJQUFJQSxtQkFBVSxDQUFDQyxPQUFPLENBQUMsQ0FBQztFQUN6QyxDQUFDLENBQUM7RUFDRixPQUFPTCxNQUFNO0FBQ2pCO0FBQUMsSUFBQU0sUUFBQSxHQUVjUCxVQUFVLENBQUMsQ0FBQztBQUFBUSxPQUFBLGNBQUFELFFBQUEifQ==
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luc3RvbiIsInJlcXVpcmUiLCJfZnMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwib2JqIiwiX19lc01vZHVsZSIsImxvZ0Zvcm1hdCIsImZvcm1hdCIsInByaW50ZiIsIl9yZWYiLCJsZXZlbCIsIm1lc3NhZ2UiLCJsYWJlbCIsInRpbWVzdGFtcCIsImNvbmNhdCIsImdldFNwZWNtYXRpY0NvbmZpZyIsInBhY2thZ2VKc29uUGF0aCIsInNwZWNtYXRpY0NvbmZpZyIsImZzIiwiZXhpc3RzU3luYyIsInBhY2thZ2VKc29uQ29udGVudCIsInJlYWRGaWxlU3luYyIsImVycm9yIiwicGFja2FnZUNvbmZpZyIsIkpTT04iLCJwYXJzZSIsInNwZWNtYXRpYyIsImdldExvZ0xldmVsIiwibG9nTGV2ZWwiLCJwcm9jZXNzIiwiZW52IiwiU1BFQ01BVElDX0xPR19MRVZFTCIsImNvbmZpZyIsInN5c2xvZyIsImxldmVscyIsImluaXRMb2dnZXIiLCJsb2dnZXIiLCJjcmVhdGVMb2dnZXIiLCJjb21iaW5lIiwidHJhbnNwb3J0cyIsIkNvbnNvbGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbW9uL2xvZ2dlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25maWcsIGNyZWF0ZUxvZ2dlciwgZm9ybWF0LCB0cmFuc3BvcnRzIH0gZnJvbSAnd2luc3RvbidcbmltcG9ydCBmcyBmcm9tICdmcydcblxuY29uc3QgbG9nRm9ybWF0ID0gZm9ybWF0LnByaW50ZigoeyBsZXZlbCwgbWVzc2FnZSwgbGFiZWwsIHRpbWVzdGFtcCB9KSA9PiB7XG4gICAgcmV0dXJuIGBbJHtsYWJlbH1dICR7dGltZXN0YW1wfSAke2xldmVsfTogJHttZXNzYWdlfWBcbn0pXG5cbmZ1bmN0aW9uIGdldFNwZWNtYXRpY0NvbmZpZygpIHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSAnLi9wYWNrYWdlLmpzb24nXG4gICAgdmFyIHNwZWNtYXRpY0NvbmZpZ1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICAgICAgbGV0IHBhY2thZ2VKc29uQ29udGVudFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFja2FnZUpzb25Db250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aClcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHBhY2thZ2VKc29uQ29udGVudCA9ICd7fSdcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWNrYWdlQ29uZmlnID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvbkNvbnRlbnQgYXMgdW5rbm93biBhcyBzdHJpbmcpXG4gICAgICAgIHNwZWNtYXRpY0NvbmZpZyA9IHBhY2thZ2VDb25maWcuc3BlY21hdGljXG4gICAgfVxuICAgIHJldHVybiBzcGVjbWF0aWNDb25maWcgfHwge31cbn1cblxuZnVuY3Rpb24gZ2V0TG9nTGV2ZWwoKSB7XG4gICAgbGV0IGxvZ0xldmVsXG4gICAgaWYgKHByb2Nlc3MuZW52LlNQRUNNQVRJQ19MT0dfTEVWRUwpIHtcbiAgICAgICAgbG9nTGV2ZWwgPSBwcm9jZXNzLmVudi5TUEVDTUFUSUNfTE9HX0xFVkVMXG4gICAgfVxuICAgIGlmICghbG9nTGV2ZWwgfHwgIWNvbmZpZy5zeXNsb2cubGV2ZWxzW2xvZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBzcGVjbWF0aWNDb25maWcgPSBnZXRTcGVjbWF0aWNDb25maWcoKVxuICAgICAgICBsb2dMZXZlbCA9IHNwZWNtYXRpY0NvbmZpZy5sb2dMZXZlbFxuICAgIH1cbiAgICBpZiAoIWxvZ0xldmVsIHx8ICFjb25maWcuc3lzbG9nLmxldmVsc1tsb2dMZXZlbF0pIHtcbiAgICAgICAgbG9nTGV2ZWwgPSAnd2FybidcbiAgICB9XG4gICAgcmV0dXJuIGxvZ0xldmVsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0TG9nZ2VyKCkge1xuICAgIGxldCBsb2dMZXZlbCA9IGdldExvZ0xldmVsKClcbiAgICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoe1xuICAgICAgICBsZXZlbDogbG9nTGV2ZWwsXG4gICAgICAgIGZvcm1hdDogZm9ybWF0LmNvbWJpbmUoZm9ybWF0LmxhYmVsKHsgbGFiZWw6ICdzcGVjbWF0aWMnIH0pLCBmb3JtYXQudGltZXN0YW1wKHsgZm9ybWF0OiAnREQtTU0tWVlZWSBISDptbTpzcycgfSksIGxvZ0Zvcm1hdCksXG4gICAgICAgIHRyYW5zcG9ydHM6IFtuZXcgdHJhbnNwb3J0cy5Db25zb2xlKCldLFxuICAgIH0pXG4gICAgcmV0dXJuIGxvZ2dlclxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0TG9nZ2VyKClcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEdBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFtQixTQUFBRSx1QkFBQUMsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLGdCQUFBQSxHQUFBO0FBRW5CLElBQU1FLFNBQVMsR0FBR0MsZUFBTSxDQUFDQyxNQUFNLENBQUMsVUFBQUMsSUFBQSxFQUEwQztFQUFBLElBQXZDQyxLQUFLLEdBQUFELElBQUEsQ0FBTEMsS0FBSztJQUFFQyxPQUFPLEdBQUFGLElBQUEsQ0FBUEUsT0FBTztJQUFFQyxLQUFLLEdBQUFILElBQUEsQ0FBTEcsS0FBSztJQUFFQyxTQUFTLEdBQUFKLElBQUEsQ0FBVEksU0FBUztFQUMvRCxXQUFBQyxNQUFBLENBQVdGLEtBQUssUUFBQUUsTUFBQSxDQUFLRCxTQUFTLE9BQUFDLE1BQUEsQ0FBSUosS0FBSyxRQUFBSSxNQUFBLENBQUtILE9BQU87QUFDdkQsQ0FBQyxDQUFDO0FBRUYsU0FBU0ksa0JBQWtCQSxDQUFBLEVBQUc7RUFDMUIsSUFBTUMsZUFBZSxHQUFHLGdCQUFnQjtFQUN4QyxJQUFJQyxlQUFlO0VBQ25CLElBQUlDLGNBQUUsQ0FBQ0MsVUFBVSxDQUFDSCxlQUFlLENBQUMsRUFBRTtJQUNoQyxJQUFJSSxrQkFBa0I7SUFDdEIsSUFBSTtNQUNBQSxrQkFBa0IsR0FBR0YsY0FBRSxDQUFDRyxZQUFZLENBQUNMLGVBQWUsQ0FBQztJQUN6RCxDQUFDLENBQUMsT0FBT00sS0FBSyxFQUFFO01BQ1pGLGtCQUFrQixHQUFHLElBQUk7SUFDN0I7SUFDQSxJQUFNRyxhQUFhLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDTCxrQkFBdUMsQ0FBQztJQUN6RUgsZUFBZSxHQUFHTSxhQUFhLENBQUNHLFNBQVM7RUFDN0M7RUFDQSxPQUFPVCxlQUFlLElBQUksQ0FBQyxDQUFDO0FBQ2hDO0FBRUEsU0FBU1UsV0FBV0EsQ0FBQSxFQUFHO0VBQ25CLElBQUlDLFFBQVE7RUFDWixJQUFJQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsbUJBQW1CLEVBQUU7SUFDakNILFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxHQUFHLENBQUNDLG1CQUFtQjtFQUM5QztFQUNBLElBQUksQ0FBQ0gsUUFBUSxJQUFJLENBQUNJLGVBQU0sQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUNOLFFBQVEsQ0FBQyxFQUFFO0lBQzlDLElBQU1YLGVBQWUsR0FBR0Ysa0JBQWtCLENBQUMsQ0FBQztJQUM1Q2EsUUFBUSxHQUFHWCxlQUFlLENBQUNXLFFBQVE7RUFDdkM7RUFDQSxJQUFJLENBQUNBLFFBQVEsSUFBSSxDQUFDSSxlQUFNLENBQUNDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTixRQUFRLENBQUMsRUFBRTtJQUM5Q0EsUUFBUSxHQUFHLE1BQU07RUFDckI7RUFDQSxPQUFPQSxRQUFRO0FBQ25CO0FBRU8sU0FBU08sVUFBVUEsQ0FBQSxFQUFHO0VBQ3pCLElBQUlQLFFBQVEsR0FBR0QsV0FBVyxDQUFDLENBQUM7RUFDNUIsSUFBTVMsTUFBTSxHQUFHLElBQUFDLHFCQUFZLEVBQUM7SUFDeEIzQixLQUFLLEVBQUVrQixRQUFRO0lBQ2ZyQixNQUFNLEVBQUVBLGVBQU0sQ0FBQytCLE9BQU8sQ0FBQy9CLGVBQU0sQ0FBQ0ssS0FBSyxDQUFDO01BQUVBLEtBQUssRUFBRTtJQUFZLENBQUMsQ0FBQyxFQUFFTCxlQUFNLENBQUNNLFNBQVMsQ0FBQztNQUFFTixNQUFNLEVBQUU7SUFBc0IsQ0FBQyxDQUFDLEVBQUVELFNBQVMsQ0FBQztJQUM1SGlDLFVBQVUsRUFBRSxDQUFDLElBQUlBLG1CQUFVLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0VBQ3pDLENBQUMsQ0FBQztFQUNGLE9BQU9KLE1BQU07QUFDakI7QUFBQyxJQUFBSyxRQUFBLEdBRWNOLFVBQVUsQ0FBQyxDQUFDO0FBQUFPLE9BQUEsY0FBQUQsUUFBQSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specmatic",
3
- "version": "0.72.7",
3
+ "version": "0.72.8",
4
4
  "description": "Node wrapper for Specmatic",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -57,6 +57,7 @@
57
57
  "jest": "^29.6.1",
58
58
  "jest-extended": "^4.0.0",
59
59
  "jest-mock-extended": "^3.0.4",
60
+ "jest-when": "^3.5.2",
60
61
  "rimraf": "^5.0.1",
61
62
  "supertest": "^6.3.3",
62
63
  "typescript": "^5.1.6"
@@ -1,64 +1,85 @@
1
- import { initLogger } from '../logger';
1
+ import { initLogger } from '../logger'
2
+ import { when } from 'jest-when'
2
3
 
3
- import fs from 'fs';
4
+ import fs from 'fs'
4
5
 
5
6
  beforeEach(() => {
6
- jest.resetAllMocks();
7
- });
7
+ jest.resetAllMocks()
8
+ delete process.env.SPECMATIC_LOG_LEVEL
9
+ })
8
10
 
9
11
  test('logging level is debug as configured in package.json', () => {
10
- const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync').mockReturnValue(
11
- '{\
12
- "specmatic": {\
13
- "logLevel": "debug"\
14
- }\
15
- }'
16
- );
17
- const logger = initLogger();
18
- expect(packageJsonFileReadSpy).toHaveBeenCalledTimes(1);
19
- expect(logger.level).toBe('debug');
20
- });
12
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
13
+ when(packageJsonFileReadSpy).calledWith('./package.json').mockReturnValue('{"specmatic": {"logLevel": "debug"}}')
14
+ const logger = initLogger()
15
+ expect(logger.level).toBe('debug')
16
+ })
21
17
 
22
18
  test('logging level is info as configured in package.json', () => {
23
- const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync').mockReturnValue(
24
- '{\
25
- "specmatic": {\
26
- "logLevel": "info"\
27
- }\
28
- }'
29
- );
30
- const logger = initLogger();
31
- expect(packageJsonFileReadSpy).toHaveBeenCalledTimes(1);
32
- expect(logger.level).toBe('info');
33
- });
19
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
20
+ when(packageJsonFileReadSpy).calledWith('./package.json').mockReturnValue('{"specmatic": {"logLevel": "info"}}')
21
+ const logger = initLogger()
22
+ expect(logger.level).toBe('info')
23
+ })
34
24
 
35
25
  test('defaults logging level to warn when logLevel setting does not exist with specmatic configuration', () => {
36
- const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync').mockReturnValue(
37
- '{\
38
- "specmatic": {\
39
- }\
40
- }'
41
- );
42
- const logger = initLogger();
43
- expect(packageJsonFileReadSpy).toHaveBeenCalledTimes(1);
44
- expect(logger.level).toBe('warn');
26
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
27
+ when(packageJsonFileReadSpy).calledWith('./package.json').mockReturnValue('{"specmatic": {}}')
28
+ const logger = initLogger()
29
+ expect(logger.level).toBe('warn')
45
30
  })
46
31
 
47
32
  test('defaults logging level to warn when specmatic configuration does not exist', () => {
48
- const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync').mockReturnValue(
49
- '{\
50
- }'
51
- );
52
- const logger = initLogger();
53
- expect(packageJsonFileReadSpy).toHaveBeenCalledTimes(1);
54
- expect(logger.level).toBe('warn');
33
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
34
+ when(packageJsonFileReadSpy).calledWith('./package.json').mockReturnValue('{}')
35
+ const logger = initLogger()
36
+ expect(logger.level).toBe('warn')
55
37
  })
56
38
 
57
39
  test('defaults logging level to warn when package.json does not exist', () => {
58
- const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync').mockImplementation(() => {
59
- throw new Error();
60
- });
61
- const logger = initLogger();
62
- expect(packageJsonFileReadSpy).toHaveBeenCalledTimes(1);
63
- expect(logger.level).toBe('warn');
64
- });
40
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
41
+ when(packageJsonFileReadSpy)
42
+ .calledWith('./package.json')
43
+ .mockImplementation(() => {
44
+ throw new Error()
45
+ })
46
+ const logger = initLogger()
47
+ expect(logger.level).toBe('warn')
48
+ })
49
+
50
+ test('log level is read from environment variable', () => {
51
+ process.env.SPECMATIC_LOG_LEVEL = 'debug'
52
+ const logger = initLogger()
53
+ expect(logger.level).toBe('debug')
54
+ })
55
+
56
+ test('log level set in environment variable takes precendece over specmatic.json', () => {
57
+ process.env.SPECMATIC_LOG_LEVEL = 'error'
58
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
59
+ when(packageJsonFileReadSpy).calledWith('./package.json').mockReturnValue('{"specmatic": {"logLevel": "debug"}}')
60
+ const logger = initLogger()
61
+ expect(logger.level).toBe('error')
62
+ })
63
+
64
+ test('log level set in environment variable is used instead of default', () => {
65
+ process.env.SPECMATIC_LOG_LEVEL = 'error'
66
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
67
+ when(packageJsonFileReadSpy).calledWith('./package.json').mockReturnValue('{}')
68
+ const logger = initLogger()
69
+ expect(logger.level).toBe('error')
70
+ })
71
+
72
+ test('uses default log level "warn" when log level configured in specmatic.json is invalid', () => {
73
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
74
+ when(packageJsonFileReadSpy).calledWith('./package.json').mockReturnValue('{"specmatic": {"logLevel": "silly"}}')
75
+ const logger = initLogger()
76
+ expect(logger.level).toBe('warn')
77
+ })
78
+
79
+ test('ignores log level configured in environment variable when invalid', () => {
80
+ process.env.SPECMATIC_LOG_LEVEL = 'silly'
81
+ const packageJsonFileReadSpy = jest.spyOn(fs, 'readFileSync')
82
+ when(packageJsonFileReadSpy).calledWith('./package.json').mockReturnValue('{"specmatic": {"logLevel": "debug"}}')
83
+ const logger = initLogger()
84
+ expect(logger.level).toBe('debug')
85
+ })
@@ -1,34 +1,49 @@
1
- import { createLogger, format, transports } from 'winston';
2
- import fs from 'fs';
1
+ import { config, createLogger, format, transports } from 'winston'
2
+ import fs from 'fs'
3
3
 
4
4
  const logFormat = format.printf(({ level, message, label, timestamp }) => {
5
- return `[${label}] ${timestamp} ${level}: ${message}`;
6
- });
5
+ return `[${label}] ${timestamp} ${level}: ${message}`
6
+ })
7
7
 
8
8
  function getSpecmaticConfig() {
9
- const packageJsonPath = './package.json';
10
- var specmaticConfig;
9
+ const packageJsonPath = './package.json'
10
+ var specmaticConfig
11
11
  if (fs.existsSync(packageJsonPath)) {
12
- let packageJsonContent;
12
+ let packageJsonContent
13
13
  try {
14
- packageJsonContent = fs.readFileSync(packageJsonPath);
14
+ packageJsonContent = fs.readFileSync(packageJsonPath)
15
15
  } catch (error) {
16
- packageJsonContent = "{}";
16
+ packageJsonContent = '{}'
17
17
  }
18
- const packageConfig = JSON.parse(packageJsonContent as unknown as string);
19
- specmaticConfig = packageConfig.specmatic;
18
+ const packageConfig = JSON.parse(packageJsonContent as unknown as string)
19
+ specmaticConfig = packageConfig.specmatic
20
20
  }
21
- return specmaticConfig || {};
21
+ return specmaticConfig || {}
22
+ }
23
+
24
+ function getLogLevel() {
25
+ let logLevel
26
+ if (process.env.SPECMATIC_LOG_LEVEL) {
27
+ logLevel = process.env.SPECMATIC_LOG_LEVEL
28
+ }
29
+ if (!logLevel || !config.syslog.levels[logLevel]) {
30
+ const specmaticConfig = getSpecmaticConfig()
31
+ logLevel = specmaticConfig.logLevel
32
+ }
33
+ if (!logLevel || !config.syslog.levels[logLevel]) {
34
+ logLevel = 'warn'
35
+ }
36
+ return logLevel
22
37
  }
23
38
 
24
39
  export function initLogger() {
25
- const specmaticConfig = getSpecmaticConfig();
40
+ let logLevel = getLogLevel()
26
41
  const logger = createLogger({
27
- level: specmaticConfig.logLevel || 'warn',
42
+ level: logLevel,
28
43
  format: format.combine(format.label({ label: 'specmatic' }), format.timestamp({ format: 'DD-MM-YYYY HH:mm:ss' }), logFormat),
29
44
  transports: [new transports.Console()],
30
- });
31
- return logger;
45
+ })
46
+ return logger
32
47
  }
33
48
 
34
- export default initLogger();
49
+ export default initLogger()