@fabriziosalmi/slopless 1.12.1 → 1.12.2

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.
@@ -516,8 +516,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
516
516
  `);return d===-1?u:u.slice(0,d)+"\u2026"}function A3t(u,d){let x=u;for(let[k,m]of Object.entries(d))x=x.replace(new RegExp(`\\{${k}\\}`,"g"),String(m));return x}var va=DS(tne()),JHe=DS(require("fs"));var sne=new Set(["js","ts","jsx","tsx"]);function KF(u){let d=u.split(/[/\\]/).pop()??u,x=d.lastIndexOf(".");return x<=0?"":d.slice(x+1).toLowerCase()}function O3t(u){let d=[],x=[],k=m=>{if(m!==u&&one(m))return;va.isIfStatement(m)?d.push(m.expression.getText()):va.isConditionalExpression(m)?d.push(m.condition.getText()):(va.isWhileStatement(m)||va.isDoStatement(m))&&d.push(m.expression.getText());let T=F3t(m);T&&x.push(T),va.forEachChild(m,k)};return k(u),x.some(m=>!d.some(T=>T.includes(m)))}function F3t(u){let d;if(va.isBinaryExpression(u)&&L3t(u.operatorToken.kind)?d=u.left:(va.isPostfixUnaryExpression(u)||va.isPrefixUnaryExpression(u))&&(u.operator===va.SyntaxKind.PlusPlusToken||u.operator===va.SyntaxKind.MinusMinusToken)&&(d=u.operand),!d||!va.isPropertyAccessExpression(d))return;let x=d;for(;va.isPropertyAccessExpression(x)&&x.expression.kind!==va.SyntaxKind.ThisKeyword;)x=x.expression;if(va.isPropertyAccessExpression(x)&&x.expression.kind===va.SyntaxKind.ThisKeyword)return x.getText()}function L3t(u){return u>=va.SyntaxKind.FirstAssignment&&u<=va.SyntaxKind.LastAssignment}function M3t(u){let d=!1,x=k=>{if(!d){if(va.isAwaitExpression(k)||va.isForOfStatement(k)&&k.awaitModifier){d=!0;return}k!==u&&one(k)||va.forEachChild(k,x)}};return x(u),d}function UHe(u){if(va.isFunctionDeclaration(u)||va.isMethodDeclaration(u)||va.isFunctionExpression(u)||va.isArrowFunction(u)||va.isConstructorDeclaration(u)||va.isGetAccessor(u)||va.isSetAccessor(u))return u.body}function one(u){return UHe(u)!==void 0}function R3t(u,d){let x=u.split(`
517
517
  `).length-(u.endsWith(`
518
518
  `)?1:0),k=ine(d,u);if(k.length===0)return x;let m=k.reduce((T,F)=>T+u.slice(F.start,F.end).split(`
