]> git.r.bdr.sh - rbdr/cologne/commitdiff
Merge branch 'rbdr-address-sonarqube-issues' into 'master'
authorRubén Beltran del Río <redacted>
Mon, 21 Sep 2020 13:14:32 +0000 (13:14 +0000)
committerRubén Beltran del Río <redacted>
Mon, 21 Sep 2020 13:14:32 +0000 (13:14 +0000)
Integrate Sonarcloud

See merge request rbdr/cologne!1

.gitignore
.gitlab-ci.yml
CHANGELOG.md
lib/formatters/token.js
lib/utilities.js
package-lock.json
package.json
sonar-project.properties [new file with mode: 0644]
test/cologne.js
test/loggers/console.js
test/loggers/file.js

index 3bbc2f111e42fbbf078d03703cd78ed3d8d566c2..c2a8529085cd52d9443906056072fdbe1e4fb1d7 100644 (file)
@@ -3,4 +3,6 @@
 
 ## PROJECT::SPECIFIC
 .nyc_output
+coverage
 node_modules
+.scannerwork
index cc95c38138621763c40bc87bc10b11f4a43c3f5b..fe65211a62a42c21a38c40713b697f3fc3dd950b 100644 (file)
@@ -1,18 +1,50 @@
+.only-default: &only-default
+  only:
+    - branches
+    - merge_requests
+    - tags
+    - refs
+
 image: node:14
 
+variables:
+  SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"  # Defines the location of the analysis task cache
+
 stages:
   - lint
   - test
+  - quality
 
 before_script:
     - npm install
 
+cache:
+  key: ${CI_COMMIT_REF_SLUG}
+  paths:
+    - node_modules/
+    - .nyc_output/
+    - .sonar/cache
+
 lint:
+  <<: *only-default
   stage: lint
   script:
     - npm run lint
 
 test:
+  <<: *only-default
   stage: test
   script:
     - npm test
+
+quality:
+  <<: *only-default
+  stage: quality
+  needs:
+    - test
+  image:
+    name: sonarsource/sonar-scanner-cli:latest
+    entrypoint: [""]
+  script:
+    - npm run coverage
+    - sonar-scanner
index b1e8999b4e302aeb2aed5d30c12b569f24d45e2b..c485e9164c72f96ce909e2685a404168374d66d3 100644 (file)
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [2.0.1] - 2020-09-20
+### Added
+- Sonarcloud config for code quality
+
+### Changed
+- Limits token size to 255 to avoid regex abuse
+- Changes file test time to allow flushing stream in CI
+
 ## [2.0.0] - 2020-09-20
 ### Changed
 - CHANGELOG format is now using `Keep a Changelog` format.
index 2ec3a17af60f75a2c35fba944d1b709a415cb5d6..05895fa400b77db0e8e53b56e39cba8f630f4065 100644 (file)
@@ -34,9 +34,9 @@ module.exports = class TokenFormatter {
      * @instance
      * @memberof Formatters.Token
      * @type RegExp
-     * @default /{{(.*)}}/g
+     * @default /{{(.{1,255}?)}}/g
      */
-    this.replaceRule = /{{(.*?)}}/g;
+    this.replaceRule = /{{(.{1,255}?)}}/g;
 
     /**
      * Flag that specifies whether or not to use an isoDate when using
index 1c930afd54301887cd17192a2434ef90506589f4..8bb226b7ecef576042b87df18ccdb98bb03274f2 100644 (file)
@@ -2,6 +2,37 @@
 
 const internals = {
   kCircularString: '[Circular]',
+  kAnsiCodes: {
+    bold: '[1m',
+    italics: '[3m',
+    underline: '[4m',
+    inverse: '[7m',
+    strikethrough: '[9m',
+    bold_off: '[22m',
+    italics_off: '[23m',
+    underline_off: '[24m',
+    inverse_off: '[27m',
+    strikethrough_off: '[29m',
+    black: '[30m',
+    red: '[31m',
+    green: '[32m',
+    yellow: '[33m',
+    blue: '[34m',
+    magenta: '[35m',
+    cyan: '[36m',
+    white: '[37m',
+    default: '[39m',
+    black_bg: '[40m',
+    red_bg: '[41m',
+    green_bg: '[42m',
+    yellow_bg: '[43m',
+    blue_bg: '[44m',
+    magenta_bg: '[45m',
+    cyan_bg: '[46m',
+    white_bg: '[47m',
+    default_bg: '[49m',
+    reset: '[0m'
+  },
 
   // Get High Res time depending on platform. Currently only supporting node.
 
@@ -75,67 +106,7 @@ module.exports = {
    */
   getAnsiCode(ansiString) {
 
-    switch (ansiString) {
-    case 'bold':
-      return '[1m';
-    case 'italics':
-      return '[3m';
-    case 'underline':
-      return '[4m';
-    case 'inverse':
-      return '[7m';
-    case 'strikethrough':
-      return '[9m';
-    case 'bold_off':
-      return '[22m';
-    case 'italics_off':
-      return '[23m';
-    case 'underline_off':
-      return '[24m';
-    case 'inverse_off':
-      return '[27m';
-    case 'strikethrough_off':
-      return '[29m';
-    case 'black':
-      return '[30m';
-    case 'red':
-      return '[31m';
-    case 'green':
-      return '[32m';
-    case 'yellow':
-      return '[33m';
-    case 'blue':
-      return '[34m';
-    case 'magenta':
-      return '[35m';
-    case 'cyan':
-      return '[36m';
-    case 'white':
-      return '[37m';
-    case 'default':
-      return '[39m';
-    case 'black_bg':
-      return '[40m';
-    case 'red_bg':
-      return '[41m';
-    case 'green_bg':
-      return '[42m';
-    case 'yellow_bg':
-      return '[43m';
-    case 'blue_bg':
-      return '[44m';
-    case 'magenta_bg':
-      return '[45m';
-    case 'cyan_bg':
-      return '[46m';
-    case 'white_bg':
-      return '[47m';
-    case 'default_bg':
-      return '[49m';
-    case 'reset': // for informative purpouses
-    default:
-      return '[0m';
-    }
+    return internals.kAnsiCodes[ansiString] || internals.kAnsiCodes.reset;
   },
 
   /**
index 7641e254d8dff77346c1b3976267e46c19ce54f4..8e31432afa8e78186f4d6331ec9f067dc3adb3f0 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "cologne",
-  "version": "2.0.0",
+  "version": "2.0.1",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
index c6d4bdce99967801bfb94a4c3502495680c22bec..ab2feef46f3653cb999368564bbde13c7f0356bf 100644 (file)
@@ -9,7 +9,7 @@
   "bugs": {
     "url": "https://gitlab.com/rbdr/cologne/issues"
   },
-  "version": "2.0.0",
+  "version": "2.0.1",
   "devDependencies": {
     "@hapi/eslint-config-hapi": "^13.0.2",
     "@hapi/eslint-plugin-hapi": "^4.3.6",
@@ -20,7 +20,8 @@
   "scripts": {
     "document": "jsdoc2md lib/**/*.js > doc/README.md; tap -R markdown > doc/COVERAGE.md",
     "lint": "eslint .",
-    "test": "tap"
+    "test": "tap",
+    "coverage": "nyc report --reporter=text-lcov"
   },
   "main": "./lib/cologne.js"
 }
