UNPKG

@s-ui/lint-reporters

Version:

Send lint errors and golden path metrics to DataDog

1 lines 4.32 kB
import _async_to_generator from"@swc/helpers/src/_async_to_generator.mjs";import _extends from"@swc/helpers/src/_extends.mjs";import _inherits from"@swc/helpers/src/_inherits.mjs";import _object_without_properties_loose from"@swc/helpers/src/_object_without_properties_loose.mjs";import _ts_generator from"@swc/helpers/src/_ts_generator.mjs";import{Table}from"console-table-printer";import globrex from"globrex";import{Reporter}from"./Reporter.js";var generatePaternFromRule=function(rule,eslintConfig){var globalRules=Object.keys(eslintConfig.rules);if(globalRules.some(function(eslintRule){return eslintRule===rule}))return[{regex:/.*/}];return eslintConfig.overrides.map(function(override){var ref;if(!((ref=override.plugins)==null?void 0:ref.some(function(plugin){return plugin==="sui"})))return false;var rules=Object.keys(override.rules);if(!rules.some(function(overrideRule){return overrideRule===rule}))return false;return override.files.map(function(glob){return globrex(glob)})}).filter(Boolean).flat(Infinity)};export var JSReporter=function(Reporter){"use strict";_inherits(JSReporter,Reporter);function JSReporter(){return Reporter.apply(this,arguments)}var _proto=JSReporter.prototype;_proto.map=function map(results){var stats=results.reduce(function(rulesIDs,entry){var repitedRulesFailed=entry.messages.map(function(message){return message.ruleId});var rulesFailed=new Set([].concat(repitedRulesFailed));rulesFailed.forEach(function(rule){if(rule==null)return;var _rule;rulesIDs[rule]=(_rule=rulesIDs[rule])!=null?_rule:[];rulesIDs[rule].push(entry.filePath)});return rulesIDs},{});this.data=_extends({totalFiles:results.length,paths:results.map(function(r){return r.filePath})},stats);console.log({totalFiles:results.length,stats:Object.fromEntries(Object.entries(stats).map(function(param){var rule=param[0],files=param[1];if(!JSReporter.RULES_TO_SEND.some(function(whiteRule){return rule.startsWith(whiteRule)}))return[];return[rule,files.length]}))});return this};_proto.send=function send(){var _this=this;return _async_to_generator(function(){var repository,config,_data,totalFiles,paths,rest,statsEntries,stats,signals,p;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(_this.data===undefined){throw new Error("[sui-lint] No data to send. Maybe you must call to map before")}return[4,_this._isMaster()];case 1:if(!_state.sent()){return[2,console.log("[sui-lint] Reporters only will happen in MASTER branch.")]}return[4,_this._getRepository()];case 2:repository=_state.sent();return[4,import(process.cwd()+"/node_modules/@s-ui/lint/eslintrc")];case 3:config=_state.sent();_data=_this.data,totalFiles=_data.totalFiles,paths=_data.paths,rest=_object_without_properties_loose(_data,["totalFiles","paths"]);console.log("\n We are apply filter to send ONLY this metrics:\n\n "+JSReporter.RULES_TO_SEND.join("\n")+"\n\n And your are trying to send all this metrics:\n\n "+Object.keys(rest).join("\n")+"\n ");statsEntries=Object.entries(rest).map(function(entry){var ref;var rule=entry[0],failedFiles=entry[1];if(!JSReporter.RULES_TO_SEND.some(function(whiteRule){return rule.startsWith(whiteRule)}))return false;var patterns=generatePaternFromRule(rule,config);var ruleRelativePaths=(ref=paths.filter(function(path){return patterns.some(function(pattern){return path.match(pattern.regex)})}))==null?void 0:ref.length;if(!Array.isArray(failedFiles))return[rule,0];return[rule,failedFiles.length*100/ruleRelativePaths]}).filter(Boolean);stats=Object.fromEntries(statsEntries);signals=Object.entries(stats).map(function(entry){var rule=entry[0],percentageOfFails=entry[1];var signal={type:"js",ruleName:rule,numberOfFails:percentageOfFails,repository:repository};return signal});return[4,_this.sender.send(signals)];case 4:_state.sent();if(signals.length===0)return[2,console.log("[JSReporter#send] Nothing to send. No signals")];p=new Table({title:"List of Signals that will be send to DD"});signals.forEach(function(signal){return p.addRow(signal)});p.printTable();return[2]}})})()};JSReporter.create=function create(){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,new JSReporter]})})()};return JSReporter}(Reporter);JSReporter.RULES_TO_SEND=["sui/factory-pattern","sui/serialize-deserialize","sui/decorators"];