519
- `).length-1,0);return x-m}var hCe=new Set(["empty-file","file-length-limit"]),cne=class{static check(d,x,k){var X,be;let m=[],T=k!==void 0?k:JHe.readFileSync(d,"utf8");for(let Pe of x){let Be=(X=Pe.match.ast_check)==null?void 0:X.type;!Be||!hCe.has(Be)||WE(d,Pe)||Pe.match.file_types&&!Pe.match.file_types.includes(KF(d))||m.push(...this.checkByCounting(Be,T,{rule:Pe,file:d,threshold:Pe.match.threshold??((be=Pe.match.ast_check)==null?void 0:be.threshold)}))}if(!sne.has(KF(d)))return m;let F=va.createSourceFile(d,T,va.ScriptTarget.Latest,!0);for(let Pe of x){if(!Pe.match.ast_check||WE(d,Pe))continue;let Be=Pe.match.ast_check.type,at=Pe.match.threshold??Pe.match.ast_check.threshold,pe={rule:Pe,sourceFile:F,file:d,violations:m};hCe.has(Be)||this.traverse(F,Zt=>{Be==="function-params-limit"&&at&&this.checkFunctionParams(Zt,at,pe),Be==="function-length-limit"&&at&&this.checkFunctionLength(Zt,at,pe),Be==="empty-catch"&&this.checkEmptyCatch(Zt,pe),Be==="nested-blocks-limit"&&at&&this.checkNestedBlocks(Zt,at,pe),Be==="empty-block"&&this.checkEmptyBlock(Zt,pe),Be==="one-liner-limit"&&this.checkOneLiner(Zt,pe),Be==="redundant-if-true"&&this.checkRedundantIfTrue(Zt,pe),Be==="lying-function-names"&&this.checkLyingFunctionName(Zt,pe),Be==="empty-interface"&&this.checkEmptyInterface(Zt,pe),Be==="async-without-await"&&this.checkAsyncWithoutAwait(Zt,pe)})}return m}static checkFunctionParams(d,x,k){if(!va.isFunctionDeclaration(d)&&!va.isMethodDeclaration(d)&&!va.isArrowFunction(d)||d.parameters.length<=x)return;let{line:m}=k.sourceFile.getLineAndCharacterOfPosition(d.getStart());k.violations.push({ruleId:k.rule.id,name:k.rule.name,severity:k.rule.severity,message:this.formatMessage(k.rule.message,{threshold:x,count:d.parameters.length,line:m+1}),file:k.file,line:m+1})}static checkFunctionLength(d,x,k){if(!va.isFunctionDeclaration(d)&&!va.isMethodDeclaration(d)&&!va.isArrowFunction(d))return;let m=k.sourceFile.getLineAndCharacterOfPosition(d.getStart()).line,F=k.sourceFile.getLineAndCharacterOfPosition(d.getEnd()).line-m+1;F<=x||k.violations.push({ruleId:k.rule.id,name:k.rule.name,severity:k.rule.severity,message:this.formatMessage(k.rule.message,{threshold:x,count:F,line:m+1}),file:k.file,line:m+1})}static checkEmptyCatch(d,x){if(!va.isCatchClause(d)||d.block.statements.length>0||/\/\/|\/\*/.test(d.block.getText()))return;let{line:k}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:k+1}),file:x.file,line:k+1})}static checkEmptyBlock(d,x){if(!va.isBlock(d)||d.statements.length>0||va.isCatchClause(d.parent)||va.isConstructorDeclaration(d.parent))return;let{line:k}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:k+1}),file:x.file,line:k+1})}static checkOneLiner(d,x){if(!va.isBlock(d))return;let k=new Map;if(d.statements.forEach(F=>{let{line:X}=x.sourceFile.getLineAndCharacterOfPosition(F.getStart());k.set(X,(k.get(X)??0)+1)}),d.statements.length<=k.size)return;let T=[...k.entries()].filter(([,F])=>F>1).map(([F])=>F).sort((F,X)=>F-X)[0]??x.sourceFile.getLineAndCharacterOfPosition(d.getStart()).line;x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:T+1}),file:x.file,line:T+1})}static checkRedundantIfTrue(d,x){if(!va.isIfStatement(d))return;let k=d.expression;if(!(k.kind===va.SyntaxKind.TrueKeyword||va.isBinaryExpression(k)&&k.left.kind===va.SyntaxKind.TrueKeyword&&k.operatorToken.kind===va.SyntaxKind.EqualsEqualsEqualsToken))return;let{line:T}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:T+1}),file:x.file,line:T+1})}static checkLyingFunctionName(d,x){var Pe,Be;if(!va.isFunctionDeclaration(d)&&!va.isMethodDeclaration(d))return;let k=(Pe=d.name)==null?void 0:Pe.getText();if(!k||!new RegExp("^(get|is|has|retrieve)","i").test(k))return;let T=(Be=d.body)==null?void 0:Be.getText();if(!T)return;let F=/\bthis\.[\w.]*\.(?:set|delete|remove|update|write|modify|pop|push|shift|unshift|splice|clear|add|sort|reverse)\s*\(/,X=/\bObject\.assign\s*\(\s*this\b|\bdelete\s+this\./;if(!F.test(T)&&!O3t(d.body)&&!X.test(T))return;let{line:be}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{name:k,line:be+1}),file:x.file,line:be+1})}static checkByCounting(d,x,k){let{rule:m,file:T,threshold:F}=k;if(d==="empty-file"&&x.trim().length===0)return[{ruleId:m.id,name:m.name,severity:m.severity,message:this.formatMessage(m.message,{file:T,line:0}),file:T,line:0}];if(d==="file-length-limit"&&F){let X=R3t(x,KF(T));if(X>F)return[{ruleId:m.id,name:m.name,severity:m.severity,message:this.formatMessage(m.message,{threshold:F,count:X}),file:T,line:0}]}return[]}static checkEmptyInterface(d,x){if(!va.isInterfaceDeclaration(d)||d.members.length>0||d.heritageClauses&&d.heritageClauses.length>0)return;let{line:k}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:k+1}),file:x.file,line:k+1})}static checkAsyncWithoutAwait(d,x){let k=UHe(d);if(!k)return;let m=va.canHaveModifiers(d)?va.getModifiers(d):void 0;if(!((m==null?void 0:m.some(X=>X.kind===va.SyntaxKind.AsyncKeyword))??!1)||va.isCallExpression(d.parent)&&d.parent.arguments.includes(d)||M3t(k))return;let{line:F}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:F+1}),file:x.file,line:F+1})}static checkNestedBlocks(d,x,k){if(!one(d))return;let m=0,T=(X,be)=>{m=Math.max(m,be),va.forEachChild(X,Pe=>{if(one(Pe)){T(Pe,0);return}let at=!(va.isIfStatement(Pe)&&va.isIfStatement(X)&&X.elseStatement===Pe)&&(va.isIfStatement(Pe)||va.isForStatement(Pe)||va.isForOfStatement(Pe)||va.isForInStatement(Pe)||va.isWhileStatement(Pe)||va.isDoStatement(Pe)||va.isSwitchStatement(Pe)||va.isTryStatement(Pe));T(Pe,at?be+1:be)})};if(T(d,0),m<=x)return;let{line:F}=k.sourceFile.getLineAndCharacterOfPosition(d.getStart());k.violations.push({ruleId:k.rule.id,name:k.rule.name,severity:k.rule.severity,message:this.formatMessage(k.rule.message,{threshold:x,count:m,line:F+1}),file:k.file,line:F+1})}static traverse(d,x){x(d),va.forEachChild(d,k=>this.traverse(k,x))}static formatMessage(d,x){let k=d;for(let[m,T]of Object.entries(x))k=k.replace(new RegExp(`\\{${m}\\}`,"g"),String(T));return k}};var VHe=DS(require("fs"));var lne=class{static async check(d,x,k){let m=[],T=k!==void 0?k:VHe.readFileSync(d,"utf8");for(let F of x)WE(d,F)||(F.match.heuristic_check==="link-checker"&&d.endsWith(".md")&&m.push(...await this.findBrokenLinks(d,T,F)),F.match.heuristic_check==="stale-copyright-year"&&m.push(...this.findStaleCopyright(d,T,F)));return m}static findStaleCopyright(d,x,k){let m=[],T=new Date().getFullYear(),F=/(?:©|\(c\)|copyright)\s*((?:19|20)\d{2})(?:\s*[-–—]\s*((?:19|20)?\d{2}|present))?/gi;return x.split(`
520
- `).forEach((X,be)=>{for(let Pe of X.matchAll(F)){let[,Be,at]=Pe;at&&/present/i.test(at)||Number(at?at.length===2?Be.slice(0,2)+at:at:Be)>=T||m.push({ruleId:k.id,name:k.name,severity:k.severity,message:k.message.replace("{line}",String(be+1)).replace("{match}",Pe[0]).replace("{year}",String(T)),file:d,line:be+1})}}),m}static async findBrokenLinks(d,x,k){let m=[];for(let T of this.extractLinks(x)){if(await this.checkLink(T)!=="broken")continue;let F=this.getLineNumber(x,T);m.push({ruleId:k.id,name:k.name,severity:k.severity,message:this.formatMessage(k.message,{url:T,match:T,line:F}),file:d,line:F})}return m}static extractLinks(d){let x=/\[.*?\]\((https?:\/\/.*?)\)/g,k=[],m;for(;(m=x.exec(d))!==null;)k.push(m[1]);return k}static async checkLink(d){for(let x of["HEAD","GET"])try{let k=await fetch(d,{method:x,signal:AbortSignal.timeout(5e3)});if(k.ok)return"ok";if(x==="GET")return k.status===404||k.status===410?"broken":"unknown"}catch(k){if(this.isUnknownHost(k))return"broken"}return"unknown"}static isUnknownHost(d){var k;let x=(k=d==null?void 0:d.cause)==null?void 0:k.code;return x==="ENOTFOUND"||x==="EAI_AGAIN"}static getLineNumber(d,x){let k=d.indexOf(x);return k===-1?0:d.substring(0,k).split(`
519
+ `).length-1,0);return x-m}var hCe=new Set(["empty-file","file-length-limit"]),cne=class{static check(d,x,k){var X,be;let m=[],T=k!==void 0?k:JHe.readFileSync(d,"utf8");for(let Pe of x){let Be=(X=Pe.match.ast_check)==null?void 0:X.type;!Be||!hCe.has(Be)||WE(d,Pe)||Pe.match.file_types&&!Pe.match.file_types.includes(KF(d))||m.push(...this.checkByCounting(Be,T,{rule:Pe,file:d,threshold:Pe.match.threshold??((be=Pe.match.ast_check)==null?void 0:be.threshold)}))}if(!sne.has(KF(d)))return m;let F=va.createSourceFile(d,T,va.ScriptTarget.Latest,!0);for(let Pe of x){if(!Pe.match.ast_check||WE(d,Pe))continue;let Be=Pe.match.ast_check.type,at=Pe.match.threshold??Pe.match.ast_check.threshold,pe={rule:Pe,sourceFile:F,file:d,violations:m};hCe.has(Be)||this.traverse(F,Zt=>{Be==="function-params-limit"&&at&&this.checkFunctionParams(Zt,at,pe),Be==="function-length-limit"&&at&&this.checkFunctionLength(Zt,at,pe),Be==="empty-catch"&&this.checkEmptyCatch(Zt,pe),Be==="nested-blocks-limit"&&at&&this.checkNestedBlocks(Zt,at,pe),Be==="empty-block"&&this.checkEmptyBlock(Zt,pe),Be==="one-liner-limit"&&this.checkOneLiner(Zt,pe),Be==="redundant-if-true"&&this.checkRedundantIfTrue(Zt,pe),Be==="lying-function-names"&&this.checkLyingFunctionName(Zt,pe),Be==="empty-interface"&&this.checkEmptyInterface(Zt,pe),Be==="async-without-await"&&this.checkAsyncWithoutAwait(Zt,pe)})}return m}static checkFunctionParams(d,x,k){if(!va.isFunctionDeclaration(d)&&!va.isMethodDeclaration(d)&&!va.isArrowFunction(d)||d.parameters.length<=x)return;let{line:m}=k.sourceFile.getLineAndCharacterOfPosition(d.getStart());k.violations.push({ruleId:k.rule.id,name:k.rule.name,severity:k.rule.severity,message:this.formatMessage(k.rule.message,{threshold:x,count:d.parameters.length,line:m+1}),file:k.file,line:m+1})}static checkFunctionLength(d,x,k){if(!va.isFunctionDeclaration(d)&&!va.isMethodDeclaration(d)&&!va.isArrowFunction(d))return;let m=k.sourceFile.getLineAndCharacterOfPosition(d.getStart()).line,F=k.sourceFile.getLineAndCharacterOfPosition(d.getEnd()).line-m+1;F<=x||k.violations.push({ruleId:k.rule.id,name:k.rule.name,severity:k.rule.severity,message:this.formatMessage(k.rule.message,{threshold:x,count:F,line:m+1}),file:k.file,line:m+1})}static checkEmptyCatch(d,x){if(!va.isCatchClause(d)||d.block.statements.length>0||/\/\/|\/\*/.test(d.block.getText()))return;let{line:k}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:k+1}),file:x.file,line:k+1})}static checkEmptyBlock(d,x){if(!va.isBlock(d)||d.statements.length>0||va.isCatchClause(d.parent)||va.isConstructorDeclaration(d.parent))return;let{line:k}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:k+1}),file:x.file,line:k+1})}static checkOneLiner(d,x){if(!va.isBlock(d))return;let k=new Map;if(d.statements.forEach(F=>{let{line:X}=x.sourceFile.getLineAndCharacterOfPosition(F.getStart());k.set(X,(k.get(X)??0)+1)}),d.statements.length<=k.size)return;let T=[...k.entries()].filter(([,F])=>F>1).map(([F])=>F).sort((F,X)=>F-X)[0]??x.sourceFile.getLineAndCharacterOfPosition(d.getStart()).line;x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:T+1}),file:x.file,line:T+1})}static checkRedundantIfTrue(d,x){if(!va.isIfStatement(d))return;let k=d.expression;if(!(k.kind===va.SyntaxKind.TrueKeyword||va.isBinaryExpression(k)&&k.left.kind===va.SyntaxKind.TrueKeyword&&k.operatorToken.kind===va.SyntaxKind.EqualsEqualsEqualsToken))return;let{line:T}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:T+1}),file:x.file,line:T+1})}static checkLyingFunctionName(d,x){var Pe,Be;if(!va.isFunctionDeclaration(d)&&!va.isMethodDeclaration(d))return;let k=(Pe=d.name)==null?void 0:Pe.getText();if(!k||!new RegExp("^(get|is|has|retrieve)","i").test(k))return;let T=(Be=d.body)==null?void 0:Be.getText();if(!T)return;let F=/\bthis\.[\w.]*\.(?:set|delete|remove|update|write|modify|pop|push|shift|unshift|splice|clear|add|sort|reverse)\s*\(/,X=/\bObject\.assign\s*\(\s*this\b|\bdelete\s+this\./;if(!F.test(T)&&!O3t(d.body)&&!X.test(T))return;let{line:be}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{name:k,line:be+1}),file:x.file,line:be+1})}static checkByCounting(d,x,k){let{rule:m,file:T,threshold:F}=k;if(d==="empty-file"&&x.trim().length===0)return[{ruleId:m.id,name:m.name,severity:m.severity,message:this.formatMessage(m.message,{file:T,line:0}),file:T,line:0}];if(d==="file-length-limit"&&F){let X=R3t(x,KF(T));if(X>F)return[{ruleId:m.id,name:m.name,severity:m.severity,message:this.formatMessage(m.message,{threshold:F,count:X}),file:T,line:0}]}return[]}static checkEmptyInterface(d,x){if(!va.isInterfaceDeclaration(d)||d.members.length>0||d.heritageClauses&&d.heritageClauses.length>0)return;let{line:k}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:k+1}),file:x.file,line:k+1})}static checkAsyncWithoutAwait(d,x){let k=UHe(d);if(!k)return;let m=va.canHaveModifiers(d)?va.getModifiers(d):void 0;if(!((m==null?void 0:m.some(X=>X.kind===va.SyntaxKind.AsyncKeyword))??!1)||va.isCallExpression(d.parent)&&d.parent.arguments.includes(d)||M3t(k))return;let{line:F}=x.sourceFile.getLineAndCharacterOfPosition(d.getStart());x.violations.push({ruleId:x.rule.id,name:x.rule.name,severity:x.rule.severity,message:this.formatMessage(x.rule.message,{line:F+1}),file:x.file,line:F+1})}static checkNestedBlocks(d,x,k){if(!one(d))return;let m=0,T=(X,be)=>{m=Math.max(m,be),va.forEachChild(X,Pe=>{if(one(Pe)){T(Pe,0);return}let at=!(va.isIfStatement(Pe)&&va.isIfStatement(X)&&X.elseStatement===Pe)&&(va.isIfStatement(Pe)||va.isForStatement(Pe)||va.isForOfStatement(Pe)||va.isForInStatement(Pe)||va.isWhileStatement(Pe)||va.isDoStatement(Pe)||va.isSwitchStatement(Pe)||va.isTryStatement(Pe));T(Pe,at?be+1:be)})};if(T(d,0),m<=x)return;let{line:F}=k.sourceFile.getLineAndCharacterOfPosition(d.getStart());k.violations.push({ruleId:k.rule.id,name:k.rule.name,severity:k.rule.severity,message:this.formatMessage(k.rule.message,{threshold:x,count:m,line:F+1}),file:k.file,line:F+1})}static traverse(d,x){x(d),va.forEachChild(d,k=>this.traverse(k,x))}static formatMessage(d,x){let k=d;for(let[m,T]of Object.entries(x))k=k.replace(new RegExp(`\\{${m}\\}`,"g"),String(T));return k}};var VHe=DS(require("fs"));var lne=class{static async check(d,x,k){let m=[],T=k!==void 0?k:VHe.readFileSync(d,"utf8");for(let F of x)WE(d,F)||(F.match.heuristic_check==="link-checker"&&d.endsWith(".md")&&m.push(...await this.findBrokenLinks(d,T,F)),F.match.heuristic_check==="stale-copyright-year"&&m.push(...this.findStaleCopyright(d,T,F)));return m}static findStaleCopyright(d,x,k){let m=[],T=new Date().getFullYear(),F=/(?:©|\(c\)|copyright)\s*((?:19|20)\d{2})(?:\s*[-–—]\s*((?:19|20)?\d{2}|present|\$?\{|<%))?/gi;return x.split(`
520
+ `).forEach((X,be)=>{for(let Pe of X.matchAll(F)){let[,Be,at]=Pe;at&&(/present/i.test(at)||/^(?:\$?\{|<%)/.test(at))||Number(at?at.length===2?Be.slice(0,2)+at:at:Be)>=T||m.push({ruleId:k.id,name:k.name,severity:k.severity,message:k.message.replace("{line}",String(be+1)).replace("{match}",Pe[0]).replace("{year}",String(T)),file:d,line:be+1})}}),m}static async findBrokenLinks(d,x,k){let m=[];for(let T of this.extractLinks(x)){if(await this.checkLink(T)!=="broken")continue;let F=this.getLineNumber(x,T);m.push({ruleId:k.id,name:k.name,severity:k.severity,message:this.formatMessage(k.message,{url:T,match:T,line:F}),file:d,line:F})}return m}static extractLinks(d){let x=/\[.*?\]\((https?:\/\/.*?)\)/g,k=[],m;for(;(m=x.exec(d))!==null;)k.push(m[1]);return k}static async checkLink(d){for(let x of["HEAD","GET"])try{let k=await fetch(d,{method:x,signal:AbortSignal.timeout(5e3)});if(k.ok)return"ok";if(x==="GET")return k.status===404||k.status===410?"broken":"unknown"}catch(k){if(this.isUnknownHost(k))return"broken"}return"unknown"}static isUnknownHost(d){var k;let x=(k=d==null?void 0:d.cause)==null?void 0:k.code;return x==="ENOTFOUND"||x==="EAI_AGAIN"}static getLineNumber(d,x){let k=d.indexOf(x);return k===-1?0:d.substring(0,k).split(`
521
521
  `).length}static formatMessage(d,x){let k=d;for(let[m,T]of Object.entries(x))k=k.replace(new RegExp(`\\{${m}\\}`,"g"),String(T));return k}};var hp=DS(tne()),WHe=DS(require("fs"));var une=class{static check(d,x,k){let m=[];if(!sne.has(KF(d)))return[];let T=k!==void 0?k:WHe.readFileSync(d,"utf8"),F=hp.createSourceFile(d,T,hp.ScriptTarget.Latest,!0);for(let X of x){if(!X.match.semantic_check||WE(d,X))continue;let be=X.match.semantic_check;this.traverse(F,Pe=>{if(be==="boolean-naming"&&hp.isVariableDeclaration(Pe)&&Pe.initializer){let Be=Pe.name.getText();if(this.isBooleanType(Pe)&&!new RegExp("^(is|has|can|should|was|did|do|will)","i").test(Be)){let{line:pe}=F.getLineAndCharacterOfPosition(Pe.getStart());m.push({ruleId:X.id,name:X.name,severity:X.severity,message:this.formatMessage(X.message,{name:Be,line:pe+1}),file:d,line:pe+1})}}if(be==="boolean-redundancy"&&hp.isIfStatement(Pe)){let Be=Pe.thenStatement,at=Pe.elseStatement;if(Be&&at&&this.isReturnBoolean(Be)&&this.isReturnBoolean(at)){let{line:pe}=F.getLineAndCharacterOfPosition(Pe.getStart());m.push({ruleId:X.id,name:X.name,severity:X.severity,message:this.formatMessage(X.message,{line:pe+1}),file:d,line:pe+1})}}if(be==="collection-suffix"&&hp.isVariableDeclaration(Pe)&&Pe.initializer){let Be=Pe.name.getText(),at=this.isArrayType(Pe),pe=!Be.endsWith("s")&&!new RegExp("(List|Map|Set|Collection|Array)$","i").test(Be);if(at&&pe){let{line:Zt}=F.getLineAndCharacterOfPosition(Pe.getStart());m.push({ruleId:X.id,name:X.name,severity:X.severity,message:this.formatMessage(X.message,{name:Be,line:Zt+1}),file:d,line:Zt+1})}}if(be==="semantic-shadowing"&&hp.isVariableDeclaration(Pe)){let Be=Pe.name.getText();if(["fs","path","crypto","http","https","express","os","child_process","cluster","dns"].includes(Be)){let{line:pe}=F.getLineAndCharacterOfPosition(Pe.getStart());m.push({ruleId:X.id,name:X.name,severity:X.severity,message:this.formatMessage(X.message,{name:Be,line:pe+1,match:Be}),file:d,line:pe+1})}}})}return m}static traverse(d,x){x(d),hp.forEachChild(d,k=>this.traverse(k,x))}static formatMessage(d,x){let k=d;for(let[m,T]of Object.entries(x))k=k.replace(new RegExp(`\\{${m}\\}`,"g"),String(T));return k}static isBooleanType(d){var x,k,m;return((x=d.type)==null?void 0:x.kind)===hp.SyntaxKind.BooleanKeyword||((k=d.initializer)==null?void 0:k.kind)===hp.SyntaxKind.TrueKeyword||((m=d.initializer)==null?void 0:m.kind)===hp.SyntaxKind.FalseKeyword}static isArrayType(d){var x,k;return((x=d.type)==null?void 0:x.kind)===hp.SyntaxKind.ArrayType||((k=d.initializer)==null?void 0:k.kind)===hp.SyntaxKind.ArrayLiteralExpression}static isReturnBoolean(d){let x=d;return hp.isBlock(x)&&x.statements.length===1&&(x=x.statements[0]),hp.isReturnStatement(x)&&x.expression?x.expression.kind===hp.SyntaxKind.TrueKeyword||x.expression.kind===hp.SyntaxKind.FalseKeyword:!1}};function qHe(u,d){var m;let x=new Map;for(let T of d)(m=T.supersedes)!=null&&m.length&&x.set(T.id,T.supersedes);if(x.size===0)return u;let k=new Map;for(let T of u){let F=x.get(T.ruleId);if(!F)continue;let X=`${T.file}:${T.line}`,be=k.get(X);be||(be=new Set,k.set(X,be));for(let Pe of F)be.add(Pe)}return k.size===0?u:u.filter(T=>{var F;return!((F=k.get(`${T.file}:${T.line}`))!=null&&F.has(T.ruleId))})}var _ne=DS(require("path")),j3t=_ne.join(__dirname,"..","..","rules");async function $3t(u,d,x){let k=LUe(x),m=[j3t];if(k.customRulesPaths)for(let be of k.customRulesPaths)m.push(_ne.resolve(process.cwd(),be));let T=Xte.loadRules(m);k.rules&&(T=T.map(be=>{let Pe=k.rules[be.id];return Pe?{...be,severity:Pe}:be}).filter(be=>be.severity!=="off"));let F=new Set(Object.keys(k.rules??{}));T=T.filter(be=>!be.opt_in||F.has(be.id));let X=[];return X=X.concat(ane.check(d,T,u)),X=X.concat(cne.check(d,T,u)),X=X.concat(une.check(d,T,u)),X=X.concat(await lne.check(d,T,u)),qHe(X,T)}0&&(module.exports={lintText});
522
522
  /*! Bundled license information:
523
523