diff --git a/sonar-project.properties b/sonar-project.properties
new file mode 100644 (file)
index 0000000..08b778a
--- /dev/null
@@ -0,0 +1,12 @@
+sonar.projectKey=rbdr_cologne
+sonar.organization=rbdr
+
+# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
+sonar.sources=.
+
+# Encoding of the source code. Default is default system encoding
+sonar.sourceEncoding=UTF-8
+
+# Coverage path
+sonar.javascript.lcov.reportPaths=coverage/lcov.info
+sonar.coverage.exclusions='test/**/*'
index 3f06763209a6a7e2877b11a8593d7147b73ea132..1fce74073fff69e67a7e9bb693a2b28193fdc115 100644 (file)
@@ -23,7 +23,7 @@ const createDummyLogger = function () {
 
 const levelChecker = function (level) {
 
-  return (count, log) => (log._level === level ? ++count : count);
+  return (count, log) => (log._level === level ? count + 1 : count);
 };
 
 
@@ -42,74 +42,74 @@ const co = new Cologne({
   ]
 });
 
-const logs = ['example1', null, undefined, 1, { example: true }];
+const exampleLogs = ['example1', null, undefined, 1, { example: true }];
 
 /**
  * TEST: #log()
  */
-co.log(...logs);
+co.log(...exampleLogs);
 
 // Calculate values
-const valueCheck = dummyLoggerA.values.reduce((count, log) => (typeof log._cologneLog === 'string' ? ++count : count), 0);
+const valueCheck = dummyLoggerA.values.reduce((count, log) => (typeof log._cologneLog === 'string' ? count + 1 : count), 0);
 let levelCheck = dummyLoggerA.values.reduce(levelChecker(6), 0);
 
 // Now check the values
 
-Tap.equal(dummyLoggerA.values.length, logs.length,
+Tap.equal(dummyLoggerA.values.length, exampleLogs.length,
   '#log() should send every argument to the loggers');
 
 Tap.similar(dummyLoggerA.values, dummyLoggerB.values,
   '#log() should send the same arguments to all the loggers');
 
-Tap.equal(valueCheck, logs.length,
+Tap.equal(valueCheck, exampleLogs.length,
   '#log() should send all objects in cologne log format');
 
-Tap.equal(levelCheck, logs.length,
+Tap.equal(levelCheck, exampleLogs.length,
   '#log() should default to level 6');
 
 /**
  * TEST: #debug()
  */
-co.debug(...logs);
+co.debug(...exampleLogs);
 levelCheck = dummyLoggerA.values.reduce(levelChecker(7), 0);
 
-Tap.equal(levelCheck, logs.length,
+Tap.equal(levelCheck, exampleLogs.length,
   '#debug() should set to level 7');
 
 /**
  * TEST: #info()
  */
-co.info(...logs);
+co.info(...exampleLogs);
 levelCheck = dummyLoggerA.values.reduce(levelChecker(6), 0);
 
-Tap.equal(levelCheck, logs.length,
+Tap.equal(levelCheck, exampleLogs.length,
   '#info() should set to level 6');
 
 /**
  * TEST: #notice()
  */
-co.notice(...logs);
+co.notice(...exampleLogs);
 levelCheck = dummyLoggerA.values.reduce(levelChecker(5), 0);
 
-Tap.equal(levelCheck, logs.length,
+Tap.equal(levelCheck, exampleLogs.length,
   '#notice() should set to level 5');
 
 /**
  * TEST: #warn()
  */
-co.warn(...logs);
+co.warn(...exampleLogs);
 levelCheck = dummyLoggerA.values.reduce(levelChecker(4), 0);
 
-Tap.equal(levelCheck, logs.length,
+Tap.equal(levelCheck, exampleLogs.length,
   '#warn() should set to level 4');
 
 /**
  * TEST: #error()
  */
-co.error(...logs);
+co.error(...exampleLogs);
 levelCheck = dummyLoggerA.values.reduce(levelChecker(3), 0);
 
-Tap.equal(levelCheck, logs.length,
+Tap.equal(levelCheck, exampleLogs.length,
   '#error() should set to level 3');
 
 /**
@@ -156,7 +156,7 @@ co.removeLogger(dummyLoggerC);
 Tap.equal(co.loggers.length, 2,
   '#removeLogger() should do nothing if it can\'t find a logger');
 
-co.log(...logs);
+co.log(...exampleLogs);
 co.removeLogger(dummyLoggerB);
 co.log(1);
 
@@ -171,7 +171,7 @@ Tap.notEqual(dummyLoggerB.values.length, dummyLoggerA.values.length,
  */
 
 co.addLogger(dummyLoggerC);
-co.log(...logs);
+co.log(...exampleLogs);
 
-Tap.equal(dummyLoggerC.values.length, logs.length,
+Tap.equal(dummyLoggerC.values.length, exampleLogs.length,
   '#addLogger() should add loggers after instance is live');
index 3358837e843e143d1c290f9686ae95d479eb7b5c..87dbc23e9ee7dfc2ac4b98b24e252058f6b3d326 100644 (file)
@@ -62,7 +62,7 @@ const logObjectB = {
   message: 'MessageTwo'
 };
 
-const logs = [logObjectA, logObjectB];
+const exampleLogs = [logObjectA, logObjectB];
 
 const regularLogger = new ConsoleLogger({});
 const overrideLogger = new ConsoleLogger({
@@ -86,38 +86,38 @@ Tap.equal(regularLogger.console, global.console,
 
 logObjectA._level = 5;
 logObjectB._level = 6;
-overrideLogger.log(...logs); // should go to info
+overrideLogger.log(...exampleLogs); // should go to info
 
 logObjectA._level = 4;
 logObjectB._level = 4;
-overrideLogger.log(...logs); // should go to warn
+overrideLogger.log(...exampleLogs); // should go to warn
 
 logObjectA._level = 1;
 logObjectB._level = 3;
-overrideLogger.log(...logs); // should go to error
+overrideLogger.log(...exampleLogs); // should go to error
 
 logObjectA._level = 0;
 logObjectB._level = 2;
-overrideLogger.log(...logs); // should go to error
+overrideLogger.log(...exampleLogs); // should go to error
 
 logObjectA._level = 7;
 logObjectB._level = 8;
-overrideLogger.log(...logs); // should go to log
+overrideLogger.log(...exampleLogs); // should go to log
 
-Tap.equal(dummyConsole.values.log, logs.length,
+Tap.equal(dummyConsole.values.log, exampleLogs.length,
   'It should send debug messages to console\'s #log');
-Tap.equal(dummyConsole.values.info, logs.length,
+Tap.equal(dummyConsole.values.info, exampleLogs.length,
   'It should send info and notice messages to console\'s #info');
-Tap.equal(dummyConsole.values.warn, logs.length,
+Tap.equal(dummyConsole.values.warn, exampleLogs.length,
   'It should send warn messages to console\'s #warn');
-Tap.equal(dummyConsole.values.error, logs.length * 2,
+Tap.equal(dummyConsole.values.error, exampleLogs.length * 2,
   'It should send error messages to console\'s #error');
 
 /**
  * TEST: #log() - with formatter
  */
 
-formattedLogger.log(...logs); // should go to log
+formattedLogger.log(...exampleLogs); // should go to log
 
-Tap.similar(dummyFormatter.values, logs,
+Tap.similar(dummyFormatter.values, exampleLogs,
   'If available, it should send the objects to the formatter');
index 5e73d8212d97adc99fa0554745b6745f3df0c69c..d07b5afb30420e83d859a5291533c23e0de4afa1 100644 (file)
@@ -76,7 +76,7 @@ setTimeout(() => {
       });
     });
   });
-}, 10); // allow for flush
+}, 100); // allow for flush
 /**
  * TEST: #log() - formatter
  */
@@ -103,4 +103,4 @@ setTimeout(() => {
       });
     });
   });
-}, 10);
+}, 100);